You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@chemistry.apache.org by fg...@apache.org on 2010/07/29 18:45:50 UTC
svn commit: r980504 [3/5] - in
/incubator/chemistry/opencmis/trunk/chemistry-opencmis-client:
chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/
chemistry-opencmis-client-bindings/src/main/java/org/apache/ch...
Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/PersistentSessionImpl.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/PersistentSessionImpl.java?rev=980504&r1=980503&r2=980504&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/PersistentSessionImpl.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/PersistentSessionImpl.java Thu Jul 29 16:45:49 2010
@@ -1,860 +1,860 @@
-/*
- * 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.
- */
-package org.apache.chemistry.opencmis.client.runtime;
-
-import java.io.Serializable;
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.locks.ReentrantReadWriteLock;
-
-import org.apache.chemistry.opencmis.client.api.ChangeEvent;
-import org.apache.chemistry.opencmis.client.api.CmisObject;
-import org.apache.chemistry.opencmis.client.api.Document;
-import org.apache.chemistry.opencmis.client.api.ExtensionHandler;
-import org.apache.chemistry.opencmis.client.api.Folder;
-import org.apache.chemistry.opencmis.client.api.ItemIterable;
-import org.apache.chemistry.opencmis.client.api.ObjectFactory;
-import org.apache.chemistry.opencmis.client.api.ObjectId;
-import org.apache.chemistry.opencmis.client.api.ObjectType;
-import org.apache.chemistry.opencmis.client.api.OperationContext;
-import org.apache.chemistry.opencmis.client.api.Policy;
-import org.apache.chemistry.opencmis.client.api.QueryResult;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.client.api.Tree;
-import org.apache.chemistry.opencmis.client.runtime.cache.Cache;
-import org.apache.chemistry.opencmis.client.runtime.cache.CacheImpl;
-import org.apache.chemistry.opencmis.client.runtime.repository.PersistentObjectFactoryImpl;
-import org.apache.chemistry.opencmis.client.runtime.util.AbstractPageFetch;
-import org.apache.chemistry.opencmis.client.runtime.util.CollectionIterable;
-import org.apache.chemistry.opencmis.client.runtime.util.ContainerImpl;
-import org.apache.chemistry.opencmis.commons.SessionParameter;
-import org.apache.chemistry.opencmis.commons.data.Ace;
-import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.ObjectList;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionContainer;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionList;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.commons.enums.Updatability;
-import org.apache.chemistry.opencmis.commons.enums.VersioningState;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.spi.CmisBinding;
-import org.apache.chemistry.opencmis.commons.spi.DiscoveryService;
-import org.apache.chemistry.opencmis.commons.spi.NavigationService;
-import org.apache.chemistry.opencmis.commons.spi.RepositoryService;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- * Persistent model session.
- */
-public class PersistentSessionImpl implements Session, Serializable {
-
- private static final OperationContext DEFAULT_CONTEXT = new OperationContextImpl(null, false, true, false,
- IncludeRelationships.NONE, null, true, null, true, 100);
-
- private static final Set<Updatability> CREATE_UPDATABILITY = new HashSet<Updatability>();
- static {
- CREATE_UPDATABILITY.add(Updatability.ONCREATE);
- CREATE_UPDATABILITY.add(Updatability.READWRITE);
- }
-
- private static Log log = LogFactory.getLog(PersistentSessionImpl.class);
-
- private final ReentrantReadWriteLock fLock = new ReentrantReadWriteLock();
-
- /*
- * default session context (serializable)
- */
- private OperationContext context = DEFAULT_CONTEXT;
-
- /*
- * session parameter (serializable)
- */
- private Map<String, String> parameters = null;
-
- /*
- * CMIS provider (serializable)
- */
- private CmisBinding binding = null;
-
- /*
- * Session Locale, determined from session parameter (serializable)
- */
- private Locale locale = null;
-
- /*
- * Object cache (serializable)
- */
- private Cache cache = null;
-
- /*
- * Lazy loaded repository info. Will be invalid after clear(). Access by
- * getter always. (serializable)
- */
- private RepositoryInfo repositoryInfo;
-
- /*
- * helper factory (non serializable)
- */
- private final ObjectFactory objectFactory = PersistentObjectFactoryImpl.newInstance(this);
-
- /**
- * required for serialization
- */
- private static final long serialVersionUID = -4287481628831198383L;
-
- /**
- * Constructor.
- */
- public PersistentSessionImpl(Map<String, String> parameters) {
- this.parameters = parameters;
- PersistentSessionImpl.log.info("Session Parameters: " + parameters);
-
- this.locale = this.determineLocale(parameters);
- PersistentSessionImpl.log.info("Session Locale: " + this.locale.toString());
-
- int cacheSize = this.determineCacheSize(parameters);
-
- if (cacheSize == -1) {
- this.cache = CacheImpl.newInstance();
- } else {
- this.cache = CacheImpl.newInstance(cacheSize);
- }
- PersistentSessionImpl.log.info("Session Cache Size: " + this.cache.getCacheSize());
- }
-
- private int determineCacheSize(Map<String, String> parameters) {
- int size = -1;
-
- return size;
- }
-
- private String determineRepositoryId(Map<String, String> parameters) {
- String repositoryId = parameters.get(SessionParameter.REPOSITORY_ID);
- // if null then the provider will return a repository id (lazy)
- return repositoryId;
- }
-
- private Locale determineLocale(Map<String, String> parameters) {
- Locale locale = null;
-
- String language = parameters.get(SessionParameter.LOCALE_ISO639_LANGUAGE);
- String country = parameters.get(SessionParameter.LOCALE_ISO3166_COUNTRY);
- String variant = parameters.get(SessionParameter.LOCALE_VARIANT);
-
- if (variant != null) {
- // all 3 parameter must not be null and valid
- locale = new Locale(language, country, variant);
- } else {
- if (country != null) {
- // 2 parameter must not be null and valid
- locale = new Locale(language, country);
- } else {
- if (language != null) {
- // 1 parameter must not be null and valid
- locale = new Locale(language);
- } else {
- locale = Locale.getDefault();
- }
- }
- }
-
- return locale;
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.apache.opencmis.client.api.Session#clear()
- */
- public void clear() {
- fLock.writeLock().lock();
- try {
- int cacheSize = this.determineCacheSize(this.parameters);
- if (cacheSize == -1) {
- this.cache = CacheImpl.newInstance();
- } else {
- this.cache = CacheImpl.newInstance(cacheSize);
- }
- PersistentSessionImpl.log.info("Session Cache Size: " + this.cache.getCacheSize());
-
- /*
- * clear provider cache
- */
- getBinding().clearAllCaches();
- } finally {
- fLock.writeLock().unlock();
- }
- }
-
- public void save() {
- // nop
- }
-
- public void cancel() {
- throw new UnsupportedOperationException("cancel");
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.apache.opencmis.client.api.Session#getObjectFactory()
- */
- public ObjectFactory getObjectFactory() {
- return this.objectFactory;
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.apache.opencmis.client.api.Session#getCheckedOutDocs(int)
- */
- public ItemIterable<Document> getCheckedOutDocs() {
- return getCheckedOutDocs(getDefaultContext());
- }
-
- /*
- * (non-Javadoc)
- *
- * @seeorg.apache.opencmis.client.api.Session#getCheckedOutDocs(org.apache.
- * opencmis.client.api. OperationContext, int)
- */
- public ItemIterable<Document> getCheckedOutDocs(OperationContext context) {
- final NavigationService navigationService = getBinding().getNavigationService();
- final ObjectFactory objectFactory = getObjectFactory();
- final OperationContext ctxt = new OperationContextImpl(context);
-
- return new CollectionIterable<Document>(new AbstractPageFetch<Document>(ctxt.getMaxItemsPerPage()) {
-
- @Override
- protected AbstractPageFetch.PageFetchResult<Document> fetchPage(long skipCount) {
-
- // get all checked out documents
- ObjectList checkedOutDocs = navigationService.getCheckedOutDocs(getRepositoryId(), null, ctxt
- .getFilterString(), ctxt.getOrderBy(), ctxt.isIncludeAllowableActions(), ctxt
- .getIncludeRelationships(), ctxt.getRenditionFilterString(), BigInteger
- .valueOf(this.maxNumItems), BigInteger.valueOf(skipCount), null);
-
- // convert objects
- List<Document> page = new ArrayList<Document>();
- if (checkedOutDocs.getObjects() != null) {
- for (ObjectData objectData : checkedOutDocs.getObjects()) {
- CmisObject doc = objectFactory.convertObject(objectData, ctxt);
- if (!(doc instanceof Document)) {
- // should not happen...
- continue;
- }
-
- page.add((Document) doc);
- }
- }
-
- return new AbstractPageFetch.PageFetchResult<Document>(page, checkedOutDocs.getNumItems(),
- checkedOutDocs.hasMoreItems()) {
- };
- }
- });
- }
-
- /*
- * (non-Javadoc)
- *
- * @see
- * org.apache.opencmis.client.api.Session#getContentChanges(java.lang.String
- * , int)
- */
- public ItemIterable<ChangeEvent> getContentChanges(String changeLogToken) {
- throw new CmisRuntimeException("not implemented");
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.apache.opencmis.client.api.Session#getDefaultContext()
- */
- public OperationContext getDefaultContext() {
- fLock.readLock().lock();
- try {
- return this.context;
- } finally {
- fLock.readLock().unlock();
- }
- }
-
- /*
- * (non-Javadoc)
- *
- * @seeorg.apache.opencmis.client.api.Session#setDefaultContext(org.apache.
- * opencmis.client.api. OperationContext)
- */
- public void setDefaultContext(OperationContext context) {
- fLock.writeLock().lock();
- try {
- this.context = (context == null ? DEFAULT_CONTEXT : context);
- } finally {
- fLock.writeLock().unlock();
- }
- }
-
- /*
- * (non-Javadoc)
- *
- * @see
- * org.apache.opencmis.client.api.Session#createOperationContext(java.util
- * .Set, boolean, boolean, boolean,
- * org.apache.opencmis.commons.enums.IncludeRelationships, java.util.Set,
- * boolean, java.lang.String, boolean)
- */
- public OperationContext createOperationContext(Set<String> filter, boolean includeAcls,
- boolean includeAllowableActions, boolean includePolicies, IncludeRelationships includeRelationships,
- Set<String> renditionFilter, boolean includePathSegments, String orderBy, boolean cacheEnabled,
- int maxItemsPerPage) {
- return new OperationContextImpl(filter, includeAcls, includeAllowableActions, includePolicies,
- includeRelationships, renditionFilter, includePathSegments, orderBy, cacheEnabled, maxItemsPerPage);
- }
-
- /*
- * (non-Javadoc)
- *
- * @see
- * org.apache.chemistry.opencmis.client.api.Session#createOperationContext()
- */
- public OperationContext createOperationContext() {
- return new OperationContextImpl();
- }
-
- /*
- * (non-Javadoc)
- *
- * @see
- * org.apache.opencmis.client.api.Session#createObjectId(java.lang.String)
- */
- public ObjectId createObjectId(String id) {
- return new ObjectIdImpl(id);
- }
-
- public Locale getLocale() {
- return this.locale;
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.apache.opencmis.client.api.Session#getObject(java.lang.String)
- */
- public CmisObject getObject(ObjectId objectId) {
- return getObject(objectId, getDefaultContext());
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.apache.opencmis.client.api.Session#getObject(java.lang.String,
- * org.apache.opencmis.client.api.OperationContext)
- */
- public CmisObject getObject(ObjectId objectId, OperationContext context) {
- if ((objectId == null) || (objectId.getId() == null)) {
- throw new IllegalArgumentException("Object Id must be set!");
- }
- if (context == null) {
- throw new IllegalArgumentException("Operation context must be set!");
- }
-
- CmisObject result = null;
-
- // ask the cache first
- if (context.isCacheEnabled()) {
- result = this.cache.getById(objectId.getId(), context.getCacheKey());
- if (result != null) {
- return result;
- }
- }
-
- // get the object
- ObjectData objectData = this.binding.getObjectService().getObject(getRepositoryId(), objectId.getId(),
- context.getFilterString(), context.isIncludeAllowableActions(), context.getIncludeRelationships(),
- context.getRenditionFilterString(), context.isIncludePolicies(), context.isIncludeAcls(), null);
-
- result = getObjectFactory().convertObject(objectData, context);
-
- // put into cache
- if (context.isCacheEnabled()) {
- this.cache.put(result, context.getCacheKey());
- }
-
- return result;
- }
-
- /*
- * (non-Javadoc)
- *
- * @see
- * org.apache.opencmis.client.api.Session#getObjectByPath(java.lang.String)
- */
- public CmisObject getObjectByPath(String path) {
- return getObjectByPath(path, getDefaultContext());
- }
-
- /*
- * (non-Javadoc)
- *
- * @see
- * org.apache.opencmis.client.api.Session#getObjectByPath(java.lang.String,
- * org.apache.opencmis.client.api.OperationContext)
- */
- public CmisObject getObjectByPath(String path, OperationContext context) {
- if (path == null) {
- throw new IllegalArgumentException("Path must be set!");
- }
- if (context == null) {
- throw new IllegalArgumentException("Operation context must be set!");
- }
-
- CmisObject result = null;
-
- // ask the cache first
- if (context.isCacheEnabled()) {
- result = this.cache.getByPath(path, context.getCacheKey());
- if (result != null) {
- return result;
- }
- }
-
- // get the object
- ObjectData objectData = this.binding.getObjectService().getObjectByPath(getRepositoryId(), path,
- context.getFilterString(), context.isIncludeAllowableActions(), context.getIncludeRelationships(),
- context.getRenditionFilterString(), context.isIncludePolicies(), context.isIncludeAcls(), null);
-
- result = getObjectFactory().convertObject(objectData, context);
-
- // put into cache
- if (context.isCacheEnabled()) {
- this.cache.putPath(path, result, context.getCacheKey());
- }
-
- return result;
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.apache.opencmis.client.api.Session#getRepositoryInfo()
- */
- public RepositoryInfo getRepositoryInfo() {
- fLock.readLock().lock();
- try {
- return this.repositoryInfo;
- } finally {
- fLock.readLock().unlock();
- }
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.apache.opencmis.client.api.Session#getRootFolder()
- */
- public Folder getRootFolder() {
- return getRootFolder(getDefaultContext());
- }
-
- /*
- * (non-Javadoc)
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- * @seeorg.apache.opencmis.client.api.Session#getRootFolder(org.apache.opencmis
- * .client.api. OperationContext)
- */
- public Folder getRootFolder(OperationContext context) {
- String rootFolderId = getRepositoryInfo().getRootFolderId();
-
- CmisObject rootFolder = getObject(createObjectId(rootFolderId), context);
- if (!(rootFolder instanceof Folder)) {
- throw new CmisRuntimeException("Root folder object is not a folder!");
- }
-
- return (Folder) rootFolder;
- }
-
- /*
- * (non-Javadoc)
- *
- * @see
- * org.apache.opencmis.client.api.Session#getTypeChildren(java.lang.String,
- * boolean, int)
- */
- public ItemIterable<ObjectType> getTypeChildren(final String typeId, final boolean includePropertyDefinitions) {
- final RepositoryService repositoryService = getBinding().getRepositoryService();
- final ObjectFactory objectFactory = this.getObjectFactory();
-
- return new CollectionIterable<ObjectType>(new AbstractPageFetch<ObjectType>(this.getDefaultContext()
- .getMaxItemsPerPage()) {
-
- @Override
- protected AbstractPageFetch.PageFetchResult<ObjectType> fetchPage(long skipCount) {
-
- // fetch the data
- TypeDefinitionList tdl = repositoryService.getTypeChildren(
- PersistentSessionImpl.this.getRepositoryId(), typeId, includePropertyDefinitions, BigInteger
- .valueOf(this.maxNumItems), BigInteger.valueOf(skipCount), null);
-
- // convert type definitions
- List<ObjectType> page = new ArrayList<ObjectType>(tdl.getList().size());
- for (TypeDefinition typeDefinition : tdl.getList()) {
- page.add(objectFactory.convertTypeDefinition(typeDefinition));
- }
-
- return new AbstractPageFetch.PageFetchResult<ObjectType>(page, tdl.getNumItems(), tdl.hasMoreItems()) {
- };
- }
- });
- }
-
- /*
- * (non-Javadoc)
- *
- * @see
- * org.apache.opencmis.client.api.Session#getTypeDefinition(java.lang.String
- * )
- */
- public ObjectType getTypeDefinition(String typeId) {
- TypeDefinition typeDefinition = getBinding().getRepositoryService().getTypeDefinition(getRepositoryId(),
- typeId, null);
- return objectFactory.convertTypeDefinition(typeDefinition);
- }
-
- /*
- * (non-Javadoc)
- *
- * @see
- * org.apache.opencmis.client.api.Session#getTypeDescendants(java.lang.String
- * , int, boolean)
- */
- public List<Tree<ObjectType>> getTypeDescendants(String typeId, int depth, boolean includePropertyDefinitions) {
- List<TypeDefinitionContainer> descendants = getBinding().getRepositoryService().getTypeDescendants(
- getRepositoryId(), typeId, BigInteger.valueOf(depth), includePropertyDefinitions, null);
-
- return convertTypeDescendants(descendants);
- }
-
- /**
- * Converts provider <code>TypeDefinitionContainer</code> to API
- * <code>Container</code>.
- */
- private List<Tree<ObjectType>> convertTypeDescendants(List<TypeDefinitionContainer> descendantsList) {
- List<Tree<ObjectType>> result = new ArrayList<Tree<ObjectType>>();
-
- for (TypeDefinitionContainer container : descendantsList) {
- ObjectType objectType = objectFactory.convertTypeDefinition(container.getTypeDefinition());
- List<Tree<ObjectType>> children = convertTypeDescendants(container.getChildren());
-
- result.add(new ContainerImpl<ObjectType>(objectType, children));
- }
-
- return result;
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.apache.opencmis.client.api.Session#query(java.lang.String,
- * boolean, int)
- */
- public ItemIterable<QueryResult> query(final String statement, final boolean searchAllVersions) {
- return query(statement, searchAllVersions, getDefaultContext());
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.apache.opencmis.client.api.Session#query(java.lang.String,
- * boolean, org.apache.opencmis.client.api.OperationContext, int)
- */
- public ItemIterable<QueryResult> query(final String statement, final boolean searchAllVersions,
- OperationContext context) {
-
- final DiscoveryService discoveryService = getBinding().getDiscoveryService();
- final ObjectFactory objectFactory = this.getObjectFactory();
- final OperationContext ctxt = new OperationContextImpl(context);
-
- return new CollectionIterable<QueryResult>(new AbstractPageFetch<QueryResult>(ctxt.getMaxItemsPerPage()) {
-
- @Override
- protected AbstractPageFetch.PageFetchResult<QueryResult> fetchPage(long skipCount) {
-
- // fetch the data
- ObjectList resultList = discoveryService.query(getRepositoryId(), statement, searchAllVersions, ctxt
- .isIncludeAllowableActions(), ctxt.getIncludeRelationships(), ctxt.getRenditionFilterString(),
- BigInteger.valueOf(this.maxNumItems), BigInteger.valueOf(skipCount), null);
-
- // convert type definitions
- List<QueryResult> page = new ArrayList<QueryResult>();
- if (resultList.getObjects() != null) {
- for (ObjectData objectData : resultList.getObjects()) {
- if (objectData == null) {
- continue;
- }
-
- page.add(objectFactory.convertQueryResult(objectData));
- }
- }
-
- return new AbstractPageFetch.PageFetchResult<QueryResult>(page, resultList.getNumItems(), resultList
- .hasMoreItems()) {
- };
- }
- });
-
- }
-
- public String setExtensionContext(String context) {
- throw new CmisRuntimeException("not implemented");
- }
-
- public ExtensionHandler setExtensionHandler(String context, ExtensionHandler extensionHandler) {
- throw new CmisRuntimeException("not implemented");
- }
-
- /**
- * Connect session object to the provider. This is the very first call after
- * a session is created.
- * <p>
- * In dependency of the parameter set an {@code AtomPub}, a {@code
- * WebService} or an {@code InMemory} provider is selected.
- */
- public void connect() {
- fLock.writeLock().lock();
- try {
- this.binding = CmisBindingHelper.createProvider(this.parameters);
-
- /* get initial repository id from session parameter */
- String repositoryId = this.determineRepositoryId(this.parameters);
- if (repositoryId == null) {
- throw new IllegalStateException("Repository Id is not set!");
- }
-
- repositoryInfo = getBinding().getRepositoryService().getRepositoryInfo(repositoryId, null);
- } finally {
- fLock.writeLock().unlock();
- }
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.apache.opencmis.client.api.Session#getBinding()
- */
- public CmisBinding getBinding() {
- fLock.readLock().lock();
- try {
- return this.binding;
- } finally {
- fLock.readLock().unlock();
- }
- }
-
- public Cache getCache() {
- fLock.readLock().lock();
- try {
- return this.cache;
- } finally {
- fLock.readLock().unlock();
- }
- }
-
- /**
- * Returns the repository id.
- */
- public String getRepositoryId() {
- return getRepositoryInfo().getId();
- }
-
- // creates
-
- /*
- * (non-Javadoc)
- *
- * @see org.apache.opencmis.client.api.Session#createDocument(java.util.Map,
- * org.apache.opencmis.client.api.ObjectId,
- * org.apache.opencmis.client.api.ContentStream,
- * org.apache.opencmis.commons.enums.VersioningState, java.util.List,
- * java.util.List, java.util.List)
- */
- public ObjectId createDocument(Map<String, ?> properties, ObjectId folderId, ContentStream contentStream,
- VersioningState versioningState, List<Policy> policies, List<Ace> addAces, List<Ace> removeAces) {
- if ((folderId != null) && (folderId.getId() == null)) {
- throw new IllegalArgumentException("Folder Id must be set!");
- }
- if ((properties == null) || (properties.isEmpty())) {
- throw new IllegalArgumentException("Properties must not be empty!");
- }
-
- String newId = getBinding().getObjectService().createDocument(getRepositoryId(),
- objectFactory.convertProperties(properties, null, CREATE_UPDATABILITY),
- (folderId == null ? null : folderId.getId()), objectFactory.convertContentStream(contentStream),
- versioningState, objectFactory.convertPolicies(policies), objectFactory.convertAces(addAces),
- objectFactory.convertAces(removeAces), null);
-
- if (newId == null) {
- return null;
- }
-
- return createObjectId(newId);
- }
-
- /*
- * (non-Javadoc)
- *
- * @see
- * org.apache.opencmis.client.api.Session#createDocumentFromSource(org.apache
- * .opencmis.client. api.ObjectId, java.util.Map,
- * org.apache.opencmis.client.api.ObjectId,
- * org.apache.opencmis.commons.enums.VersioningState, java.util.List,
- * java.util.List, java.util.List)
- */
- public ObjectId createDocumentFromSource(ObjectId source, Map<String, ?> properties, ObjectId folderId,
- VersioningState versioningState, List<Policy> policies, List<Ace> addAces, List<Ace> removeAces) {
- // get the type of the source document
- ObjectType type = null;
- if (source instanceof CmisObject) {
- type = ((CmisObject) source).getBaseType();
- } else {
- CmisObject sourceObj = getObject(source);
- type = sourceObj.getType();
- }
-
- if (type.getBaseTypeId() != BaseTypeId.CMIS_DOCUMENT) {
- throw new IllegalArgumentException("Source object must be a document!");
- }
-
- String newId = getBinding().getObjectService().createDocumentFromSource(getRepositoryId(), source.getId(),
- objectFactory.convertProperties(properties, type, CREATE_UPDATABILITY),
- (folderId == null ? null : folderId.getId()), versioningState, objectFactory.convertPolicies(policies),
- objectFactory.convertAces(addAces), objectFactory.convertAces(removeAces), null);
-
- if (newId == null) {
- return null;
- }
-
- return createObjectId(newId);
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.apache.opencmis.client.api.Session#createFolder(java.util.Map,
- * org.apache.opencmis.client.api.ObjectId, java.util.List, java.util.List,
- * java.util.List)
- */
- public ObjectId createFolder(Map<String, ?> properties, ObjectId folderId, List<Policy> policies,
- List<Ace> addAces, List<Ace> removeAces) {
- if ((folderId != null) && (folderId.getId() == null)) {
- throw new IllegalArgumentException("Folder Id must be set!");
- }
- if ((properties == null) || (properties.isEmpty())) {
- throw new IllegalArgumentException("Properties must not be empty!");
- }
-
- String newId = getBinding().getObjectService().createFolder(getRepositoryId(),
- objectFactory.convertProperties(properties, null, CREATE_UPDATABILITY),
- (folderId == null ? null : folderId.getId()), objectFactory.convertPolicies(policies),
- objectFactory.convertAces(addAces), objectFactory.convertAces(removeAces), null);
-
- if (newId == null) {
- return null;
- }
-
- return createObjectId(newId);
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.apache.opencmis.client.api.Session#createPolicy(java.util.Map,
- * org.apache.opencmis.client.api.ObjectId, java.util.List, java.util.List,
- * java.util.List)
- */
- public ObjectId createPolicy(Map<String, ?> properties, ObjectId folderId, List<Policy> policies,
- List<Ace> addAces, List<Ace> removeAces) {
- if ((folderId != null) && (folderId.getId() == null)) {
- throw new IllegalArgumentException("Folder Id must be set!");
- }
- if ((properties == null) || (properties.isEmpty())) {
- throw new IllegalArgumentException("Properties must not be empty!");
- }
-
- String newId = getBinding().getObjectService().createPolicy(getRepositoryId(),
- objectFactory.convertProperties(properties, null, CREATE_UPDATABILITY),
- (folderId == null ? null : folderId.getId()), objectFactory.convertPolicies(policies),
- objectFactory.convertAces(addAces), objectFactory.convertAces(removeAces), null);
-
- if (newId == null) {
- return null;
- }
-
- return createObjectId(newId);
- }
-
- /*
- * (non-Javadoc)
- *
- * @see
- * org.apache.opencmis.client.api.Session#createRelationship(java.util.Map,
- * java.util.List, java.util.List, java.util.List)
- */
- public ObjectId createRelationship(Map<String, ?> properties, List<Policy> policies, List<Ace> addAces,
- List<Ace> removeAces) {
- if ((properties == null) || (properties.isEmpty())) {
- throw new IllegalArgumentException("Properties must not be empty!");
- }
-
- String newId = getBinding().getObjectService().createRelationship(getRepositoryId(),
- objectFactory.convertProperties(properties, null, CREATE_UPDATABILITY),
- objectFactory.convertPolicies(policies), objectFactory.convertAces(addAces),
- objectFactory.convertAces(removeAces), null);
-
- if (newId == null) {
- return null;
- }
-
- return createObjectId(newId);
- }
-
-}
+/*
+ * 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.
+ */
+package org.apache.chemistry.opencmis.client.runtime;
+
+import java.io.Serializable;
+import java.math.BigInteger;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
+
+import org.apache.chemistry.opencmis.client.api.ChangeEvent;
+import org.apache.chemistry.opencmis.client.api.CmisObject;
+import org.apache.chemistry.opencmis.client.api.Document;
+import org.apache.chemistry.opencmis.client.api.ExtensionHandler;
+import org.apache.chemistry.opencmis.client.api.Folder;
+import org.apache.chemistry.opencmis.client.api.ItemIterable;
+import org.apache.chemistry.opencmis.client.api.ObjectFactory;
+import org.apache.chemistry.opencmis.client.api.ObjectId;
+import org.apache.chemistry.opencmis.client.api.ObjectType;
+import org.apache.chemistry.opencmis.client.api.OperationContext;
+import org.apache.chemistry.opencmis.client.api.Policy;
+import org.apache.chemistry.opencmis.client.api.QueryResult;
+import org.apache.chemistry.opencmis.client.api.Session;
+import org.apache.chemistry.opencmis.client.api.Tree;
+import org.apache.chemistry.opencmis.client.runtime.cache.Cache;
+import org.apache.chemistry.opencmis.client.runtime.cache.CacheImpl;
+import org.apache.chemistry.opencmis.client.runtime.repository.PersistentObjectFactoryImpl;
+import org.apache.chemistry.opencmis.client.runtime.util.AbstractPageFetch;
+import org.apache.chemistry.opencmis.client.runtime.util.CollectionIterable;
+import org.apache.chemistry.opencmis.client.runtime.util.ContainerImpl;
+import org.apache.chemistry.opencmis.commons.SessionParameter;
+import org.apache.chemistry.opencmis.commons.data.Ace;
+import org.apache.chemistry.opencmis.commons.data.ContentStream;
+import org.apache.chemistry.opencmis.commons.data.ObjectData;
+import org.apache.chemistry.opencmis.commons.data.ObjectList;
+import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
+import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
+import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionContainer;
+import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionList;
+import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
+import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
+import org.apache.chemistry.opencmis.commons.enums.Updatability;
+import org.apache.chemistry.opencmis.commons.enums.VersioningState;
+import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
+import org.apache.chemistry.opencmis.commons.spi.CmisBinding;
+import org.apache.chemistry.opencmis.commons.spi.DiscoveryService;
+import org.apache.chemistry.opencmis.commons.spi.NavigationService;
+import org.apache.chemistry.opencmis.commons.spi.RepositoryService;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * Persistent model session.
+ */
+public class PersistentSessionImpl implements Session, Serializable {
+
+ private static final OperationContext DEFAULT_CONTEXT = new OperationContextImpl(null, false, true, false,
+ IncludeRelationships.NONE, null, true, null, true, 100);
+
+ private static final Set<Updatability> CREATE_UPDATABILITY = new HashSet<Updatability>();
+ static {
+ CREATE_UPDATABILITY.add(Updatability.ONCREATE);
+ CREATE_UPDATABILITY.add(Updatability.READWRITE);
+ }
+
+ private static Log log = LogFactory.getLog(PersistentSessionImpl.class);
+
+ private final ReentrantReadWriteLock fLock = new ReentrantReadWriteLock();
+
+ /*
+ * default session context (serializable)
+ */
+ private OperationContext context = DEFAULT_CONTEXT;
+
+ /*
+ * session parameter (serializable)
+ */
+ private Map<String, String> parameters = null;
+
+ /*
+ * CMIS provider (serializable)
+ */
+ private CmisBinding binding = null;
+
+ /*
+ * Session Locale, determined from session parameter (serializable)
+ */
+ private Locale locale = null;
+
+ /*
+ * Object cache (serializable)
+ */
+ private Cache cache = null;
+
+ /*
+ * Lazy loaded repository info. Will be invalid after clear(). Access by
+ * getter always. (serializable)
+ */
+ private RepositoryInfo repositoryInfo;
+
+ /*
+ * helper factory (non serializable)
+ */
+ private final ObjectFactory objectFactory = PersistentObjectFactoryImpl.newInstance(this);
+
+ /**
+ * required for serialization
+ */
+ private static final long serialVersionUID = -4287481628831198383L;
+
+ /**
+ * Constructor.
+ */
+ public PersistentSessionImpl(Map<String, String> parameters) {
+ this.parameters = parameters;
+ PersistentSessionImpl.log.info("Session Parameters: " + parameters);
+
+ this.locale = this.determineLocale(parameters);
+ PersistentSessionImpl.log.info("Session Locale: " + this.locale.toString());
+
+ int cacheSize = this.determineCacheSize(parameters);
+
+ if (cacheSize == -1) {
+ this.cache = CacheImpl.newInstance();
+ } else {
+ this.cache = CacheImpl.newInstance(cacheSize);
+ }
+ PersistentSessionImpl.log.info("Session Cache Size: " + this.cache.getCacheSize());
+ }
+
+ private int determineCacheSize(Map<String, String> parameters) {
+ int size = -1;
+
+ return size;
+ }
+
+ private String determineRepositoryId(Map<String, String> parameters) {
+ String repositoryId = parameters.get(SessionParameter.REPOSITORY_ID);
+ // if null then the provider will return a repository id (lazy)
+ return repositoryId;
+ }
+
+ private Locale determineLocale(Map<String, String> parameters) {
+ Locale locale = null;
+
+ String language = parameters.get(SessionParameter.LOCALE_ISO639_LANGUAGE);
+ String country = parameters.get(SessionParameter.LOCALE_ISO3166_COUNTRY);
+ String variant = parameters.get(SessionParameter.LOCALE_VARIANT);
+
+ if (variant != null) {
+ // all 3 parameter must not be null and valid
+ locale = new Locale(language, country, variant);
+ } else {
+ if (country != null) {
+ // 2 parameter must not be null and valid
+ locale = new Locale(language, country);
+ } else {
+ if (language != null) {
+ // 1 parameter must not be null and valid
+ locale = new Locale(language);
+ } else {
+ locale = Locale.getDefault();
+ }
+ }
+ }
+
+ return locale;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.opencmis.client.api.Session#clear()
+ */
+ public void clear() {
+ fLock.writeLock().lock();
+ try {
+ int cacheSize = this.determineCacheSize(this.parameters);
+ if (cacheSize == -1) {
+ this.cache = CacheImpl.newInstance();
+ } else {
+ this.cache = CacheImpl.newInstance(cacheSize);
+ }
+ PersistentSessionImpl.log.info("Session Cache Size: " + this.cache.getCacheSize());
+
+ /*
+ * clear provider cache
+ */
+ getBinding().clearAllCaches();
+ } finally {
+ fLock.writeLock().unlock();
+ }
+ }
+
+ public void save() {
+ // nop
+ }
+
+ public void cancel() {
+ throw new UnsupportedOperationException("cancel");
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.opencmis.client.api.Session#getObjectFactory()
+ */
+ public ObjectFactory getObjectFactory() {
+ return this.objectFactory;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.opencmis.client.api.Session#getCheckedOutDocs(int)
+ */
+ public ItemIterable<Document> getCheckedOutDocs() {
+ return getCheckedOutDocs(getDefaultContext());
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @seeorg.apache.opencmis.client.api.Session#getCheckedOutDocs(org.apache.
+ * opencmis.client.api. OperationContext, int)
+ */
+ public ItemIterable<Document> getCheckedOutDocs(OperationContext context) {
+ final NavigationService navigationService = getBinding().getNavigationService();
+ final ObjectFactory objectFactory = getObjectFactory();
+ final OperationContext ctxt = new OperationContextImpl(context);
+
+ return new CollectionIterable<Document>(new AbstractPageFetch<Document>(ctxt.getMaxItemsPerPage()) {
+
+ @Override
+ protected AbstractPageFetch.PageFetchResult<Document> fetchPage(long skipCount) {
+
+ // get all checked out documents
+ ObjectList checkedOutDocs = navigationService.getCheckedOutDocs(getRepositoryId(), null, ctxt
+ .getFilterString(), ctxt.getOrderBy(), ctxt.isIncludeAllowableActions(), ctxt
+ .getIncludeRelationships(), ctxt.getRenditionFilterString(), BigInteger
+ .valueOf(this.maxNumItems), BigInteger.valueOf(skipCount), null);
+
+ // convert objects
+ List<Document> page = new ArrayList<Document>();
+ if (checkedOutDocs.getObjects() != null) {
+ for (ObjectData objectData : checkedOutDocs.getObjects()) {
+ CmisObject doc = objectFactory.convertObject(objectData, ctxt);
+ if (!(doc instanceof Document)) {
+ // should not happen...
+ continue;
+ }
+
+ page.add((Document) doc);
+ }
+ }
+
+ return new AbstractPageFetch.PageFetchResult<Document>(page, checkedOutDocs.getNumItems(),
+ checkedOutDocs.hasMoreItems()) {
+ };
+ }
+ });
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.opencmis.client.api.Session#getContentChanges(java.lang.String
+ * , int)
+ */
+ public ItemIterable<ChangeEvent> getContentChanges(String changeLogToken) {
+ throw new CmisRuntimeException("not implemented");
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.opencmis.client.api.Session#getDefaultContext()
+ */
+ public OperationContext getDefaultContext() {
+ fLock.readLock().lock();
+ try {
+ return this.context;
+ } finally {
+ fLock.readLock().unlock();
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @seeorg.apache.opencmis.client.api.Session#setDefaultContext(org.apache.
+ * opencmis.client.api. OperationContext)
+ */
+ public void setDefaultContext(OperationContext context) {
+ fLock.writeLock().lock();
+ try {
+ this.context = (context == null ? DEFAULT_CONTEXT : context);
+ } finally {
+ fLock.writeLock().unlock();
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.opencmis.client.api.Session#createOperationContext(java.util
+ * .Set, boolean, boolean, boolean,
+ * org.apache.opencmis.commons.enums.IncludeRelationships, java.util.Set,
+ * boolean, java.lang.String, boolean)
+ */
+ public OperationContext createOperationContext(Set<String> filter, boolean includeAcls,
+ boolean includeAllowableActions, boolean includePolicies, IncludeRelationships includeRelationships,
+ Set<String> renditionFilter, boolean includePathSegments, String orderBy, boolean cacheEnabled,
+ int maxItemsPerPage) {
+ return new OperationContextImpl(filter, includeAcls, includeAllowableActions, includePolicies,
+ includeRelationships, renditionFilter, includePathSegments, orderBy, cacheEnabled, maxItemsPerPage);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.chemistry.opencmis.client.api.Session#createOperationContext()
+ */
+ public OperationContext createOperationContext() {
+ return new OperationContextImpl();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.opencmis.client.api.Session#createObjectId(java.lang.String)
+ */
+ public ObjectId createObjectId(String id) {
+ return new ObjectIdImpl(id);
+ }
+
+ public Locale getLocale() {
+ return this.locale;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.opencmis.client.api.Session#getObject(java.lang.String)
+ */
+ public CmisObject getObject(ObjectId objectId) {
+ return getObject(objectId, getDefaultContext());
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.opencmis.client.api.Session#getObject(java.lang.String,
+ * org.apache.opencmis.client.api.OperationContext)
+ */
+ public CmisObject getObject(ObjectId objectId, OperationContext context) {
+ if ((objectId == null) || (objectId.getId() == null)) {
+ throw new IllegalArgumentException("Object Id must be set!");
+ }
+ if (context == null) {
+ throw new IllegalArgumentException("Operation context must be set!");
+ }
+
+ CmisObject result = null;
+
+ // ask the cache first
+ if (context.isCacheEnabled()) {
+ result = this.cache.getById(objectId.getId(), context.getCacheKey());
+ if (result != null) {
+ return result;
+ }
+ }
+
+ // get the object
+ ObjectData objectData = this.binding.getObjectService().getObject(getRepositoryId(), objectId.getId(),
+ context.getFilterString(), context.isIncludeAllowableActions(), context.getIncludeRelationships(),
+ context.getRenditionFilterString(), context.isIncludePolicies(), context.isIncludeAcls(), null);
+
+ result = getObjectFactory().convertObject(objectData, context);
+
+ // put into cache
+ if (context.isCacheEnabled()) {
+ this.cache.put(result, context.getCacheKey());
+ }
+
+ return result;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.opencmis.client.api.Session#getObjectByPath(java.lang.String)
+ */
+ public CmisObject getObjectByPath(String path) {
+ return getObjectByPath(path, getDefaultContext());
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.opencmis.client.api.Session#getObjectByPath(java.lang.String,
+ * org.apache.opencmis.client.api.OperationContext)
+ */
+ public CmisObject getObjectByPath(String path, OperationContext context) {
+ if (path == null) {
+ throw new IllegalArgumentException("Path must be set!");
+ }
+ if (context == null) {
+ throw new IllegalArgumentException("Operation context must be set!");
+ }
+
+ CmisObject result = null;
+
+ // ask the cache first
+ if (context.isCacheEnabled()) {
+ result = this.cache.getByPath(path, context.getCacheKey());
+ if (result != null) {
+ return result;
+ }
+ }
+
+ // get the object
+ ObjectData objectData = this.binding.getObjectService().getObjectByPath(getRepositoryId(), path,
+ context.getFilterString(), context.isIncludeAllowableActions(), context.getIncludeRelationships(),
+ context.getRenditionFilterString(), context.isIncludePolicies(), context.isIncludeAcls(), null);
+
+ result = getObjectFactory().convertObject(objectData, context);
+
+ // put into cache
+ if (context.isCacheEnabled()) {
+ this.cache.putPath(path, result, context.getCacheKey());
+ }
+
+ return result;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.opencmis.client.api.Session#getRepositoryInfo()
+ */
+ public RepositoryInfo getRepositoryInfo() {
+ fLock.readLock().lock();
+ try {
+ return this.repositoryInfo;
+ } finally {
+ fLock.readLock().unlock();
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.opencmis.client.api.Session#getRootFolder()
+ */
+ public Folder getRootFolder() {
+ return getRootFolder(getDefaultContext());
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ * @seeorg.apache.opencmis.client.api.Session#getRootFolder(org.apache.opencmis
+ * .client.api. OperationContext)
+ */
+ public Folder getRootFolder(OperationContext context) {
+ String rootFolderId = getRepositoryInfo().getRootFolderId();
+
+ CmisObject rootFolder = getObject(createObjectId(rootFolderId), context);
+ if (!(rootFolder instanceof Folder)) {
+ throw new CmisRuntimeException("Root folder object is not a folder!");
+ }
+
+ return (Folder) rootFolder;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.opencmis.client.api.Session#getTypeChildren(java.lang.String,
+ * boolean, int)
+ */
+ public ItemIterable<ObjectType> getTypeChildren(final String typeId, final boolean includePropertyDefinitions) {
+ final RepositoryService repositoryService = getBinding().getRepositoryService();
+ final ObjectFactory objectFactory = this.getObjectFactory();
+
+ return new CollectionIterable<ObjectType>(new AbstractPageFetch<ObjectType>(this.getDefaultContext()
+ .getMaxItemsPerPage()) {
+
+ @Override
+ protected AbstractPageFetch.PageFetchResult<ObjectType> fetchPage(long skipCount) {
+
+ // fetch the data
+ TypeDefinitionList tdl = repositoryService.getTypeChildren(
+ PersistentSessionImpl.this.getRepositoryId(), typeId, includePropertyDefinitions, BigInteger
+ .valueOf(this.maxNumItems), BigInteger.valueOf(skipCount), null);
+
+ // convert type definitions
+ List<ObjectType> page = new ArrayList<ObjectType>(tdl.getList().size());
+ for (TypeDefinition typeDefinition : tdl.getList()) {
+ page.add(objectFactory.convertTypeDefinition(typeDefinition));
+ }
+
+ return new AbstractPageFetch.PageFetchResult<ObjectType>(page, tdl.getNumItems(), tdl.hasMoreItems()) {
+ };
+ }
+ });
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.opencmis.client.api.Session#getTypeDefinition(java.lang.String
+ * )
+ */
+ public ObjectType getTypeDefinition(String typeId) {
+ TypeDefinition typeDefinition = getBinding().getRepositoryService().getTypeDefinition(getRepositoryId(),
+ typeId, null);
+ return objectFactory.convertTypeDefinition(typeDefinition);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.opencmis.client.api.Session#getTypeDescendants(java.lang.String
+ * , int, boolean)
+ */
+ public List<Tree<ObjectType>> getTypeDescendants(String typeId, int depth, boolean includePropertyDefinitions) {
+ List<TypeDefinitionContainer> descendants = getBinding().getRepositoryService().getTypeDescendants(
+ getRepositoryId(), typeId, BigInteger.valueOf(depth), includePropertyDefinitions, null);
+
+ return convertTypeDescendants(descendants);
+ }
+
+ /**
+ * Converts provider <code>TypeDefinitionContainer</code> to API
+ * <code>Container</code>.
+ */
+ private List<Tree<ObjectType>> convertTypeDescendants(List<TypeDefinitionContainer> descendantsList) {
+ List<Tree<ObjectType>> result = new ArrayList<Tree<ObjectType>>();
+
+ for (TypeDefinitionContainer container : descendantsList) {
+ ObjectType objectType = objectFactory.convertTypeDefinition(container.getTypeDefinition());
+ List<Tree<ObjectType>> children = convertTypeDescendants(container.getChildren());
+
+ result.add(new ContainerImpl<ObjectType>(objectType, children));
+ }
+
+ return result;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.opencmis.client.api.Session#query(java.lang.String,
+ * boolean, int)
+ */
+ public ItemIterable<QueryResult> query(final String statement, final boolean searchAllVersions) {
+ return query(statement, searchAllVersions, getDefaultContext());
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.opencmis.client.api.Session#query(java.lang.String,
+ * boolean, org.apache.opencmis.client.api.OperationContext, int)
+ */
+ public ItemIterable<QueryResult> query(final String statement, final boolean searchAllVersions,
+ OperationContext context) {
+
+ final DiscoveryService discoveryService = getBinding().getDiscoveryService();
+ final ObjectFactory objectFactory = this.getObjectFactory();
+ final OperationContext ctxt = new OperationContextImpl(context);
+
+ return new CollectionIterable<QueryResult>(new AbstractPageFetch<QueryResult>(ctxt.getMaxItemsPerPage()) {
+
+ @Override
+ protected AbstractPageFetch.PageFetchResult<QueryResult> fetchPage(long skipCount) {
+
+ // fetch the data
+ ObjectList resultList = discoveryService.query(getRepositoryId(), statement, searchAllVersions, ctxt
+ .isIncludeAllowableActions(), ctxt.getIncludeRelationships(), ctxt.getRenditionFilterString(),
+ BigInteger.valueOf(this.maxNumItems), BigInteger.valueOf(skipCount), null);
+
+ // convert type definitions
+ List<QueryResult> page = new ArrayList<QueryResult>();
+ if (resultList.getObjects() != null) {
+ for (ObjectData objectData : resultList.getObjects()) {
+ if (objectData == null) {
+ continue;
+ }
+
+ page.add(objectFactory.convertQueryResult(objectData));
+ }
+ }
+
+ return new AbstractPageFetch.PageFetchResult<QueryResult>(page, resultList.getNumItems(), resultList
+ .hasMoreItems()) {
+ };
+ }
+ });
+
+ }
+
+ public String setExtensionContext(String context) {
+ throw new CmisRuntimeException("not implemented");
+ }
+
+ public ExtensionHandler setExtensionHandler(String context, ExtensionHandler extensionHandler) {
+ throw new CmisRuntimeException("not implemented");
+ }
+
+ /**
+ * Connect session object to the provider. This is the very first call after
+ * a session is created.
+ * <p>
+ * In dependency of the parameter set an {@code AtomPub}, a {@code
+ * WebService} or an {@code InMemory} provider is selected.
+ */
+ public void connect() {
+ fLock.writeLock().lock();
+ try {
+ this.binding = CmisBindingHelper.createProvider(this.parameters);
+
+ /* get initial repository id from session parameter */
+ String repositoryId = this.determineRepositoryId(this.parameters);
+ if (repositoryId == null) {
+ throw new IllegalStateException("Repository Id is not set!");
+ }
+
+ repositoryInfo = getBinding().getRepositoryService().getRepositoryInfo(repositoryId, null);
+ } finally {
+ fLock.writeLock().unlock();
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.opencmis.client.api.Session#getBinding()
+ */
+ public CmisBinding getBinding() {
+ fLock.readLock().lock();
+ try {
+ return this.binding;
+ } finally {
+ fLock.readLock().unlock();
+ }
+ }
+
+ public Cache getCache() {
+ fLock.readLock().lock();
+ try {
+ return this.cache;
+ } finally {
+ fLock.readLock().unlock();
+ }
+ }
+
+ /**
+ * Returns the repository id.
+ */
+ public String getRepositoryId() {
+ return getRepositoryInfo().getId();
+ }
+
+ // creates
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.opencmis.client.api.Session#createDocument(java.util.Map,
+ * org.apache.opencmis.client.api.ObjectId,
+ * org.apache.opencmis.client.api.ContentStream,
+ * org.apache.opencmis.commons.enums.VersioningState, java.util.List,
+ * java.util.List, java.util.List)
+ */
+ public ObjectId createDocument(Map<String, ?> properties, ObjectId folderId, ContentStream contentStream,
+ VersioningState versioningState, List<Policy> policies, List<Ace> addAces, List<Ace> removeAces) {
+ if ((folderId != null) && (folderId.getId() == null)) {
+ throw new IllegalArgumentException("Folder Id must be set!");
+ }
+ if ((properties == null) || (properties.isEmpty())) {
+ throw new IllegalArgumentException("Properties must not be empty!");
+ }
+
+ String newId = getBinding().getObjectService().createDocument(getRepositoryId(),
+ objectFactory.convertProperties(properties, null, CREATE_UPDATABILITY),
+ (folderId == null ? null : folderId.getId()), objectFactory.convertContentStream(contentStream),
+ versioningState, objectFactory.convertPolicies(policies), objectFactory.convertAces(addAces),
+ objectFactory.convertAces(removeAces), null);
+
+ if (newId == null) {
+ return null;
+ }
+
+ return createObjectId(newId);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.opencmis.client.api.Session#createDocumentFromSource(org.apache
+ * .opencmis.client. api.ObjectId, java.util.Map,
+ * org.apache.opencmis.client.api.ObjectId,
+ * org.apache.opencmis.commons.enums.VersioningState, java.util.List,
+ * java.util.List, java.util.List)
+ */
+ public ObjectId createDocumentFromSource(ObjectId source, Map<String, ?> properties, ObjectId folderId,
+ VersioningState versioningState, List<Policy> policies, List<Ace> addAces, List<Ace> removeAces) {
+ // get the type of the source document
+ ObjectType type = null;
+ if (source instanceof CmisObject) {
+ type = ((CmisObject) source).getBaseType();
+ } else {
+ CmisObject sourceObj = getObject(source);
+ type = sourceObj.getType();
+ }
+
+ if (type.getBaseTypeId() != BaseTypeId.CMIS_DOCUMENT) {
+ throw new IllegalArgumentException("Source object must be a document!");
+ }
+
+ String newId = getBinding().getObjectService().createDocumentFromSource(getRepositoryId(), source.getId(),
+ objectFactory.convertProperties(properties, type, CREATE_UPDATABILITY),
+ (folderId == null ? null : folderId.getId()), versioningState, objectFactory.convertPolicies(policies),
+ objectFactory.convertAces(addAces), objectFactory.convertAces(removeAces), null);
+
+ if (newId == null) {
+ return null;
+ }
+
+ return createObjectId(newId);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.opencmis.client.api.Session#createFolder(java.util.Map,
+ * org.apache.opencmis.client.api.ObjectId, java.util.List, java.util.List,
+ * java.util.List)
+ */
+ public ObjectId createFolder(Map<String, ?> properties, ObjectId folderId, List<Policy> policies,
+ List<Ace> addAces, List<Ace> removeAces) {
+ if ((folderId != null) && (folderId.getId() == null)) {
+ throw new IllegalArgumentException("Folder Id must be set!");
+ }
+ if ((properties == null) || (properties.isEmpty())) {
+ throw new IllegalArgumentException("Properties must not be empty!");
+ }
+
+ String newId = getBinding().getObjectService().createFolder(getRepositoryId(),
+ objectFactory.convertProperties(properties, null, CREATE_UPDATABILITY),
+ (folderId == null ? null : folderId.getId()), objectFactory.convertPolicies(policies),
+ objectFactory.convertAces(addAces), objectFactory.convertAces(removeAces), null);
+
+ if (newId == null) {
+ return null;
+ }
+
+ return createObjectId(newId);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.opencmis.client.api.Session#createPolicy(java.util.Map,
+ * org.apache.opencmis.client.api.ObjectId, java.util.List, java.util.List,
+ * java.util.List)
+ */
+ public ObjectId createPolicy(Map<String, ?> properties, ObjectId folderId, List<Policy> policies,
+ List<Ace> addAces, List<Ace> removeAces) {
+ if ((folderId != null) && (folderId.getId() == null)) {
+ throw new IllegalArgumentException("Folder Id must be set!");
+ }
+ if ((properties == null) || (properties.isEmpty())) {
+ throw new IllegalArgumentException("Properties must not be empty!");
+ }
+
+ String newId = getBinding().getObjectService().createPolicy(getRepositoryId(),
+ objectFactory.convertProperties(properties, null, CREATE_UPDATABILITY),
+ (folderId == null ? null : folderId.getId()), objectFactory.convertPolicies(policies),
+ objectFactory.convertAces(addAces), objectFactory.convertAces(removeAces), null);
+
+ if (newId == null) {
+ return null;
+ }
+
+ return createObjectId(newId);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.opencmis.client.api.Session#createRelationship(java.util.Map,
+ * java.util.List, java.util.List, java.util.List)
+ */
+ public ObjectId createRelationship(Map<String, ?> properties, List<Policy> policies, List<Ace> addAces,
+ List<Ace> removeAces) {
+ if ((properties == null) || (properties.isEmpty())) {
+ throw new IllegalArgumentException("Properties must not be empty!");
+ }
+
+ String newId = getBinding().getObjectService().createRelationship(getRepositoryId(),
+ objectFactory.convertProperties(properties, null, CREATE_UPDATABILITY),
+ objectFactory.convertPolicies(policies), objectFactory.convertAces(addAces),
+ objectFactory.convertAces(removeAces), null);
+
+ if (newId == null) {
+ return null;
+ }
+
+ return createObjectId(newId);
+ }
+
+}
Propchange: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/PersistentSessionImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/SessionFactoryImpl.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/SessionFactoryImpl.java?rev=980504&r1=980503&r2=980504&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/SessionFactoryImpl.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/SessionFactoryImpl.java Thu Jul 29 16:45:49 2010
@@ -1,118 +1,118 @@
-/*
- * 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.
- */
-package org.apache.chemistry.opencmis.client.runtime;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.chemistry.opencmis.client.api.Repository;
-import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.client.api.SessionFactory;
-import org.apache.chemistry.opencmis.client.runtime.repository.RepositoryImpl;
-import org.apache.chemistry.opencmis.commons.SessionParameter;
-import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.enums.SessionType;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisNotSupportedException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.spi.CmisBinding;
-
-/**
- * Default implementation of a session factory. Used by unit tests or
- * applications that depend directly on runtime implementation.
- * <p>
- * <code>
- * SessionFactory sf = new SessionFactoryImpl();<br>
- * Session s = sf.create(...);
- * </code>
- * <p>
- * Alternative factory lookup methods:
- * <p>
- * <p>
- * <code>
- * Context ctx = new DefaultContext();<br>
- * SessionFactory = ctx.lookup(jndi_key);
- * </code>
- */
-public class SessionFactoryImpl implements SessionFactory {
-
- protected SessionFactoryImpl() {
-
- }
-
- public static SessionFactory newInstance() {
- return new SessionFactoryImpl();
- }
-
- /*
- * (non-Javadoc)
- *
- * @see
- * org.apache.opencmis.client.api.SessionFactory#createSession(java.util
- * .Map)
- */
- @SuppressWarnings("unchecked")
- public <T extends Session> T createSession(Map<String, String> parameters) {
- Session s = null;
- SessionType t = null;
-
- // determine session type
- if (parameters.containsKey(SessionParameter.SESSION_TYPE)) {
- t = SessionType.fromValue(parameters.get(SessionParameter.SESSION_TYPE));
- } else {
- // default session type if type is not set
- t = SessionType.PERSISTENT;
- }
-
- switch (t) {
- case PERSISTENT:
- PersistentSessionImpl ps = new PersistentSessionImpl(parameters);
- ps.connect(); // connect session with provider
- s = ps;
- break;
- case TRANSIENT:
- throw new CmisNotSupportedException("SessionType " + t + "not implemented!");
- default:
- throw new CmisRuntimeException("SessionType " + t + "not known!");
- }
-
- return (T) s;
- }
-
- /*
- * (non-Javadoc)
- *
- * @see
- * org.apache.opencmis.client.api.SessionFactory#getRepositories(java.util
- * .Map)
- */
- public List<Repository> getRepositories(Map<String, String> parameters) {
- CmisBinding binding = CmisBindingHelper.createProvider(parameters);
-
- List<RepositoryInfo> repositoryInfos = binding.getRepositoryService().getRepositoryInfos(null);
-
- List<Repository> result = new ArrayList<Repository>();
- for (RepositoryInfo data : repositoryInfos) {
- result.add(new RepositoryImpl(data, parameters, this));
- }
-
- return result;
- }
-
-}
+/*
+ * 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.
+ */
+package org.apache.chemistry.opencmis.client.runtime;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.chemistry.opencmis.client.api.Repository;
+import org.apache.chemistry.opencmis.client.api.Session;
+import org.apache.chemistry.opencmis.client.api.SessionFactory;
+import org.apache.chemistry.opencmis.client.runtime.repository.RepositoryImpl;
+import org.apache.chemistry.opencmis.commons.SessionParameter;
+import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
+import org.apache.chemistry.opencmis.commons.enums.SessionType;
+import org.apache.chemistry.opencmis.commons.exceptions.CmisNotSupportedException;
+import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
+import org.apache.chemistry.opencmis.commons.spi.CmisBinding;
+
+/**
+ * Default implementation of a session factory. Used by unit tests or
+ * applications that depend directly on runtime implementation.
+ * <p>
+ * <code>
+ * SessionFactory sf = new SessionFactoryImpl();<br>
+ * Session s = sf.create(...);
+ * </code>
+ * <p>
+ * Alternative factory lookup methods:
+ * <p>
+ * <p>
+ * <code>
+ * Context ctx = new DefaultContext();<br>
+ * SessionFactory = ctx.lookup(jndi_key);
+ * </code>
+ */
+public class SessionFactoryImpl implements SessionFactory {
+
+ protected SessionFactoryImpl() {
+
+ }
+
+ public static SessionFactory newInstance() {
+ return new SessionFactoryImpl();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.opencmis.client.api.SessionFactory#createSession(java.util
+ * .Map)
+ */
+ @SuppressWarnings("unchecked")
+ public <T extends Session> T createSession(Map<String, String> parameters) {
+ Session s = null;
+ SessionType t = null;
+
+ // determine session type
+ if (parameters.containsKey(SessionParameter.SESSION_TYPE)) {
+ t = SessionType.fromValue(parameters.get(SessionParameter.SESSION_TYPE));
+ } else {
+ // default session type if type is not set
+ t = SessionType.PERSISTENT;
+ }
+
+ switch (t) {
+ case PERSISTENT:
+ PersistentSessionImpl ps = new PersistentSessionImpl(parameters);
+ ps.connect(); // connect session with provider
+ s = ps;
+ break;
+ case TRANSIENT:
+ throw new CmisNotSupportedException("SessionType " + t + "not implemented!");
+ default:
+ throw new CmisRuntimeException("SessionType " + t + "not known!");
+ }
+
+ return (T) s;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.opencmis.client.api.SessionFactory#getRepositories(java.util
+ * .Map)
+ */
+ public List<Repository> getRepositories(Map<String, String> parameters) {
+ CmisBinding binding = CmisBindingHelper.createProvider(parameters);
+
+ List<RepositoryInfo> repositoryInfos = binding.getRepositoryService().getRepositoryInfos(null);
+
+ List<Repository> result = new ArrayList<Repository>();
+ for (RepositoryInfo data : repositoryInfos) {
+ result.add(new RepositoryImpl(data, parameters, this));
+ }
+
+ return result;
+ }
+
+}
Propchange: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/SessionFactoryImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/cache/Cache.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/cache/Cache.java?rev=980504&r1=980503&r2=980504&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/cache/Cache.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/cache/Cache.java Thu Jul 29 16:45:49 2010
@@ -1,50 +1,50 @@
-/*
- * 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.
- */
-package org.apache.chemistry.opencmis.client.runtime.cache;
-
-import org.apache.chemistry.opencmis.client.api.CmisObject;
-
-/**
- * Implements a session cache providing following capabilities:
- * <p>
- * <ul>
- * <li>access CmisObject by object id</li>
- * <li>access CmisObject by object path</li>
- * </ul>
- */
-public interface Cache {
-
- boolean containsId(String objectId, String cacheKey);
-
- boolean containsPath(String path, String cacheKey);
-
- void put(CmisObject object, String cacheKey);
-
- void putPath(String path, CmisObject object, String cacheKey);
-
- CmisObject getById(String objectId, String cacheKey);
-
- CmisObject getByPath(String path, String cacheKey);
-
- void clear();
-
- void resetPathCache();
-
- int getCacheSize();
-}
+/*
+ * 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.
+ */
+package org.apache.chemistry.opencmis.client.runtime.cache;
+
+import org.apache.chemistry.opencmis.client.api.CmisObject;
+
+/**
+ * Implements a session cache providing following capabilities:
+ * <p>
+ * <ul>
+ * <li>access CmisObject by object id</li>
+ * <li>access CmisObject by object path</li>
+ * </ul>
+ */
+public interface Cache {
+
+ boolean containsId(String objectId, String cacheKey);
+
+ boolean containsPath(String path, String cacheKey);
+
+ void put(CmisObject object, String cacheKey);
+
+ void putPath(String path, CmisObject object, String cacheKey);
+
+ CmisObject getById(String objectId, String cacheKey);
+
+ CmisObject getByPath(String path, String cacheKey);
+
+ void clear();
+
+ void resetPathCache();
+
+ int getCacheSize();
+}
Propchange: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/cache/Cache.java
------------------------------------------------------------------------------
svn:eol-style = native