<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Content on Content Management &#187; Java</title>
	<atom:link href="http://contentoncontentmanagement.com/category/java/feed/" rel="self" type="application/rss+xml" />
	<link>http://contentoncontentmanagement.com</link>
	<description></description>
	<lastBuildDate>Tue, 03 Aug 2010 12:57:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
	<atom:link rel="next" href="http://contentoncontentmanagement.com/category/java/feed/?page=2" />

		<item>
		<title>Cool and Refreshing RIDC</title>
		<link>http://contentoncontentmanagement.com/2010/03/cool-and-refreshing-ridc/</link>
		<comments>http://contentoncontentmanagement.com/2010/03/cool-and-refreshing-ridc/#comments</comments>
		<pubDate>Tue, 16 Mar 2010 04:45:43 +0000</pubDate>
		<dc:creator>David Roe</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://contentoncontentmanagement.com/?p=327</guid>
		<description><![CDATA[It&#8217;s been out for a little over a year, but I wanted to throw a quick post out about RIDC as I&#8217;ve recently started using it and I&#8217;m really very, very pleased with my experiences.  RIDC stands for Remote IntraDoc &#8230; <a href="http://contentoncontentmanagement.com/2010/03/cool-and-refreshing-ridc/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://contentoncontentmanagement.com/wp-content/uploads/2010/03/refresh-new-coke1.jpg"><img class="alignright size-full wp-image-341" title="Refreshing new RIDC" src="http://contentoncontentmanagement.com/wp-content/uploads/2010/03/refresh-new-coke1.jpg" alt="Refreshing new RIDC" width="324" height="431" /></a>It&#8217;s been out for a little over a year, but I wanted to throw a quick post out about RIDC as I&#8217;ve recently started using it and I&#8217;m really very, very pleased with my experiences.  RIDC stands for Remote IntraDoc Client and it&#8217;s an API used in remote Java applications to connect to UCM.  It&#8217;s effectively a replacement for CIS(Content Integration Suite) and in a strange bit of computer irony it&#8217;s better because it smaller and does a lot less.</p>
<h2>Where&#8217;s the Document Object?</h2>
<p>The problem with CIS was that as a design it was, forgive me, a little weird.  It&#8217;s not that it didn&#8217;t work, it actually worked pretty well in most situations, but there were a couple of oddities.</p>
<ul>
<li>It  has what you might call and easy-to-use command pattern that hid underyling service calls from the application.  So for instance you would call if you wanted to make a DOC_INFO service call, you&#8217;d call the getDocumentInformationAPI method.  Not the end of the world, but also not really an intuative API for UCM.  I think the reason was that this pattern fit much better in Java web app and so it was designed a little more for that rather than as just a standard Java API.</li>
<li>Because you&#8217;re working with strict objects, it makes it sort of tough to call new services, like Site Studio ones, directly.  There is a work around, which involves using what&#8217;s called the administrative API(sort of the base API for the whole thing).  Typically I&#8217;ve  just used this for all my calls,(and incidentally it would then look a lot like RIDC code), but looking at all of CIS, it just seems like you needed a lot of different classes to do really the same thing, make service calls.</li>
<li>If you crack open the CIS jar, you&#8217;ll find that there&#8217;s a slightly loco version of Spring in there(based on 1.5 I think) along with a modified classloader.  I&#8217;ve only run in to issues in one location(you know who you are), but with all that extra code in there, I&#8217;ve always been hesitant to use it with other Spring versions for fear of class conflicts.</li>
<li>Inside of UCM there&#8217;s already a Java API called the jspserver.jar.  It&#8217;s about 5-6 classes total, allows you to call any service, uses objects that look and acts very much like normal Content Server objects.  I&#8217;ve based all my remote API&#8217;s on it(.NET and ActionScript)..it was such a simple and elegant design, I always wondered why the CIS people never talked to the jspserver people.  Well that&#8217;s pretty much what RIDC is.</li>
</ul>
<h2>And here&#8217;s some code.</h2>
<p>Since code samples always make for exciting reading, lets jump right in with some examples.</p>
<p>Here&#8217;s the example included in the CIS developer manual for how to make a DOC_INFO call.</p>
<p><code>//get the active API<br />
SCSActiveAPI activeAPI = m_cisApplication.getUCPMAPI().getActiveAPI();</code></p>
<p><code>//create a document object<br />
ISCSDocumentID documentID = (ISCSDocumentID) m_cisApplication.getUCPMAPI().createObject(ISCSDocumentID.class);</code></p>
<p><code>//set the dID<br />
documentID.setDocumentID("10");</code></p>
<p><code> </code></p>
<p><code>//make the call, get the doc response<br />
ISCSDocumentInformationResponse docResponse = activeAPI.getDocumentInformationAPI ().getDocumentInformationByID(m_context, documentID);</code></p>
<p><code> </code></p>
<p><code>//and there's the content<br />
ISCSContent content = docResponse.getDocNode();</code></p>
<p>What do you think?  Granted I copied the CIS example out of the doc and it&#8217;s not a prefect one-to-one comparison to the RDIC one I&#8217;m about to show you(designed for a web environment where the connection is already established), but doesn&#8217;t that seem like a lot of casting and nested objects?  I know I&#8217;m complaining about code looking too complicated, but seriously try to explain that to someone.  It really just doesn&#8217;t even look like UCM.</p>
<p>Take a look at the same call with RIDC&#8230;..way simpler, and I think if you understand UCM at all, it follows a rather intuitive flow.  If you&#8217;ve done any Java component development, you&#8217;re learning curve should be near nil.</p>
<p><code>//create the client manager<br />
IdcClientManager idcClientManager = new IdcClientManager();</code></p>
<p><code>//and then create a client to the content server<br />
IntradocClient client = (IntradocClient)idcClientManager.createClient("idc://localhost:4444");</code></p>
<p><code>//create a binder object<br />
DataBinder binder = client.createBinder();</code></p>
<p><code>//add our service values<br />
binder.putLocal("IdcService","DOC_INFO");<br />
binder.putLocal("dID","10");</code></p>
<p><code>//and make the call...too easy.<br />
ServiceResponse response = client.sendRequest(new IdcContext("sysadmin"), binder);<br />
</code></p>
<p><a href="http://contentoncontentmanagement.com/wp-content/uploads/2010/03/Screen-shot-2010-03-16-at-12.21.19-AM.png"><img class="size-medium wp-image-335 alignleft" title="CIS vs RIDC" src="http://contentoncontentmanagement.com/wp-content/uploads/2010/03/Screen-shot-2010-03-16-at-12.21.19-AM-300x181.png" alt="CIS vs RIDC" width="300" height="181" /></a>Binders, putLocal methods and clients&#8230;everything you&#8217;d expect in a remote API.  You can call any service; custom ones and new ones added via components like Site Studio and other Oracle add-ons are all there.  I haven&#8217;t opened up RDIC yet, but check out how much smaller the new API is vs it&#8217;s older sibling.</p>
<p>I&#8217;m not going to rush out and re-factor all of my CIS-based applications, I can solidly say I&#8217;ve moved on for future projects.  I have a couple of portal examples forthcoming and hope to have some RIDC in there, so check back soon.</p>
]]></content:encoded>
			<wfw:commentRss>http://contentoncontentmanagement.com/2010/03/cool-and-refreshing-ridc/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Now I have to use JDeveloper</title>
		<link>http://contentoncontentmanagement.com/2009/04/now-i-have-to-use-jdeveloper/</link>
		<comments>http://contentoncontentmanagement.com/2009/04/now-i-have-to-use-jdeveloper/#comments</comments>
		<pubDate>Mon, 20 Apr 2009 21:58:39 +0000</pubDate>
		<dc:creator>David Roe</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://contentoncontentmanagement.com/?p=227</guid>
		<description><![CDATA[I got a pretty big surprise this morning when I read about Oracle&#8217;s acquisition of Sun.  All I have to say is wow&#8230;double wow really.  I know Sun has Solaris and Glassfish and a bunch of other fun stuff, but &#8230; <a href="http://contentoncontentmanagement.com/2009/04/now-i-have-to-use-jdeveloper/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I got a pretty big surprise this morning when I read about Oracle&#8217;s acquisition of Sun.  All I have to say is wow&#8230;double wow really.  I know Sun has Solaris and Glassfish and a bunch of other fun stuff, but really Sun=Java and Java is one of (if not the) most prevelant programming languages used through out the world.</p>
<p><a rel="attachment wp-att-228" href="http://contentoncontentmanagement.com/2009/04/20/now-i-have-to-use-jdeveloper/picture-1/"><img class="alignnone size-full wp-image-228" title="Java" src="http://contentoncontentmanagement.com/wp-content/uploads/2009/04/picture-1.png" alt="Java" width="169" height="121" /></a></p>
<p>There was of course some excitement for Solaris, but really it&#8217;s pretty clear that Java was the buy:</p>
<blockquote><p>Java is one of the computer industry’s best-known brands and most widely deployed technologies, and it is the most important software Oracle has ever acquired. Oracle Fusion Middleware, Oracle’s fastest growing business, is built on top of Sun’s Java language and software. Oracle can now ensure continued innovation and investment in Java technology for the benefit of customers and the Java community.</p></blockquote>
<p>Oracle really isn&#8217;t just a database company any more.  They really haven&#8217;t been that for some time, but now they are a software company that also sells a database.  The fact is that they now own the language and ultimately the platform of which many of the best selling enterprise applications are built on.  That fact would actually be a little more interesting to think about if they had not already purchased  all of the best selling enterprise applications already.</p>
<h3>Who&#8217;s Next</h3>
<p><img class="alignnone" title="RedHat" src="http://www.redhat.com/g/chrome/logo_rh_home.png" alt="" width="96" height="31" /></p>
<p>I really know nothing about who or what Oracle wants to acquire(in fact I don&#8217;t think I could know less), but how much sense does Red Hat make?  Red Hat is just about the gold standard in Linux distros(I don&#8217;t want to hear it Ubuntu fans, I&#8217;m talking servers), plus they get the last real application server out there that doesn&#8217;t have &#8220;sphere&#8221; in the name and they, like Sun, are major, major proponents of open source technologies.</p>
<p>It&#8217;s really crazy&#8230;Java.com will be an Oracle site&#8230;.wow&#8230;double wow.</p>
]]></content:encoded>
			<wfw:commentRss>http://contentoncontentmanagement.com/2009/04/now-i-have-to-use-jdeveloper/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Auto Fill That Friendly Name</title>
		<link>http://contentoncontentmanagement.com/2009/03/auto-fill-that-friendly-name/</link>
		<comments>http://contentoncontentmanagement.com/2009/03/auto-fill-that-friendly-name/#comments</comments>
		<pubDate>Mon, 02 Mar 2009 22:12:02 +0000</pubDate>
		<dc:creator>David Roe</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Metadata]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Site Studio]]></category>

		<guid isPermaLink="false">http://contentoncontentmanagement.com/?p=203</guid>
		<description><![CDATA[This is kind of a fun component&#8230;nothing too special, but I think a nice example of something you can do with UCM filter events, specifically the validateCheckinData event.  What is does is automatically assign a friendly web file name to &#8230; <a href="http://contentoncontentmanagement.com/2009/03/auto-fill-that-friendly-name/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>This is kind of a fun component&#8230;nothing too special, but I think a nice example of something you can do with UCM filter events, specifically the validateCheckinData event.  What is does is automatically assign a friendly web file name to site studio content using the title of the item.  The funtionality I was trying to emulate is pretty similar to what this blog does.  Whenever I post something, WordPress take the title and turns it in to a friendly file name by sort of removing any spaces or funny characters and then adding .htm on the end.  Shouldn&#8217;t be too hard to do in UCM/Site Studio right?</p>
<h3>A little background</h3>
<p>In Site Studio there are two types of pages;  Primary pages, which are essentially the landing pages for a folder(think home, search and listing pages).  They are almost always named index.htm and what&#8217;s unique about them is that when they are called they only refence specific content items.  Secondary pages, which could be viewed as everything else in a folder differ as they are used in more of traditional templated, delivery fashion, where the content is delivered through a reuseable template.  I butchering those descriptions a little for simplicities sack, but for the most part that&#8217;s how they work.</p>
<p>Out of the box, Site Studio lets you reference a content item using it&#8217;s content id in the url.  So if you had a content item called 000525, it would be referenced in a folder with it&#8217;s content id at the end(<a href="http://SiteStudio.com/site/folder/000525">http://SiteStudio.com/site/folder/000525</a> for example).  Since all templates are mapped to thier folder, everything you need to render a page can be found in the URL&#8230;it&#8217;s all pretty simple.  The thing is, what if you aren&#8217;t too crazy about the 000525 name though?  It&#8217;s not really all that intuative of a name; you could make the content id friendly or you could use also take advantage of the SSUrlFieldName property in Site Studio.  The SSUrlFieldName property allows you to map a custom metadata field(perhaps one longer than the 30 characters you get for a content id?) as the file name idenifiier used when reference in a URL.</p>
<p>So content item 000525 can also have a metadata field tagged as &#8220;autofillthatfriendlyname.htm&#8221; and so when refereced as a url, it could look like this: http://SiteStudio.com/site/folder/autofillthatfriendlyname.htm.  That&#8217;s pretty cool, right?  There is a bit of a catch though, like the content id the value used in the friendly name field should be unique.  The only problem though is that there&#8217;s no automatic validation for the values, so there&#8217;s nothing to tell the contributor if they&#8217;ve duplicated a value.</p>
<h3><span style="color: #000000;">What the component does</span></h3>
<p>The code for this component is pretty simple, we&#8217;re hooking in to the validateCheckinData event and then basically updating whatever field is identified in the SSUrlFieldName property with a friendly name.  I like the validateCheckinData filter quite bit for situations like this where I need to update or add some metadata at check in or update time.  If I have to kick a process off or do something to a piece of content that has just been checked in, so after it&#8217;s in the system, I usually prefer the afterLoadRecordWebChange, but that&#8217;s probably for another post.</p>
<p>Getting back on track, once a piece of content is checked in which has a xWebsiteSection value(meaning it&#8217;s been assigned a default URL in a web site), it pulls the dDocTitle value out of the binder and makes it friendly(removes any spaces or special characters I could think of).  It then appends a file extension(set in the environmental config) and checks the value against the database.  If the friendly name has been used before on another content item it goes back and adds a 1 to the end of the title part of the file name(I know&#8230;not very imaginative).  Each time the component assembles a name it checks it against a max character count also found in the component&#8217;s enviornmental config.</p>
<h3>Installing this puppy</h3>
<p>The install on this component is not really unlike any other.  You of course do need to make sure Site Studio is installed on your content server and that the SSUrlFieldName property has been set in the config.cfg file.  I should note that when you set the SSUrlFieldName property, you need to leave the little x prefixing all custom metadata fields off.  So no xFieldName formats&#8230;just FieldName.  You probably will need to tell the component what the size of your friendly name field is.  It&#8217;s defaulted to 80 characters, so if you  plan on using less or more, you might want to update it in the component&#8217;s environmental config file.</p>
<p>You can download the component here:  <a rel="attachment wp-att-209" href="http://contentoncontentmanagement.com/2009/03/auto-fill-that-friendly-name/autofillfriendlyname/">Auto Fill Friendly Name</a></p>
]]></content:encoded>
			<wfw:commentRss>http://contentoncontentmanagement.com/2009/03/auto-fill-that-friendly-name/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Fun with Content Server Localization</title>
		<link>http://contentoncontentmanagement.com/2008/01/fun-with-content-server-localization/</link>
		<comments>http://contentoncontentmanagement.com/2008/01/fun-with-content-server-localization/#comments</comments>
		<pubDate>Thu, 03 Jan 2008 14:15:17 +0000</pubDate>
		<dc:creator>David Roe</dc:creator>
				<category><![CDATA[IDOC]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Site Studio]]></category>

		<guid isPermaLink="false">http://ContentOnContentManagement.com/2008/01/03/fun-with-content-server-localization/</guid>
		<description><![CDATA[Oracle / Stellent Content Server provides some pretty robust localization support.  I&#8217;m often suprised how much functionality there is to support localized data.  Strings and dates can be returned in a variety of languages and formats all based on the user&#8217;s &#8230; <a href="http://contentoncontentmanagement.com/2008/01/fun-with-content-server-localization/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Oracle / Stellent Content Server provides some pretty robust localization support.  I&#8217;m often suprised how much functionality there is to support localized data.  Strings and dates can be returned in a variety of languages and formats all based on the user&#8217;s locale.  Schema/DCL data also support multiple locales, both through the javascript version of the lc function and also through display rules in the view.  The level of localization support and easy of use reminds me of what we tend to see from some of the European CMS vendors, who for obvious reasons seem to place a greater priority on localization.</p>
<p>The one issue I&#8217;ve run in to though is when developing web sites in Site Studio I find it&#8217;s hard to tap in to all of that wonderful localization functionality without changing the default system locale.  The problem appears to be that the localization is based on the user and since all anonymous users are essentially using the same account, they all appear to have the same locale.  I&#8217;ve read some posts on how to change the user&#8217;s locale by updating a cookie, either server side or by Javascript, but to be honest I&#8217;m not super crazy about that method.  Odds are everything will work fine 99.99% of the time, but what if a user has cookies disable or if the user is actually a search crawler which is ignoring cookies? It&#8217;s probably not going to work so well.</p>
<p><strong>Enter the IdcLocale object</strong></p>
<p>Changing the user&#8217;s locale during a service execution is actually an extremely easy thing to do.  Localization data is held in the IdcLocale object(intradoc.common package), which is stored during exection as a cached object named &#8220;UserLocale&#8221;.  If you wanted to access a user&#8217;s IdcLocale object, the syntax looks something like this:</p>
<p><code>IdcLocale MyLocale = (IdcLocale)context.getCachedObject("UserLocale");</code></p>
<p>Changing the locale take a couple more steps.  You first need load a new IdcLocale object specific to your locale and then you need to overwrite the old one.  Creating a new IdcLocale object is pretty simple, you use the LocaleResources object and call the static method, getLocale.  It takes a single argument, the name of the Locale you&#8217;re loading:</p>
<p><code>IdcLocale ItalianLocale = LocaleResources.getLocale("Italiano");</code></p>
<p>Once you have the new IdcLocale object, you only need to overwrite the old one and your locale is changed :</p>
<p><code>context.setCachedObject("UserLocale", ItalianLocale);</code></p>
<p><strong>Putting it in action</strong></p>
<p>I&#8217;ve put together a sample component which adds functionality for changing the user&#8217;s locale dynamically.  In tinkering with user locales, there are two customizations which I think can come in handy.</p>
<p>The first is customization is a filter attached to the &#8216;afterInitLocale&#8217; event, which is fired right after the user&#8217;s locale is set during a service call and I&#8217;m pretty sure was put there specifically for changing the locale. In the component, the filter looks for a local binder value called ForceUserLocale. If it&#8217;s there and it&#8217;s a valid Locale name, then it swaps out the current user&#8217;s IdcLocale object with a new one. Post-switch, the service continues it&#8217;s execution evaluting the new Locale object.</p>
<p>The other customization basically wraps that same code in a new IDOC script function called setLocale. SetLocale takes a single argument, LocaleName, which is of course the name of a valid locale in the system. Calling the function immediatly switches out the user&#8217;s Locale with a new one. This is pretty cool if you&#8217;re working on a web page or template and wish to show the same or multiple strings in different languages.</p>
<p>Using the new setLocale function, the following code would display the same string on the same page in different languages:<br />
<code>&lt;$setLocale("Italiano")$&gt;<br />
<span>&lt;$lc("wwPoweredBy")$&gt;</span><br />
&lt;$setLocale("Italiano")$&gt;<br />
<span>&lt; $lc("wwPoweredBy")$&gt;</span></code></p>
<p><code>Controllato dal sistema di gestione dei contenuti<br />
Powered by Content Management System</code></p>
<p>Changing the Locale dynamically with a local binder value might not be the best fit for all implementations. If you install the sample component adding <code>ForceUserLocale=Italiano</code> to the URL will change the locale to Italian, which may or may not be undesirable. Nevertheless, I think the component demostrates some of the cool things you can do with the IdcLocale object.</p>
<p>The sample Anonymous User Locale component is can be downloaded here:<br />
<a rel="attachment wp-att-43" href="http://ContentOnContentManagement.com/2008/01/03/fun-with-content-server-localization/anonymous-user-locale-component/">Anonymous User Locale Component</a></p>
]]></content:encoded>
			<wfw:commentRss>http://contentoncontentmanagement.com/2008/01/fun-with-content-server-localization/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Yahoo Terms Extractor for Stellent / Oracle</title>
		<link>http://contentoncontentmanagement.com/2007/10/yahoo-terms-extractor-for-stellent-oracle/</link>
		<comments>http://contentoncontentmanagement.com/2007/10/yahoo-terms-extractor-for-stellent-oracle/#comments</comments>
		<pubDate>Tue, 16 Oct 2007 03:55:38 +0000</pubDate>
		<dc:creator>David Roe</dc:creator>
				<category><![CDATA[ECM]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Metadata]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Stellent]]></category>
		<category><![CDATA[Dynamic Conversion]]></category>
		<category><![CDATA[Yahoo]]></category>

		<guid isPermaLink="false">http://ContentOnContentManagement.com/2007/10/15/yahoo-terms-extractor-for-stellent-oracle/</guid>
		<description><![CDATA[How cool is Yahoo?  I was poking around their developer network page after looking up some YUI documentation and I came across their Terms Extraction service.  The service allows you to post content to it and return a list of &#8220;significant &#8230; <a href="http://contentoncontentmanagement.com/2007/10/yahoo-terms-extractor-for-stellent-oracle/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>How cool is Yahoo?  I was poking around their <a href="http://developer.yahoo.com/search/content/V1/termExtraction.html">developer network</a> page after looking up some YUI documentation and I came across their <a href="http://developer.yahoo.com/search/content/V1/termExtraction.html">Terms Extraction</a> service.  The service allows you to post content to it and return a list of &#8220;significant words or phrases&#8221; ordered by importance.  I ran a couple test posts and sure enough it did a pretty good job figuring out the relevant terms and ranking them more or less how I probably would.  I assume it&#8217;s the same or at least a similar indexer to the one Yahoo&#8217;s own search probably uses.</p>
<p>However it&#8217;s done, I think their server has a huge amount of potential from an ECM perspective.  Nearly every client of mine has asked about offering some level of automation to their meta-tagging while contributing content.  While many of the enterprise vendors offer applications to automatically tag content, I find that they are usually focused on batch loading or migrating content, rather than assisting the every day contributor.  In my ideal world I&#8217;d love to see contribution forms come up pre-loaded with system recommended meta-data, allowing contributors to make only necessary edits and then simply approve thier submissions.</p>
<p>I was pretty pumped when I ran across Yahoo&#8217;s service, so I decided to throw together a quick component to take advantage of it for  Stellent / Oracle Universal Content Server.  Nothing too crazy here, the component basically adds an additional option to the Content Action menu called &#8220;Add Yahoo Terms&#8221;, which executes a service called &#8220;ADD_YAHOO_TERMS&#8221;.</p>
<p>The service then does the following:</p>
<ul>
<li>Performs a dynamic conversion on the document</li>
<li>Reads the contents of the resulting HCST output file</li>
<li>Posts the HTML to Yahoo&#8217;s Terms Extraction service</li>
<li>Parses(XML) the terms returned</li>
<li>Creates a comma delimited list of the best terms</li>
<li>Saves the list to the binder in a predesignated memo meta-data field(the default is xComments)</li>
</ul>
<p>The remainder of the service is basically the GET_UPDATE_FORM service, which brings up the update form.  Since the terms are in the binder as a meta-data field, the update forms comes up pre-loaded with the document&#8217;s meta-data as well as the Yahoo terms in the pre-designated field.  From there on you are on the standard Stellent / Oracle update form, so saving will commit your changes.</p>
<p>It&#8217;s a pretty simple integration, nothing revolutionary, but I think it&#8217;s a decent example of how one might integrate Stellent with Yahoo&#8217;s service.</p>
<p>Feel free to download the component here:</p>
<p><a rel="attachment wp-att-20" href="http://ContentOnContentManagement.com/2007/10/15/yahoo-terms-extractor-for-stellent-oracle/yahoo-terms-extractor-integration-for-stellent-oracle/" title="Yahoo Terms Extractor Integration for Stellent / Oracle">Yahoo Terms Extractor Integration for Stellent / Oracle</a></p>
]]></content:encoded>
			<wfw:commentRss>http://contentoncontentmanagement.com/2007/10/yahoo-terms-extractor-for-stellent-oracle/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Security Overrides Component &#8211; Introduction</title>
		<link>http://contentoncontentmanagement.com/2007/10/security-overrides-component-introduction/</link>
		<comments>http://contentoncontentmanagement.com/2007/10/security-overrides-component-introduction/#comments</comments>
		<pubDate>Sun, 07 Oct 2007 01:26:08 +0000</pubDate>
		<dc:creator>David Roe</dc:creator>
				<category><![CDATA[IDOC]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Stellent]]></category>

		<guid isPermaLink="false">http://ContentOnContentManagement.com/2007/10/06/security-overrides-component-introduction/</guid>
		<description><![CDATA[I believe that IDOC script gets a bad rap.  On more then one occasion I have witnessed eyes roll when we began explaining how the Stellent scripting language can be used during an implementation.  It&#8217;s a natural reaction as most developers would &#8230; <a href="http://contentoncontentmanagement.com/2007/10/security-overrides-component-introduction/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I believe that IDOC script gets a bad rap.  On more then one occasion I have witnessed eyes roll when we began explaining how the Stellent scripting language can be used during an implementation.  It&#8217;s a natural reaction as most developers would probably rather work in a more mainstream language then learning some new proprietary, sort of &#8221;cold-fusion&#8221; looking one.  And while I&#8217;m sure there are quite a few implementations done with 100% IDOC-based customizations, my personal preference is to use Java/JSP as the primary languge, with use of IDOC for presentation and configuration scripting.  In this ancillary role I&#8217;ve grown quite an affinity for the IDOC and as I&#8217;ll demonstrate in the example component(Security Overrides), try to IDOC-enable my Java-based components and customizations.</p>
<p>The concept behind the example component, Security Overrides, is an IDOC enabled version of the Security Filter example, which is part of Stellent&#8217;s HowToComponents Bundle.  Stellent&#8217;s SecurityFilter component is an example of how to use the alterUserCredentials filter to change the rights of a user during a specific service request.  The primary example is the BlackHole check in example which grants everyone write access when checking in an item using the Black Hole service.</p>
<p>Creating security filters or overrides with the alterUserCredentials can be a tricky proposition.  Depending on your implementation, you&#8217;re basically altering the behavior of the content server with no real visible indication that it&#8217;s being done.  In addition the alterUserCredentials filter is called with every service call, so it&#8217;s a great place to cause a performance problem with inefficient code, or just by adding multiple security filter components.</p>
<p>So how does the Security Overrides component and more importantly IDOC help the situation?  The component creates a central, administrator controlled, interface for creating and managing overrides. What&#8217;s more, each service configured has an IDOC script prompt, which is used in the final decisioning of whether to apply the override or not.  For example if an administrator desired to only allow the &#8220;sysadmin&#8221; account access to the providers page, they would configure an override  that removed all permissions for the &#8220;GET_ALL_PROVIDERS&#8221; service.  In the IDOC prompt script would be added to evaluate the dUser variable, ensuring it was the &#8220;sysadmin&#8221; account.</p>
<p>The beautiful thing here is that because the component is processing IDOC for it&#8217;s final decsioning logic, the override becomes extremely simple to alter as well as include addtional actions down the road if desired.  And as you&#8217;ll see in the code, creating a component which can support IDOC scripting takes very little additional work.</p>
<p>In addition to integrating IDOC scripting in a Java-based component, the component also demonstrates:</p>
<ul>
<li>Creating an installation filter, which creates a database table after start up</li>
<li>Working with the YUI library to create a model, pop-up form as well as creating and handling AJAX requests</li>
<li>The run-time creation and altering of environment variables</li>
<li>Customizing the Stellent / Oracle interface</li>
</ul>
<p>As you might have guessed from the word &#8220;Introduction&#8221; in the title, I plan on making the review of this component a multi-part series, rather then one long post.  The component along with it&#8217;s source code will be available for download <a rel="attachment wp-att-16" href="http://ContentOnContentManagement.com/2007/10/06/security-overrides-component-introduction/security-overrides-component-for-stellent-oracle/">here</a>.</p>
<p>I should also mention that Oracle has a fully supported component available for download which has some of the same features as this one.  It&#8217;s called the &#8220;Need to Know&#8221; component and if you are considering using my example in a production system, please take a look at their component first.</p>
<p><a rel="attachment wp-att-16" href="http://ContentOnContentManagement.com/2007/10/06/security-overrides-component-introduction/security-overrides-component-for-stellent-oracle/">Security Overrides Component for Stellent / Oracle</a></p>
]]></content:encoded>
			<wfw:commentRss>http://contentoncontentmanagement.com/2007/10/security-overrides-component-introduction/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

