chemistry-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From sklev...@apache.org
Subject svn commit: r937209 [2/3] - in /incubator/chemistry/opencmis/trunk: chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/ chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main...
Date Fri, 23 Apr 2010 09:28:57 GMT
Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/PersistentFolderImpl.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/PersistentFolderImpl.java?rev=937209&r1=937208&r2=937209&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/PersistentFolderImpl.java
(original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/PersistentFolderImpl.java
Fri Apr 23 09:28:57 2010
@@ -49,6 +49,7 @@ import org.apache.chemistry.opencmis.com
 import org.apache.chemistry.opencmis.commons.api.ObjectInFolderContainer;
 import org.apache.chemistry.opencmis.commons.api.ObjectInFolderData;
 import org.apache.chemistry.opencmis.commons.api.ObjectInFolderList;
+import org.apache.chemistry.opencmis.commons.api.ObjectList;
 import org.apache.chemistry.opencmis.commons.api.PropertyData;
 import org.apache.chemistry.opencmis.commons.api.PropertyString;
 import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
@@ -60,504 +61,494 @@ import org.apache.chemistry.opencmis.com
 
 public class PersistentFolderImpl extends AbstractPersistentFilableCmisObject implements
Folder {
 
-    private static final Set<Updatability> CREATE_UPDATABILITY = new HashSet<Updatability>();
-    static {
-        CREATE_UPDATABILITY.add(Updatability.ONCREATE);
-        CREATE_UPDATABILITY.add(Updatability.READWRITE);
-    }
-
-    /**
-     * Constructor.
-     */
-    public PersistentFolderImpl(PersistentSessionImpl session, ObjectType objectType, ObjectData
objectData,
-            OperationContext context) {
-        initialize(session, objectType, objectData, context);
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.apache.opencmis.client.api.Folder#createDocument(java.util.Map,
-     * org.apache.opencmis.client.api.ContentStream,
-     * org.apache.opencmis.commons.enums.VersioningState, java.util.List,
-     * java.util.List, java.util.List,
-     * org.apache.opencmis.client.api.OperationContext)
-     */
-    public Document createDocument(Map<String, ?> properties, ContentStream contentStream,
-            VersioningState versioningState, List<Policy> policies, List<Ace>
addAces, List<Ace> removeAces,
-            OperationContext context) {
-        String objectId = getObjectId();
-
-        ObjectFactory of = getObjectFactory();
-
-        String newId = getBinding().getObjectService().createDocument(getRepositoryId(),
-                of.convertProperties(properties, null, CREATE_UPDATABILITY), objectId,
-                of.convertContentStream(contentStream), versioningState, of.convertPolicies(policies),
-                of.convertAces(addAces), of.convertAces(removeAces), null);
-
-        // if no context is provided the object will not be fetched
-        if ((context == null) || (newId == null)) {
-            return null;
-        }
-
-        // get the new object
-        CmisObject object = getSession().getObject(getSession().createObjectId(newId), context);
-        if (!(object instanceof Document)) {
-            throw new CmisRuntimeException("Newly created object is not a document! New id:
" + newId);
-        }
-
-        return (Document) object;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see
-     * org.apache.opencmis.client.api.Folder#createDocumentFromSource(org.apache
-     * .opencmis.client.api .ObjectId, java.util.Map,
-     * org.apache.opencmis.commons.enums.VersioningState, java.util.List,
-     * java.util.List, java.util.List,
-     * org.apache.opencmis.client.api.OperationContext)
-     */
-    public Document createDocumentFromSource(ObjectId source, Map<String, ?> properties,
-            VersioningState versioningState, List<Policy> policies, List<Ace>
addAces, List<Ace> removeAces,
-            OperationContext context) {
-        if ((source == null) || (source.getId() == null)) {
-            throw new IllegalArgumentException("Source must be set!");
-        }
-
-        String objectId = getObjectId();
-
-        // get the type of the source document
-        ObjectType type = null;
-        if (source instanceof CmisObject) {
-            type = ((CmisObject) source).getBaseType();
-        } else {
-            CmisObject sourceObj = getSession().getObject(source);
-            type = sourceObj.getType();
-        }
-
-        if (type.getBaseTypeId() != BaseTypeId.CMIS_DOCUMENT) {
-            throw new IllegalArgumentException("Source object must be a document!");
-        }
-
-        ObjectFactory of = getObjectFactory();
-
-        Set<Updatability> updatebility = new HashSet<Updatability>();
-        updatebility.add(Updatability.READWRITE);
-
-        String newId = getBinding().getObjectService().createDocumentFromSource(getRepositoryId(),
source.getId(),
-                of.convertProperties(properties, type, updatebility), objectId, versioningState,
-                of.convertPolicies(policies), of.convertAces(addAces), of.convertAces(removeAces),
null);
-
-        // if no context is provided the object will not be fetched
-        if ((context == null) || (newId == null)) {
-            return null;
-        }
-
-        // get the new object
-        CmisObject object = getSession().getObject(getSession().createObjectId(newId), context);
-        if (!(object instanceof Document)) {
-            throw new CmisRuntimeException("Newly created object is not a document! New id:
" + newId);
-        }
-
-        return (Document) object;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.apache.opencmis.client.api.Folder#createFolder(java.util.Map,
-     * java.util.List, java.util.List, java.util.List,
-     * org.apache.opencmis.client.api.OperationContext)
-     */
-    public Folder createFolder(Map<String, ?> properties, List<Policy> policies,
List<Ace> addAces,
-            List<Ace> removeAces, OperationContext context) {
-        String objectId = getObjectId();
-
-        ObjectFactory of = getObjectFactory();
-
-        String newId = getBinding().getObjectService().createFolder(getRepositoryId(),
-                of.convertProperties(properties, null, CREATE_UPDATABILITY), objectId, of.convertPolicies(policies),
-                of.convertAces(addAces), of.convertAces(removeAces), null);
-
-        // if no context is provided the object will not be fetched
-        if ((context == null) || (newId == null)) {
-            return null;
-        }
-
-        // get the new object
-        CmisObject object = getSession().getObject(getSession().createObjectId(newId), context);
-        if (!(object instanceof Folder)) {
-            throw new CmisRuntimeException("Newly created object is not a folder! New id:
" + newId);
-        }
-
-        return (Folder) object;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.apache.opencmis.client.api.Folder#createPolicy(java.util.Map,
-     * java.util.List, java.util.List, java.util.List,
-     * org.apache.opencmis.client.api.OperationContext)
-     */
-    public Policy createPolicy(Map<String, ?> properties, List<Policy> policies,
List<Ace> addAces,
-            List<Ace> removeAces, OperationContext context) {
-        String objectId = getObjectId();
-
-        ObjectFactory of = getObjectFactory();
-
-        String newId = getBinding().getObjectService().createPolicy(getRepositoryId(),
-                of.convertProperties(properties, null, CREATE_UPDATABILITY), objectId, of.convertPolicies(policies),
-                of.convertAces(addAces), of.convertAces(removeAces), null);
-
-        // if no context is provided the object will not be fetched
-        if ((context == null) || (newId == null)) {
-            return null;
-        }
-
-        // get the new object
-        CmisObject object = getSession().getObject(getSession().createObjectId(newId), context);
-        if (!(object instanceof Policy)) {
-            throw new CmisRuntimeException("Newly created object is not a policy! New id:
" + newId);
-        }
-
-        return (Policy) object;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.apache.opencmis.client.api.Folder#deleteTree(boolean,
-     * org.apache.opencmis.commons.enums.UnfileObjects, boolean)
-     */
-    public List<String> deleteTree(boolean allVersions, UnfileObject unfile, boolean
continueOnFailure) {
-        String repositoryId = getRepositoryId();
-        String objectId = getObjectId();
-
-        FailedToDeleteData failed = getBinding().getObjectService().deleteTree(repositoryId,
objectId, allVersions,
-                unfile, continueOnFailure, null);
-
-        return failed.getIds();
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.apache.opencmis.client.api.Folder#getAllowedChildObjectTypes()
-     */
-    public List<ObjectType> getAllowedChildObjectTypes() {
-        List<ObjectType> result = new ArrayList<ObjectType>();
-
-        readLock();
-        try {
-            List<String> otids = getPropertyMultivalue(PropertyIds.ALLOWED_CHILD_OBJECT_TYPE_IDS);
-            if (otids == null) {
-                return result;
-            }
-
-            for (String otid : otids) {
-                result.add(getSession().getTypeDefinition(otid));
-            }
-        } finally {
-            readUnlock();
-        }
-
-        return result;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.apache.opencmis.client.api.Folder#getCheckedOutDocs(int)
-     */
-    public PagingIterable<Document> getCheckedOutDocs(int itemsPerPage) {
-        return getCheckedOutDocs(getSession().getDefaultContext(), itemsPerPage);
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @seeorg.apache.opencmis.client.api.Folder#getCheckedOutDocs(org.apache.
-     * opencmis.client.api. OperationContext, int)
-     */
-    public PagingIterable<Document> getCheckedOutDocs(OperationContext context, final
int itemsPerPage) {
-        // if (itemsPerPage < 1) {
-        // throw new IllegalArgumentException("itemsPerPage must be > 0!");
-        // }
-        //
-        // final String objectId = getObjectId();
-        // final NavigationService nagivationService =
-        // getBinding().getNavigationService();
-        // final ObjectFactory objectFactory = getSession().getObjectFactory();
-        // final OperationContext ctxt = new OperationContextImpl(context);
-        //
-        // return new AbstractPagingList<Document>() {
-        //
-        // @Override
-        // protected FetchResult fetchPage(int pageNumber) {
-        // int skipCount = pageNumber * getMaxItemsPerPage();
-        //
-        // // get checked out documents for this folder
-        // ObjectList checkedOutDocs =
-        // nagivationService.getCheckedOutDocs(getRepositoryId(), objectId, ctxt
-        // .getFilterString(), ctxt.getOrderBy(),
-        // ctxt.isIncludeAllowableActions(), ctxt
-        // .getIncludeRelationships(), ctxt.getRenditionFilterString(),
-        // BigInteger
-        // .valueOf(getMaxItemsPerPage()), 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 FetchResult(page, checkedOutDocs.getNumItems(),
-        // checkedOutDocs.hasMoreItems());
-        // }
-        //
-        // @Override
-        // public int getMaxItemsPerPage() {
-        // return itemsPerPage;
-        // }
-        // };
-        return null;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.apache.opencmis.client.api.Folder#getChildren(int)
-     */
-    public PagingIterable<CmisObject> getChildren(int itemsPerPage) {
-        return getChildren(getSession().getDefaultContext(), itemsPerPage);
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see
-     * org.apache.opencmis.client.api.Folder#getChildren(org.apache.opencmis
-     * .client.api.OperationContext , int)
-     */
-    public PagingIterable<CmisObject> getChildren(OperationContext context, final int
itemsPerPage) {
-
-        if (itemsPerPage < 1) {
-            throw new IllegalArgumentException("itemsPerPage must be > 0!");
-        }
-
-        final String objectId = getObjectId();
-        final NavigationService navigationService = getBinding().getNavigationService();
-        final ObjectFactory objectFactory = getSession().getObjectFactory();
-        final OperationContext ctxt = new OperationContextImpl(context);
-
-        return new DefaultPagingIterable<CmisObject>(new AbstractPageFetch<CmisObject>()
{
-
-            @Override
-            protected AbstractPageFetch.PageFetchResult<CmisObject> fetchPage(long
skipCount) {
-
-                // get the children
-                ObjectInFolderList children = navigationService.getChildren(getRepositoryId(),
objectId, ctxt
-                        .getFilterString(), ctxt.getOrderBy(), ctxt.isIncludeAllowableActions(),
ctxt
-                        .getIncludeRelationships(), ctxt.getRenditionFilterString(), ctxt.isIncludePathSegments(),
-                        BigInteger.valueOf(itemsPerPage), BigInteger.valueOf(skipCount),
null);
-
-                // convert objects
-                List<CmisObject> page = new ArrayList<CmisObject>();
-                List<ObjectInFolderData> childObjects = children.getObjects();
-                if (childObjects != null) {
-                    for (ObjectInFolderData objectData : childObjects) {
-                        if (objectData.getObject() != null) {
-                            page.add(objectFactory.convertObject(objectData.getObject(),
ctxt));
-                        }
-                    }
-                }
-
-                return new AbstractPageFetch.PageFetchResult<CmisObject>(page, children.getNumItems(),
children
-                        .hasMoreItems()) {
-                };
-            }
-        });
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.apache.opencmis.client.api.Folder#getDescendants(int)
-     */
-    public List<Tree<FileableCmisObject>> getDescendants(int depth) {
-        return getDescendants(depth, getSession().getDefaultContext());
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.apache.opencmis.client.api.Folder#getDescendants(int,
-     * org.apache.opencmis.client.api.OperationContext)
-     */
-    public List<Tree<FileableCmisObject>> getDescendants(int depth, OperationContext
context) {
-        String objectId = getObjectId();
-
-        // get the descendants
-        List<ObjectInFolderContainer> providerContainerList = getBinding().getNavigationService().getDescendants(
-                getRepositoryId(), objectId, BigInteger.valueOf(depth), context.getFilterString(),
-                context.isIncludeAllowableActions(), context.getIncludeRelationships(),
-                context.getRenditionFilterString(), context.isIncludePathSegments(), null);
-
-        return convertProviderContainer(providerContainerList, context);
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.apache.opencmis.client.api.Folder#getFolderTree(int)
-     */
-    public List<Tree<FileableCmisObject>> getFolderTree(int depth) {
-        return getFolderTree(depth, getSession().getDefaultContext());
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.apache.opencmis.client.api.Folder#getFolderTree(int,
-     * org.apache.opencmis.client.api.OperationContext)
-     */
-    public List<Tree<FileableCmisObject>> getFolderTree(int depth, OperationContext
context) {
-        String objectId = getObjectId();
-
-        // get the folder tree
-        List<ObjectInFolderContainer> providerContainerList = getBinding().getNavigationService().getFolderTree(
-                getRepositoryId(), objectId, BigInteger.valueOf(depth), context.getFilterString(),
-                context.isIncludeAllowableActions(), context.getIncludeRelationships(),
-                context.getRenditionFilterString(), context.isIncludePathSegments(), null);
-
-        return convertProviderContainer(providerContainerList, context);
-    }
-
-    /**
-     * Converts a provider container into an API container.
-     */
-    private List<Tree<FileableCmisObject>> convertProviderContainer(
-            List<ObjectInFolderContainer> providerContainerList, OperationContext context)
{
-        if (providerContainerList == null) {
-            return null;
-        }
-
-        ObjectFactory of = getSession().getObjectFactory();
-
-        List<Tree<FileableCmisObject>> result = new ArrayList<Tree<FileableCmisObject>>();
-        for (ObjectInFolderContainer oifc : providerContainerList) {
-            if ((oifc.getObject() == null) || (oifc.getObject().getObject() == null)) {
-                // shouldn't happen ...
-                continue;
-            }
-
-            // convert the object
-            CmisObject object = of.convertObject(oifc.getObject().getObject(), context);
-            if (!(object instanceof FileableCmisObject)) {
-                // the repository must not return objects that are not fileable,
-                // but you never know...
-                continue;
-            }
-
-            // convert the children
-            List<Tree<FileableCmisObject>> children = convertProviderContainer(oifc.getChildren(),
context);
-
-            // add both to current container
-            result.add(new ContainerImpl<FileableCmisObject>((FileableCmisObject) object,
children));
-        }
-
-        return result;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.apache.opencmis.client.api.Folder#isRootFolder()
-     */
-    public boolean isRootFolder() {
-        String objectId = getObjectId();
-        String rootFolderId = getSession().getRepositoryInfo().getRootFolderId();
-
-        return objectId.equals(rootFolderId);
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.apache.opencmis.client.api.Folder#getFolderParent()
-     */
-    public Folder getFolderParent() {
-        if (isRootFolder()) {
-            return null;
-        }
-
-        List<Folder> parents = super.getParents();
-        if ((parents == null) || (parents.isEmpty())) {
-            return null;
-        }
-
-        return parents.get(0);
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.apache.opencmis.client.api.Folder#getPath()
-     */
-    public String getPath() {
-        String path;
-
-        readLock();
-        try {
-            // get the path property
-            path = getPropertyValue(PropertyIds.PATH);
-
-            // if the path property isn't set, get it
-            if (path == null) {
-                String objectId = getObjectId();
-                ObjectData objectData = getBinding().getObjectService().getObject(getRepositoryId(),
objectId,
-                        PropertyIds.PATH, false, IncludeRelationships.NONE, "cmis:none",
false, false, null);
-
-                if ((objectData.getProperties() != null) && (objectData.getProperties().getProperties()
!= null)) {
-                    PropertyData<?> pathProperty = objectData.getProperties().getProperties().get(PropertyIds.PATH);
-
-                    if (pathProperty instanceof PropertyString) {
-                        path = ((PropertyString) pathProperty).getFirstValue();
-                    }
-                }
-            }
-        } finally {
-            readUnlock();
-        }
-
-        // we still don't know the path ... it's not a CMIS compliant repository
-        if (path == null) {
-            throw new CmisRuntimeException("Repository didn't return " + PropertyIds.PATH
+ "!");
-        }
-
-        return path;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see
-     * org.apache.opencmis.client.runtime.AbstractPersistentFilableCmisObject
-     * #getPaths()
-     */
-    @Override
-    public List<String> getPaths() {
-        return Collections.singletonList(getPath());
-    }
+	private static final Set<Updatability> CREATE_UPDATABILITY = new HashSet<Updatability>();
+	static {
+		CREATE_UPDATABILITY.add(Updatability.ONCREATE);
+		CREATE_UPDATABILITY.add(Updatability.READWRITE);
+	}
+
+	/**
+	 * Constructor.
+	 */
+	public PersistentFolderImpl(PersistentSessionImpl session, ObjectType objectType, ObjectData
objectData,
+			OperationContext context) {
+		initialize(session, objectType, objectData, context);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.apache.opencmis.client.api.Folder#createDocument(java.util.Map,
+	 * org.apache.opencmis.client.api.ContentStream,
+	 * org.apache.opencmis.commons.enums.VersioningState, java.util.List,
+	 * java.util.List, java.util.List,
+	 * org.apache.opencmis.client.api.OperationContext)
+	 */
+	public Document createDocument(Map<String, ?> properties, ContentStream contentStream,
+			VersioningState versioningState, List<Policy> policies, List<Ace> addAces,
List<Ace> removeAces,
+			OperationContext context) {
+		String objectId = getObjectId();
+
+		ObjectFactory of = getObjectFactory();
+
+		String newId = getBinding().getObjectService().createDocument(getRepositoryId(),
+				of.convertProperties(properties, null, CREATE_UPDATABILITY), objectId,
+				of.convertContentStream(contentStream), versioningState, of.convertPolicies(policies),
+				of.convertAces(addAces), of.convertAces(removeAces), null);
+
+		// if no context is provided the object will not be fetched
+		if ((context == null) || (newId == null)) {
+			return null;
+		}
+
+		// get the new object
+		CmisObject object = getSession().getObject(getSession().createObjectId(newId), context);
+		if (!(object instanceof Document)) {
+			throw new CmisRuntimeException("Newly created object is not a document! New id: " + newId);
+		}
+
+		return (Document) object;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.apache.opencmis.client.api.Folder#createDocumentFromSource(org.apache
+	 * .opencmis.client.api .ObjectId, java.util.Map,
+	 * org.apache.opencmis.commons.enums.VersioningState, java.util.List,
+	 * java.util.List, java.util.List,
+	 * org.apache.opencmis.client.api.OperationContext)
+	 */
+	public Document createDocumentFromSource(ObjectId source, Map<String, ?> properties,
+			VersioningState versioningState, List<Policy> policies, List<Ace> addAces,
List<Ace> removeAces,
+			OperationContext context) {
+		if ((source == null) || (source.getId() == null)) {
+			throw new IllegalArgumentException("Source must be set!");
+		}
+
+		String objectId = getObjectId();
+
+		// get the type of the source document
+		ObjectType type = null;
+		if (source instanceof CmisObject) {
+			type = ((CmisObject) source).getBaseType();
+		} else {
+			CmisObject sourceObj = getSession().getObject(source);
+			type = sourceObj.getType();
+		}
+
+		if (type.getBaseTypeId() != BaseTypeId.CMIS_DOCUMENT) {
+			throw new IllegalArgumentException("Source object must be a document!");
+		}
+
+		ObjectFactory of = getObjectFactory();
+
+		Set<Updatability> updatebility = new HashSet<Updatability>();
+		updatebility.add(Updatability.READWRITE);
+
+		String newId = getBinding().getObjectService().createDocumentFromSource(getRepositoryId(),
source.getId(),
+				of.convertProperties(properties, type, updatebility), objectId, versioningState,
+				of.convertPolicies(policies), of.convertAces(addAces), of.convertAces(removeAces), null);
+
+		// if no context is provided the object will not be fetched
+		if ((context == null) || (newId == null)) {
+			return null;
+		}
+
+		// get the new object
+		CmisObject object = getSession().getObject(getSession().createObjectId(newId), context);
+		if (!(object instanceof Document)) {
+			throw new CmisRuntimeException("Newly created object is not a document! New id: " + newId);
+		}
+
+		return (Document) object;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.apache.opencmis.client.api.Folder#createFolder(java.util.Map,
+	 * java.util.List, java.util.List, java.util.List,
+	 * org.apache.opencmis.client.api.OperationContext)
+	 */
+	public Folder createFolder(Map<String, ?> properties, List<Policy> policies,
List<Ace> addAces,
+			List<Ace> removeAces, OperationContext context) {
+		String objectId = getObjectId();
+
+		ObjectFactory of = getObjectFactory();
+
+		String newId = getBinding().getObjectService().createFolder(getRepositoryId(),
+				of.convertProperties(properties, null, CREATE_UPDATABILITY), objectId, of.convertPolicies(policies),
+				of.convertAces(addAces), of.convertAces(removeAces), null);
+
+		// if no context is provided the object will not be fetched
+		if ((context == null) || (newId == null)) {
+			return null;
+		}
+
+		// get the new object
+		CmisObject object = getSession().getObject(getSession().createObjectId(newId), context);
+		if (!(object instanceof Folder)) {
+			throw new CmisRuntimeException("Newly created object is not a folder! New id: " + newId);
+		}
+
+		return (Folder) object;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.apache.opencmis.client.api.Folder#createPolicy(java.util.Map,
+	 * java.util.List, java.util.List, java.util.List,
+	 * org.apache.opencmis.client.api.OperationContext)
+	 */
+	public Policy createPolicy(Map<String, ?> properties, List<Policy> policies,
List<Ace> addAces,
+			List<Ace> removeAces, OperationContext context) {
+		String objectId = getObjectId();
+
+		ObjectFactory of = getObjectFactory();
+
+		String newId = getBinding().getObjectService().createPolicy(getRepositoryId(),
+				of.convertProperties(properties, null, CREATE_UPDATABILITY), objectId, of.convertPolicies(policies),
+				of.convertAces(addAces), of.convertAces(removeAces), null);
+
+		// if no context is provided the object will not be fetched
+		if ((context == null) || (newId == null)) {
+			return null;
+		}
+
+		// get the new object
+		CmisObject object = getSession().getObject(getSession().createObjectId(newId), context);
+		if (!(object instanceof Policy)) {
+			throw new CmisRuntimeException("Newly created object is not a policy! New id: " + newId);
+		}
+
+		return (Policy) object;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.apache.opencmis.client.api.Folder#deleteTree(boolean,
+	 * org.apache.opencmis.commons.enums.UnfileObjects, boolean)
+	 */
+	public List<String> deleteTree(boolean allVersions, UnfileObject unfile, boolean continueOnFailure)
{
+		String repositoryId = getRepositoryId();
+		String objectId = getObjectId();
+
+		FailedToDeleteData failed = getBinding().getObjectService().deleteTree(repositoryId, objectId,
allVersions,
+				unfile, continueOnFailure, null);
+
+		return failed.getIds();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.apache.opencmis.client.api.Folder#getAllowedChildObjectTypes()
+	 */
+	public List<ObjectType> getAllowedChildObjectTypes() {
+		List<ObjectType> result = new ArrayList<ObjectType>();
+
+		readLock();
+		try {
+			List<String> otids = getPropertyMultivalue(PropertyIds.ALLOWED_CHILD_OBJECT_TYPE_IDS);
+			if (otids == null) {
+				return result;
+			}
+
+			for (String otid : otids) {
+				result.add(getSession().getTypeDefinition(otid));
+			}
+		} finally {
+			readUnlock();
+		}
+
+		return result;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.apache.opencmis.client.api.Folder#getCheckedOutDocs(int)
+	 */
+	public PagingIterable<Document> getCheckedOutDocs(int itemsPerPage) {
+		return getCheckedOutDocs(getSession().getDefaultContext(), itemsPerPage);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @seeorg.apache.opencmis.client.api.Folder#getCheckedOutDocs(org.apache.
+	 * opencmis.client.api. OperationContext, int)
+	 */
+	public PagingIterable<Document> getCheckedOutDocs(OperationContext context, final
int itemsPerPage) {
+		if (itemsPerPage < 1) {
+			throw new IllegalArgumentException("itemsPerPage must be > 0!");
+		}
+
+		final String objectId = getObjectId();
+		final NavigationService navigationService = getBinding().getNavigationService();
+		final ObjectFactory objectFactory = getSession().getObjectFactory();
+		final OperationContext ctxt = new OperationContextImpl(context);
+
+		return new DefaultPagingIterable<Document>(new AbstractPageFetch<Document>()
{
+
+			@Override
+			protected AbstractPageFetch.PageFetchResult<Document> fetchPage(long skipCount)
{
+
+				// get checked out documents for this folder
+				ObjectList checkedOutDocs = navigationService.getCheckedOutDocs(getRepositoryId(), objectId,
ctxt
+						.getFilterString(), ctxt.getOrderBy(), ctxt.isIncludeAllowableActions(), ctxt
+						.getIncludeRelationships(), ctxt.getRenditionFilterString(), BigInteger.valueOf(itemsPerPage),
+						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.Folder#getChildren(int)
+	 */
+	public PagingIterable<CmisObject> getChildren(int itemsPerPage) {
+		return getChildren(getSession().getDefaultContext(), itemsPerPage);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.apache.opencmis.client.api.Folder#getChildren(org.apache.opencmis
+	 * .client.api.OperationContext , int)
+	 */
+	public PagingIterable<CmisObject> getChildren(OperationContext context, final int
itemsPerPage) {
+
+		if (itemsPerPage < 1) {
+			throw new IllegalArgumentException("itemsPerPage must be > 0!");
+		}
+
+		final String objectId = getObjectId();
+		final NavigationService navigationService = getBinding().getNavigationService();
+		final ObjectFactory objectFactory = getSession().getObjectFactory();
+		final OperationContext ctxt = new OperationContextImpl(context);
+
+		return new DefaultPagingIterable<CmisObject>(new AbstractPageFetch<CmisObject>()
{
+
+			@Override
+			protected AbstractPageFetch.PageFetchResult<CmisObject> fetchPage(long skipCount)
{
+
+				// get the children
+				ObjectInFolderList children = navigationService.getChildren(getRepositoryId(), objectId,
ctxt
+						.getFilterString(), ctxt.getOrderBy(), ctxt.isIncludeAllowableActions(), ctxt
+						.getIncludeRelationships(), ctxt.getRenditionFilterString(), ctxt.isIncludePathSegments(),
+						BigInteger.valueOf(itemsPerPage), BigInteger.valueOf(skipCount), null);
+
+				// convert objects
+				List<CmisObject> page = new ArrayList<CmisObject>();
+				List<ObjectInFolderData> childObjects = children.getObjects();
+				if (childObjects != null) {
+					for (ObjectInFolderData objectData : childObjects) {
+						if (objectData.getObject() != null) {
+							page.add(objectFactory.convertObject(objectData.getObject(), ctxt));
+						}
+					}
+				}
+
+				return new AbstractPageFetch.PageFetchResult<CmisObject>(page, children.getNumItems(),
children
+						.hasMoreItems()) {
+				};
+			}
+		});
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.apache.opencmis.client.api.Folder#getDescendants(int)
+	 */
+	public List<Tree<FileableCmisObject>> getDescendants(int depth) {
+		return getDescendants(depth, getSession().getDefaultContext());
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.apache.opencmis.client.api.Folder#getDescendants(int,
+	 * org.apache.opencmis.client.api.OperationContext)
+	 */
+	public List<Tree<FileableCmisObject>> getDescendants(int depth, OperationContext
context) {
+		String objectId = getObjectId();
+
+		// get the descendants
+		List<ObjectInFolderContainer> providerContainerList = getBinding().getNavigationService().getDescendants(
+				getRepositoryId(), objectId, BigInteger.valueOf(depth), context.getFilterString(),
+				context.isIncludeAllowableActions(), context.getIncludeRelationships(),
+				context.getRenditionFilterString(), context.isIncludePathSegments(), null);
+
+		return convertProviderContainer(providerContainerList, context);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.apache.opencmis.client.api.Folder#getFolderTree(int)
+	 */
+	public List<Tree<FileableCmisObject>> getFolderTree(int depth) {
+		return getFolderTree(depth, getSession().getDefaultContext());
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.apache.opencmis.client.api.Folder#getFolderTree(int,
+	 * org.apache.opencmis.client.api.OperationContext)
+	 */
+	public List<Tree<FileableCmisObject>> getFolderTree(int depth, OperationContext
context) {
+		String objectId = getObjectId();
+
+		// get the folder tree
+		List<ObjectInFolderContainer> providerContainerList = getBinding().getNavigationService().getFolderTree(
+				getRepositoryId(), objectId, BigInteger.valueOf(depth), context.getFilterString(),
+				context.isIncludeAllowableActions(), context.getIncludeRelationships(),
+				context.getRenditionFilterString(), context.isIncludePathSegments(), null);
+
+		return convertProviderContainer(providerContainerList, context);
+	}
+
+	/**
+	 * Converts a provider container into an API container.
+	 */
+	private List<Tree<FileableCmisObject>> convertProviderContainer(
+			List<ObjectInFolderContainer> providerContainerList, OperationContext context) {
+		if (providerContainerList == null) {
+			return null;
+		}
+
+		ObjectFactory of = getSession().getObjectFactory();
+
+		List<Tree<FileableCmisObject>> result = new ArrayList<Tree<FileableCmisObject>>();
+		for (ObjectInFolderContainer oifc : providerContainerList) {
+			if ((oifc.getObject() == null) || (oifc.getObject().getObject() == null)) {
+				// shouldn't happen ...
+				continue;
+			}
+
+			// convert the object
+			CmisObject object = of.convertObject(oifc.getObject().getObject(), context);
+			if (!(object instanceof FileableCmisObject)) {
+				// the repository must not return objects that are not fileable,
+				// but you never know...
+				continue;
+			}
+
+			// convert the children
+			List<Tree<FileableCmisObject>> children = convertProviderContainer(oifc.getChildren(),
context);
+
+			// add both to current container
+			result.add(new ContainerImpl<FileableCmisObject>((FileableCmisObject) object, children));
+		}
+
+		return result;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.apache.opencmis.client.api.Folder#isRootFolder()
+	 */
+	public boolean isRootFolder() {
+		String objectId = getObjectId();
+		String rootFolderId = getSession().getRepositoryInfo().getRootFolderId();
+
+		return objectId.equals(rootFolderId);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.apache.opencmis.client.api.Folder#getFolderParent()
+	 */
+	public Folder getFolderParent() {
+		if (isRootFolder()) {
+			return null;
+		}
+
+		List<Folder> parents = super.getParents();
+		if ((parents == null) || (parents.isEmpty())) {
+			return null;
+		}
+
+		return parents.get(0);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.apache.opencmis.client.api.Folder#getPath()
+	 */
+	public String getPath() {
+		String path;
+
+		readLock();
+		try {
+			// get the path property
+			path = getPropertyValue(PropertyIds.PATH);
+
+			// if the path property isn't set, get it
+			if (path == null) {
+				String objectId = getObjectId();
+				ObjectData objectData = getBinding().getObjectService().getObject(getRepositoryId(),
objectId,
+						PropertyIds.PATH, false, IncludeRelationships.NONE, "cmis:none", false, false, null);
+
+				if ((objectData.getProperties() != null) && (objectData.getProperties().getProperties()
!= null)) {
+					PropertyData<?> pathProperty = objectData.getProperties().getProperties().get(PropertyIds.PATH);
+
+					if (pathProperty instanceof PropertyString) {
+						path = ((PropertyString) pathProperty).getFirstValue();
+					}
+				}
+			}
+		} finally {
+			readUnlock();
+		}
+
+		// we still don't know the path ... it's not a CMIS compliant repository
+		if (path == null) {
+			throw new CmisRuntimeException("Repository didn't return " + PropertyIds.PATH + "!");
+		}
+
+		return path;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.apache.opencmis.client.runtime.AbstractPersistentFilableCmisObject
+	 * #getPaths()
+	 */
+	@Override
+	public List<String> getPaths() {
+		return Collections.singletonList(getPath());
+	}
 }



Mime
View raw message