You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@chemistry.apache.org by bu...@apache.org on 2011/02/17 18:18:08 UTC
svn commit: r785594 [6/10] - in /websites/staging/chemistry/trunk/content:
./ images/ resources/
Added: websites/staging/chemistry/trunk/content/opencmis-cookbook.html
==============================================================================
--- websites/staging/chemistry/trunk/content/opencmis-cookbook.html (added)
+++ websites/staging/chemistry/trunk/content/opencmis-cookbook.html Thu Feb 17 17:18:07 2011
@@ -0,0 +1,905 @@
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<html>
+ <head>
+ <link type="text/css" rel="stylesheet" href="http://incubator.apache.org/chemistry/resources/site.css"></link>
+ <script src="http://incubator.apache.org/chemistry/resources/space.js" type="text/javascript"></script>
+ <meta name="keywords" content="CMIS, Content Management Interoperability Service, ECM, Enterprise Content Management, OASIS, integration standards, Chemistry, OpenCMIS"/>
+ <meta name="description" content"Apache Chemistry, CMIS Implementation" />
+ <title>
+Apache Chemistry - OpenCMIS Cookbook
+ </title>
+ </head>
+<body onload="init()">
+ <table width="100%" cellpadding="0" cellspacing="0">
+ <tr width="100%">
+ <td id="cell-0-0"> </td>
+ <td id="cell-0-1"> </td>
+ <td id="cell-0-2"> </td>
+ </tr>
+ <tr width="100%">
+ <td id="cell-1-0"> </td>
+ <td id="cell-1-1">
+ <div style="padding: 5px;">
+ <div id="banner">
+ <!-- Banner -->
+<TABLE border="0" cellpadding="0" cellspacing="0" width="100%">
+<TR>
+<TD align="left" class="topbardiv" nowrap="">
+<A href="http://incubator.apache.org/chemistry" title="Apache Chemistry">
+<IMG border="0" src="http://incubator.apache.org/chemistry/images/chemistry_logo_small.png"/>
+</A>
+</TD>
+<TD align="right" nowrap="">
+<A href="http://incubator.apache.org/" title="The Apache Software Foundation Incubator">
+<IMG border="0" src="http://incubator.apache.org/images/apache-incubator-logo.png">
+</A>
+</TD>
+</TR>
+</TABLE>
+ <!-- Banner -->
+ </div>
+ </div>
+ <div id="top-menu">
+ <table border="0" cellpadding="1" cellspacing="0" width="100%">
+ <tr>
+ <td>
+ <div align="left">
+ <!-- Breadcrumbs -->
+<a href="/">Home</a> » <a href="/opencmis.html">OpenCMIS</a> » <a href="/opencmis-cookbook.html">OpenCMIS Cookbook</a>
+ <!-- Breadcrumbs -->
+ </div>
+ </td>
+ <td>
+ <div align="right">
+ <!-- Quicklinks -->
+<P><A href="http://www.apache.org/licenses/LICENSE-2.0.html" class="external-link" rel="nofollow">License</A> <A href="sitemap.html" title="SiteMap">Site Map</A></P>
+ <!-- Quicklinks -->
+ </div>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ <td id="cell-1-2"> </td>
+ </tr>
+ <tr width="100%">
+ <td id="cell-2-0"> </td>
+ <td id="cell-2-1">
+ <table>
+ <tr height="100%" valign="top">
+ <td height="100%">
+ <div id="wrapper-menu-page-right">
+ <div id="wrapper-menu-page-top">
+ <div id="wrapper-menu-page-bottom">
+ <div id="menu-page">
+ <!-- NavigationBar -->
+ <H3><A name="Navigation-Overview"></A>Overview</H3>
+
+<UL class="alternate" type="square">
+ <LI><A href="http://www.apache.org/licenses/LICENSE-2.0.html" class="external-link" rel="nofollow">License</A></LI>
+ <LI><A href="sitemap.html" title="SiteMap">Site Map</A></LI>
+ <LI><A href="http://mail-archives.apache.org/mod_mbox/incubator-chemistry-dev/" class="external-link" rel="nofollow">Mailing List</A></LI>
+ <LI><A href="https://issues.apache.org/jira/browse/CMIS" class="external-link" rel="nofollow">Issue Tracking</A></LI>
+</UL>
+
+
+<H3><A name="Navigation-Search"></A>Search</H3>
+
+<DIV style="padding: 0px 0px 0px 20px;">
+<FORM action="http://www.google.com/search" method="get" style="font-size: 10px;">
+<INPUT name="ie" type="hidden" value="UTF-8"></INPUT>
+<INPUT name="oe" type="hidden" value="UTF-8"></INPUT>
+ <INPUT maxlength="255" name="q" size="12" type="text" value=""></INPUT>
+ <INPUT name="btnG" type="submit" value="Search"></INPUT>
+ <INPUT name="domains" type="hidden" value="incubator.apache.org/chemistry"></INPUT>
+ <INPUT name="sitesearch" type="hidden" value="incubator.apache.org/chemistry"></INPUT>
+</FORM>
+</DIV>
+
+
+<H3><A name="Navigation-CMISforJava"></A>CMIS for Java</H3>
+
+<UL class="alternate" type="square">
+ <LI><A href="opencmis.html" title="OpenCMIS">OpenCMIS</A></LI>
+ <LI><A href="opencmis-modules.html" title="OpenCMIS Modules">Overview</A></LI>
+ <LI><A href="opencmis-client-api.html" title="OpenCMIS Client API">Client API</A></LI>
+ <LI><A href="https://svn.apache.org/repos/asf/chemistry/opencmis/trunk" class="external-link" rel="nofollow">Source Code</A></LI>
+ <LI><A href="http://incubator.apache.org/chemistry/javadoc/index.html" class="external-link" rel="nofollow">JavaDoc</A></LI>
+</UL>
+
+
+<H3><A name="Navigation-CMISforPython"></A>CMIS for Python</H3>
+
+<UL class="alternate" type="square">
+ <LI><A href="cmislib.html" title="cmislib">cmislib</A></LI>
+ <LI><A href="http://incubator.apache.org/chemistry/cmislib-doc/" class="external-link" rel="nofollow">cmislib Documentation</A></LI>
+ <LI><A href="https://svn.apache.org/repos/asf/chemistry/cmislib/trunk" class="external-link" rel="nofollow">Source Code</A></LI>
+</UL>
+
+
+<H3><A name="Navigation-CMISforPHP"></A>CMIS for PHP</H3>
+
+<UL class="alternate" type="square">
+ <LI><A href="phpclient.html" title="phpclient">CMIS PHP Client</A></LI>
+ <LI><A href="https://svn.apache.org/repos/asf/chemistry/phpclient/trunk" class="external-link" rel="nofollow">Source Code</A></LI>
+</UL>
+
+
+<H3><A name="Navigation-CMISfor.NET"></A>CMIS for .NET</H3>
+
+<UL class="alternate" type="square">
+ <LI><A href="dotcmis.html" title="DotCMIS">DotCMIS</A></LI>
+ <LI><A href="https://svn.apache.org/repos/asf/chemistry/dotcmis/trunk" class="external-link" rel="nofollow">Source Code</A></LI>
+</UL>
+
+
+<H3><A name="Navigation-Sponsorship"></A>Sponsorship</H3>
+
+<UL class="alternate" type="square">
+ <LI><A href="http://www.apache.org/foundation/thanks.html" class="external-link" rel="nofollow">Thanks</A></LI>
+ <LI><A href="http://www.apache.org/foundation/sponsorship.html" class="external-link" rel="nofollow">Sponsoring Apache</A></LI>
+</UL>
+
+ <!-- NavigationBar -->
+ </div>
+ </div>
+ </div>
+ </div>
+ </td>
+ <td height="100%">
+ <!-- Content -->
+ <div class="wiki-content"><p><a name="OpenCMISCookbook-OpenCMISCookbook"></a></p>
+<h1 id="opencmis_cookbook">OpenCMIS Cookbook</h1>
+<p><em>Find and share OpenCMIS best practices here.</em></p>
+<ul>
+<li><a href="#OpenCMISCookbook-CMISClient">CMIS Client</a><ul>
+<li><a href="#OpenCMISCookbook-ConnectingtoaCMISrepository">Connecting to a CMIS repository</a><ul>
+<li><a href="#OpenCMISCookbook-ConnectingtoaCMISrepositorybyAtomPub">Connecting to a CMIS repository by AtomPub</a></li>
+<li><a href="#OpenCMISCookbook-ConnectingtoSharePoint2010">Connecting to SharePoint 2010</a><ul>
+<li><a href="#OpenCMISCookbook-AtomPub">AtomPub</a></li>
+<li><a href="#OpenCMISCookbook-WebServices">Web Services</a></li>
+</ul>
+</li>
+<li><a href="#OpenCMISCookbook-UsingCookies">Using Cookies</a></li>
+</ul>
+</li>
+<li><a href="#OpenCMISCookbook-Understandingtheclientsidecache">Understanding the client side cache</a></li>
+<li><a href="#OpenCMISCookbook-Gettingtheidofanobjectfromitspath">Getting the id of an object from its path</a></li>
+<li><a href="#OpenCMISCookbook-Readingafile">Reading a file</a></li>
+<li><a href="#OpenCMISCookbook-Showingafolder'sitems,withresultspaging">Showing a folder's items, with results paging</a></li>
+<li><a href="#OpenCMISCookbook-RetrievingDocumentobjectsfromqueryresults">Retrieving Document objects from query results</a></li>
+<li><a href="#OpenCMISCookbook-GettingCMISextensions">Getting CMIS extensions</a></li>
+<li><a href="#OpenCMISCookbook-Connectingfroma.NetclientviatheWebServicesbinding">Connecting from a .Net client via the Web Services binding</a></li>
+<li><a href="#OpenCMISCookbook-ReadingmetadataandcontentfromaCMISrepository">Reading metadata and content from a CMIS repository</a></li>
+<li><a href="#OpenCMISCookbook-CreatingandupdatingCMISobjects">Creating and updating CMIS objects</a></li>
+<li><a href="#OpenCMISCookbook-Usingthequeryparser">Using the query parser</a></li>
+</ul>
+</li>
+<li><a href="#OpenCMISCookbook-CMISServer">CMIS Server</a><ul>
+<li><a href="#OpenCMISCookbook-AddingCMISextensions">Adding CMIS extensions</a></li>
+<li><a href="#OpenCMISCookbook-UsingtheserverframeworkwithSpring">Using the server framework with Spring</a></li>
+</ul>
+</li>
+</ul>
+<p><a name="OpenCMISCookbook-CMISClient"></a></p>
+<h2 id="cmis_client">CMIS Client</h2>
+<p><a name="OpenCMISCookbook-ConnectingtoaCMISrepository"></a></p>
+<h3 id="connecting_to_a_cmis_repository">Connecting to a CMIS repository</h3>
+<p><a name="OpenCMISCookbook-ConnectingtoaCMISrepositorybyAtomPub"></a></p>
+<h4 id="connecting_to_a_cmis_repository_by_atompub">Connecting to a CMIS repository by AtomPub</h4>
+<div class="codehilite"><pre><span class="sr">//</span> <span class="n">Default</span> <span class="n">factory</span> <span class="n">implementation</span> <span class="n">of</span> <span class="n">client</span> <span class="n">runtime</span><span class="o">.</span>
+<span class="n">SessionFactory</span> <span class="n">sessionFactory</span> <span class="o">=</span> <span class="n">SessionFactoryImpl</span><span class="o">.</span><span class="n">newInstance</span><span class="p">();</span>
+<span class="n">Map</span><span class="o"><</span><span class="n">String</span><span class="p">,</span> <span class="n">String</span><span class="o">></span> <span class="n">parameter</span> <span class="o">=</span> <span class="k">new</span> <span class="n">HashMap</span><span class="o"><</span><span class="n">String</span><span class="p">,</span> <span class="n">String</span><span class="o">></span><span class="p">();</span>
+
+<span class="sr">//</span> <span class="n">User</span> <span class="n">credentials</span><span class="o">.</span>
+<span class="n">parameter</span><span class="o">.</span><span class="n">put</span><span class="p">(</span><span class="n">SessionParameter</span><span class="o">.</span><span class="n">USER</span><span class="p">,</span> <span class="s">"user"</span><span class="p">);</span>
+<span class="n">parameter</span><span class="o">.</span><span class="n">put</span><span class="p">(</span><span class="n">SessionParameter</span><span class="o">.</span><span class="n">PASSWORD</span><span class="p">,</span> <span class="s">"password"</span><span class="p">);</span>
+
+<span class="sr">//</span> <span class="n">Connection</span> <span class="n">settings</span><span class="o">.</span>
+<span class="n">parameter</span><span class="o">.</span><span class="n">put</span><span class="p">(</span><span class="n">SessionParameter</span><span class="o">.</span><span class="n">ATOMPUB_URL</span><span class="p">,</span>
+ <span class="s">"http://localhost:8080/alfresco/service/cmis"</span><span class="p">);</span> <span class="sr">//</span> <span class="n">URL</span> <span class="n">to</span> <span class="n">your</span> <span class="n">CMIS</span> <span class="n">server</span><span class="o">.</span>
+<span class="sr">//</span> <span class="n">parameter</span><span class="o">.</span><span class="n">put</span><span class="p">(</span><span class="n">SessionParameter</span><span class="o">.</span><span class="n">REPOSITORY_ID</span><span class="p">,</span> <span class="s">"myRepository"</span><span class="p">);</span> <span class="sr">//</span> <span class="n">Only</span> <span class="n">necessary</span> <span class="k">if</span> <span class="n">there</span> <span class="n">is</span> <span class="n">more</span> <span class="n">than</span> <span class="n">one</span> <span class="n">repository</span><span class="o">.</span>
+<span class="n">parameter</span><span class="o">.</span><span class="n">put</span><span class="p">(</span><span class="n">SessionParameter</span><span class="o">.</span><span class="n">BINDING_TYPE</span><span class="p">,</span> <span class="n">BindingType</span><span class="o">.</span><span class="n">ATOMPUB</span><span class="o">.</span><span class="n">value</span><span class="p">());</span>
+
+<span class="sr">//</span> <span class="n">Session</span> <span class="n">locale</span><span class="o">.</span>
+<span class="n">parameter</span><span class="o">.</span><span class="n">put</span><span class="p">(</span><span class="n">SessionParameter</span><span class="o">.</span><span class="n">LOCALE_ISO3166_COUNTRY</span><span class="p">,</span> <span class="s">""</span><span class="p">);</span>
+<span class="n">parameter</span><span class="o">.</span><span class="n">put</span><span class="p">(</span><span class="n">SessionParameter</span><span class="o">.</span><span class="n">LOCALE_ISO639_LANGUAGE</span><span class="p">,</span> <span class="s">"en"</span><span class="p">);</span>
+<span class="n">parameter</span><span class="o">.</span><span class="n">put</span><span class="p">(</span><span class="n">SessionParameter</span><span class="o">.</span><span class="n">LOCALE_VARIANT</span><span class="p">,</span> <span class="s">"US"</span><span class="p">);</span>
+
+<span class="sr">//</span> <span class="n">Create</span> <span class="n">session</span><span class="o">.</span>
+<span class="n">Session</span> <span class="n">session</span> <span class="o">=</span> <span class="n">null</span><span class="p">;</span>
+<span class="n">try</span> <span class="p">{</span>
+ <span class="sr">//</span> <span class="n">This</span> <span class="n">supposes</span> <span class="n">only</span> <span class="n">one</span> <span class="n">repository</span> <span class="n">is</span> <span class="n">available</span> <span class="n">at</span> <span class="n">the</span> <span class="n">URL</span><span class="o">.</span>
+ <span class="n">Repository</span> <span class="n">soleRepository</span> <span class="o">=</span>
+ <span class="n">sessionFactory</span><span class="o">.</span><span class="n">getRepositories</span><span class="p">(</span><span class="n">parameter</span><span class="p">)</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="mi">0</span><span class="p">);</span>
+ <span class="n">session</span> <span class="o">=</span> <span class="n">soleRepository</span><span class="o">.</span><span class="n">createSession</span><span class="p">();</span>
+<span class="p">}</span>
+<span class="n">catch</span><span class="p">(</span><span class="n">CmisConnectionException</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span>
+ <span class="sr">//</span> <span class="n">The</span> <span class="n">server</span> <span class="n">is</span> <span class="n">unreachable</span>
+<span class="p">}</span>
+<span class="n">catch</span><span class="p">(</span><span class="n">CmisRuntimeException</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span>
+ <span class="sr">//</span> <span class="n">The</span> <span class="n">user</span><span class="o">/</span><span class="n">password</span> <span class="n">have</span> <span class="n">probably</span> <span class="n">been</span> <span class="n">rejected</span> <span class="n">by</span> <span class="n">the</span> <span class="n">server</span><span class="o">.</span>
+<span class="p">}</span>
+
+<span class="n">h4</span><span class="o">.</span> <span class="n">Connecting</span> <span class="n">to</span> <span class="n">SharePoint</span> <span class="mi">2010</span>
+
+<span class="n">While</span> <span class="n">connecting</span> <span class="n">via</span> <span class="n">AtomPub</span> <span class="n">is</span> <span class="n">straight</span> <span class="n">forward</span><span class="p">,</span> <span class="n">connecting</span> <span class="n">via</span> <span class="n">Web</span>
+</pre></div>
+
+
+<p>Services is a bit tricky.</p>
+<div class="codehilite"><pre><span class="n">h5</span><span class="o">.</span> <span class="n">AtomPub</span>
+
+<span class="n">The</span> <span class="n">service</span> <span class="n">document</span> <span class="n">URL</span> <span class="n">is</span>
+</pre></div>
+
+
+<p>http://<host>/_vti_bin/cmis/rest/<SPList>?getrepositoryinfo .
+ Since this sends the password as plain text, HTTPS is strongly
+recommended.</p>
+<div class="codehilite"><pre><span class="n">h5</span><span class="o">.</span> <span class="n">Web</span> <span class="n">Services</span>
+
+<span class="c1"># Download the WSDL with a web browser and store it on your local disk. The</span>
+</pre></div>
+
+
+<p>WSDL URL is http://<host>/_vti_bin/cmissoapwsdl.aspx?wsdl .
+ # Provide file://... URLs to the downloaded WSDL for all OpenCMIS WSDL
+session parameters.
+ # Activate the OpenCMIS NTLM authentication provider.</p>
+<div class="codehilite"><pre><span class="n">parameters</span><span class="o">.</span><span class="n">put</span><span class="p">(</span><span class="n">SessionParameter</span><span class="o">.</span><span class="n">AUTHENTICATION_PROVIDER_CLASS</span><span class="p">,</span> <span class="n">CmisBindingFactory</span><span class="o">.</span><span class="n">NTLM_AUTHENTICATION_PROVIDER</span><span class="p">);</span>
+
+<span class="p">(</span><span class="n">The</span> <span class="n">NTLM</span>
+</pre></div>
+
+
+<p>authentication provider uses [java.net.Authenticator|http://download-llnw.oracle.com/javase/6/docs/api/java/net/Authenticator.html]
+ under the hood. If this interferes with your environment, you are on your
+own.)</p>
+<div class="codehilite"><pre><span class="n">h4</span><span class="o">.</span> <span class="n">Using</span> <span class="n">Cookies</span>
+
+<span class="n">Some</span> <span class="n">repositories</span> <span class="n">are</span> <span class="n">sending</span> <span class="n">HTTP</span> <span class="n">cookies</span> <span class="n">to</span> <span class="n">maintain</span> <span class="n">state</span> <span class="p">(</span><span class="n">although</span> <span class="n">CMIS</span>
+</pre></div>
+
+
+<p>is stateless) or accelerate authentication for subsequent calls. OpenCMIS
+ignores these cookies by default. The following code snippet activates
+cookies for your application and OpenCMIS. See [this page|http://java.sun.com/docs/books/tutorial/networking/cookies/cookiemanager.html]
+ for details.</p>
+<div class="codehilite"><pre><span class="p">{</span><span class="n">code:java</span><span class="p">}</span>
+<span class="n">CookieManager</span> <span class="n">cm</span> <span class="o">=</span> <span class="k">new</span> <span class="n">CookieManager</span><span class="p">(</span><span class="n">null</span><span class="p">,</span> <span class="n">CookiePolicy</span><span class="o">.</span><span class="n">ACCEPT_ALL</span><span class="p">);</span>
+<span class="n">CookieHandler</span><span class="o">.</span><span class="n">setDefault</span><span class="p">(</span><span class="n">cm</span><span class="p">);</span>
+</pre></div>
+
+
+<p><a name="OpenCMISCookbook-Understandingtheclientsidecache"></a></p>
+<h3 id="understanding_the_client_side_cache">Understanding the client side cache</h3>
+<p>Client side caching is turned on by default. That is, getObject() will
+first look into the session cache if the object already exists there. If
+this is the case, it returns the object without talking to the repository.
+So it might return stale objects.<br />
+</p>
+<p>There are multiple ways to deal with that:
+* Refresh the object data that is returned from getObject().
+{code:java}
+CmisObject object = session.getObject(id);</p>
+<p>object.refresh(); // contacts the repository and refreshes the object</p>
+<p>object.refreshIfOld(60 * 1000); // ... or refreshes the object only if the
+data is older than a minute <br />
+</p>
+<div class="codehilite"><pre><span class="o">*</span> <span class="n">Turn</span> <span class="n">off</span> <span class="n">the</span> <span class="n">session</span> <span class="n">cache</span> <span class="n">completely</span><span class="o">.</span>
+<span class="p">{</span><span class="n">code:java</span><span class="p">}</span>
+<span class="n">session</span><span class="o">.</span><span class="n">getDefaultContext</span><span class="p">()</span><span class="o">.</span><span class="n">setCacheEnabled</span><span class="p">(</span><span class="n">false</span><span class="p">);</span>
+</pre></div>
+
+
+<ul>
+<li>Turn off caching for this getObject() call.
+{code:java}
+OperationContext oc = session.createOperationContext();
+oc.setCacheEnabled(false);</li>
+</ul>
+<p>CmisObject object = session.getObject(id, oc);</p>
+<div class="codehilite"><pre><span class="o">*</span> <span class="n">Clear</span> <span class="n">the</span> <span class="n">session</span> <span class="n">cache</span> <span class="p">(</span><span class="ow">not</span> <span class="n">recommended</span><span class="p">)</span><span class="o">.</span>
+<span class="p">{</span><span class="n">code:java</span><span class="p">}</span>
+<span class="n">session</span><span class="o">.</span><span class="n">clear</span><span class="p">();</span>
+</pre></div>
+
+
+<p><a name="OpenCMISCookbook-Gettingtheidofanobjectfromitspath"></a></p>
+<h3 id="getting_the_id_of_an_object_from_its_path">Getting the id of an object from its path</h3>
+<p>{code:java}
+String path = "/User Homes/customer1/document.odt"
+CmisObject object = getSession().getObjectByPath(path);
+String id = object.getId();</p>
+<div class="codehilite"><pre><span class="n">h3</span><span class="o">.</span> <span class="n">Reading</span> <span class="n">a</span> <span class="n">file</span>
+
+<span class="p">{</span><span class="n">code:java</span><span class="p">}</span>
+<span class="n">CmisObject</span> <span class="n">object</span> <span class="o">=</span> <span class="n">getSession</span><span class="p">()</span><span class="o">.</span><span class="n">getObject</span><span class="p">(</span><span class="n">session</span><span class="o">.</span><span class="n">createObjectId</span><span class="p">(</span><span class="n">fileId</span><span class="p">));</span>
+<span class="n">Document</span> <span class="n">document</span> <span class="o">=</span> <span class="p">(</span><span class="n">Document</span><span class="p">)</span><span class="n">object</span><span class="p">;</span>
+<span class="n">String</span> <span class="n">filename</span> <span class="o">=</span> <span class="n">document</span><span class="o">.</span><span class="n">getName</span><span class="p">();</span>
+<span class="n">InputStream</span> <span class="n">stream</span> <span class="o">=</span> <span class="n">document</span><span class="o">.</span><span class="n">getContentStream</span><span class="p">()</span><span class="o">.</span><span class="n">getStream</span><span class="p">();</span>
+</pre></div>
+
+
+<p><a name="OpenCMISCookbook-Showingafolder'sitems,withresultspaging"></a></p>
+<h3 id="showing_a_folders_items_with_results_paging">Showing a folder's items, with results paging</h3>
+<p>{code:java}
+int maxItemsPerPage = 5;
+int skipCount = 10;</p>
+<p>CmisObject object = session.getObject(session.createObjectId(folderId));
+Folder folder = (Folder)object;
+OperationContext operationContext = session.createOperationContext();
+operationContext.setMaxItemsPerPage(maxItemsPerPage);</p>
+<p>ItemIterable<CmisObject> children = folder.getChildren(operationContext);
+ItemIterable<CmisObject> page = children.skipTo(skipCount).getPage();</p>
+<p>Iterator<CmisObject> pageItems = page.iterator();
+while(pageItems.hasNext()) {
+ CmisObject item = pageItems.next();
+ // Do something with the item.
+}</p>
+<div class="codehilite"><pre><span class="x">h3. Retrieving Document objects from query results</span>
+
+<span class="x">{code:java}</span>
+<span class="x">String myType = "my:documentType";</span>
+<span class="x">String queryString = "SELECT * FROM " + myType;</span>
+
+<span class="x">// get the query name of cmis:objectId</span>
+<span class="x">ObjectType type = session.getTypeDefinition(myType);</span>
+<span class="x">PropertyDefinition</span><span class="cp"><?</span><span class="o">></span> <span class="nx">objectIdPropDef</span> <span class="o">=</span>
+</pre></div>
+
+
+<p>type.getPropertyDefinitions().get(PropertyIds.OBJECT_ID);
+ String objectIdQueryName = objectIdPropDef.getQueryName();</p>
+<div class="codehilite"><pre><span class="sr">//</span> <span class="n">execute</span> <span class="n">query</span>
+<span class="n">ItemIterable</span><span class="sr"><QueryResult></span> <span class="n">results</span> <span class="o">=</span> <span class="n">session</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="n">queryString</span><span class="p">,</span> <span class="n">false</span><span class="p">);</span>
+
+<span class="k">for</span> <span class="p">(</span><span class="n">QueryResult</span> <span class="n">qResult</span> <span class="p">:</span> <span class="n">results</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">String</span> <span class="n">objectId</span> <span class="o">=</span>
+</pre></div>
+
+
+<p>qResult.getPropertyValueByQueryName(objectIdQueryName);</p>
+<div class="codehilite"><pre> <span class="n">Document</span> <span class="n">doc</span> <span class="o">=</span> <span class="p">(</span><span class="n">Document</span><span class="p">)</span>
+</pre></div>
+
+
+<p>session.getObject(session.createObjectId(objectId));
+ }</p>
+<p><a name="OpenCMISCookbook-GettingCMISextensions"></a></p>
+<h3 id="getting_cmis_extensions">Getting CMIS extensions</h3>
+<p><em>(since OpenCMIS 0.2.0)</em>
+The CMIS specification allows to add extensions at several points in CMIS
+data structures (object, properties, allowable actions, ACLs, policies,
+etc.).
+These extensions are XML fragments for the AtomPub and the Web Services
+binding. (It will be something simpler for the upcoming JSON binding.)
+Think of it as a tree structure with named node and leafs. Only the leafs
+can have a value.</p>
+<p>{code:java}
+// get an object from somewhere
+CmisObject object = ...</p>
+<p>// extensions can be attached to different levels
+// in this example we get the extensions on the properties level
+List<CmisExtensionElement> extensions =
+object.getExtensions(ExtensionLevel.PROPERTIES);</p>
+<p>if(extensions == null) {
+ // this object has no extensions on this level
+ return;
+}</p>
+<p>// iterate through the extensions until we find the one we are looking for
+for(CmisExtensionElement ext: extensions) {</p>
+<p>if("myExtension".equals(ext.getName()) {</p>
+<div class="codehilite"><pre> <span class="sr">//</span> <span class="n">found</span> <span class="n">it</span><span class="p">,</span> <span class="n">now</span> <span class="k">print</span> <span class="n">the</span> <span class="nb">values</span> <span class="n">of</span> <span class="n">the</span> <span class="n">children</span>
+ <span class="k">for</span><span class="p">(</span><span class="n">CmisExtensionElement</span> <span class="n">child:</span> <span class="n">ext</span><span class="o">.</span><span class="n">getChildren</span><span class="p">())</span> <span class="p">{</span>
+<span class="n">System</span><span class="o">.</span><span class="n">out</span><span class="o">.</span><span class="n">println</span><span class="p">(</span><span class="n">child</span><span class="o">.</span><span class="n">getName</span><span class="p">()</span> <span class="o">+</span> <span class="s">": "</span> <span class="o">+</span> <span class="n">child</span><span class="o">.</span><span class="n">getValue</span><span class="p">());</span>
+ <span class="p">}</span>
+</pre></div>
+
+
+<p>}</p>
+<p>}</p>
+<div class="codehilite"><pre><span class="n">h3</span><span class="o">.</span> <span class="n">Connecting</span> <span class="n">from</span> <span class="n">a</span> <span class="o">.</span><span class="n">Net</span> <span class="n">client</span> <span class="n">via</span> <span class="n">the</span> <span class="n">Web</span> <span class="n">Services</span> <span class="n">binding</span>
+
+<span class="n">This</span> <span class="n">is</span> <span class="n">a</span> <span class="n">very</span> <span class="n">simple</span> <span class="n">C</span><span class="c1"># example that demonstrates how to connect to an</span>
+</pre></div>
+
+
+<p>OpenCMIS server via the Web Services binding. Please note that .Net only
+allows UsernameTokens over HTTPS.</p>
+<p>using System;
+using System.ServiceModel;
+using OpenCMISClient.OpenCMISServer;
+using System.Net;</p>
+<p>namespace OpenCMISClient
+{
+ class CMISClientDemo
+ {
+ public void DoStuff()
+ {
+ try
+ {
+ // uncomment the next line if you are using a self signed
+SSL certificate
+ // ServicePointManager.ServerCertificateValidationCallback
+= delegate { return true; };</p>
+<div class="codehilite"><pre> <span class="sr">//</span> <span class="n">get</span> <span class="n">hold</span> <span class="n">of</span> <span class="n">the</span> <span class="n">services</span>
+ <span class="n">RepositoryServicePortClient</span> <span class="n">repService</span> <span class="o">=</span>
+</pre></div>
+
+
+<p>GetRepositoryService("https://localhost:8443/opencmis/services/RepositoryService?wsdl",
+"test", "test");
+ NavigationServicePortClient navService =
+GetNavigationService("https://localhost:8443/opencmis/services/NavigationService?wsdl",
+"test", "test");
+ ObjectServicePortClient objService =
+GetObjectService("https://localhost:8443/opencmis/services/ObjectService?wsdl",
+"test", "test");</p>
+<div class="codehilite"><pre> <span class="sr">//</span> <span class="n">get</span> <span class="n">the</span> <span class="n">list</span> <span class="n">of</span> <span class="n">repositories</span>
+ <span class="n">cmisRepositoryEntryType</span><span class="o">[]</span><span class="p">(</span><span class="o">.</span><span class="n">html</span><span class="p">)</span>
+</pre></div>
+
+
+<p>repositoryEntries = repService.getRepositories(null);
+ foreach (cmisRepositoryEntryType repositoryEntry in
+repositoryEntries)
+ {
+ Console.WriteLine("Repository: " +
+repositoryEntry.repositoryName + " (" + repositoryEntry.repositoryId +
+")");</p>
+<div class="codehilite"><pre> <span class="sr">//</span> <span class="n">get</span> <span class="n">repository</span> <span class="n">info</span>
+ <span class="n">cmisRepositoryInfoType</span> <span class="n">repositoryInfo</span> <span class="o">=</span>
+</pre></div>
+
+
+<p>repService.getRepositoryInfo(repositoryEntry.repositoryId, null);
+ Console.WriteLine(" Info:");
+ Console.WriteLine(" Description: " +
+repositoryInfo.repositoryDescription);
+ Console.WriteLine(" Product: " +
+repositoryInfo.vendorName + " / " + repositoryInfo.productName + " " +
+repositoryInfo.productVersion);</p>
+<div class="codehilite"><pre> <span class="sr">//</span> <span class="n">get</span> <span class="n">all</span> <span class="n">base</span> <span class="n">types</span> <span class="n">of</span> <span class="n">the</span> <span class="n">repository</span>
+ <span class="n">cmisTypeDefinitionListType</span> <span class="n">typeList</span> <span class="o">=</span>
+</pre></div>
+
+
+<p>repService.getTypeChildren(repositoryInfo.repositoryId, null, true, null,
+null, null);
+ Console.WriteLine(" Types:");
+ foreach (cmisTypeDefinitionType type in typeList.types)
+ {
+ Console.WriteLine(" " + type.displayName + " ("
++ type.id + ")");
+ }</p>
+<div class="codehilite"><pre> <span class="sr">//</span> <span class="n">get</span> <span class="n">all</span> <span class="n">root</span> <span class="n">folder</span> <span class="n">children</span>
+ <span class="n">cmisObjectInFolderListType</span> <span class="n">children</span> <span class="o">=</span>
+</pre></div>
+
+
+<p>navService.getChildren(repositoryInfo.repositoryId,
+repositoryInfo.rootFolderId, null, null, true, null, null, false, null,
+null, null);
+ Console.WriteLine(" Root folder:");
+ foreach (cmisObjectInFolderType objInFolder in
+children.objects)
+ {
+ cmisObjectType obj = objInFolder.@object;
+ String objId = GetIdPropertyValue(obj.properties,
+"cmis:objectId");
+ Console.WriteLine(" Name: " +
+GetStringPropertyValue(obj.properties, "cmis:name") + " (" + objId + ")");
+ Console.WriteLine(" Type: " +
+GetIdPropertyValue(obj.properties, "cmis:baseTypeId"));
+ Console.WriteLine(" Created by: " +
+GetStringPropertyValue(obj.properties, "cmis:createdBy"));
+ Console.WriteLine(" Creation date: " +
+GetDateTimePropertyValue(obj.properties, "cmis:creationDate"));</p>
+<div class="codehilite"><pre> <span class="sr">//</span> <span class="k">if</span> <span class="n">it</span> <span class="n">is</span> <span class="n">a</span> <span class="n">document</span><span class="p">,</span> <span class="n">get</span> <span class="n">the</span> <span class="n">size</span> <span class="ow">and</span> <span class="n">the</span>
+</pre></div>
+
+
+<p>content
+ String baseType =
+GetIdPropertyValue(obj.properties, "cmis:baseTypeId");
+ if ("cmis:document".Equals(baseType))
+ {
+ // get the size
+ Int64? size =
+GetIntegerPropertyValue(obj.properties, "cmis:contentStreamLength");
+ Console.WriteLine(" Size: " +
+size);</p>
+<div class="codehilite"><pre> <span class="sr">//</span> <span class="n">get</span> <span class="n">the</span> <span class="n">content</span>
+ <span class="n">cmisContentStreamType</span> <span class="n">content</span> <span class="o">=</span>
+</pre></div>
+
+
+<p>objService.getContentStream(repositoryInfo.repositoryId, objId, null, null,
+null, null);
+ Console.WriteLine(" MIME type: " +
+content.mimeType);</p>
+<div class="codehilite"><pre> <span class="sr">//</span> <span class="n">get</span> <span class="n">the</span> <span class="s">"stream"</span>
+ <span class="n">byte</span><span class="o">[]</span><span class="p">(</span><span class="o">.</span><span class="n">html</span><span class="p">)</span>
+</pre></div>
+
+
+<p>bytes = content.stream; // really streaming requires some more work
+ Console.WriteLine(" Stream: " +
+(bytes.Length == size ? "ok" : "mismatch"));
+ }
+ }</p>
+<div class="codehilite"><pre> <span class="p">}</span>
+ <span class="p">}</span>
+ <span class="n">catch</span> <span class="p">(</span><span class="n">FaultException</span><span class="sr"><cmisFaultType></span> <span class="n">fe</span><span class="p">)</span>
+ <span class="p">{</span>
+ <span class="n">Console</span><span class="o">.</span><span class="n">WriteLine</span><span class="p">(</span><span class="s">"CMIS Exception: "</span> <span class="o">+</span> <span class="n">fe</span><span class="o">.</span><span class="n">Detail</span><span class="o">.</span><span class="n">message</span><span class="p">);</span>
+ <span class="n">Console</span><span class="o">.</span><span class="n">WriteLine</span><span class="p">(</span><span class="s">"Type: "</span> <span class="o">+</span> <span class="n">fe</span><span class="o">.</span><span class="n">Detail</span><span class="o">.</span><span class="n">type</span><span class="p">);</span>
+ <span class="n">Console</span><span class="o">.</span><span class="n">WriteLine</span><span class="p">(</span><span class="s">"Code: "</span> <span class="o">+</span> <span class="n">fe</span><span class="o">.</span><span class="n">Detail</span><span class="o">.</span><span class="n">code</span><span class="p">);</span>
+ <span class="p">}</span>
+ <span class="n">catch</span> <span class="p">(</span><span class="n">Exception</span> <span class="n">e</span><span class="p">)</span>
+ <span class="p">{</span>
+ <span class="n">Console</span><span class="o">.</span><span class="n">WriteLine</span><span class="p">(</span><span class="s">"Exception: "</span> <span class="o">+</span> <span class="n">e</span><span class="o">.</span><span class="n">Message</span><span class="p">);</span>
+ <span class="n">Console</span><span class="o">.</span><span class="n">WriteLine</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">StackTrace</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="n">Console</span><span class="o">.</span><span class="n">ReadKey</span><span class="p">();</span>
+<span class="p">}</span>
+
+<span class="n">public</span> <span class="n">RepositoryServicePortClient</span> <span class="n">GetRepositoryService</span><span class="p">(</span><span class="n">String</span>
+</pre></div>
+
+
+<p>wsdlUrl, String user, String password)
+ {
+ BasicHttpBinding binding = new BasicHttpBinding();
+ binding.MessageEncoding = WSMessageEncoding.Mtom;
+ binding.Security.Mode =
+BasicHttpSecurityMode.TransportWithMessageCredential;</p>
+<div class="codehilite"><pre> <span class="n">RepositoryServicePortClient</span> <span class="n">service</span> <span class="o">=</span> <span class="k">new</span>
+</pre></div>
+
+
+<p>RepositoryServicePortClient(binding, new EndpointAddress(wsdlUrl));</p>
+<div class="codehilite"><pre> <span class="n">service</span><span class="o">.</span><span class="n">ClientCredentials</span><span class="o">.</span><span class="n">UserName</span><span class="o">.</span><span class="n">UserName</span> <span class="o">=</span> <span class="n">user</span><span class="p">;</span>
+ <span class="n">service</span><span class="o">.</span><span class="n">ClientCredentials</span><span class="o">.</span><span class="n">UserName</span><span class="o">.</span><span class="n">Password</span> <span class="o">=</span> <span class="n">password</span><span class="p">;</span>
+
+ <span class="k">return</span> <span class="n">service</span><span class="p">;</span>
+<span class="p">}</span>
+
+<span class="n">public</span> <span class="n">NavigationServicePortClient</span> <span class="n">GetNavigationService</span><span class="p">(</span><span class="n">String</span>
+</pre></div>
+
+
+<p>wsdlUrl, String user, String password)
+ {
+ BasicHttpBinding binding = new BasicHttpBinding();
+ binding.MessageEncoding = WSMessageEncoding.Mtom;
+ binding.Security.Mode =
+BasicHttpSecurityMode.TransportWithMessageCredential;</p>
+<div class="codehilite"><pre> <span class="n">NavigationServicePortClient</span> <span class="n">service</span> <span class="o">=</span> <span class="k">new</span>
+</pre></div>
+
+
+<p>NavigationServicePortClient(binding, new EndpointAddress(wsdlUrl));</p>
+<div class="codehilite"><pre> <span class="n">service</span><span class="o">.</span><span class="n">ClientCredentials</span><span class="o">.</span><span class="n">UserName</span><span class="o">.</span><span class="n">UserName</span> <span class="o">=</span> <span class="n">user</span><span class="p">;</span>
+ <span class="n">service</span><span class="o">.</span><span class="n">ClientCredentials</span><span class="o">.</span><span class="n">UserName</span><span class="o">.</span><span class="n">Password</span> <span class="o">=</span> <span class="n">password</span><span class="p">;</span>
+
+ <span class="k">return</span> <span class="n">service</span><span class="p">;</span>
+<span class="p">}</span>
+
+<span class="n">public</span> <span class="n">ObjectServicePortClient</span> <span class="n">GetObjectService</span><span class="p">(</span><span class="n">String</span> <span class="n">wsdlUrl</span><span class="p">,</span>
+</pre></div>
+
+
+<p>String user, String password)
+ {
+ BasicHttpBinding binding = new BasicHttpBinding();
+ binding.MessageEncoding = WSMessageEncoding.Mtom;
+ binding.Security.Mode =
+BasicHttpSecurityMode.TransportWithMessageCredential;
+ binding.TransferMode = TransferMode.Streamed;</p>
+<div class="codehilite"><pre> <span class="n">ObjectServicePortClient</span> <span class="n">service</span> <span class="o">=</span> <span class="k">new</span>
+</pre></div>
+
+
+<p>ObjectServicePortClient(binding, new EndpointAddress(wsdlUrl));</p>
+<div class="codehilite"><pre> <span class="n">service</span><span class="o">.</span><span class="n">ClientCredentials</span><span class="o">.</span><span class="n">UserName</span><span class="o">.</span><span class="n">UserName</span> <span class="o">=</span> <span class="n">user</span><span class="p">;</span>
+ <span class="n">service</span><span class="o">.</span><span class="n">ClientCredentials</span><span class="o">.</span><span class="n">UserName</span><span class="o">.</span><span class="n">Password</span> <span class="o">=</span> <span class="n">password</span><span class="p">;</span>
+
+ <span class="k">return</span> <span class="n">service</span><span class="p">;</span>
+<span class="p">}</span>
+
+<span class="n">public</span> <span class="n">String</span> <span class="n">GetStringPropertyValue</span><span class="p">(</span><span class="n">cmisPropertiesType</span> <span class="n">properties</span><span class="p">,</span>
+</pre></div>
+
+
+<p>String id)
+ {
+ String result = null;</p>
+<div class="codehilite"><pre> <span class="k">foreach</span> <span class="p">(</span><span class="n">cmisProperty</span> <span class="n">property</span> <span class="n">in</span> <span class="n">properties</span><span class="o">.</span><span class="n">Items</span><span class="p">)</span>
+ <span class="p">{</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">property</span><span class="o">.</span><span class="n">propertyDefinitionId</span><span class="o">.</span><span class="n">Equals</span><span class="p">(</span><span class="n">id</span><span class="p">))</span>
+ <span class="p">{</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">property</span> <span class="n">is</span> <span class="n">cmisPropertyString</span><span class="p">)</span>
+ <span class="p">{</span>
+ <span class="n">result</span> <span class="o">=</span> <span class="p">((</span><span class="n">cmisPropertyString</span><span class="p">)</span><span class="n">property</span><span class="p">)</span><span class="o">.</span><span class="n">value</span><span class="p">[</span><span class="mi">0</span><span class="p">](</span><span class="mi">0</span><span class="o">.</span><span class="n">html</span><span class="p">)</span>
+</pre></div>
+
+
+<p>;
+ }
+ break;
+ }
+ }</p>
+<div class="codehilite"><pre> <span class="k">return</span> <span class="n">result</span><span class="p">;</span>
+<span class="p">}</span>
+
+<span class="n">public</span> <span class="n">String</span> <span class="n">GetIdPropertyValue</span><span class="p">(</span><span class="n">cmisPropertiesType</span> <span class="n">properties</span><span class="p">,</span>
+</pre></div>
+
+
+<p>String id)
+ {
+ String result = null;</p>
+<div class="codehilite"><pre> <span class="k">foreach</span> <span class="p">(</span><span class="n">cmisProperty</span> <span class="n">property</span> <span class="n">in</span> <span class="n">properties</span><span class="o">.</span><span class="n">Items</span><span class="p">)</span>
+ <span class="p">{</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">property</span><span class="o">.</span><span class="n">propertyDefinitionId</span><span class="o">.</span><span class="n">Equals</span><span class="p">(</span><span class="n">id</span><span class="p">))</span>
+ <span class="p">{</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">property</span> <span class="n">is</span> <span class="n">cmisPropertyId</span><span class="p">)</span>
+ <span class="p">{</span>
+ <span class="n">result</span> <span class="o">=</span> <span class="p">((</span><span class="n">cmisPropertyId</span><span class="p">)</span><span class="n">property</span><span class="p">)</span><span class="o">.</span><span class="n">value</span><span class="p">[</span><span class="mi">0</span><span class="p">](</span><span class="mi">0</span><span class="o">.</span><span class="n">html</span><span class="p">)</span>
+</pre></div>
+
+
+<p>;
+ }
+ break;
+ }
+ }</p>
+<div class="codehilite"><pre> <span class="k">return</span> <span class="n">result</span><span class="p">;</span>
+<span class="p">}</span>
+
+<span class="n">public</span> <span class="n">Int64</span><span class="p">?</span> <span class="n">GetIntegerPropertyValue</span><span class="p">(</span><span class="n">cmisPropertiesType</span>
+</pre></div>
+
+
+<p>properties, String id)
+ {
+ Int64? result = null;</p>
+<div class="codehilite"><pre> <span class="k">foreach</span> <span class="p">(</span><span class="n">cmisProperty</span> <span class="n">property</span> <span class="n">in</span> <span class="n">properties</span><span class="o">.</span><span class="n">Items</span><span class="p">)</span>
+ <span class="p">{</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">property</span><span class="o">.</span><span class="n">propertyDefinitionId</span><span class="o">.</span><span class="n">Equals</span><span class="p">(</span><span class="n">id</span><span class="p">))</span>
+ <span class="p">{</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">property</span> <span class="n">is</span> <span class="n">cmisPropertyInteger</span><span class="p">)</span>
+ <span class="p">{</span>
+ <span class="n">result</span> <span class="o">=</span> <span class="n">Int64</span><span class="o">.</span><span class="n">Parse</span><span class="p">(((</span><span class="n">cmisPropertyInteger</span><span class="p">)</span><span class="n">property</span><span class="p">)</span><span class="o">.</span><span class="n">value</span><span class="p">[</span><span class="mi">0</span><span class="p">](</span><span class="mi">0</span><span class="o">.</span><span class="n">html</span><span class="p">)</span>
+</pre></div>
+
+
+<p>);
+ }
+ break;
+ }
+ }</p>
+<div class="codehilite"><pre> <span class="k">return</span> <span class="n">result</span><span class="p">;</span>
+<span class="p">}</span>
+
+<span class="n">public</span> <span class="n">DateTime</span><span class="p">?</span> <span class="n">GetDateTimePropertyValue</span><span class="p">(</span><span class="n">cmisPropertiesType</span>
+</pre></div>
+
+
+<p>properties, String id)
+ {
+ DateTime? result = null;</p>
+<div class="codehilite"><pre> <span class="k">foreach</span> <span class="p">(</span><span class="n">cmisProperty</span> <span class="n">property</span> <span class="n">in</span> <span class="n">properties</span><span class="o">.</span><span class="n">Items</span><span class="p">)</span>
+ <span class="p">{</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">property</span><span class="o">.</span><span class="n">propertyDefinitionId</span><span class="o">.</span><span class="n">Equals</span><span class="p">(</span><span class="n">id</span><span class="p">))</span>
+ <span class="p">{</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">property</span> <span class="n">is</span> <span class="n">cmisPropertyDateTime</span><span class="p">)</span>
+ <span class="p">{</span>
+ <span class="n">result</span> <span class="o">=</span> <span class="p">((</span><span class="n">cmisPropertyDateTime</span><span class="p">)</span><span class="n">property</span><span class="p">)</span><span class="o">.</span><span class="n">value</span><span class="p">[</span><span class="mi">0</span><span class="p">](</span><span class="mi">0</span><span class="o">.</span><span class="n">html</span><span class="p">)</span>
+</pre></div>
+
+
+<p>;
+ }
+ break;
+ }
+ }</p>
+<div class="codehilite"><pre> <span class="k">return</span> <span class="n">result</span><span class="p">;</span>
+<span class="p">}</span>
+<span class="p">}</span>
+</pre></div>
+
+
+<p>}</p>
+<div class="codehilite"><pre><span class="n">h3</span><span class="o">.</span> <span class="n">Reading</span> <span class="n">metadata</span> <span class="ow">and</span> <span class="n">content</span> <span class="n">from</span> <span class="n">a</span> <span class="n">CMIS</span> <span class="n">repository</span>
+
+<span class="n">TODO</span>
+
+<span class="n">h3</span><span class="o">.</span> <span class="n">Creating</span> <span class="ow">and</span> <span class="n">updating</span> <span class="n">CMIS</span> <span class="n">objects</span>
+
+<span class="n">TODO</span>
+
+<span class="n">h3</span><span class="o">.</span> <span class="n">Using</span> <span class="n">the</span> <span class="n">query</span> <span class="n">parser</span>
+
+<span class="n">TODO</span>
+
+<span class="n">h2</span><span class="o">.</span> <span class="n">CMIS</span> <span class="n">Server</span>
+
+<span class="n">h3</span><span class="o">.</span> <span class="n">Adding</span> <span class="n">CMIS</span> <span class="n">extensions</span>
+
+<span class="n">_</span><span class="p">(</span><span class="n">since</span> <span class="n">OpenCMIS</span> <span class="mf">0.2.0</span><span class="p">)</span><span class="n">_</span>
+<span class="p">{</span><span class="n">code:java</span><span class="p">}</span>
+<span class="sr">//</span> <span class="n">we</span> <span class="n">want</span> <span class="n">to</span> <span class="n">attach</span> <span class="n">an</span> <span class="n">extension</span> <span class="n">to</span> <span class="n">an</span> <span class="n">object</span>
+<span class="n">ObjectData</span> <span class="n">object</span> <span class="o">=</span> <span class="o">...</span>
+
+<span class="sr">//</span> <span class="n">some</span> <span class="n">dummy</span> <span class="n">data</span>
+<span class="n">String</span> <span class="n">typeId</span> <span class="o">=</span> <span class="s">"MyType"</span><span class="p">;</span>
+<span class="n">String</span> <span class="n">objectId</span> <span class="o">=</span> <span class="s">"1111-2222-3333"</span><span class="p">;</span>
+<span class="n">String</span> <span class="n">name</span> <span class="o">=</span> <span class="s">"MyDocument"</span><span class="p">;</span>
+
+<span class="sr">//</span> <span class="n">find</span> <span class="n">a</span> <span class="n">namespace</span> <span class="k">for</span> <span class="n">the</span> <span class="n">extensions</span> <span class="n">that</span> <span class="n">is</span> <span class="n">different</span> <span class="n">from</span> <span class="n">the</span> <span class="n">CMIS</span>
+</pre></div>
+
+
+<p>namespaces
+ String ns = "http://apache.org/opencmis/example";</p>
+<div class="codehilite"><pre><span class="sr">//</span> <span class="n">create</span> <span class="n">a</span> <span class="n">list</span> <span class="k">for</span> <span class="n">the</span> <span class="n">first</span> <span class="n">level</span> <span class="n">of</span> <span class="k">our</span> <span class="n">extension</span>
+<span class="n">List</span><span class="sr"><CmisExtensionElement></span> <span class="n">extElements</span> <span class="o">=</span> <span class="k">new</span>
+</pre></div>
+
+
+<p>ArrayList<CmisExtensionElement>();</p>
+<div class="codehilite"><pre><span class="sr">//</span> <span class="n">set</span> <span class="n">up</span> <span class="n">an</span> <span class="n">attribute</span> <span class="p">(</span><span class="n">Avoid</span> <span class="n">attributes</span><span class="o">!</span> <span class="n">They</span> <span class="n">will</span> <span class="ow">not</span> <span class="n">work</span> <span class="n">with</span> <span class="n">the</span> <span class="n">JSON</span>
+</pre></div>
+
+
+<p>binding!)
+ Map<String, String> attr = new HashMap<String, String>();
+ attr.put("type", typeId);</p>
+<div class="codehilite"><pre><span class="sr">//</span> <span class="n">add</span> <span class="n">two</span> <span class="n">leafs</span> <span class="n">to</span> <span class="n">the</span> <span class="n">extension</span>
+<span class="n">extElements</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="k">new</span> <span class="n">CmisExtensionElementImpl</span><span class="p">(</span><span class="n">ns</span><span class="p">,</span> <span class="s">"objectId"</span><span class="p">,</span> <span class="n">attr</span><span class="p">,</span>
+</pre></div>
+
+
+<p>objectId));
+ extElements.add(new CmisExtensionElementImpl(ns, "name", null, name));</p>
+<div class="codehilite"><pre><span class="sr">//</span> <span class="n">set</span> <span class="n">the</span> <span class="n">extension</span> <span class="n">list</span>
+<span class="n">List</span><span class="sr"><CmisExtensionElement></span> <span class="n">extensions</span> <span class="o">=</span> <span class="k">new</span>
+</pre></div>
+
+
+<p>ArrayList<CmisExtensionElement>();
+ extensions.add(new CmisExtensionElementImpl(ns, "exampleExtension", null,
+extElements));
+ object.setExtensions(extensions);</p>
+<p>This should create something like that:</p>
+<div class="codehilite"><pre><span class="o"><</span><span class="n">exampleExtension:exampleExtension</span>
+</pre></div>
+
+
+<p>xmlns="http://apache.org/opencmis/example"
+xmlns:exampleExtension="http://apache.org/opencmis/example">
+ <objectId type="MyType">1111-2222-3333</objectId>
+ <name>MyDocument</name>
+ </exampleExtension:exampleExtension></p>
+<p><a name="OpenCMISCookbook-UsingtheserverframeworkwithSpring"></a></p>
+<h3 id="using_the_server_framework_with_spring">Using the server framework with Spring</h3>
+<p>By default, the OpenCMIS services factory is set up by a context listner
+configured in the web.xml. If you want or need Spring to set up the
+services factory, remove the context listner from the web.xml and use a
+bean like this instead:</p>
+<p>{code:java}
+public class CmisLifecycleBean implements ServletContextAware,
+InitializingBean, DisposableBean
+{
+ private ServletContext servletContext;
+ private CmisServiceFactory factory;</p>
+<div class="codehilite"><pre><span class="nv">@Override</span>
+<span class="n">public</span> <span class="n">void</span> <span class="n">setServletContext</span><span class="p">(</span><span class="n">ServletContext</span> <span class="n">servletContext</span><span class="p">)</span>
+<span class="p">{</span>
+<span class="n">this</span><span class="o">.</span><span class="n">servletContext</span> <span class="o">=</span> <span class="n">servletContext</span><span class="p">;</span>
+<span class="p">}</span>
+
+<span class="n">public</span> <span class="n">void</span> <span class="n">setCmisServiceFactory</span><span class="p">(</span><span class="n">CmisServiceFactory</span> <span class="n">factory</span><span class="p">)</span>
+<span class="p">{</span>
+<span class="n">this</span><span class="o">.</span><span class="n">factory</span> <span class="o">=</span> <span class="n">factory</span><span class="p">;</span>
+<span class="p">}</span>
+
+<span class="nv">@Override</span>
+<span class="n">public</span> <span class="n">void</span> <span class="n">afterPropertiesSet</span><span class="p">()</span> <span class="n">throws</span> <span class="n">Exception</span>
+<span class="p">{</span>
+<span class="k">if</span> <span class="p">(</span><span class="n">factory</span> <span class="o">!=</span> <span class="n">null</span><span class="p">)</span>
+<span class="p">{</span>
+ <span class="n">factory</span><span class="o">.</span><span class="n">init</span><span class="p">(</span><span class="k">new</span> <span class="n">HashMap</span><span class="o"><</span><span class="n">String</span><span class="p">,</span> <span class="n">String</span><span class="o">></span><span class="p">());</span>
+</pre></div>
+
+
+<p>servletContext.setAttribute(CmisRepositoryContextListener.SERVICES_FACTORY,
+factory);
+ }
+ }</p>
+<div class="codehilite"><pre><span class="nv">@Override</span>
+<span class="n">public</span> <span class="n">void</span> <span class="n">destroy</span><span class="p">()</span> <span class="n">throws</span> <span class="n">Exception</span>
+<span class="p">{</span>
+<span class="k">if</span> <span class="p">(</span><span class="n">factory</span> <span class="o">!=</span> <span class="n">null</span><span class="p">)</span>
+<span class="p">{</span>
+ <span class="n">factory</span><span class="o">.</span><span class="n">destroy</span><span class="p">();</span>
+<span class="p">}</span>
+<span class="p">}</span>
+</pre></div>
+
+
+<p>}</p>
+<div class="codehilite"><pre><span class="n">The</span> <span class="n">Spring</span> <span class="n">configuration</span> <span class="n">could</span> <span class="n">look</span> <span class="n">like</span> <span class="n">this:</span>
+
+<span class="p">{</span><span class="n">code:xml</span><span class="p">}</span>
+<span class="o"><</span><span class="n">bean</span> <span class="n">id</span><span class="o">=</span><span class="s">"CmisLifecycleBean"</span>
+</pre></div>
+
+
+<p>class="org.example.mycmisservice.CmisLifecycleBean">
+ <property name="cmisServiceFactory" ref="CmisServiceFactory" />
+ </bean></p>
+<div class="codehilite"><pre><span class="o"><</span><span class="n">bean</span> <span class="n">id</span><span class="o">=</span><span class="s">"CmisServiceFactory"</span>
+</pre></div>
+
+
+<p>class="org.example.mycmisservice.MyCmisServiceFactory">
+ </bean></p></div>
+ <!-- Content -->
+ </td>
+ </tr>
+ </table>
+ </td>
+ <td id="cell-2-2"> </td>
+ </tr>
+ <tr width="100%">
+ <td id="cell-3-0"> </td>
+ <td id="cell-3-1">
+ <div id="footer">
+ <!-- Footer -->
+ <div id="site-footer">
+
+ Apache Chemistry, Apache, the Apache feather logo, and the Apache
+ Chemistry project logo are trademarks of The Apache Software
+ Foundation.<br /><br />
+ Content Management Interoperability Services (CMIS) is an
+ <a href="http://www.oasis-open.org/committees/cmis/">OASIS</a>
+ specification.
+
+ </div>
+ <!-- Footer -->
+ </div>
+ </td>
+ <td id="cell-3-2"> </td>
+ </tr>
+ <tr width="100%">
+ <td id="cell-4-0"> </td>
+ <td id="cell-4-1"> </td>
+ <td id="cell-4-2"> </td>
+ </tr>
+ </table>
+</body>
+</html>
Added: websites/staging/chemistry/trunk/content/opencmis-fileshare-repository.html
==============================================================================
--- websites/staging/chemistry/trunk/content/opencmis-fileshare-repository.html (added)
+++ websites/staging/chemistry/trunk/content/opencmis-fileshare-repository.html Thu Feb 17 17:18:07 2011
@@ -0,0 +1,257 @@
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<html>
+ <head>
+ <link type="text/css" rel="stylesheet" href="http://incubator.apache.org/chemistry/resources/site.css"></link>
+ <script src="http://incubator.apache.org/chemistry/resources/space.js" type="text/javascript"></script>
+ <meta name="keywords" content="CMIS, Content Management Interoperability Service, ECM, Enterprise Content Management, OASIS, integration standards, Chemistry, OpenCMIS"/>
+ <meta name="description" content"Apache Chemistry, CMIS Implementation" />
+ <title>
+Apache Chemistry - OpenCMIS FileShare Repository
+ </title>
+ </head>
+<body onload="init()">
+ <table width="100%" cellpadding="0" cellspacing="0">
+ <tr width="100%">
+ <td id="cell-0-0"> </td>
+ <td id="cell-0-1"> </td>
+ <td id="cell-0-2"> </td>
+ </tr>
+ <tr width="100%">
+ <td id="cell-1-0"> </td>
+ <td id="cell-1-1">
+ <div style="padding: 5px;">
+ <div id="banner">
+ <!-- Banner -->
+<TABLE border="0" cellpadding="0" cellspacing="0" width="100%">
+<TR>
+<TD align="left" class="topbardiv" nowrap="">
+<A href="http://incubator.apache.org/chemistry" title="Apache Chemistry">
+<IMG border="0" src="http://incubator.apache.org/chemistry/images/chemistry_logo_small.png"/>
+</A>
+</TD>
+<TD align="right" nowrap="">
+<A href="http://incubator.apache.org/" title="The Apache Software Foundation Incubator">
+<IMG border="0" src="http://incubator.apache.org/images/apache-incubator-logo.png">
+</A>
+</TD>
+</TR>
+</TABLE>
+ <!-- Banner -->
+ </div>
+ </div>
+ <div id="top-menu">
+ <table border="0" cellpadding="1" cellspacing="0" width="100%">
+ <tr>
+ <td>
+ <div align="left">
+ <!-- Breadcrumbs -->
+<a href="/">Home</a> » <a href="/opencmis.html">OpenCMIS</a> » <a href="/opencmis-fileshare-repository.html">OpenCMIS FileShare Repository</a>
+ <!-- Breadcrumbs -->
+ </div>
+ </td>
+ <td>
+ <div align="right">
+ <!-- Quicklinks -->
+<P><A href="http://www.apache.org/licenses/LICENSE-2.0.html" class="external-link" rel="nofollow">License</A> <A href="sitemap.html" title="SiteMap">Site Map</A></P>
+ <!-- Quicklinks -->
+ </div>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ <td id="cell-1-2"> </td>
+ </tr>
+ <tr width="100%">
+ <td id="cell-2-0"> </td>
+ <td id="cell-2-1">
+ <table>
+ <tr height="100%" valign="top">
+ <td height="100%">
+ <div id="wrapper-menu-page-right">
+ <div id="wrapper-menu-page-top">
+ <div id="wrapper-menu-page-bottom">
+ <div id="menu-page">
+ <!-- NavigationBar -->
+ <H3><A name="Navigation-Overview"></A>Overview</H3>
+
+<UL class="alternate" type="square">
+ <LI><A href="http://www.apache.org/licenses/LICENSE-2.0.html" class="external-link" rel="nofollow">License</A></LI>
+ <LI><A href="sitemap.html" title="SiteMap">Site Map</A></LI>
+ <LI><A href="http://mail-archives.apache.org/mod_mbox/incubator-chemistry-dev/" class="external-link" rel="nofollow">Mailing List</A></LI>
+ <LI><A href="https://issues.apache.org/jira/browse/CMIS" class="external-link" rel="nofollow">Issue Tracking</A></LI>
+</UL>
+
+
+<H3><A name="Navigation-Search"></A>Search</H3>
+
+<DIV style="padding: 0px 0px 0px 20px;">
+<FORM action="http://www.google.com/search" method="get" style="font-size: 10px;">
+<INPUT name="ie" type="hidden" value="UTF-8"></INPUT>
+<INPUT name="oe" type="hidden" value="UTF-8"></INPUT>
+ <INPUT maxlength="255" name="q" size="12" type="text" value=""></INPUT>
+ <INPUT name="btnG" type="submit" value="Search"></INPUT>
+ <INPUT name="domains" type="hidden" value="incubator.apache.org/chemistry"></INPUT>
+ <INPUT name="sitesearch" type="hidden" value="incubator.apache.org/chemistry"></INPUT>
+</FORM>
+</DIV>
+
+
+<H3><A name="Navigation-CMISforJava"></A>CMIS for Java</H3>
+
+<UL class="alternate" type="square">
+ <LI><A href="opencmis.html" title="OpenCMIS">OpenCMIS</A></LI>
+ <LI><A href="opencmis-modules.html" title="OpenCMIS Modules">Overview</A></LI>
+ <LI><A href="opencmis-client-api.html" title="OpenCMIS Client API">Client API</A></LI>
+ <LI><A href="https://svn.apache.org/repos/asf/chemistry/opencmis/trunk" class="external-link" rel="nofollow">Source Code</A></LI>
+ <LI><A href="http://incubator.apache.org/chemistry/javadoc/index.html" class="external-link" rel="nofollow">JavaDoc</A></LI>
+</UL>
+
+
+<H3><A name="Navigation-CMISforPython"></A>CMIS for Python</H3>
+
+<UL class="alternate" type="square">
+ <LI><A href="cmislib.html" title="cmislib">cmislib</A></LI>
+ <LI><A href="http://incubator.apache.org/chemistry/cmislib-doc/" class="external-link" rel="nofollow">cmislib Documentation</A></LI>
+ <LI><A href="https://svn.apache.org/repos/asf/chemistry/cmislib/trunk" class="external-link" rel="nofollow">Source Code</A></LI>
+</UL>
+
+
+<H3><A name="Navigation-CMISforPHP"></A>CMIS for PHP</H3>
+
+<UL class="alternate" type="square">
+ <LI><A href="phpclient.html" title="phpclient">CMIS PHP Client</A></LI>
+ <LI><A href="https://svn.apache.org/repos/asf/chemistry/phpclient/trunk" class="external-link" rel="nofollow">Source Code</A></LI>
+</UL>
+
+
+<H3><A name="Navigation-CMISfor.NET"></A>CMIS for .NET</H3>
+
+<UL class="alternate" type="square">
+ <LI><A href="dotcmis.html" title="DotCMIS">DotCMIS</A></LI>
+ <LI><A href="https://svn.apache.org/repos/asf/chemistry/dotcmis/trunk" class="external-link" rel="nofollow">Source Code</A></LI>
+</UL>
+
+
+<H3><A name="Navigation-Sponsorship"></A>Sponsorship</H3>
+
+<UL class="alternate" type="square">
+ <LI><A href="http://www.apache.org/foundation/thanks.html" class="external-link" rel="nofollow">Thanks</A></LI>
+ <LI><A href="http://www.apache.org/foundation/sponsorship.html" class="external-link" rel="nofollow">Sponsoring Apache</A></LI>
+</UL>
+
+ <!-- NavigationBar -->
+ </div>
+ </div>
+ </div>
+ </div>
+ </td>
+ <td height="100%">
+ <!-- Content -->
+ <div class="wiki-content"><p><a name="OpenCMISFileShareRepository-OpenCMISFileShareRepository"></a></p>
+<h1 id="opencmis_fileshare_repository">OpenCMIS FileShare Repository</h1>
+<p><em>This repository is not intended for production use!</em></p>
+<p>The FileShare repository uses the file system as its back-end store and
+provides read/write access to content and metadata. In other words, it puts
+a CMIS interface on top of your file system.</p>
+<p>The repository is restricted by the capabilities of the file system and
+therefore does not support relationships, policies, document versions,
+multi-filing, un-filing and query.</p>
+<p>By default it provides a repository "test" that uses your home directory as
+the repository root. It requires authentication. A user "test" with the
+password "test" is pre-configured.</p>
+<p><a name="OpenCMISFileShareRepository-BuildandDeploytheTestRepository"></a></p>
+<h2 id="build_and_deploy_the_test_repository">Build and Deploy the Test Repository</h2>
+<ol>
+<li><a href="opencmis-how-to-build.html">Build OpenCMIS</a>
+.</li>
+<li>A ready-to-use WAR file should now exist in
+<em>/chemistry-opencmis-server/chemistry-opencmis-server-fileshare/target</em>.</li>
+<li>Deploy the WAR file to your favorite servlet engine.</li>
+<li>AtomPub endpoint: <em>http://<host>:<port>/<context>/atom</em>
+ Web Services endpoint:
+<em>http://<host>:<port>/<context>/services/RepositoryService</em></li>
+</ol>
+<p><a name="OpenCMISFileShareRepository-ConfiguretheRepository"></a></p>
+<h2 id="configure_the_repository">Configure the Repository</h2>
+<p>The configuration file in the WAR file is
+<em>/WEB-INF/classes/repository.properties</em>.</p>
+<div class="codehilite"><pre><span class="c1"># Don't touch this line</span>
+<span class="n">class</span><span class="o">=</span><span class="n">org</span><span class="o">.</span><span class="n">apache</span><span class="o">.</span><span class="n">chemistry</span><span class="o">.</span><span class="n">opencmis</span><span class="o">.</span><span class="n">fileshare</span><span class="o">.</span><span class="n">FileShareServiceFactory</span>
+
+<span class="c1"># Login configuration</span>
+<span class="c1"># login.<no> = <user>:<password></span>
+<span class="n">login</span><span class="mf">.1</span> <span class="o">=</span> <span class="n">test:test</span>
+<span class="n">login</span><span class="mf">.2</span> <span class="o">=</span> <span class="n">cmisuser:password</span>
+<span class="n">login</span><span class="mf">.3</span> <span class="o">=</span> <span class="n">reader:reader</span>
+
+<span class="c1"># Type defintions (see example-type.xml)</span>
+<span class="c1"># type.<no> = <absolute path to type definition XML file></span>
+<span class="n">type</span><span class="mf">.1</span> <span class="o">=</span> <span class="sr">/home/cmis</span><span class="n">test</span><span class="o">/</span><span class="n">type1</span><span class="o">.</span><span class="n">xml</span>
+<span class="n">type</span><span class="mf">.2</span> <span class="o">=</span> <span class="sr">/home/cmis</span><span class="n">test</span><span class="o">/</span><span class="n">type2</span><span class="o">.</span><span class="n">xml</span>
+
+<span class="c1"># Repository configuration</span>
+<span class="c1"># repository.<repositoryId> = <absolute path to repository root folder></span>
+<span class="c1"># repository.<repositoryId>.readwrite = <comma separated list of login</span>
+</pre></div>
+
+
+<p>names>
+ # repository.<repositoryId>.readonly = <comma separated list of login
+names>
+ repository.test = /home/cmistest/myreproot
+ repository.test.readwrite = test, cmisuser
+ repository.test.readonly = reader</p></div>
+ <!-- Content -->
+ </td>
+ </tr>
+ </table>
+ </td>
+ <td id="cell-2-2"> </td>
+ </tr>
+ <tr width="100%">
+ <td id="cell-3-0"> </td>
+ <td id="cell-3-1">
+ <div id="footer">
+ <!-- Footer -->
+ <div id="site-footer">
+
+ Apache Chemistry, Apache, the Apache feather logo, and the Apache
+ Chemistry project logo are trademarks of The Apache Software
+ Foundation.<br /><br />
+ Content Management Interoperability Services (CMIS) is an
+ <a href="http://www.oasis-open.org/committees/cmis/">OASIS</a>
+ specification.
+
+ </div>
+ <!-- Footer -->
+ </div>
+ </td>
+ <td id="cell-3-2"> </td>
+ </tr>
+ <tr width="100%">
+ <td id="cell-4-0"> </td>
+ <td id="cell-4-1"> </td>
+ <td id="cell-4-2"> </td>
+ </tr>
+ </table>
+</body>
+</html>
Modified: websites/staging/chemistry/trunk/content/opencmis-how-to-build.html
==============================================================================
--- websites/staging/chemistry/trunk/content/opencmis-how-to-build.html (original)
+++ websites/staging/chemistry/trunk/content/opencmis-how-to-build.html Thu Feb 17 17:18:07 2011
@@ -121,8 +121,7 @@ Apache Chemistry - OpenCMIS how-to-build
<LI><A href="opencmis.html" title="OpenCMIS">OpenCMIS</A></LI>
<LI><A href="opencmis-modules.html" title="OpenCMIS Modules">Overview</A></LI>
<LI><A href="opencmis-client-api.html" title="OpenCMIS Client API">Client API</A></LI>
- <LI><A href="https://svn.apache.org/repos/asf/incubator/chemistry/opencmis/trunk" class="external-link" rel="nofollow">Source Code</A></LI>
-
+ <LI><A href="https://svn.apache.org/repos/asf/chemistry/opencmis/trunk" class="external-link" rel="nofollow">Source Code</A></LI>
<LI><A href="http://incubator.apache.org/chemistry/javadoc/index.html" class="external-link" rel="nofollow">JavaDoc</A></LI>
</UL>
@@ -132,8 +131,7 @@ Apache Chemistry - OpenCMIS how-to-build
<UL class="alternate" type="square">
<LI><A href="cmislib.html" title="cmislib">cmislib</A></LI>
<LI><A href="http://incubator.apache.org/chemistry/cmislib-doc/" class="external-link" rel="nofollow">cmislib Documentation</A></LI>
- <LI><A href="https://svn.apache.org/repos/asf/incubator/chemistry/cmislib/trunk" class="external-link" rel="nofollow">Source Code</A></LI>
-
+ <LI><A href="https://svn.apache.org/repos/asf/chemistry/cmislib/trunk" class="external-link" rel="nofollow">Source Code</A></LI>
</UL>
@@ -141,7 +139,7 @@ Apache Chemistry - OpenCMIS how-to-build
<UL class="alternate" type="square">
<LI><A href="phpclient.html" title="phpclient">CMIS PHP Client</A></LI>
- <LI><A href="https://svn.apache.org/repos/asf/incubator/chemistry/phpclient/trunk" class="external-link" rel="nofollow">Source Code</A></LI>
+ <LI><A href="https://svn.apache.org/repos/asf/chemistry/phpclient/trunk" class="external-link" rel="nofollow">Source Code</A></LI>
</UL>
@@ -149,7 +147,7 @@ Apache Chemistry - OpenCMIS how-to-build
<UL class="alternate" type="square">
<LI><A href="dotcmis.html" title="DotCMIS">DotCMIS</A></LI>
- <LI><A href="https://svn.apache.org/repos/asf/incubator/chemistry/dotcmis/trunk" class="external-link" rel="nofollow">Source Code</A></LI>
+ <LI><A href="https://svn.apache.org/repos/asf/chemistry/dotcmis/trunk" class="external-link" rel="nofollow">Source Code</A></LI>
</UL>
@@ -157,7 +155,6 @@ Apache Chemistry - OpenCMIS how-to-build
<UL class="alternate" type="square">
<LI><A href="http://www.apache.org/foundation/thanks.html" class="external-link" rel="nofollow">Thanks</A></LI>
-
<LI><A href="http://www.apache.org/foundation/sponsorship.html" class="external-link" rel="nofollow">Sponsoring Apache</A></LI>
</UL>