chemistry-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From n...@apache.org
Subject svn commit: r1071656 [1/5] - in /incubator/chemistry/site/trunk: content/ content/images/ content/resources/ lib/ templates/
Date Thu, 17 Feb 2011 15:49:39 GMT
Author: nick
Date: Thu Feb 17 15:49:37 2011
New Revision: 1071656

URL: http://svn.apache.org/viewvc?rev=1071656&view=rev
Log:
Initial import of the site to the CMS from a CWiki export

Added:
    incubator/chemistry/site/trunk/content/banner.mdtext
    incubator/chemistry/site/trunk/content/chemistry-and-opencmis-comparison.mdtext
    incubator/chemistry/site/trunk/content/chemistry-and-opencmis-technical-comparison.mdtext
    incubator/chemistry/site/trunk/content/chemistry-api-examples.mdtext
    incubator/chemistry/site/trunk/content/chemistry-api.mdtext
    incubator/chemistry/site/trunk/content/cmis-workbench.mdtext
    incubator/chemistry/site/trunk/content/cmislib.mdtext
    incubator/chemistry/site/trunk/content/currentprojectstatus.mdtext
    incubator/chemistry/site/trunk/content/dotcmis.mdtext
    incubator/chemistry/site/trunk/content/f2f-meeting-april-2010.mdtext
    incubator/chemistry/site/trunk/content/getting-started-with-dotcmis.mdtext
    incubator/chemistry/site/trunk/content/how-to-build-a-server.mdtext
    incubator/chemistry/site/trunk/content/images/
    incubator/chemistry/site/trunk/content/images/chemistry.ai
    incubator/chemistry/site/trunk/content/images/chemistry.svg
    incubator/chemistry/site/trunk/content/images/chemistry_black.png   (with props)
    incubator/chemistry/site/trunk/content/images/chemistry_black_trans.png   (with props)
    incubator/chemistry/site/trunk/content/images/chemistry_logo.png   (with props)
    incubator/chemistry/site/trunk/content/images/chemistry_logo_small.png   (with props)
    incubator/chemistry/site/trunk/content/images/chemistry_white.png   (with props)
    incubator/chemistry/site/trunk/content/images/chemistry_white_trans.png   (with props)
    incubator/chemistry/site/trunk/content/images/left-box-bottom.png   (with props)
    incubator/chemistry/site/trunk/content/images/left-box-right.png   (with props)
    incubator/chemistry/site/trunk/content/images/left-box-top.png   (with props)
    incubator/chemistry/site/trunk/content/index.mdtext
    incubator/chemistry/site/trunk/content/internal.mdtext
    incubator/chemistry/site/trunk/content/navigation.mdtext
    incubator/chemistry/site/trunk/content/opencmis-api-examples.mdtext
    incubator/chemistry/site/trunk/content/opencmis-browser.mdtext
    incubator/chemistry/site/trunk/content/opencmis-client-api.mdtext
    incubator/chemistry/site/trunk/content/opencmis-client-bindings.mdtext
    incubator/chemistry/site/trunk/content/opencmis-cookbook.mdtext
    incubator/chemistry/site/trunk/content/opencmis-fileshare-repository.mdtext
    incubator/chemistry/site/trunk/content/opencmis-how-to-build.mdtext
    incubator/chemistry/site/trunk/content/opencmis-inmemory-repository.mdtext
    incubator/chemistry/site/trunk/content/opencmis-maven-release-documentation.mdtext
    incubator/chemistry/site/trunk/content/opencmis-modules.mdtext
    incubator/chemistry/site/trunk/content/opencmis-release-documentation.mdtext
    incubator/chemistry/site/trunk/content/opencmis-server-framework.mdtext
    incubator/chemistry/site/trunk/content/opencmis-session-parameters.mdtext
    incubator/chemistry/site/trunk/content/opencmis-swing-client.mdtext
    incubator/chemistry/site/trunk/content/opencmis.mdtext
    incubator/chemistry/site/trunk/content/phpclient.mdtext
    incubator/chemistry/site/trunk/content/phpfunctioncoverage.mdtext
    incubator/chemistry/site/trunk/content/projects-using-opencmis.mdtext
    incubator/chemistry/site/trunk/content/queryintegration.mdtext
    incubator/chemistry/site/trunk/content/quicklinks.mdtext
    incubator/chemistry/site/trunk/content/resources/
    incubator/chemistry/site/trunk/content/resources/site.css
    incubator/chemistry/site/trunk/content/resources/space.js
    incubator/chemistry/site/trunk/content/site.mdtext
    incubator/chemistry/site/trunk/content/sitemap.mdtext
    incubator/chemistry/site/trunk/content/testsuitedescription.mdtext
    incubator/chemistry/site/trunk/lib/path.pm
    incubator/chemistry/site/trunk/lib/view.pm
    incubator/chemistry/site/trunk/templates/navigation_bar.html
    incubator/chemistry/site/trunk/templates/standard.html
    incubator/chemistry/site/trunk/templates/standard_markdown.html

Added: incubator/chemistry/site/trunk/content/banner.mdtext
URL: http://svn.apache.org/viewvc/incubator/chemistry/site/trunk/content/banner.mdtext?rev=1071656&view=auto
==============================================================================
--- incubator/chemistry/site/trunk/content/banner.mdtext (added)
+++ incubator/chemistry/site/trunk/content/banner.mdtext Thu Feb 17 15:49:37 2011
@@ -0,0 +1,20 @@
+Title: Banner
+{html:output=html|noPanel=true}
+<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>
+{html}

Added: incubator/chemistry/site/trunk/content/chemistry-and-opencmis-comparison.mdtext
URL: http://svn.apache.org/viewvc/incubator/chemistry/site/trunk/content/chemistry-and-opencmis-comparison.mdtext?rev=1071656&view=auto
==============================================================================
--- incubator/chemistry/site/trunk/content/chemistry-and-opencmis-comparison.mdtext (added)
+++ incubator/chemistry/site/trunk/content/chemistry-and-opencmis-comparison.mdtext Thu Feb 17 15:49:37 2011
@@ -0,0 +1,39 @@
+Title: Chemistry and OpenCMIS Comparison
+<a name="ChemistryandOpenCMISComparison-ChemistryandOpenCMISComparison"></a>
+# Chemistry and OpenCMIS Comparison
+
+This is a high-level comparison of Chemistry and OpenCMIS.
+
+<table>
+<tr><th> </th><th> Chemistry </th><th> OpenCMIS </th></tr>
+  
+  
+ Transient model - not yet implemented |
+<tr><td> Low level Atom Pub client </td><td> nearly complete </td><td> complete (based on StAX +
+JAX-B) </td></tr>
+<tr><td> Low level Web Services client </td><td> not yet </td><td> complete (based on JAX-WS RI) </td></tr>
+<tr><td> CMIS Extension support on the client side </td><td> no </td><td> yes </td></tr>
+<tr><td> Repository Info caching </td><td> yes </td><td> yes </td></tr>
+<tr><td> Type caching </td><td> yes </td><td> yes </td></tr>
+<tr><td> Object caching </td><td> not yet </td><td> on the high-level client layer </td></tr>
+<tr><td> AtomPub server </td><td> nearly complete (based on Abdera) </td><td> complete (based on
+StAX + JAX-B) </td></tr>
+<tr><td> Web Services server </td><td> partial (based on Apache CXF) </td><td> complete (based on
+JAX-WS RI) </td></tr>
+<tr><td> CMIS Extension support on the server side </td><td> no </td><td> yes </td></tr>
+<tr><td> Query parser </td><td> complete (ANTLR3) </td><td> not yet </td></tr>
+<tr><td> Fulltext query parser </td><td> not yet </td><td> not yet </td></tr>
+<tr><td> In-memory repository </td><td> yes </td><td> yes </td></tr>
+<tr><td> JCR connector </td><td> partial </td><td> no </td></tr>
+<tr><td> File system repository </td><td> no </td><td> yes </td></tr>
+<tr><td> Shell tool </td><td> yes </td><td> partial </td></tr>
+<tr><td> Browser </td><td> no </td><td> AtomPub only </td></tr>
+<tr><td> TCK </td><td> comprehensive, AtomPub only </td><td> test suite covering 2/3 of the spec,
+binding independent </td></tr>
+  
+  
+  
+  
+  
+  
+ Open Text (client and server, in development) |

Added: incubator/chemistry/site/trunk/content/chemistry-and-opencmis-technical-comparison.mdtext
URL: http://svn.apache.org/viewvc/incubator/chemistry/site/trunk/content/chemistry-and-opencmis-technical-comparison.mdtext?rev=1071656&view=auto
==============================================================================
--- incubator/chemistry/site/trunk/content/chemistry-and-opencmis-technical-comparison.mdtext (added)
+++ incubator/chemistry/site/trunk/content/chemistry-and-opencmis-technical-comparison.mdtext Thu Feb 17 15:49:37 2011
@@ -0,0 +1,320 @@
+Title: Chemistry and OpenCMIS Technical Comparison
+This is a technical comparison of the interfaces and classes present in
+both Chemistry and OpenCMIS.
+
+<a name="ChemistryandOpenCMISTechnicalComparison-Concepts"></a>
+# Concepts
+
+In Chemistry the session and the *Connection* are the same thing. The
+connection has different implementations depending on the way it's
+connected to an underlying protocol. The connection implements methods from
+the high-level API, and also gives access to the low-level SPI implementing
+different methods.
+
+In OpenCMIS the *Session* is a semi-generic context-like object
+(*PersistentSessionImpl*). Eventually, there will be two *Session*
+implementations. In the persistent model (almost) all changes are
+immediately passed to the repository. In the transient model all changes
+are cached until *save()* is called on the *Session* object. A
+*Session* can be "connected" using parameters to instantiate internally a
+low-level provider (*CmisProvider*). The provider holds configuration
+parameters that enable it to create a low-level SPI through a
+*CmisSpiFactory*. Through the SPI you can get to the various SPI
+**Service* implementations.
+
+
+
+<a name="ChemistryandOpenCMISTechnicalComparison-Repositoryaccess"></a>
+# Repository access
+
+In Chemistry you get to a repository instance based on general repository
+parameters, and from it you can open connections with a username and
+password. The repository instance can be introspected (types, etc) without
+opening a session.
+
+In OpenCMIS, you get a session factory, from which you open a session, from
+which you can get to the repository info (types, etc.). All connection
+parameters are passed to the *createSession()* method, including
+repository URL.
+
+
+
+<a name="ChemistryandOpenCMISTechnicalComparison-Registeringarepository"></a>
+### Registering a repository
+
+* Chemistry:
+
+    Map<String, Serializable> params = ...; // URL, optional user, password
+    RepositoryService repositoryService = new APPRepositoryService(url,
+params);
+    RepositoryManager.getInstance().registerService(repositoryService);
+
+
+* OpenCMIS
+No global registration. A JNDI-based method or dependency injection is
+suggested but not implemented.
+
+
+<a name="ChemistryandOpenCMISTechnicalComparison-Gettingarepository/sessionfactory"></a>
+### Getting a repository / session factory
+
+* Chemistry
+
+    Repository repository =
+RepositoryManager.getInstance().getRepository("myrepo");
+
+
+* OpenCMIS
+
+    SessionFactory sessionFactory = SessionFactoryImpl.newInstance();
+
+
+
+<a name="ChemistryandOpenCMISTechnicalComparison-Gettingasession/connection"></a>
+### Getting a session / connection
+
+* Chemistry
+
+    Map<String, String> params = ...; // user, password
+    Connection conn = repository.getConnection(params);
+
+
+* OpenCMIS
+
+    Map<String, String> params = ...; // URL, user, password
+    Session session = sessionFactory.createSession(parameters);
+
+
+
+<a name="ChemistryandOpenCMISTechnicalComparison-Internallayerhierarchy(OpenCMIS)"></a>
+### Internal layer hierarchy (OpenCMIS)
+
+(All classes and interfaces in bold are for public use. Everything else
+belongs to the internal machinery.)
+
+  
+  
+
+  
+  
+
+  
+  
+
+  
+  
+
+  
+  
+
+  
+  
+
+  
+  
+
+  
+  
+
+  
+  
+
+  
+  
+
+  
+  
+
+  
+  
+
+
+
+From an application point of view it easy to use:
+- If you want to use the client API, create a *Session* object with
+*SessionFactoryImpl* and don't bother about the rest.
+- If you want to use the low-level provider API, create a *CmisProvider*
+object with *CmisProviderFactory* and don't bother about the rest.
+
+
+
+<a name="ChemistryandOpenCMISTechnicalComparison-High-levelAPIs"></a>
+# High-level APIs
+
+
+From a connection/session you can get the root folder and express
+high-level operations
+
+* Chemistry
+
+    Folder root = conn.getRootFolder();
+    List<CMISObject> children = root.getChildren();
+
+
+
+* OpenCMIS
+
+    Folder root = session.getRootFolder();
+    PagingList<CmisObject> list = root.getChildren(1);
+
+
+
+<a name="ChemistryandOpenCMISTechnicalComparison-Baseobject"></a>
+### Base object
+
+Contains getters and setters for properties, with convenience methods.
+Contains methods like *delete()* etc. that pass through to the
+SPI/provider.
+
+* Chemistry
+The base interface is *CMISObject*. It flushes changes on *save()*.
+
+* OpenCMIS
+The base interface is *CmisObject*. It flushes property changes on
+*updateProperties()*.
+
+<a name="ChemistryandOpenCMISTechnicalComparison-SpecializedObjects"></a>
+### Specialized Objects
+
+Implement additional object-oriented methods depending on the interfaces.
+
+* Chemistry
+*Folder*, *Document*, *Relationship*, *Policy*
+
+* OpenCMIS
+*FileableCmisObject*, *Folder*, *Document*, *Relationship*,
+*Policy*
+
+
+<a name="ChemistryandOpenCMISTechnicalComparison-Paging"></a>
+### Paging
+
+
+* Chemistry
+ListPage: a page
+ = List + getHasMoreItems + getNumItems
+Implemented by SimpleListPage. This is a data transfert object.
+
+* OpenCMIS
+PagingList: a list of pages which are themselves lists
+ = Iterable<List> + getNumItems + getMaxItemsPerPage + size + get(page)
+AbstractPagingList is the base class. This is an active object that can
+fetch new pages by implementing a fetchPage() method that returns a
+FetchResult (which is equivalent to Chemistry's ListPage). It also has a
+LRU cache for pages which is disabled by default.
+
+
+
+<a name="ChemistryandOpenCMISTechnicalComparison-ProviderAPIs"></a>
+# Provider APIs
+
+This is called "SPI" in Chemistry, and "Provider" in OpenCMIS.
+
+<a name="ChemistryandOpenCMISTechnicalComparison-Servicesinterfaces"></a>
+### Services interfaces
+
+* Chemistry
+All CMIS services are implemented under the single interface *SPI*. The
+SPI uses classes and interfaces designed for Java.
+
+* OpenCMIS
+From a provider you get the various CMIS services as different interfaces
+(*RepositoryService*, *ObjectService*, *NavigationService*, etc.)
+using getters. The interfaces and classes are generic and reflect the CMIS
+schema.
+
+<a name="ChemistryandOpenCMISTechnicalComparison-High-levelvslow-levelvsimplementation"></a>
+### High-level vs low-level vs implementation
+
+* Chemistry
+The high-level and SPI interfaces are mutualized (ex:
+org.apache.chemistry.RepositoryInfo).
+{color:red}Florian> For some objects there are different interfaces on
+these two levels. For example, the step from *ObjectEntry* to
+*CMISObject* is comparable to OpenCMIS' step from the provider API to the
+client API.{color}
+{color:red}Florian> JAXB objects will be necessary for Web Services,
+similar to OpenCMIS.{color} 
+
+* OpenCMIS
+For the same concept OpenCMIS manipulates three different interfaces and
+their implementations:
+** the one in the high-level client API (ex:
+*org.apache.opencmis.client.api.repository.RepositoryInfo*, convenient
+access to data),
+** the one in the provider (ex:
+*org.apache.opencmis.commons.provider.RepositoryInfoData*, access to all
+extension points),
+** the one from JAXB (*CmisRepositoryInfoType*).
+
+<a name="ChemistryandOpenCMISTechnicalComparison-Commonmethodparameters"></a>
+### Common method parameters
+
+* Chemistry
+The SPI bundles together a number of call parameters that are used often
+together: *Inclusion* contains properties and rendition filters,
+relationship inclusion, flags for allowable actions, policies, acls. An
+*Inclusion* is passed to the relevant SPI methods.
+
+* OpenCMIS
+A default *OperationContext* on the session is used to specify these call
+parameters. A variant of the high-level methods taking an explicit
+*OperationContext* is also available. Furthermore, *OperationContext*
+controls the caching behavior of the objects retrieved by the call. In the
+provider interfaces everything is explicit, following the CMIS
+specification.
+
+
+<a name="ChemistryandOpenCMISTechnicalComparison-Objectdata"></a>
+### Object data
+
+The base object contains information about one object: properties,
+allowable actions, relationships, renditions, etc.
+
+* Chemistry
+*ObjectEntry* is the basic class.
+It also contains change info and path segments, depending on how it was
+retrieved.
+
+* OpenCMIS
+*ObjectData* is the basic class.
+To provide it context, it is used by delegation is more complex
+constructions: *ObjectInFolderData*, *ObjectInFolderContainer*,
+*ObjectInFolderList*, *ObjectParentData*, *ObjectList*, etc. thus
+reflect the CMIS schema and allow access to all extension points.
+
+
+<a name="ChemistryandOpenCMISTechnicalComparison-Variousenums"></a>
+### Various enums
+
+Relationship direction:
+
+* Chemistry
+Defines them according to best Java use. For instance
+*RelationshipDirection* can be 'source', 'target', 'either' or null.
+There is no separate *IncludeRelationships*.
+
+* OpenCMIS
+Mimicks JAXB. *RelationshipDirection* and *IncludeRelationships* are
+different.
+
+Property type:
+
+* Chemistry
+*PropertyType* is a class allowing definition of new types, for
+specialized backends.
+
+* OpenCMIS
+*PropertyType* is an enum following JAXB.
+
+Allowable actions:
+
+* Chemistry
+*AllowableActions* is a set of *QNames*.
+
+* OpenCMIS
+*AllowableActions* is a map from *String* (non-namespaced) to
+*Boolean*.
+
+
+

Added: incubator/chemistry/site/trunk/content/chemistry-api-examples.mdtext
URL: http://svn.apache.org/viewvc/incubator/chemistry/site/trunk/content/chemistry-api-examples.mdtext?rev=1071656&view=auto
==============================================================================
--- incubator/chemistry/site/trunk/content/chemistry-api-examples.mdtext (added)
+++ incubator/chemistry/site/trunk/content/chemistry-api-examples.mdtext Thu Feb 17 15:49:37 2011
@@ -0,0 +1,100 @@
+Title: Chemistry API Examples
+{color:#ff0000}{*}{_}This document is outdated\!_{*}{color}
+{color:#ff0000}{*}{_}The former Chemistry library and OpenCMIS were merged
+into one Java library (OpenCMIS)._{*}{color}
+{color:#ff0000}{*}{_}Chemistry is the name of the Apache CMIS
+implementation project, while OpenCMIS is the name of Chemistry's Java
+implementation._{*}{color}
+
+<a name="ChemistryAPIExamples-RepositoryServiceandRepository"></a>
+## RepositoryService and Repository
+
+Because CMIS allows several repositories to live in the same server, the
+information about the remote server and how to talk to it is encapsulated
+in a RepositoryService. The RepositoryManager is the global registry of
+RepositoryServices, and from a RepositoryService you can get to several
+Repositories.
+
+Your code can either instantiate a protocol-specific version of the
+Repository interface:
+
+<DIV class="code panel" style="border-style: solid;border-width: 1px;"><DIV class="codeHeader panelHeader" style="border-bottom-width: 1px;border-bottom-style: solid;"><B>Instantiating an AtomPub repository service</B></DIV><DIV class="codeContent panelContent">
+    RepositoryService repositoryService = new APPRepositoryService(url, null);
+
+
+<DIV class="code panel" style="border-style: solid;border-width: 1px;"><DIV class="codeHeader panelHeader" style="border-bottom-width: 1px;border-bottom-style: solid;"><B>Getting to a repository directly</B></DIV><DIV class="codeContent panelContent">
+    Repository repository = repositoryService.getRepository("myrepo");
+
+
+Or rely on it being already registered and look up the repository by name:
+
+<DIV class="code panel" style="border-style: solid;border-width: 1px;"><DIV class="codeHeader panelHeader" style="border-bottom-width: 1px;border-bottom-style: solid;"><B>Registering a repository service</B></DIV><DIV class="codeContent panelContent">
+    RepositoryManager.getInstance().registerService(repositoryService);
+
+
+<DIV class="code panel" style="border-style: solid;border-width: 1px;"><DIV class="codeHeader panelHeader" style="border-bottom-width: 1px;border-bottom-style: solid;"><B>Looking up a repository by name</B></DIV><DIV class="codeContent panelContent">
+    Repository repository =
+RepositoryManager.getInstance().getRepository("myrepo");
+
+
+
+<a name="ChemistryAPIExamples-High-level,object-orientedAPI:Connection,Folder,Document"></a>
+## High-level, object-oriented API: Connection, Folder, Document
+
+From a Repository you can get a new Connection, get the root folder, get
+the first of its children and change its description:
+
+<DIV class="code panel" style="border-style: solid;border-width: 1px;"><DIV class="codeHeader panelHeader" style="border-bottom-width: 1px;border-bottom-style: solid;"><B>Object-oriented API</B></DIV><DIV class="codeContent panelContent">
+    Map<String, Serializable> params = new HashMap<String, Serializable>();
+    params.put(Repository.PARAM_USERNAME, "username");
+    params.put(Repository.PARAM_PASSWORD, "password");
+    
+    Connection conn = repository.getConnection(params);
+    try {
+        Folder root = conn.getRootFolder();
+        List<CMISObject> children = root.getChildren();
+        for (CMISObject child : children) {
+    	System.out.println(child.getName());
+        }
+        Document doc = (Document) children.get(0);
+        System.out.println("Child id: " + child.getId());
+        doc.setValue("description", "First child");
+        doc.save();
+    } finally {
+        conn.close();
+    }
+
+
+<a name="ChemistryAPIExamples-Low-levelSPI:SPI,ObjectEntry"></a>
+## Low-level SPI: SPI, ObjectEntry
+
+Here you access the DTO for the object itself. This example does the same
+thing as above:
+
+<DIV class="code panel" style="border-style: solid;border-width: 1px;"><DIV class="codeHeader panelHeader" style="border-bottom-width: 1px;border-bottom-style: solid;"><B>Object-oriented API</B></DIV><DIV class="codeContent panelContent">
+    Map<String, Serializable> params = new HashMap<String, Serializable>();
+    params.put(Repository.PARAM_USERNAME, "username");
+    params.put(Repository.PARAM_PASSWORD, "password");
+    
+    SPI spi = repository.getSPI(params);
+    try {
+        ObjectId rootId = repository.getInfo().getRootFolderId();
+        ListPage<ObjectEntry> page = spi.getChildren(rootId, null, null, null);
+        for (ObjectEntry entry : page) {
+    	System.out.println(entry.getValue(Property.NAME));
+        }
+        ObjectId docId = page.get(0); // ObjectEntry implements ObjectId
+        System.out.println("Child id: " + docId.getId());
+        Map<String, Serializable> props = new HashMap<String, Serializable>();
+        props.put("description", "First child");
+        spi.updateProperties(docId, null, props);	 
+    } finally {
+        spi.close();
+    }
+
+
+
+
+
+----
+

Added: incubator/chemistry/site/trunk/content/chemistry-api.mdtext
URL: http://svn.apache.org/viewvc/incubator/chemistry/site/trunk/content/chemistry-api.mdtext?rev=1071656&view=auto
==============================================================================
--- incubator/chemistry/site/trunk/content/chemistry-api.mdtext (added)
+++ incubator/chemistry/site/trunk/content/chemistry-api.mdtext Thu Feb 17 15:49:37 2011
@@ -0,0 +1,96 @@
+Title: Chemistry API
+{color:#ff0000}{*}{_}This document is outdated\!_{*}{color}
+{color:#ff0000}{*}{_}The former Chemistry library and OpenCMIS were merged
+into one Java library (OpenCMIS)._{*}{color}
+{color:#ff0000}{*}{_}Chemistry is the name of the Apache CMIS
+implementation project, while OpenCMIS is the name of Chemistry's Java
+implementation._{*}{color}
+
+The Chemistry API encompasses two levels:
+
+    * a low-level SPI between a client and a server that mirrors the CMIS
+specification closely (it is expected that the SPI will be used when either
+the client or the server implements one of the HTTP protocols defined in
+CMIS),
+
+    * a high-level API that wraps the SPI to provide more object-oriented
+notions of connections, folders and documents, and that hides the
+nitty-gritty details of the protocols.
+
+Both levels of APIs are based on a common set of low-level constants and
+enums tied to the CMIS domain model (property types, capabilities, etc.).
+
+You will find [example uses](chemistry-api-examples.html)
+ of the API on a [separate page|Chemistry API Examples]
+.
+
+
+<a name="ChemistryAPI-Repository"></a>
+## Repository
+
+A *Repository* is the main access point to a remote CMIS repository. You
+get a Repository from the static *RepositoryManager*, which holds instances
+of local or remote repositories, registered there by bootstrap application
+code.
+
+From a Repository you can get to the object types and property definitions
+(using the *TypeManager* interface), and create actual connections to the
+repository. A connection can be high-level (Connection), or low-level
+(SPI). A Connection is always tied to a low-level SPI.
+
+
+
+<a name="ChemistryAPI-Datatransferobjectsandconstants"></a>
+## Data transfer objects and constants
+
+These are used both by Connections and SPIs.
+
+* *ObjectId*: this holds the id of an object.
+
+* *Type*, *PropertyDefinition*, *PropertyType*: type-related interfaces and
+constants.
+
+* *ObjectEntry*: this holds data about an object: mainly its type and the
+values of its properties.
+
+* *ContentStream*: a content stream, basically a stream, MIME type,
+filename and length.
+
+* *Rendition*: information about a rendition (kind, id, etc.).
+
+* *ACLPropagation*, *BaseType*, *CapabilityACL*, *CapabilityChange*,
+*CapabilityJoin*, *CapabilityQuery*, *CapabilityRendition*, *ChangeType*,
+*ContentStreamPresence*, *PermissionsSupported*, *RelationshipDirection*,
+*RepositoryCapabilities*, *Unfiling*, *Updatability*, *VersioningState*:
+various enums used in the SPI methods.
+
+* *Inclusion*: a simple record holding information about properties or
+rendition filter, whether relationships, allowable actions, policies or
+ACLs are requested; this is passed to a number of SPI methods.
+
+* *ListPage*, *Tree*: datastructures returned from SPI calls, when the
+standard Java Lists or Sets are not enough to express what is defined in
+the CMIS domain model.
+
+
+
+
+<a name="ChemistryAPI-SPI"></a>
+## SPI
+
+The *[SPI](http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-api/src/main/java/org/apache/chemistry/SPI.java?view=markup)
+* interface describes the set of methods that can be done on a CMIS server.
+They follow closely the domain model defined by CMIS.
+
+
+
+<a name="ChemistryAPI-Connection"></a>
+## Connection
+
+The *[Connection](http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-api/src/main/java/org/apache/chemistry/Connection.java?view=markup)
+* interface is the object-oriented entry point to CMIS. From it you get to
+the various *Document*, *Folder*, *Relationship*, *Policy*, with
+*CMISObject* as their base class.
+
+----
+

Added: incubator/chemistry/site/trunk/content/cmis-workbench.mdtext
URL: http://svn.apache.org/viewvc/incubator/chemistry/site/trunk/content/cmis-workbench.mdtext?rev=1071656&view=auto
==============================================================================
--- incubator/chemistry/site/trunk/content/cmis-workbench.mdtext (added)
+++ incubator/chemistry/site/trunk/content/cmis-workbench.mdtext Thu Feb 17 15:49:37 2011
@@ -0,0 +1,83 @@
+Title: CMIS Workbench
+<a name="CMISWorkbench-CMISWorkbench"></a>
+# CMIS Workbench
+
+CMIS Workbench is CMIS desktop client for developers. It's a repository
+browser and an interactive testbed for the OpenCMIS client API.
+
+
+<a name="CMISWorkbench-BuildtheCMISWorkbench"></a>
+## Build the CMIS Workbench
+
+1. [Build the OpenCMIS Client Libraries](opencmis-how-to-build.html)
+.
+1. CMIS Workbench zip and tar.gz files should now exist in */target*.
+1. Unpack one of them into an empty directory
+1. Run workbench.sh (UNIX) or workbench.bat (Windows)
+
+
+<a name="CMISWorkbench-DownloadtheCMISWorkbench"></a>
+## Download the CMIS Workbench
+
+You can download the [latest release](http://www.apache.org/dyn/closer.cgi/incubator/chemistry/opencmis/0.2.0-incubating/chemistry-opencmis-workbench-0.2.0-incubating-full.zip)
+ or a [nightly build|https://hudson.apache.org/hudson/job/Chemistry%20-%20OpenCMIS%20-%20install/lastSuccessfulBuild/org.apache.chemistry.opencmis$chemistry-opencmis-workbench/]
+ with the latest fixes and features.
+
+
+<a name="CMISWorkbench-PropertiesReference"></a>
+## Properties Reference
+
+The CMIS Workbench can be configured through system properties or
+additional properties in the expert login dialog.
+
+<a name="CMISWorkbench-Logindialog"></a>
+### Login dialog
+
+<table>
+<tr><th>System Property</th><th>Function</th></tr>
+<tr><td>cmis.workbench.url</td><td>preset URL</td></tr>
+<tr><td>cmis.workbench.user</td><td>preset user name</td></tr>
+<tr><td>cmis.workbench.password</td><td>preset password</td></tr>
+<tr><td>cmis.workbench.binding</td><td>preset binding (atompub/webservices)</td></tr>
+<tr><td>cmis.workbench.authentication</td><td>preset authentication method
+(none/standard/ntlm)</td></tr>
+<tr><td>cmis.workbench.compression</td><td>preset compression (on/off)</td></tr>
+</table>
+
+<a name="CMISWorkbench-Folderoperationcontext"></a>
+### Folder operation context
+
+<table>
+<tr><th>System Property</th><th>Function</th></tr>
+<tr><td>cmis.workbench.folder.filter</td><td> </td></tr>
+<tr><td>cmis.workbench.folder.includeAcls</td><td> </td></tr>
+<tr><td>cmis.workbench.folder.includeAllowableActions</td><td> </td></tr>
+<tr><td>cmis.workbench.folder.includePolicies</td><td> </td></tr>
+<tr><td>cmis.workbench.folder.includeRelationships</td><td> </td></tr>
+<tr><td>cmis.workbench.folder.renditionFilter</td><td> </td></tr>
+<tr><td>cmis.workbench.folder.orderBy</td><td> </td></tr>
+<tr><td>cmis.workbench.folder.maxItemsPerPage</td><td> </td></tr>
+</table>
+
+
+<a name="CMISWorkbench-Objectoperationcontext"></a>
+### Object operation context
+
+<table>
+<tr><th>System Property</th><th>Function</th></tr>
+<tr><td>cmis.workbench.object.filter</td><td> </td></tr>
+<tr><td>cmis.workbench.object.includeAcls</td><td> </td></tr>
+<tr><td>cmis.workbench.object.includeAllowableActions</td><td> </td></tr>
+<tr><td>cmis.workbench.object.includePolicies</td><td> </td></tr>
+<tr><td>cmis.workbench.object.includeRelationships</td><td> </td></tr>
+<tr><td>cmis.workbench.object.renditionFilter</td><td> </td></tr>
+</table>
+
+
+<a name="CMISWorkbench-Others"></a>
+### Others
+
+<table>
+<tr><th>System Property</th><th>Function</th></tr>
+<tr><td>cmis.workbench.acceptSelfSignedCertificates</td><td>disable SSL certificate check
+(true/false)</td></tr>

Added: incubator/chemistry/site/trunk/content/cmislib.mdtext
URL: http://svn.apache.org/viewvc/incubator/chemistry/site/trunk/content/cmislib.mdtext?rev=1071656&view=auto
==============================================================================
--- incubator/chemistry/site/trunk/content/cmislib.mdtext (added)
+++ incubator/chemistry/site/trunk/content/cmislib.mdtext Thu Feb 17 15:49:37 2011
@@ -0,0 +1,49 @@
+Title: cmislib
+Thanks for using cmislib, the CMIS client library for Python.
+
+The goal of this library is to provide an interoperable API to CMIS
+repositories such as Alfresco, Nuxeo, KnowledgeTree, MS SharePoint, EMC
+Documentum, and any other content repository that is CMIS-compliant.
+
+More info on CMIS can be found at: [http://www.oasis-open.org/committees/cmis](http://www.oasis-open.org/committees/cmis)
+
+<a name="cmislib-Getcmislib"></a>
+## Get cmislib
+
+<a name="cmislib-cmislibdownload"></a>
+### cmislib download
+
+You can download the latest cmislib releases here.
+
+<a name="cmislib-0.4[FullDownloadpage](http://www.apache.org/dyn/closer.cgi/incubator/chemistry/cmislib/0.4-incubating/)"></a>
+#### 0.4 [Full Download page|http://www.apache.org/dyn/closer.cgi/incubator/chemistry/cmislib/0.4-incubating/]
+
+<table>
+<tr><th> Package </th><th> egg </th><th> zip </th><th> tar.gz </th></tr>
+<tr><td> cmislib client </td><td> [Download](http://www.apache.org/dyn/closer.cgi/incubator/chemistry/cmislib/0.4-incubating/cmislib-0.4-incubating-py2.6.egg)
+ </td><td> [Download</td><td>http://www.apache.org/dyn/closer.cgi/incubator/chemistry/cmislib/0.4-incubating/cmislib-0.4-incubating.zip]
+ </td><td> [Download</td><td>http://www.apache.org/dyn/closer.cgi/incubator/chemistry/cmislib/0.4-incubating/cmislib-0.4-incubating.tar.gz]
+ </td></tr>
+</table>
+
+<a name="cmislib-SOURCE"></a>
+## SOURCE
+
+The source code for this project lives at [https://svn.apache.org/repos/asf/incubator/chemistry/cmislib](https://svn.apache.org/repos/asf/incubator/chemistry/cmislib)
+.
+
+<a name="cmislib-TESTS"></a>
+## TESTS
+
+There are unit tests available in the tests directory. They require access
+to a CMIS provider. There are many freely-available CMIS repositories
+available to run locally or that are hosted.
+
+<a name="cmislib-DOC"></a>
+## DOC
+
+Documentation that tells you what this is all about can be found in the doc
+directory. It is also published [here](http://incubator.apache.org/chemistry/cmislib-doc/)
+ as part of the regular Hudson process. Please see the doc for
+dependencies, required CMIS version level, required Python version, etc.
+

Added: incubator/chemistry/site/trunk/content/currentprojectstatus.mdtext
URL: http://svn.apache.org/viewvc/incubator/chemistry/site/trunk/content/currentprojectstatus.mdtext?rev=1071656&view=auto
==============================================================================
--- incubator/chemistry/site/trunk/content/currentprojectstatus.mdtext (added)
+++ incubator/chemistry/site/trunk/content/currentprojectstatus.mdtext Thu Feb 17 15:49:37 2011
@@ -0,0 +1,60 @@
+Title: CurrentProjectStatus
+<a name="CurrentProjectStatus-Introduction"></a>
+# Introduction
+
+_This page needs to be updated/reworked.  For now look to the bottom for
+latest update_
+
+I have taken a snapshot of the source as of Dec 1 and zipped it up for
+download.
+This will enable me to start making changes
+
+
+<a name="CurrentProjectStatus-Details"></a>
+# Details
+
+Am now adding CMISService which will map more closely to the Services in
+the Domain model.  This is a work in progress.	Checked in code will
+usually be able to run without totally breaking.
+
+Zipped downloads and Labeled revisions should generally run without
+breaking
+
+<a name="CurrentProjectStatus-Update2010-02-15"></a>
+# Update 2010-02-15
+<a name="CurrentProjectStatus-Addednewupdatewithsometestcode."></a>
+## Added new update with some test code.
+Filled out quite a bit of the domain level routines including
+  * getRepositories
+  * getTypeDefinition
+  * getChildren
+  * getFolderParent
+  * getObjectParents
+  * getCheckedOutDocs
+  * getObject
+  * getObjectByPath
+  * getProperties
+  * getContentStream
+  * createDocument
+  * createFolder
+  * updateProperties
+  * moveObject
+  * deleteObject
+  * setContentStream
+  * deleteContentStream
+
+Many of these have been tested but not all -- some known issues:
+  * Not handling optional inputs (filters etc....)
+  * Some assumptions are being made regarding the form of URLs
+  * May be making some assumptions about XML format w.r.t. Name spacing
+  * Has only been tested against the Alfresco Repository
+
+<a name="CurrentProjectStatus-Update2010-09-07"></a>
+# Update 2010-09-07
+  * Fixed problem with handling of spaces -- no need to urlencode inputs
+  * Added new functionality
+    * Get Type Children 
+    * Get Type Descendants
+    * Get Folder Tree
+    * Get Descendants
+  * Updated Documentation

Added: incubator/chemistry/site/trunk/content/dotcmis.mdtext
URL: http://svn.apache.org/viewvc/incubator/chemistry/site/trunk/content/dotcmis.mdtext?rev=1071656&view=auto
==============================================================================
--- incubator/chemistry/site/trunk/content/dotcmis.mdtext (added)
+++ incubator/chemistry/site/trunk/content/dotcmis.mdtext Thu Feb 17 15:49:37 2011
@@ -0,0 +1,52 @@
+Title: DotCMIS
+<a name="DotCMIS-WelcometoDotCMIS"></a>
+# Welcome to DotCMIS
+
+DotCMIS is a CMIS client library for .NET. It is loosely based on the [OpenCMIS client architecture](opencmis-modules.html)
+.
+
+*DotCMIS is under development and not ready for production use, yet.*
+
+
+<a name="DotCMIS-Status"></a>
+## Status
+
+* The library is now fully implemented. All interfaces and operations
+_should_ work.
+* There is not much documentation, yet. See below.
+* First tests against a small number of CMIS repositories were successful.
+Not all operations have been tested, yet.
+
+If you find problem, please [create an issue](https://issues.apache.org/jira/browse/CMIS)
+.
+
+
+<a name="DotCMIS-Documentation"></a>
+## Documentation
+
+There are starter code snippets on the [Getting started with DotCMIS](getting-started-with-dotcmis.html)
+ page and the API documentation is available as a [CHM Help file|https://hudson.apache.org/hudson/job/Chemistry%20-%20DotCMIS/ws/doc/DotCMISDoc.chm]
+.
+
+The interfaces are very similar to the OpenCMIS client API. Please see the
+OpenCMIS documentation for more insights.
+
+
+<a name="DotCMIS-Sourcecodeanddependencies"></a>
+## Source code and dependencies
+
+The DotCMIS source code is here: [https://svn.apache.org/repos/asf/incubator/chemistry/dotcmis/trunk](https://svn.apache.org/repos/asf/incubator/chemistry/dotcmis/trunk)
+
+DotCMIS requires the .NET Framework version 3.5 or higher. It does not
+depend on anything else.
+
+The DotCMIS unit tests require NUnit 2.5.
+
+
+<a name="DotCMIS-Binaries"></a>
+## Binaries
+
+There is no official release, yet.
+
+Nighty builds can be obtained from here: [Debug DLL](https://hudson.apache.org/hudson/job/Chemistry%20-%20DotCMIS/ws/bin/Debug/)
+ and [Release DLL|https://hudson.apache.org/hudson/job/Chemistry%20-%20DotCMIS/ws/bin/Release/]

Added: incubator/chemistry/site/trunk/content/f2f-meeting-april-2010.mdtext
URL: http://svn.apache.org/viewvc/incubator/chemistry/site/trunk/content/f2f-meeting-april-2010.mdtext?rev=1071656&view=auto
==============================================================================
--- incubator/chemistry/site/trunk/content/f2f-meeting-april-2010.mdtext (added)
+++ incubator/chemistry/site/trunk/content/f2f-meeting-april-2010.mdtext Thu Feb 17 15:49:37 2011
@@ -0,0 +1,96 @@
+Title: F2F Meeting April 2010
+<a name="F2FMeetingApril2010-ApacheChemistryFace-to-FaceMeetingApril2010"></a>
+# Apache Chemistry Face-to-Face Meeting April 2010
+
+Main topic of this meeting will be the code merge of the Chemistry and the
+OpenCMIS code base. See [this mail thread](http://markmail.org/thread/j4ja5q6xu43jemj6)
+.
+
+If you have any questions please send an email to the Chemistry mailing
+list.
+
+
+<a name="F2FMeetingApril2010-DateandLocation"></a>
+### Date and Location
+
+12-16 April 2010 in the [Open Text office in Munich](http://www.opentext.com/2/jp/company-offices-grasbrunn.htm)
+.
+
+<a name="F2FMeetingApril2010-Travel"></a>
+##### Travel
+
+* [Public transport to the office](http://www.mvv-muenchen.de/en/home/timetable/journeyplanner/index.html&ptOptionsActive=1)
+ (destination is "Vatersetten")
+* [Hotel close to the office](http://www.ambassador-apparthotel.de/)
+* [Hotels in Munich downtown](http://maps.google.com/maps?f=q&source=s_q&hl=de&geocode=&q=hotel&sll=48.136996,11.577444&sspn=0.012916,0.038581&gl=de&ie=UTF8&hq=hotel&hnear=&ll=48.139201,11.568475&spn=0.012916,0.038581&z=15)
+ (stay close to  a S-Bahn station)
+
+
+<a name="F2FMeetingApril2010-Participants"></a>
+### Participants
+_If you are planning to come, please add your name as soon as possible._
+
+* Jens Hübel (Open Text)
+* Florian Müller (Open Text)
+* Florent Guillaume (Nuxeo)
+* Nick Burch (Alfresco)
+* Stephan Klevenz (SAP)
+* Paul Goetz (SAP)
+* Thierry Delprat (Nuxeo)
+* David Caruana (Alfresco)
+
+
+<a name="F2FMeetingApril2010-Agenda"></a>
+### Agenda
+
+<table>
+<tr><td> Monday morning  </td><td> * *Arrival* </td></tr>
+<tr><td> Monday afternoon </td><td> * *Apache face-to-face best practices* (Nick)
+</tr>
+* *Code base and architecture introductions*
+Chemisty (Florent) / OpenCMIS (Florian)
+* *Day summary* |
+<tr><td> Tuesday morning </td><td> * *Use cases and projects using Chemistry and OpenCMIS*
+</tr>
+Chemistry (Florent) / OpenCMIS (Stephan/Paul, David, Jens/Florian) |
+<tr><td> Tuesday afternoon </td><td> * *Differences and overlaps* (all)
+</tr>
+* *Day summary* |
+<tr><td> Wednesday morning </td><td> * *Discussion* (all) </td></tr>
+<tr><td> Wednesday afternoon </td><td> * *Discussion* (all)
+</tr>
+* *Day summary* |
+<tr><td> Thursday morning </td><td> * *Prototyping* (all) </td></tr>
+<tr><td> Thursday afternoon </td><td> * *Prototyping* (all)
+</tr>
+* *Day summary*|
+<tr><td> Friday morning </td><td> * *Recommendation for the Chemistry list* (all) </td></tr>
+<tr><td> Friday afternoon </td><td> * *Departure* </td></tr>
+</table>
+
+
+<a name="F2FMeetingApril2010-OnlineResources"></a>
+### Online Resources
+
+Please add links to resources that might be interesting before and during
+the meeting. 
+
+<a name="F2FMeetingApril2010-Chemistry"></a>
+##### Chemistry
+
+* [Chemistry web site](http://incubator.apache.org/chemistry/)
+
+<a name="F2FMeetingApril2010-OpenCMIS"></a>
+##### OpenCMIS
+
+* [OpenCMIS overview](opencmis.html)
+* [Description of the OpenCMIS modules](opencmis-modules.html)
+* [OpenCMIS API Examples](opencmis-api-examples.html)
+* [OpenCMIS Client API overview](opencmis-client-api.html)
+* [Client API JavaDoc](http://hudson.zones.apache.org/hudson/job/Chemistry%20-%20OpenCMIS%20-%20site/javadoc/org/apache/opencmis/client/api/package-summary.html)
+* [Provider API JavaDoc](http://hudson.zones.apache.org/hudson/job/Chemistry%20-%20OpenCMIS%20-%20site/javadoc/org/apache/opencmis/commons/provider/package-summary.html)
+* [Server SPI JavaDoc](http://hudson.zones.apache.org/hudson/job/Chemistry%20-%20OpenCMIS%20-%20site/javadoc/org/apache/opencmis/server/spi/package-summary.html)
+
+
+<a name="F2FMeetingApril2010-MeetingMinutes"></a>
+### Meeting Minutes

Added: incubator/chemistry/site/trunk/content/getting-started-with-dotcmis.mdtext
URL: http://svn.apache.org/viewvc/incubator/chemistry/site/trunk/content/getting-started-with-dotcmis.mdtext?rev=1071656&view=auto
==============================================================================
--- incubator/chemistry/site/trunk/content/getting-started-with-dotcmis.mdtext (added)
+++ incubator/chemistry/site/trunk/content/getting-started-with-dotcmis.mdtext Thu Feb 17 15:49:37 2011
@@ -0,0 +1,248 @@
+Title: Getting started with DotCMIS
+<a name="GettingstartedwithDotCMIS-ConnectingtoaCMISAtomPubendpoint"></a>
+## Connecting to a CMIS AtomPub endpoint
+
+<a name="GettingstartedwithDotCMIS-Connectingtothefirstrepository"></a>
+### Connecting to the first repository
+
+
+    Dictionary<string, string> parameters = new Dictionary<string, string>();
+    
+    parameters[SessionParameter.BindingType]
+ = BindingType.AtomPub;
+    parameters[SessionParameter.AtomPubUrl]
+ = "http://<host>/<serviceDocumentPath>";
+    parameters[SessionParameter.User]
+ = "<username>";
+    parameters[SessionParameter.Password]
+ = "<password>";
+    
+    SessionFactory factory = SessionFactory.NewInstance();
+    ISession session = factory.GetRepositories(parameters)[0]
+.CreateSession();
+
+
+<a name="GettingstartedwithDotCMIS-Connectingtoaspecificrepository"></a>
+### Connecting to a specific repository
+
+
+    Dictionary<string, string> parameters = new Dictionary<string, string>();
+    
+    parameters[SessionParameter.BindingType]
+ = BindingType.AtomPub;
+    parameters[SessionParameter.AtomPubUrl]
+ = "http://<host>/<serviceDocumentPath>";
+    parameters[SessionParameter.User]
+ = "<username>";
+    parameters[SessionParameter.Password]
+ = "<password>";
+    parameters[SessionParameter.RepositoryId]
+ = "<repositoryId>";
+    
+    SessionFactory factory = SessionFactory.NewInstance();
+    ISession session = factory.CreateSession(parameters);
+
+
+<a name="GettingstartedwithDotCMIS-ConnectingtoaCMISWebServicesendpoint"></a>
+## Connecting to a CMIS Web Services endpoint
+
+<a name="GettingstartedwithDotCMIS-Connectingtothefirstrepository"></a>
+### Connecting to the first repository
+
+
+    Dictionary<string, string> parameters = new Dictionary<string, string>();
+    
+    parameters[SessionParameter.BindingType]
+ = BindingType.WebServices;
+    parameters[SessionParameter.WebServicesRepositoryService]
+ = "http://<host>/<RepositoryServiceWSDL>";
+    parameters[SessionParameter.WebServicesAclService]
+ = "http://<host>/<AclServiceWSDL>";
+    parameters[SessionParameter.WebServicesDiscoveryService]
+ = "http://<host>/<DiscoveryServiceWSDL>";
+    parameters[SessionParameter.WebServicesMultifilingService]
+ = "http://<host>/<MultifilingServiceWSDL>";
+    parameters[SessionParameter.WebServicesNavigationService]
+ = "http://<host>/<NavigationServiceWSDL>";
+    parameters[SessionParameter.WebServicesObjectService]
+ = "http://<host>/<ObjectServiceWSDL>";
+    parameters[SessionParameter.WebServicesPolicyService]
+ = "http://<host>/<PolicyServiceWSDL>";
+    parameters[SessionParameter.WebServicesRelationshipService]
+ = "http://<host>/<RelationshipServiceWSDL>";
+    parameters[SessionParameter.WebServicesVersioningService]
+ = "http://<host>/<VersioningServiceWSDL>";
+    parameters[SessionParameter.User]
+ = "<username>";
+    parameters[SessionParameter.Password]
+ = "<password>";
+    
+    SessionFactory factory = SessionFactory.NewInstance();
+    ISession session = factory.GetRepositories(parameters)[0]
+.CreateSession();
+
+
+<a name="GettingstartedwithDotCMIS-Connectingtoaspecificrepository"></a>
+### Connecting to a specific repository
+
+
+    Dictionary<string, string> parameters = new Dictionary<string, string>();
+    
+    parameters[SessionParameter.BindingType]
+ = BindingType.WebServices;
+    parameters[SessionParameter.WebServicesRepositoryService]
+ = "http://<host>/<RepositoryServiceWSDL>";
+    parameters[SessionParameter.WebServicesAclService]
+ = "http://<host>/<AclServiceWSDL>";
+    parameters[SessionParameter.WebServicesDiscoveryService]
+ = "http://<host>/<DiscoveryServiceWSDL>";
+    parameters[SessionParameter.WebServicesMultifilingService]
+ = "http://<host>/<MultifilingServiceWSDL>";
+    parameters[SessionParameter.WebServicesNavigationService]
+ = "http://<host>/<NavigationServiceWSDL>";
+    parameters[SessionParameter.WebServicesObjectService]
+ = "http://<host>/<ObjectServiceWSDL>";
+    parameters[SessionParameter.WebServicesPolicyService]
+ = "http://<host>/<PolicyServiceWSDL>";
+    parameters[SessionParameter.WebServicesRelationshipService]
+ = "http://<host>/<RelationshipServiceWSDL>";
+    parameters[SessionParameter.WebServicesVersioningService]
+ = "http://<host>/<VersioningServiceWSDL>";
+    parameters[SessionParameter.User]
+ = "<username>";
+    parameters[SessionParameter.Password]
+ = "<password>";
+    parameters[SessionParameter.RepositoryId]
+ = "<repositoryId>";
+    
+    SessionFactory factory = SessionFactory.NewInstance();
+    ISession session = factory.CreateSession(parameters);
+
+
+
+<a name="GettingstartedwithDotCMIS-Listingfolderchildren"></a>
+## Listing folder children
+
+
+    /// get the root folder
+    IFolder rootFolder = session.GetRootFolder();
+    
+    // list all children
+    foreach (ICmisObject cmisObject in rootFolder.GetChildren())
+    {
+        Console.WriteLine(cmisObject.Name);
+    }
+    
+    // get a page
+    IItemEnumerable<ICmisObject> children = rootFolder.GetChildren();
+    IItemEnumerable<ICmisObject> page = children.SkipTo(20).GetPage(10); //
+children 20 to 30
+    
+    foreach (ICmisObject cmisObject in page)
+    {
+        Console.WriteLine(cmisObject.Name);
+    }
+
+
+
+<a name="GettingstartedwithDotCMIS-Fetchingadocument"></a>
+## Fetching a document 
+
+
+    IObjectId id = session.CreateObjectId("12345678");
+    IDocument doc = session.GetObject(id) as IDocument;
+    
+    // properties
+    Console.WriteLine(doc.Name);
+    Console.WriteLine(doc.GetPropertyValue("my:property"));
+    
+    IProperty myProperty = doc["my:property"]
+;
+    Console.WriteLine("Id:	  " + myProperty.Id);
+    Console.WriteLine("Value: " + myProperty.Value);
+    Console.WriteLine("Type:  " + myProperty.PropertyType);
+    
+    // content
+    IContentStream contentStream = doc.GetContentStream();
+    Console.WriteLine("Filename:   " + contentStream.FileName);
+    Console.WriteLine("MIME type:  " + contentStream.MimeType);
+    Console.WriteLine("Has stream: " + (contentStream.Stream != null));
+
+
+
+<a name="GettingstartedwithDotCMIS-Creatingadocument"></a>
+## Creating a document
+
+
+    IFolder folder = ...
+    
+    IDictionary<string, object> properties = new Dictionary<string, object>();
+    properties[PropertyIds.Name]
+ = "Hello World Document";
+    properties[PropertyIds.ObjectTypeId]
+ = "cmis:document";
+    
+    byte[]
+ content = UTF8Encoding.UTF8.GetBytes("Hello World!");
+    
+    ContentStream contentStream = new ContentStream();
+    contentStream.FileName = "hello-world.txt";
+    contentStream.MimeType = "text/plain";
+    contentStream.Length = content.Length;
+    contentStream.Stream = new MemoryStream(content);
+    
+    IDocument doc = folder.CreateDocument(properties, contentStream, null);
+
+
+<a name="GettingstartedwithDotCMIS-Updatingproperties"></a>
+## Updating properties
+
+
+    ICmisObject cmisObject = ...
+    
+    IDictionary<string, object> properties = new Dictionary<string, object>();
+    properties["my:string"]
+ = "a string";
+    properties["my:int"]
+ = 42;
+    properties["my:date"]
+ = DateTime.Now;
+    
+    IObjectId newId = cmisObject.UpdateProperties(properties);
+    
+    if (newId.Id == cmisObject.Id) 
+    {
+        // the repository updated this object - refresh the object
+        cmisObject.Refresh();
+    }
+    else
+    {
+        // the repository created a new version - fetch the new version
+        cmisObject = session.GetObject(newId);
+    }
+
+
+
+<a name="GettingstartedwithDotCMIS-Deletinganobject"></a>
+## Deleting an object
+
+
+    IObjectId newId = session.CreateObjectId("12345678"):
+    ICmisObject cmisObject = session.GetObject(newId);
+    
+    cmisObject.Delete(true);
+
+
+<a name="GettingstartedwithDotCMIS-Performingaquery"></a>
+## Performing a query
+
+
+    IItemEnumerable<IQueryResult> qr = session.Query("SELECT * FROM
+cmis:document", false);
+    
+    foreach (IQueryResult hit in qr)
+    {
+        Console.WriteLine(hit["cmis:name"]
+.FirstValue + " (" + hit["cmis:objectId"].FirstValue + ")");
+    }
+

Added: incubator/chemistry/site/trunk/content/how-to-build-a-server.mdtext
URL: http://svn.apache.org/viewvc/incubator/chemistry/site/trunk/content/how-to-build-a-server.mdtext?rev=1071656&view=auto
==============================================================================
--- incubator/chemistry/site/trunk/content/how-to-build-a-server.mdtext (added)
+++ incubator/chemistry/site/trunk/content/how-to-build-a-server.mdtext Thu Feb 17 15:49:37 2011
@@ -0,0 +1,603 @@
+Title: How To Build A Server
+<a name="HowToBuildAServer-HowtocreateaCMISserverusingOpenCMIS"></a>
+# How to create a CMIS server using OpenCMIS
+
+This document contains a step-by-step introduction how you can use opencmis
+to build an CMIS server. The document is divided iton the following
+sections:
+
+Getting started. (download, setup Eclipse, etc.)
+
+1. Implementing the services
+1. The ServiceWrapper
+1. Differences between SOAP and AtomPub (ObjectHolder)
+1. Running the server
+1. Handling Authentication
+1. Testing the server
+
+<a name="HowToBuildAServer-Gettingstarted:"></a>
+# Getting started:
+
+The following step-by-step guide is a sample how to create a web
+application acting as CMIS server. It will support both bindings web
+services and AtomPub.
+
+The following section describes how to initially setup a project to compile
+a CMIS server. Please note that CMIS comes with two built-in servers. The
+fileshare and the in-memory server. It is a good hint for all upcoming
+questions to look at these implementations as example code containing
+working implementations.
+
+<a name="HowToBuildAServer-Usingmaven"></a>
+## Using maven
+
+Using maven is the easiest way to get started. OpenCMIS itself is using
+maven and you can get easily your setup and dependencies using maven. This
+requires that you have a working maven environment. In case you don't yet
+have one you can find instructions [here](http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html)
+.
+
+The first step is to create your initial pom.xml file to build your project
+and to setup the dependencies. The following steps require that you have
+build opencmis and installed it to your local maven repository {{(mvn
+install)}}. See [here](opencmis-how-to-build.html)
+ for detailed instructions how to do this.
+
+You can create your initial setup using maven itself (adjust package name,
+version number and so on according to your needs):
+
+
+    mvn archetype:generate -DgroupId=org.mycmis -DartifactId= mycmissrv \
+    -DpackageName=local.mycmis -Dversion=0.1
+
+
+Then select option 18 *maven-archetype-webapp* and confirm settings.
+
+You will find a project setup then consisting of a directory *mycmissvr*
+and subdirectories for source code and test code and the Java packages. We
+need to adapt the .pom file so that maven creates a web application file
+that can be deployed in a servlet container (like Apache Tomcat or Jetty).
+We also need to setup the dependencies to opencmis and we need to instruct
+maven generating an overlay with the existing server code in opencmis.
+Please remove therefore the entire generated src/webapp directory and all
+included files (*.jsp, web.xml).
+The final *pom.xml* will look like this:
+
+{code:xml|title=pom.xml|borderStyle=solid}
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
+http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.mycmis</groupId>
+  <artifactId>mycmissrv</artifactId>
+  <packaging>war</packaging>
+  <version>0.1</version>
+  <name>mycmissrv Maven Webapp</name>
+  <url>http://maven.apache.org</url>
+
+  <properties>
+    <opencmisVersion>0.1.0-incubating-SNAPSHOT</opencmisVersion>
+    <opencmisGroupId>org.apache.chemistry.opencmis</opencmisGroupId>
+  </properties>
+
+  <build>
+    <finalName>mycmissrv</finalName>
+    <plugins>
+      <plugin>
+	<groupId>org.apache.maven.plugins</groupId>
+	<artifactId>maven-war-plugin</artifactId>
+	<configuration>
+	  <overlays>
+	    <overlay>
+	    </overlay>
+	    <overlay>
+	      <groupId>${opencmisGroupId}</groupId>
+	      <artifactId>chemistry-opencmis-server-bindings</artifactId>
+	    </overlay>
+	  </overlays>
+	</configuration>
+      </plugin>
+      <plugin>
+	<artifactId>maven-compiler-plugin</artifactId>
+	<configuration>
+	   <target>1.5</target>
+	   <source>1.5</source>
+	   <encoding>UTF-8</encoding>
+	</configuration>
+      </plugin>
+    </plugins>
+  </build>
+  
+  <dependencies>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>3.8.1</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>${opencmisGroupId}</groupId>
+      <artifactId>chemistry-opencmis-commons-api</artifactId>
+      <version>${opencmisVersion}</version>
+    </dependency>
+    <dependency>
+      <groupId>${opencmisGroupId}</groupId>
+      <artifactId>chemistry-opencmis-commons-impl</artifactId>
+      <version>${opencmisVersion}</version>
+    </dependency>
+    <dependency>
+      <groupId>${opencmisGroupId}</groupId>
+      <artifactId>chemistry-opencmis-test-util</artifactId>
+      <version>${opencmisVersion}</version>
+    </dependency>
+    <dependency>
+      <groupId>${opencmisGroupId}</groupId>
+      <artifactId>chemistry-opencmis-server-bindings</artifactId>
+      <version>${opencmisVersion}</version>
+      <type>war</type>
+   </dependency>
+    <dependency>
+      <groupId>${opencmisGroupId}</groupId>
+      <artifactId>chemistry-opencmis-server-support</artifactId>
+      <version>${opencmisVersion}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.antlr</groupId>
+      <artifactId>antlr-runtime</artifactId>
+      <version>3.1.3</version>
+    </dependency>  
+  </dependencies>
+</project>
+
+
+    You will get your {{web.xml}} and other required files for your web
+application from opencmis which you may adjust according to your needs. You
+may run {{mvn eclipse:eclipse}} to generate the required {{.projects}} and
+{{.classpath}} files for Eclipse that you just need to import in your
+Eclipse workspace.
+    
+    h2. Without maven
+    
+    If you do not want to use maven to build your project you currently have to
+use maven to produce the binaries from the source code. Download the source
+code and run
+    
+    {noformat}
+    mvn package
+    {noformat}
+    to produce a binary version of all packaged files. To reuse the relevant
+files from the server implementation in opencmis type:
+    
+    {noformat}
+    cd chemistry-opencmis-server
+    cd chemistry-opencmis-server-bindings
+    {noformat}
+    
+    Unzip the file
+{{chemistry-opencmis-server-bindings-0.1-incubating-SNAPSHOT.jar}} and copy
+the contents to your project. It includes all required jars, web.xml and
+other supporting files. In case you prefer an empty classes directory and
+use a jar instead you can use:
+    
+    {noformat}
+    mvn jar:jar
+    {noformat}
+    Then copy the file named {{opencmis-server-impl-0.1-SNAPSHOT.jar}} from the
+target directory to your project directory. Add all jar files from the
+{{.war}} and the one created in the previous step to your project setup.
+Add the {{repository.properties}} file to your classpath.
+    
+    Now you have an initial {{web.xml}} and the required support files for the
+web services binding. Unless you have specific requirements you do not need
+to modify them.
+    
+    h1. Implementing the services
+    
+    The first step is to tell opencmis where it can find your classes that
+implement the CMIS logic. For this purpose a file named
+repository.properties must be in the classpath. It must contain a property
+named class that refers to your service factory:
+    
+    {noformat}
+    class=local.mycmis.ServiceFactory
+    {noformat}
+    
+    
+    The ServiceFactory class should extend the {{AbstractServiceFactory}} class
+from org.apache.chemistry.opencmis.commons.impl.server. You have to
+implement the interface CmisServiceFactory:
+    
+    {code:java|borderStyle=solid}
+      public void init(Map<String, String> parameters) {
+        }
+    
+      public void destroy() {
+        }
+    
+      public abstract CmisService getService(CallContext context);
+
+
+The *init()* method is used to perform initialization and passes a set of
+configuration parameters from repository.properties:
+
+{code:java|borderStyle=solid}
+@Override
+public void init(Map<String, String> parameters) {
+}
+
+    
+    Typically you will create an instance of your service implementation.
+    
+    There is also wrapper classes is explained in the next section.
+    
+    The next step is that you need to implement the services according to the
+CMIS spec. We will do this here for one example call. The important piece
+is that your class implements {{CmisService}} which is central access point
+to all incoming calls. Here is an implementation of an example call
+getRepositoryInfo():
+    
+    {code:java|borderStyle=solid}
+    public class MyCmisServiceImpl extends AbstractCmisService {
+    
+        public RepositoryInfo getRepositoryInfo(CallContext context,
+          String repositoryId, ExtensionsData extension) {
+    
+    	RepositoryInfoImpl repoInfo = new RepositoryInfoImpl();
+    	repoInfo.setRepositoryId(repositoryId);
+    	repoInfo.setRepositoryName("My CMIS Repository");
+    	repoInfo.setRepositoryDescription("Sample Repository");
+    	repoInfo.setCmisVersionSupported("1.0");
+    	repoInfo.setRepositoryCapabilities(null);
+    	repoInfo.setRootFolder("MyRootFolderId");
+    	repoInfo.setPrincipalAnonymous("anonymous");
+    	repoInfo.setPrincipalAnyone("anyone");
+    	repoInfo.setThinClientUri(null);
+    	repoInfo.setChangesIncomplete(Boolean.TRUE);
+    	repoInfo.setChangesOnType(null);
+    	repoInfo.setLatestChangeLogToken(null);
+    	repoInfo.setVendorName("ACME");
+    	repoInfo.setProductName("ACME CMIS Connector");
+    	repoInfo.setProductVersion("0.1");
+    
+    	// set capabilities
+    	RepositoryCapabilitiesImpl caps = new
+    	    RepositoryCapabilitiesImpl();
+    	caps.setAllVersionsSearchable(false);
+    	caps.setCapabilityAcl(CapabilityAcl.NONE);
+    	caps.setCapabilityChanges(CapabilityChanges.PROPERTIES);
+    
+    	caps.setCapabilityContentStreamUpdates(
+    	    CapabilityContentStreamUpdates.PWCONLY);
+    	caps.setCapabilityJoin(CapabilityJoin.NONE);
+    	caps.setCapabilityQuery(CapabilityQuery.METADATAONLY);
+    	caps.setCapabilityRendition(CapabilityRenditions.NONE);
+    	caps.setIsPwcSearchable(false);
+    	caps.setIsPwcUpdatable(true);
+    	caps.setSupportsGetDescendants(true);
+    	caps.setSupportsGetFolderTree(true);
+    	caps.setSupportsMultifiling(true);
+    	caps.setSupportsUnfiling(true);
+    	caps.setSupportsVersionSpecificFiling(false);
+    	    repoInfo.setRepositoryCapabilities(caps);
+    
+    	AclCapabilitiesDataImpl aclCaps = new AclCapabilitiesDataImpl();
+    	aclCaps.setAclPropagation(AclPropagation.REPOSITORYDETERMINED);
+    	aclCaps.setPermissionDefinitionData(null);
+    	aclCaps.setPermissionMappingData(null);
+    	repoInfo.setAclCapabilities(aclCaps);
+    	return repoInfo;
+          }
+         // ...
+    }
+    
+
+
+Now you can start implementing all the required methods with their methods.
+
+<a name="HowToBuildAServer-TheServiceWrapper"></a>
+## The ServiceWrapper
+
+For the CmisService interface exists a corresponding abstract class. This
+can be used as a starting point for your implementation. This is optional
+but gives you the benefit of providing many common null pointer checks and
+default values for optional parameters. The abstract class also provides a
+default implementation for generating the ObjectInfo needed for the AtomPub
+binding. This wrapper can reduce the code required in your service
+implementation. You should always start using the wrapper class and
+directly implement the CmisService interface only when necessary. It is
+strongly recommended however to provide a better implementation for create
+the ObjectInfo however (see next section for details).
+
+<a name="HowToBuildAServer-DifferencesbetweentheCMISbindings"></a>
+# Differences between the CMIS bindings
+
+OpenCMIS supports both the AtomPub and the web services binding interface.
+It hides all the details how to handle the protocol but there are some
+subtle differences that need to be reflected in the Java interfaces. This
+chapter explains where the differences are and why they are needed.
+
+<a name="HowToBuildAServer-TheObjectInfointerface"></a>
+## The ObjectInfo interface
+
+The methods in the interfaces *CmisService* are following the data model
+in the CMIS specification. The specification defines the following
+services:
+
+* AclService
+* DiscoveryService
+* ObjectService
+* MultifFlingService
+* NavigationService
+* PolicyService
+* RelationshipService
+* RepositoryService
+* Versioning Service
+
+For each of these services exists a corresponding interface in opencmis.
+CmisService is an interface that unifies all interfaces in one interface.
+The methods in this interface correspond to the methods in the
+specification. For the web service binding this is a one-to-one mapping.
+For the AtomPub binding this information is not sufficient in all cases.
+Take the creation of a document as an example. The web service returns in
+this case a single string value containing the id of the created document.
+A response in the AtomPub binding however consists of an AtomPub entry
+element which is an XML fragment (for an example look at
+*DocumentEntry.xml* in the examples directory of the CMIS specification).
+You will notice that generating this XML requires much more information
+than the create...() methods in the specification provide as return value.
+Your implementation needs to provide all the information so that opencmis
+can generate the complete response. For this purpose the *ObjectInfo* was
+introduced. *getObjectInfo* is the method of the CmisService interface
+that provides this information. The *AbstractCmisService* contains a
+member *objectInfoMap* that you can fill with this information. If you
+ignore this the class *AbstractCmisService* contains a default
+implementation which works but is very ineffecient. You should use this
+only as a starting point. Beware that a service can be called from multiple
+threads, so have to take care to handle threading issues properly.
+
+If the method you are implementing returns a list of objects and not only a
+single value (for example methods like *getChildren(), getDescendants()*
+in the navigation service) you need to provide an *ObjectInfo* for each
+element in the collection. *getObjectInfo* therefore returns a map with
+the object id for each object as key and the corresponding *ObjectInfo*
+as value. You can use the method *addObjectInfo* to add an element to the
+map. 
+
+
+
+<a name="HowToBuildAServer-Thecreate()methods"></a>
+## The create() methods
+
+The web service binding has separate calls for each object type to be
+created: policies, relationshiops, documents and folders:
+
+* createDocument
+* createFolder
+* createRelationship
+* createPolicy
+
+In the AtomPub binding there is one general *create()* method that is
+used for all object types. The CmisObjectService interface therefore
+contains 5 *create()* methods, the four specific ones are used for the
+web service bindings and the general one for the AtomPub binding.
+
+<a name="HowToBuildAServer-ApplyingACLs"></a>
+## Applying ACLs
+
+The class CmisAclService has two methods *applyAcl()*. One uses two
+AccessControlLists with one Acl to add &nbsp;and one to remove. The other
+method contains only one Acl to be set on the target object. The web
+service binding uses the method with two parameters, the AtomPub binding
+uses the method with one parameter.
+
+<a name="HowToBuildAServer-RunningTheServer"></a>
+# Running The Server
+
+When your services are implemented (or parts of them) you can try to run
+the server in a servlet container like Tomcat. If you have used maven to
+setup your project you can run
+
+
+    mvn package
+
+to generate a war file that you will find in the target directory. If you
+have not used maven create the war with the mechanisms of your build
+environment. Check the war contains a &nbsp;web.xml, the wsdl files in
+*WEB-INF* and all the required jars from opencmis and dependent libraries
+in *WEB-INF/lib*. For jetty maven contains a build-in integration that
+you may use if you like using *mvn jetty:run*. Adjust your pom.xml in
+this case accordingly.
+
+Deploy your application and start testing.
+
+<a name="HowToBuildAServer-HandlingAuthentication"></a>
+# Handling Authentication
+
+Opencmis does not provide or expect any specific mechanism how
+authentication is handled. It provides some basic mechanisms hot to extract
+user name and password depending on the protocol. For AtomPub binding http
+basic authentication is supported, for web services WS-Security 1.1 for
+Username Token Profile 1.1 is supported.
+
+If you want to use servlet filters dealing with authentication, &nbsp;just
+add them to your web.xml file. You also can handle authentication inside of
+your code. In this case derive a class from *BasicAuthCallContextHandler*
+and implement method *getCallContextMap()*. There you have access to user
+name and password as provided by the user. By default opencmis does not
+enforce authentication, so initially the map will be null. If you raise a
+CmisPermissionDeniedException the exception is caught by the server
+implementation and a *401* http return code is sent as response to the
+browser. This usually opens a dialog for user name and password then.
+
+{code:java|borderStyle=solid}
+public class MyContextHandler
+    extends BasicAuthCallContextHandler
+{
+  public Map<String, String> getCallContextMap(HttpServletRequest request){
+
+    // call superclass to get user and password via basic authentication
+    Map<String, String>  ctxMap = super.getCallContextMap(request);
+
+    if (null == ctxMap)
+      // no user name, password given yet say: we need authentication:
+      throw new CmisPermissionDeniedException("Authentication required");
+
+    // call your authentication
+
+    MyAuthentication.login(
+	    ctxMap.get(CallContext.USERNAME),
+	    ctxMap.get(CallContext.PASSWORD));
+
+    return ctxMap;
+  }
+}
+
+    
+    Beyond this it is up to you how to implement authentication. Creating
+tokens for example, using cookies, etc. is not covered by opencmis, but you
+can add it in your code.
+    
+    h1. Configuring your server
+    
+    Opencmis reads a file repository.properties on startup. By default you only
+have to configure the class of your service factory (see above). You can
+add additional properties in this file. These configuration parameters are
+then passed to the {{init()}} method of your ServiceFactory method as key
+value pairs in a hashmap.
+    
+    {code:title=repository.properties|borderStyle=solid}
+      class=local.mycmis.ServiceFactory
+      myparam=my-configuration-value
+
+
+{code:java|title=local.mycmis.ServiceFactory.java|borderStyle=solid}
+// ...
+@Override
+public void init(Map<String, String> parameters) {
+  String myParamValue = parameters.get("myparam");
+	// use myParamValue
+}
+// ...
+
+    
+    h1. Testing the server
+    
+    There are various ways how you can test your implementation. You may add
+unit tests that directly call your service implementations as a first step.
+Opencmis also contains some basic tests that perform client-server
+communication. You can choose the protocol binding and whether read-only or
+read-write tests are performed. The amount of functionality tested depends
+on the capabilities returned in your getRepositoryInfo return value. You
+can run them using junit:
+    
+    Examples:
+    
+    Test class:
+    {noformat}
+    org.apache.chemistry.opencmis.client.bindings.atompub.SimpleReadOnlyTests
+    {noformat}
+    
+    Test Parameters (passed as JVM args):
+    {noformat}
+    -Dopencmis.test=true
+    -Dopencmis.test.username=myuser
+    -Dopencmis.test.password=mypasswd
+    -Dopencmis.test.repository=my_repository_id&nbsp;
+    -Dopencmis.test.atompub.url=[http://localhost:8080/opencmis/atom]
+    {noformat}
+    
+    
+    The following test classes exist:
+    {noformat}
+    org.apache.opencmis.client.bindings.atompub.SimpleReadOnlyTests
+    org.apache.opencmis.client.bindings.atompub.SimpleReadWriteTests
+    org.apache.opencmis.client.bindings.webservices.SimpleReadOnlyTests
+    org.apache.opencmis.client.bindings.webservices.SimpleReadWriteTests
+    {noformat}
+    
+    
+    For web services you need an additional parameter for the service endpoint:
+    {noformat}
+    -Dopencmis.test.webservices.url=[http://localhost:8080/opencmis/services/]
+    {noformat}
+    
+    h2. Test using curl
+    
+    Simple tests (which might be useful at the beginning) can also be done
+using tools like curl or wget (AtomPub binding only). A simple example for
+a .BAT file (Windows) would look like this:
+    
+    {noformat}
+    rem set PATH=...\libcurl-7.19.7;...\OpenSSL\bin;%PATH%
+    set CURL=curl.exe
+    set VIEWER="C:\Program Files\Mozilla Firefox\firefox.exe"
+    set USER=XXX
+    set PWD=YYY
+    set URLPREFIX=[http://localhost:8080/opencmis/atom]
+    SET OUTFILE=atom.xml
+    
+    %CURL% \--user %USER%:%PWD% \--dump-header header.txt \--output %OUTFILE%
+%URLPREFIX%
+    IF ERRORLEVEL 0 %VIEWER% %OUTFILE%
+    {noformat}
+    
+    
+    Another example how to get a document with id MyDocument:
+    
+    {noformat}
+    %CURL% \--user %USER%:%PWD% \--dump-header header.txt \--output %OUTFILE%
+%URLPREFIX%/A1/entry?id=%%2FMyDocument
+    {noformat}
+    
+    You also can use this to create documents:
+    
+    {noformat}
+    %CURL% \--user %USER%:%PWD% \--header "Content-Type:
+application/atom+xml;type=entry" \-d @post-item.xml \--output
+%OUTFILE%&nbsp; \--url %URLPREFIX%/A1/children?id=/
+    {noformat}
+    
+    
+    The file {{post-item.xml}} must contain a valid Atom entry then:
+    
+    {code:xml title=post-item.xml|borderStyle=solid}
+    <?xml version="1.0" encoding="utf-8"?>
+    <entry xmlns="http://www.w3.org/2005/Atom"
+        xmlns:cmis="http://docs.oasis-open.org/ns/cmis/core/200908/"
+        xmlns:cmisra="http://docs.oasis-open.org/ns/cmis/restatom/200908/"
+        xmlns:app="http://www.w3.org/2007/app">
+      <id>http://vmelcmis1:8080/cmis/atom/cd-library/main/Default-I10915</id>
+      <author>
+        <name>Admin</name>
+      </author>
+      <updated>2009-03-01T00:00:00.000Z</updated>
+      <title type="text">Content from Curl</title>
+      <cmisra:object>
+        <cmis:properties>
+          <cmis:propertyId propertyDefinitionId="cmis:name">
+    	<cmis:value>Content from Curl</cmis:value>
+          </cmis:propertyId>
+          <cmis:propertyId propertyDefinitionId="cmis:objectTypeId">
+    	<cmis:value>cmis:document</cmis:value>
+          </cmis:propertyId>
+        </cmis:properties>
+      </cmisra:object>
+    
+      <cmisra:content type="text/plain">
+      <cmisra:base64>
+    RmF1c3Q6DQoNCk1laW4gc2No9m5lcyBGcuR1bGVpbiwgZGFyZiBpY2ggd2FnZW4sDQpNZWlu
+    ZW4gQXJtIHVuZCBHZWxlaXQgSWhyIGFuenV0cmFnZW4/DQoNCk1hcmdhcmV0ZToNCg0KQmlu
+    IHdlZGVyIEZy5HVsZWluLCB3ZWRlciBzY2j2biwNCkthbm4gdW5nZWxlaXRldCBuYWNoIEhh
+    dXNlIGdlaG4uDQoNCihTaWUgbWFjaHQgc2ljaCBsb3MgdW5kIGFiLikNCg0KRmF1c3Q6DQoN
+    CkJlaW0gSGltbWVsLCBkaWVzZXMgS2luZCBpc3Qgc2No9m4hDQpTbyBldHdhcyBoYWIgaWNo
+    IG5pZSBnZXNlaG4uDQpTaWUgaXN0IHNvIHNpdHQtIHVuZCB0dWdlbmRyZWljaCwNClVuZCBl
+    dHdhcyBzY2huaXBwaXNjaCBkb2NoIHp1Z2xlaWNoLg0KRGVyIExpcHBlIFJvdCwgZGVyIFdh
+    bmdlIExpY2h0LA0KRGllIFRhZ2UgZGVyIFdlbHQgdmVyZ2XfIGljaCdzIG5pY2h0IQ0KV2ll
+    IHNpZSBkaWUgQXVnZW4gbmllZGVyc2NobORndCwNCkhhdCB0aWVmIHNpY2ggaW4gbWVpbiBI
+    ZXJ6IGdlcHLkZ3Q7DQpXaWUgc2llIGt1cnogYW5nZWJ1bmRlbiB3YXIsDQpEYXMgaXN0IG51
+    biB6dW0gRW50evxja2VuIGdhciE=
+      </cmisra:base64>
+      </cmisra:content>
+    </entry>
+



Mime
View raw message