...
The client layer consists of a client interface, common interfaces and a runtime implementation. The runtime maps the client interface to the provider layer and implements the session cache. All parts are exposed by following packages:
package | Artifact | Description |
---|---|---|
org.apache.opencmis.client.api | opencmis-client-api | Main classes of the client API |
org.apache.opencmis.commons.api | opencmis-commons-api | Interfaces and classes shared by client and provider API |
org.apache.opencmis.client.runtime | opencmis-client-impl | Implementation classes of client API including a default implementation of the SessionFactory |
...
- SessionFactory This interface provides the entry point into the client API and is responsible to create a session object. Additionally it gives access to all repository info exposed by a CMIS provider. The runtime provides a default implementation for the SessionFactory interface.
- Session This is the main interface an applicaiton has to work with. A session object is related to a CMIS service provider and is attached to exact one repository. All data that is receiced throug the session interface can be cached in the session object in dependency of the concrete implementation which is behind.
- Repository Wrapper interface for the CMIS RepositoryInfo service.
- CmisObject The CmisObject interface represents the CMIS domain object.
- ObjectType This interface is base for all CMIS domain types like FolderType, DocumentType, PolicyType and RelationType. The derived interfaces are not shown in teh diagram.
- Folder This interface represents the CMIS folder object.
- Document This interface represents the CMIS document object.
- ContentStream this interface wrapps the content stream of a CMIS document.
- Policy This interface represents the CMIS policy object.
- Relation This interface represents the CMIS relation object.
Session and
...
Cache Concepts
The concrete cache strategy depends on the implementation of the session in the client runtime. There are currently two session implementations in consideration:
...
A Transient Session extends the presistent session and implements a buffer for all write operations. With that all single write operations are executed lazy during an explicite session save call. Write operations can be reverted by calling the cancel method on the session object. This strategy is not implemented yet.
Example Code
Session Creation - AtomPub Provider
Code Block | ||
---|---|---|
| ||
// default factory implementation of client runtime SessionFactory f = SessionFactoryImpl.newInstance(); Map<String, String> parameter = new HashMap<String, String>(); // user credentials parameter.put(SessionParameter.USER, "Otto"); parameter.put(SessionParameter.PASSWORD, "****"); // connection settings parameter.put(SessionParameter.ATOMPUB_URL, "http://<host>:<port>/cmis/atom"); parameter.put(SessionParameter.BINDING_TYPE, BindingType.ATOMPUB.value()); parameter.put(SessionParameter.REPOSITORY_ID, "myRepository"); // session locale parameter.put(SessionParameter.LOCALE_ISO3166_COUNTRY, ""); parameter.put(SessionParameter.LOCALE_ISO639_LANGUAGE, "de"); parameter.put(SessionParameter.LOCALE_VARIANT, ""); // create session Session s = f.createSession(parameter); |
Session Creation - Web Services Provider
Code Block | ||
---|---|---|
| ||
// default factory implementation of client runtime
SessionFactory f = SessionFactoryImpl.newInstance();
Map<String, String> parameter = new HashMap<String, String>();
// user credentials
parameter.put(SessionParameter.USER, "Otto");
parameter.put(SessionParameter.PASSWORD, "****");
// connection settings
parameter.put(SessionParameter.BINDING_TYPE, BindingType.WEBSERVICES.value());
parameter.put(SessionParameter.REPOSITORY_ID, "myRepository");
parameter.put(SessionParameter.WEBSERVICES_ACL_SERVICE, "http://<host>:<port>/cmis/services/ACLService?wsdl");
parameter.put(SessionParameter.WEBSERVICES_DISCOVERY_SERVICE, "http://<host>:<port>/cmis/services/DiscoveryService?wsdl");
parameter.put(SessionParameter.WEBSERVICES_MULTIFILING_SERVICE, "http://<host>:<port>/cmis/services/MultiFilingService?wsdl");
parameter.put(SessionParameter.WEBSERVICES_NAVIGATION_SERVICE, "http://<host>:<port>/cmis/services/NavigationService?wsdl");
parameter.put(SessionParameter.WEBSERVICES_OBJECT_SERVICE, "http://<host>:<port>/cmis/services/ObjectService?wsdl");
parameter.put(SessionParameter.WEBSERVICES_POLICY_SERVICE, "http://<host>:<port>/cmis/services/PolicyService?wsdl");
parameter.put(SessionParameter.WEBSERVICES_RELATIONSHIP_SERVICE, "http://<host>:<port>/cmis/services/RelationshipService?wsdl");
parameter.put(SessionParameter.WEBSERVICES_REPOSITORY_SERVICE, "http://<host>:<port>/cmis/services/RepositoryService?wsdl");
parameter.put(SessionParameter.WEBSERVICES_VERSIONING_SERVICE, "http://<host>:<port>/cmis/services/VersioningService?wsdl");
// session locale
parameter.put(SessionParameter.LOCALE_ISO3166_COUNTRY, "");
parameter.put(SessionParameter.LOCALE_ISO639_LANGUAGE, "de");
parameter.put(SessionParameter.LOCALE_VARIANT, "");
// create session
Session s = f.createSession(parameter);
|
Reading Objects - Root Collection
Code Block | ||
---|---|---|
| ||
Folder root = this.session.getRootFolder();
PagingList<CmisObject> pl = root.getChildren(1);
for (List<CmisObject> cl : pl) {
for (CmisObject o : cl) {
System.out.println(o.getName());
}
}
|
Reading Properties - Single Property
Code Block | ||
---|---|---|
| ||
String id = "4711";
Document document = (Document) this.session.getObject(id);
Property<String> p = document.getProperty(CmisProperties.OBJECT_ID.value());
String s = p.getValue();
|
Reading Properties - All Properties
Code Block | ||
---|---|---|
| ||
String id = "4711";
Document document = (Document) this.session.getObject(id);
List<Property<?>> l = document.getProperties();
Iterator<Property<?>> i = l.iterator();
while (i.hasNext()) {
Property<?> p = i.next();
Object value = p.getValue();
PropertyType t = p.getType();
switch (t) {
case INTEGER:
Integer n = (Integer) value;
System.out.println(p.getName() + " = " + n);
break;
case STRING:
[...]
}
|