Return-Path: Delivered-To: apmail-incubator-chemistry-commits-archive@minotaur.apache.org Received: (qmail 32111 invoked from network); 22 Apr 2010 16:06:09 -0000 Received: from unknown (HELO mail.apache.org) (140.211.11.3) by 140.211.11.9 with SMTP; 22 Apr 2010 16:06:09 -0000 Received: (qmail 28413 invoked by uid 500); 22 Apr 2010 16:06:09 -0000 Delivered-To: apmail-incubator-chemistry-commits-archive@incubator.apache.org Received: (qmail 28376 invoked by uid 500); 22 Apr 2010 16:06:09 -0000 Mailing-List: contact chemistry-commits-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: chemistry-dev@incubator.apache.org Delivered-To: mailing list chemistry-commits@incubator.apache.org Received: (qmail 28368 invoked by uid 99); 22 Apr 2010 16:06:09 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 22 Apr 2010 16:06:09 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 22 Apr 2010 16:06:01 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 995DA2388BCD; Thu, 22 Apr 2010 16:04:25 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r936922 [16/18] - in /incubator/chemistry/opencmis/trunk/chemistry-opencmis-client: chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/ chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/... Date: Thu, 22 Apr 2010 16:04:22 -0000 To: chemistry-commits@incubator.apache.org From: dcaruana@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20100422160425.995DA2388BCD@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/PersistentPropertyImpl.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/PersistentPropertyImpl.java?rev=936922&r1=936921&r2=936922&view=diff ============================================================================== --- incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/PersistentPropertyImpl.java (original) +++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/PersistentPropertyImpl.java Thu Apr 22 16:04:19 2010 @@ -32,65 +32,65 @@ import org.apache.chemistry.opencmis.com */ public class PersistentPropertyImpl extends AbstractPropertyData implements Property, Serializable { - private static final long serialVersionUID = 1L; - private PropertyDefinition propertyDefinition; + private static final long serialVersionUID = 1L; + private PropertyDefinition propertyDefinition; - protected void initialize(PropertyDefinition pd) { - setId(pd.getId()); - setDisplayName(pd.getDisplayName()); - setLocalName(pd.getLocalName()); - setQueryName(pd.getQueryName()); - } - - /** - * Constructs a single-value property. - */ - @SuppressWarnings("unchecked") - public PersistentPropertyImpl(PropertyDefinition pd, T value) { - if (pd == null) { - throw new IllegalArgumentException("Type must be set!"); - } - if (value == null) { - throw new IllegalArgumentException("Value must be set!"); - } - propertyDefinition = (PropertyDefinition) pd; - initialize(pd); - setValue(value); - } - - /** - * Constructs a multi-value property. - */ - @SuppressWarnings("unchecked") - public PersistentPropertyImpl(PropertyDefinition pd, List values) { - if (pd == null) { - throw new IllegalArgumentException("Type must be set!"); - } - propertyDefinition = (PropertyDefinition) pd; - initialize(pd); - setValues(values); - } - - public PropertyDefinition getDefinition() { - return propertyDefinition; - } - - public PropertyType getType() { - return propertyDefinition.getPropertyType(); - } - - public String getValueAsString() { - List values = getValues(); - if (values.size() == 0) { - return null; - } - switch (propertyDefinition.getPropertyType()) { - default: - return values.get(0).toString(); - } - } - - public boolean isMultiValued() { - return propertyDefinition.getCardinality() == Cardinality.MULTI; - } + protected void initialize(PropertyDefinition pd) { + setId(pd.getId()); + setDisplayName(pd.getDisplayName()); + setLocalName(pd.getLocalName()); + setQueryName(pd.getQueryName()); + } + + /** + * Constructs a single-value property. + */ + @SuppressWarnings("unchecked") + public PersistentPropertyImpl(PropertyDefinition pd, T value) { + if (pd == null) { + throw new IllegalArgumentException("Type must be set!"); + } + if (value == null) { + throw new IllegalArgumentException("Value must be set!"); + } + propertyDefinition = (PropertyDefinition) pd; + initialize(pd); + setValue(value); + } + + /** + * Constructs a multi-value property. + */ + @SuppressWarnings("unchecked") + public PersistentPropertyImpl(PropertyDefinition pd, List values) { + if (pd == null) { + throw new IllegalArgumentException("Type must be set!"); + } + propertyDefinition = (PropertyDefinition) pd; + initialize(pd); + setValues(values); + } + + public PropertyDefinition getDefinition() { + return propertyDefinition; + } + + public PropertyType getType() { + return propertyDefinition.getPropertyType(); + } + + public String getValueAsString() { + List values = getValues(); + if (values.size() == 0) { + return null; + } + switch (propertyDefinition.getPropertyType()) { + default: + return values.get(0).toString(); + } + } + + public boolean isMultiValued() { + return propertyDefinition.getCardinality() == Cardinality.MULTI; + } } Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/PersistentRelationshipImpl.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/PersistentRelationshipImpl.java?rev=936922&r1=936921&r2=936922&view=diff ============================================================================== --- incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/PersistentRelationshipImpl.java (original) +++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/PersistentRelationshipImpl.java Thu Apr 22 16:04:19 2010 @@ -27,68 +27,68 @@ import org.apache.chemistry.opencmis.com public class PersistentRelationshipImpl extends AbstractPersistentCmisObject implements Relationship { - /** - * Constructor. - */ - public PersistentRelationshipImpl(PersistentSessionImpl session, ObjectType objectType, ObjectData objectData, - OperationContext context) { - initialize(session, objectType, objectData, context); - } - - /* - * (non-Javadoc) - * - * @see org.apache.opencmis.client.api.Relationship#getSource() - */ - public CmisObject getSource() { - return getSource(getSession().getDefaultContext()); - } - - /* - * (non-Javadoc) - * - * @see org.apache.opencmis.client.api.Relationship#getSource() - */ - public CmisObject getSource(OperationContext context) { - readLock(); - try { - String sourceId = getPropertyValue(PropertyIds.SOURCE_ID); - if (sourceId == null) { - return null; - } - - return getSession().getObject(getSession().createObjectId(sourceId), context); - } finally { - readUnlock(); - } - } - - /* - * (non-Javadoc) - * - * @see org.apache.opencmis.client.api.Relationship#getTarget() - */ - public CmisObject getTarget() { - return getTarget(getSession().getDefaultContext()); - } - - /* - * (non-Javadoc) - * - * @see org.apache.opencmis.client.api.Relationship#getTarget() - */ - public CmisObject getTarget(OperationContext context) { - readLock(); - try { - String targetId = getPropertyValue(PropertyIds.TARGET_ID); - if (targetId == null) { - return null; - } - - return getSession().getObject(getSession().createObjectId(targetId), context); - } finally { - readUnlock(); - } - } + /** + * Constructor. + */ + public PersistentRelationshipImpl(PersistentSessionImpl session, ObjectType objectType, ObjectData objectData, + OperationContext context) { + initialize(session, objectType, objectData, context); + } + + /* + * (non-Javadoc) + * + * @see org.apache.opencmis.client.api.Relationship#getSource() + */ + public CmisObject getSource() { + return getSource(getSession().getDefaultContext()); + } + + /* + * (non-Javadoc) + * + * @see org.apache.opencmis.client.api.Relationship#getSource() + */ + public CmisObject getSource(OperationContext context) { + readLock(); + try { + String sourceId = getPropertyValue(PropertyIds.SOURCE_ID); + if (sourceId == null) { + return null; + } + + return getSession().getObject(getSession().createObjectId(sourceId), context); + } finally { + readUnlock(); + } + } + + /* + * (non-Javadoc) + * + * @see org.apache.opencmis.client.api.Relationship#getTarget() + */ + public CmisObject getTarget() { + return getTarget(getSession().getDefaultContext()); + } + + /* + * (non-Javadoc) + * + * @see org.apache.opencmis.client.api.Relationship#getTarget() + */ + public CmisObject getTarget(OperationContext context) { + readLock(); + try { + String targetId = getPropertyValue(PropertyIds.TARGET_ID); + if (targetId == null) { + return null; + } + + return getSession().getObject(getSession().createObjectId(targetId), context); + } finally { + readUnlock(); + } + } } 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=936922&r1=936921&r2=936922&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 Apr 22 16:04:19 2010 @@ -76,862 +76,774 @@ import org.apache.commons.logging.LogFac */ public class PersistentSessionImpl implements Session, Serializable { - private static final OperationContext DEFAULT_CONTEXT = new OperationContextImpl( - null, false, true, false, IncludeRelationships.NONE, null, true, - null, true); - - private static final Set CREATE_UPDATABILITY = new HashSet(); - 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 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 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 parameters) { - int size = -1; - - return size; - } - - private String determineRepositoryId(Map 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 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 PagingIterable getCheckedOutDocs(int itemsPerPage) { - return getCheckedOutDocs(getDefaultContext(), itemsPerPage); - } - - /* - * (non-Javadoc) - * - * @seeorg.apache.opencmis.client.api.Session#getCheckedOutDocs(org.apache. - * opencmis.client.api. OperationContext, int) - */ - public PagingIterable getCheckedOutDocs(OperationContext context, - final int itemsPerPage) { - if (itemsPerPage < 1) { - throw new IllegalArgumentException("itemsPerPage must be > 0!"); - } - - final NavigationService navigationService = getBinding() - .getNavigationService(); - final ObjectFactory objectFactory = getObjectFactory(); - final OperationContext ctxt = new OperationContextImpl(context); - - return new DefaultPagingIterable( - new AbstractPageFetch() { - - @Override - protected AbstractPageFetch.PageFetchResult 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(itemsPerPage), - BigInteger.valueOf(skipCount), null); - - // convert objects - List page = new ArrayList(); - 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( - page, checkedOutDocs.getNumItems(), - checkedOutDocs.hasMoreItems()) { - }; - } - }); - } - - /* - * (non-Javadoc) - * - * @see - * org.apache.opencmis.client.api.Session#getContentChanges(java.lang.String - * , int) - */ - public PagingIterable getContentChanges(String changeLogToken, - int itemsPerPage) { - 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 filter, - boolean includeAcls, boolean includeAllowableActions, - boolean includePolicies, IncludeRelationships includeRelationships, - Set renditionFilter, boolean includePathSegments, - String orderBy, boolean cacheEnabled) { - return new OperationContextImpl(filter, includeAcls, - includeAllowableActions, includePolicies, includeRelationships, - renditionFilter, includePathSegments, orderBy, cacheEnabled); - } - - /* - * (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 PagingIterable getTypeChildren(final String typeId, - final boolean includePropertyDefinitions, final int itemsPerPage) { - if (itemsPerPage < 1) { - throw new IllegalArgumentException("itemsPerPage must be > 0!"); - } - - final RepositoryService repositoryService = getBinding() - .getRepositoryService(); - final ObjectFactory objectFactory = this.getObjectFactory(); - final OperationContext ctxt = new OperationContextImpl(context); - - return new DefaultPagingIterable( - new AbstractPageFetch() { - - @Override - protected AbstractPageFetch.PageFetchResult fetchPage( - long skipCount) { - - // fetch the data - TypeDefinitionList tdl = repositoryService - .getTypeChildren(PersistentSessionImpl.this - .getRepositoryId(), typeId, - includePropertyDefinitions, BigInteger - .valueOf(itemsPerPage), - BigInteger.valueOf(skipCount), null); - - // convert type definitions - List page = new ArrayList(tdl - .getList().size()); - for (TypeDefinition typeDefinition : tdl.getList()) { - page.add(objectFactory - .convertTypeDefinition(typeDefinition)); - } - - return new AbstractPageFetch.PageFetchResult( - 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> getTypeDescendants(String typeId, int depth, - boolean includePropertyDefinitions) { - List descendants = getBinding() - .getRepositoryService().getTypeDescendants(getRepositoryId(), - typeId, BigInteger.valueOf(depth), - includePropertyDefinitions, null); - - return convertTypeDescendants(descendants); - } - - /** - * Converts provider TypeDefinitionContainer to API - * Container. - */ - private List> convertTypeDescendants( - List descendantsList) { - List> result = new ArrayList>(); - - for (TypeDefinitionContainer container : descendantsList) { - ObjectType objectType = objectFactory - .convertTypeDefinition(container.getTypeDefinition()); - List> children = convertTypeDescendants(container - .getChildren()); - - result.add(new ContainerImpl(objectType, children)); - } - - return result; - } - - /* - * (non-Javadoc) - * - * @see org.apache.opencmis.client.api.Session#query(java.lang.String, - * boolean, int) - */ - public PagingIterable query(final String statement, - final boolean searchAllVersions, final int itemsPerPage) { - return query(statement, searchAllVersions, getDefaultContext(), - itemsPerPage); - } - - /* - * (non-Javadoc) - * - * @see org.apache.opencmis.client.api.Session#query(java.lang.String, - * boolean, org.apache.opencmis.client.api.OperationContext, int) - */ - public PagingIterable query(final String statement, - final boolean searchAllVersions, OperationContext context, - final int itemsPerPage) { - - if (itemsPerPage < 1) { - throw new IllegalArgumentException("itemsPerPage must be > 0!"); - } - - final DiscoveryService discoveryService = getBinding() - .getDiscoveryService(); - final ObjectFactory objectFactory = this.getObjectFactory(); - final OperationContext ctxt = new OperationContextImpl(context); - - return new DefaultPagingIterable( - new AbstractPageFetch() { - - @Override - protected AbstractPageFetch.PageFetchResult fetchPage( - long skipCount) { - - // fetch the data - ObjectList resultList = discoveryService.query( - getRepositoryId(), statement, - searchAllVersions, ctxt - .isIncludeAllowableActions(), ctxt - .getIncludeRelationships(), ctxt - .getRenditionFilterString(), BigInteger - .valueOf(itemsPerPage), BigInteger - .valueOf(skipCount), null); - - // convert type definitions - List page = new ArrayList(); - if (resultList.getObjects() != null) { - for (ObjectData objectData : resultList - .getObjects()) { - if (objectData == null) { - continue; - } - - page.add(objectFactory - .convertQueryResult(objectData)); - } - } - - return new AbstractPageFetch.PageFetchResult( - 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. - *

- * 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 properties, - ObjectId folderId, ContentStream contentStream, - VersioningState versioningState, List policies, - List addAces, List removeAces) { - if ((folderId != null) && (folderId.getId() == null)) { - throw new IllegalArgumentException("Folder Id must be set!"); - } - - 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 properties, ObjectId folderId, - VersioningState versioningState, List policies, - List addAces, List removeAces) { - if ((folderId != null) && (folderId.getId() == null)) { - throw new IllegalArgumentException("Folder Id must be set!"); - } - - // 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 properties, ObjectId folderId, - List policies, List addAces, List removeAces) { - if ((folderId != null) && (folderId.getId() == null)) { - throw new IllegalArgumentException("Folder Id must be set!"); - } - - 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 properties, ObjectId folderId, - List policies, List addAces, List removeAces) { - if ((folderId != null) && (folderId.getId() == null)) { - throw new IllegalArgumentException("Folder Id must be set!"); - } - - 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 properties, - List policies, List addAces, List removeAces) { - 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; - } + private static final OperationContext DEFAULT_CONTEXT = new OperationContextImpl(null, false, true, false, + IncludeRelationships.NONE, null, true, null, true); - return createObjectId(newId); - } + private static final Set CREATE_UPDATABILITY = new HashSet(); + 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 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 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 parameters) { + int size = -1; + + return size; + } + + private String determineRepositoryId(Map 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 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 PagingIterable getCheckedOutDocs(int itemsPerPage) { + return getCheckedOutDocs(getDefaultContext(), itemsPerPage); + } + + /* + * (non-Javadoc) + * + * @seeorg.apache.opencmis.client.api.Session#getCheckedOutDocs(org.apache. + * opencmis.client.api. OperationContext, int) + */ + public PagingIterable getCheckedOutDocs(OperationContext context, final int itemsPerPage) { + if (itemsPerPage < 1) { + throw new IllegalArgumentException("itemsPerPage must be > 0!"); + } + + final NavigationService navigationService = getBinding().getNavigationService(); + final ObjectFactory objectFactory = getObjectFactory(); + final OperationContext ctxt = new OperationContextImpl(context); + + return new DefaultPagingIterable(new AbstractPageFetch() { + + @Override + protected AbstractPageFetch.PageFetchResult 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(itemsPerPage), + BigInteger.valueOf(skipCount), null); + + // convert objects + List page = new ArrayList(); + 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(page, checkedOutDocs.getNumItems(), + checkedOutDocs.hasMoreItems()) { + }; + } + }); + } + + /* + * (non-Javadoc) + * + * @see + * org.apache.opencmis.client.api.Session#getContentChanges(java.lang.String + * , int) + */ + public PagingIterable getContentChanges(String changeLogToken, int itemsPerPage) { + 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 filter, boolean includeAcls, + boolean includeAllowableActions, boolean includePolicies, IncludeRelationships includeRelationships, + Set renditionFilter, boolean includePathSegments, String orderBy, boolean cacheEnabled) { + return new OperationContextImpl(filter, includeAcls, includeAllowableActions, includePolicies, + includeRelationships, renditionFilter, includePathSegments, orderBy, cacheEnabled); + } + + /* + * (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 PagingIterable getTypeChildren(final String typeId, final boolean includePropertyDefinitions, + final int itemsPerPage) { + if (itemsPerPage < 1) { + throw new IllegalArgumentException("itemsPerPage must be > 0!"); + } + + final RepositoryService repositoryService = getBinding().getRepositoryService(); + final ObjectFactory objectFactory = this.getObjectFactory(); + final OperationContext ctxt = new OperationContextImpl(context); + + return new DefaultPagingIterable(new AbstractPageFetch() { + + @Override + protected AbstractPageFetch.PageFetchResult fetchPage(long skipCount) { + + // fetch the data + TypeDefinitionList tdl = repositoryService.getTypeChildren( + PersistentSessionImpl.this.getRepositoryId(), typeId, includePropertyDefinitions, BigInteger + .valueOf(itemsPerPage), BigInteger.valueOf(skipCount), null); + + // convert type definitions + List page = new ArrayList(tdl.getList().size()); + for (TypeDefinition typeDefinition : tdl.getList()) { + page.add(objectFactory.convertTypeDefinition(typeDefinition)); + } + + return new AbstractPageFetch.PageFetchResult(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> getTypeDescendants(String typeId, int depth, boolean includePropertyDefinitions) { + List descendants = getBinding().getRepositoryService().getTypeDescendants( + getRepositoryId(), typeId, BigInteger.valueOf(depth), includePropertyDefinitions, null); + + return convertTypeDescendants(descendants); + } + + /** + * Converts provider TypeDefinitionContainer to API + * Container. + */ + private List> convertTypeDescendants(List descendantsList) { + List> result = new ArrayList>(); + + for (TypeDefinitionContainer container : descendantsList) { + ObjectType objectType = objectFactory.convertTypeDefinition(container.getTypeDefinition()); + List> children = convertTypeDescendants(container.getChildren()); + + result.add(new ContainerImpl(objectType, children)); + } + + return result; + } + + /* + * (non-Javadoc) + * + * @see org.apache.opencmis.client.api.Session#query(java.lang.String, + * boolean, int) + */ + public PagingIterable query(final String statement, final boolean searchAllVersions, + final int itemsPerPage) { + return query(statement, searchAllVersions, getDefaultContext(), itemsPerPage); + } + + /* + * (non-Javadoc) + * + * @see org.apache.opencmis.client.api.Session#query(java.lang.String, + * boolean, org.apache.opencmis.client.api.OperationContext, int) + */ + public PagingIterable query(final String statement, final boolean searchAllVersions, + OperationContext context, final int itemsPerPage) { + + if (itemsPerPage < 1) { + throw new IllegalArgumentException("itemsPerPage must be > 0!"); + } + + final DiscoveryService discoveryService = getBinding().getDiscoveryService(); + final ObjectFactory objectFactory = this.getObjectFactory(); + final OperationContext ctxt = new OperationContextImpl(context); + + return new DefaultPagingIterable(new AbstractPageFetch() { + + @Override + protected AbstractPageFetch.PageFetchResult fetchPage(long skipCount) { + + // fetch the data + ObjectList resultList = discoveryService.query(getRepositoryId(), statement, searchAllVersions, ctxt + .isIncludeAllowableActions(), ctxt.getIncludeRelationships(), ctxt.getRenditionFilterString(), + BigInteger.valueOf(itemsPerPage), BigInteger.valueOf(skipCount), null); + + // convert type definitions + List page = new ArrayList(); + if (resultList.getObjects() != null) { + for (ObjectData objectData : resultList.getObjects()) { + if (objectData == null) { + continue; + } + + page.add(objectFactory.convertQueryResult(objectData)); + } + } + + return new AbstractPageFetch.PageFetchResult(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. + *

+ * 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 properties, ObjectId folderId, ContentStream contentStream, + VersioningState versioningState, List policies, List addAces, List removeAces) { + if ((folderId != null) && (folderId.getId() == null)) { + throw new IllegalArgumentException("Folder Id must be set!"); + } + + 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 properties, ObjectId folderId, + VersioningState versioningState, List policies, List addAces, List removeAces) { + if ((folderId != null) && (folderId.getId() == null)) { + throw new IllegalArgumentException("Folder Id must be set!"); + } + + // 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 properties, ObjectId folderId, List policies, + List addAces, List removeAces) { + if ((folderId != null) && (folderId.getId() == null)) { + throw new IllegalArgumentException("Folder Id must be set!"); + } + + 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 properties, ObjectId folderId, List policies, + List addAces, List removeAces) { + if ((folderId != null) && (folderId.getId() == null)) { + throw new IllegalArgumentException("Folder Id must be set!"); + } + + 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 properties, List policies, List addAces, + List removeAces) { + 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); + } } Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/QueryResultImpl.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/QueryResultImpl.java?rev=936922&r1=936921&r2=936922&view=diff ============================================================================== --- incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/QueryResultImpl.java (original) +++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/QueryResultImpl.java Thu Apr 22 16:04:19 2010 @@ -40,182 +40,182 @@ import org.apache.chemistry.opencmis.com */ public class QueryResultImpl implements QueryResult, Serializable { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; - private Map> propertiesById; - private Map> propertiesByQueryName; - private AllowableActions allowableActions; - private List relationships; - private List renditions; - - /** - * Constructor. - */ - public QueryResultImpl(Session session, ObjectData objectData) { - if (objectData != null) { - - ObjectFactory of = session.getObjectFactory(); - - // handle properties - if (objectData.getProperties() != null) { - propertiesById = new LinkedHashMap>(); - propertiesByQueryName = new LinkedHashMap>(); - - List> queryProperties = of.convertQueryProperties(objectData.getProperties()); - - for (PropertyData property : queryProperties) { - propertiesById.put(property.getId(), property); - propertiesByQueryName.put(property.getQueryName(), property); - } - } - - // handle allowable actions - if (objectData.getAllowableActions() != null) { - this.allowableActions = objectData.getAllowableActions(); - } - - // handle relationships - if (objectData.getRelationships() != null) { - relationships = new ArrayList(); - for (ObjectData rod : objectData.getRelationships()) { - CmisObject relationship = of.convertObject(rod, session.getDefaultContext()); - if (relationship instanceof Relationship) { - relationships.add((Relationship) relationship); - } - } - } - - // handle renditions - if (objectData.getRenditions() != null) { - this.renditions = new ArrayList(); - for (RenditionData rd : objectData.getRenditions()) { - this.renditions.add(of.convertRendition(null, rd)); - } - } - } - } - - /* - * (non-Javadoc) - * - * @see org.apache.opencmis.client.api.QueryResult#getProperties() - */ - public List> getProperties() { - return new ArrayList>(propertiesById.values()); - } - - /* - * (non-Javadoc) - * - * @see - * org.apache.opencmis.client.api.QueryResult#getPropertyById(java.lang. - * String) - */ - @SuppressWarnings("unchecked") - public PropertyData getPropertyById(String id) { - return (PropertyData) propertiesById.get(id); - } - - /* - * (non-Javadoc) - * - * @see - * org.apache.opencmis.client.api.QueryResult#getPropertyByQueryName(java - * .lang.String) - */ - @SuppressWarnings("unchecked") - public PropertyData getPropertyByQueryName(String queryName) { - return (PropertyData) propertiesByQueryName.get(queryName); - } - - /* - * (non-Javadoc) - * - * @see - * org.apache.opencmis.client.api.QueryResult#getPropertyValueById(java. - * lang.String) - */ - public T getPropertyValueById(String id) { - PropertyData property = getPropertyById(id); - if (property == null) { - return null; - } - - return property.getFirstValue(); - } - - /* - * (non-Javadoc) - * - * @see - * org.apache.opencmis.client.api.QueryResult#getPropertyValueByQueryName - * (java.lang.String) - */ - public T getPropertyValueByQueryName(String queryName) { - PropertyData property = getPropertyByQueryName(queryName); - if (property == null) { - return null; - } - - return property.getFirstValue(); - } - - /* - * (non-Javadoc) - * - * @see - * org.apache.opencmis.client.api.QueryResult#getPropertyMultivalueById( - * java.lang.String) - */ - public List getPropertyMultivalueById(String id) { - PropertyData property = getPropertyById(id); - if (property == null) { - return null; - } - - return property.getValues(); - } - - /* - * (non-Javadoc) - * - * @see - * org.apache.opencmis.client.api.QueryResult#getPropertyMultivalueByQueryName - * (java.lang.String) - */ - public List getPropertyMultivalueByQueryName(String queryName) { - PropertyData property = getPropertyByQueryName(queryName); - if (property == null) { - return null; - } - - return property.getValues(); - } - - /* - * (non-Javadoc) - * - * @see org.apache.opencmis.client.api.QueryResult#getAllowableActions() - */ - public AllowableActions getAllowableActions() { - return allowableActions; - } - - /* - * (non-Javadoc) - * - * @see org.apache.opencmis.client.api.QueryResult#getRelationships() - */ - public List getRelationships() { - return relationships; - } - - /* - * (non-Javadoc) - * - * @see org.apache.opencmis.client.api.QueryResult#getRenditions() - */ - public List getRenditions() { - return renditions; - } + private Map> propertiesById; + private Map> propertiesByQueryName; + private AllowableActions allowableActions; + private List relationships; + private List renditions; + + /** + * Constructor. + */ + public QueryResultImpl(Session session, ObjectData objectData) { + if (objectData != null) { + + ObjectFactory of = session.getObjectFactory(); + + // handle properties + if (objectData.getProperties() != null) { + propertiesById = new LinkedHashMap>(); + propertiesByQueryName = new LinkedHashMap>(); + + List> queryProperties = of.convertQueryProperties(objectData.getProperties()); + + for (PropertyData property : queryProperties) { + propertiesById.put(property.getId(), property); + propertiesByQueryName.put(property.getQueryName(), property); + } + } + + // handle allowable actions + if (objectData.getAllowableActions() != null) { + this.allowableActions = objectData.getAllowableActions(); + } + + // handle relationships + if (objectData.getRelationships() != null) { + relationships = new ArrayList(); + for (ObjectData rod : objectData.getRelationships()) { + CmisObject relationship = of.convertObject(rod, session.getDefaultContext()); + if (relationship instanceof Relationship) { + relationships.add((Relationship) relationship); + } + } + } + + // handle renditions + if (objectData.getRenditions() != null) { + this.renditions = new ArrayList(); + for (RenditionData rd : objectData.getRenditions()) { + this.renditions.add(of.convertRendition(null, rd)); + } + } + } + } + + /* + * (non-Javadoc) + * + * @see org.apache.opencmis.client.api.QueryResult#getProperties() + */ + public List> getProperties() { + return new ArrayList>(propertiesById.values()); + } + + /* + * (non-Javadoc) + * + * @see + * org.apache.opencmis.client.api.QueryResult#getPropertyById(java.lang. + * String) + */ + @SuppressWarnings("unchecked") + public PropertyData getPropertyById(String id) { + return (PropertyData) propertiesById.get(id); + } + + /* + * (non-Javadoc) + * + * @see + * org.apache.opencmis.client.api.QueryResult#getPropertyByQueryName(java + * .lang.String) + */ + @SuppressWarnings("unchecked") + public PropertyData getPropertyByQueryName(String queryName) { + return (PropertyData) propertiesByQueryName.get(queryName); + } + + /* + * (non-Javadoc) + * + * @see + * org.apache.opencmis.client.api.QueryResult#getPropertyValueById(java. + * lang.String) + */ + public T getPropertyValueById(String id) { + PropertyData property = getPropertyById(id); + if (property == null) { + return null; + } + + return property.getFirstValue(); + } + + /* + * (non-Javadoc) + * + * @see + * org.apache.opencmis.client.api.QueryResult#getPropertyValueByQueryName + * (java.lang.String) + */ + public T getPropertyValueByQueryName(String queryName) { + PropertyData property = getPropertyByQueryName(queryName); + if (property == null) { + return null; + } + + return property.getFirstValue(); + } + + /* + * (non-Javadoc) + * + * @see + * org.apache.opencmis.client.api.QueryResult#getPropertyMultivalueById( + * java.lang.String) + */ + public List getPropertyMultivalueById(String id) { + PropertyData property = getPropertyById(id); + if (property == null) { + return null; + } + + return property.getValues(); + } + + /* + * (non-Javadoc) + * + * @see + * org.apache.opencmis.client.api.QueryResult#getPropertyMultivalueByQueryName + * (java.lang.String) + */ + public List getPropertyMultivalueByQueryName(String queryName) { + PropertyData property = getPropertyByQueryName(queryName); + if (property == null) { + return null; + } + + return property.getValues(); + } + + /* + * (non-Javadoc) + * + * @see org.apache.opencmis.client.api.QueryResult#getAllowableActions() + */ + public AllowableActions getAllowableActions() { + return allowableActions; + } + + /* + * (non-Javadoc) + * + * @see org.apache.opencmis.client.api.QueryResult#getRelationships() + */ + public List getRelationships() { + return relationships; + } + + /* + * (non-Javadoc) + * + * @see org.apache.opencmis.client.api.QueryResult#getRenditions() + */ + public List getRenditions() { + return renditions; + } } Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/RenditionImpl.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/RenditionImpl.java?rev=936922&r1=936921&r2=936922&view=diff ============================================================================== --- incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/RenditionImpl.java (original) +++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/RenditionImpl.java Thu Apr 22 16:04:19 2010 @@ -33,63 +33,63 @@ import org.apache.chemistry.opencmis.com */ public class RenditionImpl extends RenditionDataImpl implements Rendition { - private Session session; - private String objectId; + private Session session; + private String objectId; - /** - * Constructor. - */ - public RenditionImpl(Session session, String objectId, String streamId, String renditionDocumentId, String kind, - long length, String mimeType, String title, int height, int width) { - super(streamId, mimeType, BigInteger.valueOf(length), kind, title, BigInteger.valueOf(width), BigInteger - .valueOf(height), renditionDocumentId); - this.session = session; - this.objectId = objectId; - } - - public long getLength() { - return fLength == null ? -1 : fLength.longValue(); - } - - public long getHeight() { - return fHeight == null ? -1 : fHeight.longValue(); - } - - public long getWidth() { - return fWidth == null ? -1 : fWidth.longValue(); - } - - public Document getRenditionDocument() { - return getRenditionDocument(session.getDefaultContext()); - } - - public Document getRenditionDocument(OperationContext context) { - if (fRenditionDocumentId == null) { - return null; - } - CmisObject rendDoc = session.getObject(session.createObjectId(fRenditionDocumentId), context); - if (!(rendDoc instanceof Document)) { - return null; - } - - return (Document) rendDoc; - } - - public ContentStream getContentStream() { - if ((objectId == null) || (fStreamId == null)) { - return null; - } - - ContentStream contentStream = session.getBinding().getObjectService().getContentStream( - session.getRepositoryInfo().getId(), objectId, fStreamId, null, null, null); - if (contentStream == null) { - return null; - } - - long length = contentStream.getBigLength() == null ? -1 : contentStream.getBigLength().longValue(); - - return session.getObjectFactory().createContentStream(contentStream.getFileName(), length, - contentStream.getMimeType(), contentStream.getStream()); - } + /** + * Constructor. + */ + public RenditionImpl(Session session, String objectId, String streamId, String renditionDocumentId, String kind, + long length, String mimeType, String title, int height, int width) { + super(streamId, mimeType, BigInteger.valueOf(length), kind, title, BigInteger.valueOf(width), BigInteger + .valueOf(height), renditionDocumentId); + this.session = session; + this.objectId = objectId; + } + + public long getLength() { + return fLength == null ? -1 : fLength.longValue(); + } + + public long getHeight() { + return fHeight == null ? -1 : fHeight.longValue(); + } + + public long getWidth() { + return fWidth == null ? -1 : fWidth.longValue(); + } + + public Document getRenditionDocument() { + return getRenditionDocument(session.getDefaultContext()); + } + + public Document getRenditionDocument(OperationContext context) { + if (fRenditionDocumentId == null) { + return null; + } + CmisObject rendDoc = session.getObject(session.createObjectId(fRenditionDocumentId), context); + if (!(rendDoc instanceof Document)) { + return null; + } + + return (Document) rendDoc; + } + + public ContentStream getContentStream() { + if ((objectId == null) || (fStreamId == null)) { + return null; + } + + ContentStream contentStream = session.getBinding().getObjectService().getContentStream( + session.getRepositoryInfo().getId(), objectId, fStreamId, null, null, null); + if (contentStream == null) { + return null; + } + + long length = contentStream.getBigLength() == null ? -1 : contentStream.getBigLength().longValue(); + + return session.getObjectFactory().createContentStream(contentStream.getFileName(), length, + contentStream.getMimeType(), contentStream.getStream()); + } } 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=936922&r1=936921&r2=936922&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 Apr 22 16:04:19 2010 @@ -30,21 +30,21 @@ import org.apache.chemistry.opencmis.cli */ public interface Cache { - boolean containsId(String objectId, String cacheKey); + boolean containsId(String objectId, String cacheKey); - boolean containsPath(String path, String cacheKey); + boolean containsPath(String path, String cacheKey); - void put(CmisObject object, String cacheKey); + void put(CmisObject object, String cacheKey); - void putPath(String path, CmisObject object, String cacheKey); + void putPath(String path, CmisObject object, String cacheKey); - CmisObject getById(String objectId, String cacheKey); + CmisObject getById(String objectId, String cacheKey); - CmisObject getByPath(String path, String cacheKey); + CmisObject getByPath(String path, String cacheKey); - void clear(); + void clear(); - void resetPathCache(); + void resetPathCache(); - int getCacheSize(); + int getCacheSize(); }