You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@chemistry.apache.org by je...@apache.org on 2013/08/19 07:48:40 UTC
svn commit: r1515275 - in
/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory:
server/ storedobj/api/ storedobj/impl/
Author: jens
Date: Mon Aug 19 05:48:40 2013
New Revision: 1515275
URL: http://svn.apache.org/r1515275
Log:
InMemory: simplify interfaces
Modified:
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryMultiFilingServiceImpl.java
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryNavigationServiceImpl.java
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryObjectServiceImpl.java
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/ObjectStore.java
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/ObjectStoreImpl.java
Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryMultiFilingServiceImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryMultiFilingServiceImpl.java?rev=1515275&r1=1515274&r2=1515275&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryMultiFilingServiceImpl.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryMultiFilingServiceImpl.java Mon Aug 19 05:48:40 2013
@@ -22,7 +22,6 @@ import java.util.List;
import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
import org.apache.chemistry.opencmis.commons.exceptions.CmisConstraintException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
import org.apache.chemistry.opencmis.commons.exceptions.CmisNotSupportedException;
import org.apache.chemistry.opencmis.commons.impl.server.ObjectInfoImpl;
import org.apache.chemistry.opencmis.commons.server.CallContext;
@@ -30,7 +29,6 @@ import org.apache.chemistry.opencmis.com
import org.apache.chemistry.opencmis.inmemory.storedobj.api.Filing;
import org.apache.chemistry.opencmis.inmemory.storedobj.api.Folder;
import org.apache.chemistry.opencmis.inmemory.storedobj.api.ObjectStore;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.ObjectStoreMultiFiling;
import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoreManager;
import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoredObject;
import org.slf4j.Logger;
@@ -53,15 +51,15 @@ public class InMemoryMultiFilingServiceI
throw new CmisNotSupportedException(
"Cannot add object to folder, version specific filing is not supported.");
}
-
+ ObjectStore objStore = fStoreManager.getObjectStore(repositoryId);
StoredObject[] sos = validator.addObjectToFolder(context, repositoryId, objectId, folderId, allVersions, extension);
StoredObject so = sos[0];
StoredObject folder = sos[1];
- ObjectStoreMultiFiling osmf = checkObjects(repositoryId, so, folder);
+ checkObjects(repositoryId, so, folder);
Folder newParent = (Folder) folder;
- osmf.addParent(so, newParent);
+ objStore.addParent(so, newParent);
if (context.isObjectInfoRequired()) {
ObjectInfoImpl objectInfo = new ObjectInfoImpl();
fAtomLinkProvider.fillInformationForAtomLinks(repositoryId, so, objectInfo);
@@ -77,14 +75,15 @@ public class InMemoryMultiFilingServiceI
LOG.debug("Begin removeObjectFromFolder()");
+ ObjectStore objStore = fStoreManager.getObjectStore(repositoryId);
StoredObject[] sos = validator.removeObjectFromFolder(context, repositoryId, objectId, folderId, extension);
StoredObject so = sos[0];
if (null != folderId) {
StoredObject folder = sos[1];
- ObjectStoreMultiFiling osmf = checkObjects(repositoryId, so, folder);
+ checkObjects(repositoryId, so, folder);
Folder parent = (Folder) folder;
- osmf.removeParent(so, parent);
+ objStore.removeParent(so, parent);
// To be able to provide all Atom links in the response we need
// additional information:
@@ -95,11 +94,11 @@ public class InMemoryMultiFilingServiceI
objectInfos.addObjectInfo(objectInfo);
}
} else {
- ObjectStoreMultiFiling osmf = checkObjects(repositoryId, so, null);
- List<String> parentIds = osmf.getParentIds((Filing) so, context.getUsername());
+ checkObjects(repositoryId, so, null);
+ List<String> parentIds = objStore.getParentIds((Filing) so, context.getUsername());
for (String parentId: parentIds) {
- Folder parent = (Folder) ((ObjectStore)osmf).getObjectById(parentId);
- osmf.removeParent(so, parent);
+ Folder parent = (Folder) objStore.getObjectById(parentId);
+ objStore.removeParent(so, parent);
}
// To be able to provide all Atom links in the response we need
@@ -114,12 +113,7 @@ public class InMemoryMultiFilingServiceI
LOG.debug("End removeObjectFromFolder()");
}
- private ObjectStoreMultiFiling checkObjects(String repositoryId, StoredObject so, StoredObject folder) {
- ObjectStore objStore = fStoreManager.getObjectStore(repositoryId);
- if (!(objStore instanceof ObjectStoreMultiFiling)) {
- throw new CmisInvalidArgumentException("Repository Id " + repositoryId + " does not support multi-filing");
- }
-
+ private void checkObjects(String repositoryId, StoredObject so, StoredObject folder) {
if ((so instanceof Folder)) {
throw new CmisConstraintException("Cannot add object to folder, object id " + folder.getId()
+ " is a folder and folders are not multi-filed.");
@@ -128,9 +122,7 @@ public class InMemoryMultiFilingServiceI
if (folder != null && !(folder instanceof Folder)) {
throw new CmisConstraintException("Cannot add object to folder, folder id " + folder.getId()
+ " does not refer to a folder.");
- }
-
- return (ObjectStoreMultiFiling) objStore;
+ }
}
}
Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryNavigationServiceImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryNavigationServiceImpl.java?rev=1515275&r1=1515274&r2=1515275&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryNavigationServiceImpl.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryNavigationServiceImpl.java Mon Aug 19 05:48:40 2013
@@ -54,7 +54,6 @@ import org.apache.chemistry.opencmis.inm
import org.apache.chemistry.opencmis.inmemory.storedobj.api.Folder;
import org.apache.chemistry.opencmis.inmemory.storedobj.api.Item;
import org.apache.chemistry.opencmis.inmemory.storedobj.api.ObjectStore;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.ObjectStoreFiling;
import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoreManager;
import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoredObject;
import org.apache.chemistry.opencmis.inmemory.types.PropertyCreationHelper;
@@ -277,7 +276,6 @@ public class InMemoryNavigationServiceIm
List<ObjectInFolderData> folderList = new ArrayList<ObjectInFolderData>();
ObjectStore objStore = fStoreManager.getObjectStore(repositoryId);
StoredObject so = objStore.getObjectById(folderId);
- ObjectStoreFiling objStoreFiling = (ObjectStoreFiling) objStore;
boolean cmis11 = InMemoryServiceContext.getCallContext().getCmisVersion() != CmisVersion.CMIS_1_0;
if (so == null) {
@@ -288,8 +286,8 @@ public class InMemoryNavigationServiceIm
return null; // it is a document and has no children
}
- ObjectStoreFiling.ChildrenResult children = folderOnly ? objStoreFiling.getFolderChildren((Folder) so,
- maxItems, skipCount, user) : objStoreFiling.getChildren((Folder) so, maxItems, skipCount, user,
+ ObjectStore.ChildrenResult children = folderOnly ? objStore.getFolderChildren((Folder) so,
+ maxItems, skipCount, user) : objStore.getChildren((Folder) so, maxItems, skipCount, user,
includePwc);
for (Fileable child : children.getChildren()) {
@@ -367,7 +365,7 @@ public class InMemoryNavigationServiceIm
List<ObjectParentData> result = null;
result = new ArrayList<ObjectParentData>();
ObjectStore objStore = fStoreManager.getObjectStore(repositoryId);
- List<String> parentIds = ((ObjectStoreFiling) objStore).getParentIds(sop, user);
+ List<String> parentIds = objStore.getParentIds(sop, user);
if (null != parentIds) {
for (String parentId : parentIds) {
ObjectParentDataImpl parentData = new ObjectParentDataImpl();
@@ -398,7 +396,7 @@ public class InMemoryNavigationServiceIm
ObjectDataImpl parent = new ObjectDataImpl();
ObjectStore objStore = fStoreManager.getObjectStore(repositoryId);
- List<String> parents = ((ObjectStoreFiling) objStore).getParentIds(sop, user);
+ List<String> parents = objStore.getParentIds(sop, user);
if (null == parents || parents.isEmpty()) {
return null;
}
Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryObjectServiceImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryObjectServiceImpl.java?rev=1515275&r1=1515274&r2=1515275&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryObjectServiceImpl.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryObjectServiceImpl.java Mon Aug 19 05:48:40 2013
@@ -77,8 +77,6 @@ import org.apache.chemistry.opencmis.inm
import org.apache.chemistry.opencmis.inmemory.storedobj.api.Filing;
import org.apache.chemistry.opencmis.inmemory.storedobj.api.Folder;
import org.apache.chemistry.opencmis.inmemory.storedobj.api.ObjectStore;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.ObjectStoreFiling;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.ObjectStoreFiling.ChildrenResult;
import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoreManager;
import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoredObject;
import org.apache.chemistry.opencmis.inmemory.storedobj.api.VersionedDocument;
@@ -518,7 +516,7 @@ public class InMemoryObjectServiceImpl e
}
boolean foundOldParent = false;
- for (String parentId : ((ObjectStoreFiling)objectStore).getParentIds(spo, user)) {
+ for (String parentId : objectStore.getParentIds(spo, user)) {
if (parentId.equals(soSource.getId())) {
foundOldParent = true;
break;
@@ -533,11 +531,7 @@ public class InMemoryObjectServiceImpl e
throw new CmisNotSupportedException("Destination of a move cannot be a subfolder of the source");
}
- if (objectStore instanceof ObjectStoreFiling) {
- ((ObjectStoreFiling) objectStore).move(so, sourceFolder, targetFolder);
- } else {
- throw new CmisInvalidArgumentException("Repository " + repositoryId + "does not support Filing");
- }
+ objectStore.move(so, sourceFolder, targetFolder);
objectId.setValue(so.getId());
LOG.debug("stop moveObject()");
@@ -726,8 +720,7 @@ public class InMemoryObjectServiceImpl e
throw new CmisInvalidArgumentException(NameValidator.ERROR_ILLEGAL_NAME);
}
// Note: the test for duplicated name in folder is left to the object store
- ObjectStoreFiling objStoreFiling = (ObjectStoreFiling) objStore;
- objStoreFiling.rename((Fileable)so, (String) pd.getFirstValue());
+ objStore.rename((Fileable)so, (String) pd.getFirstValue());
hasUpdatedProp = true;
}
@@ -1199,7 +1192,7 @@ public class InMemoryObjectServiceImpl e
if (targetId.equals(sourceId)) {
return true;
}
- List<String>parentIds = ((ObjectStoreFiling)objStore).getParentIds(folder, user);
+ List<String>parentIds = objStore.getParentIds(folder, user);
targetId = parentIds == null || parentIds.isEmpty() ? null : parentIds.get(0);
if (null != targetId) {
folder = (Folder) objStore.getObjectById(targetId);
@@ -1223,8 +1216,7 @@ public class InMemoryObjectServiceImpl e
private boolean deleteRecursive(ObjectStore objStore, Folder parentFolder, boolean continueOnFailure,
boolean allVersions, List<String> failedToDeleteIds, String user) {
- ObjectStoreFiling filingStore = (ObjectStoreFiling) objStore;
- ChildrenResult childrenResult = filingStore.getChildren(parentFolder, -1, -1, "Admin", true);
+ ObjectStore.ChildrenResult childrenResult = objStore.getChildren(parentFolder, -1, -1, "Admin", true);
List<Fileable> children = childrenResult.getChildren();
if (null == children) {
Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/ObjectStore.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/ObjectStore.java?rev=1515275&r1=1515274&r2=1515275&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/ObjectStore.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/ObjectStore.java Mon Aug 19 05:48:40 2013
@@ -42,6 +42,24 @@ import org.apache.chemistry.opencmis.com
*/
public interface ObjectStore {
+ public static class ChildrenResult {
+ private int noItems;
+ private List<Fileable> children;
+
+ public ChildrenResult(List<Fileable> children, int noItems) {
+ this.children = children;
+ this.noItems = noItems;
+ }
+
+ public int getNoItems() {
+ return noItems;
+ }
+
+ public List<Fileable> getChildren() {
+ return children;
+ }
+ }
+
/**
* Get the root folder of this object store
*
@@ -197,6 +215,64 @@ public interface ObjectStore {
Acl addACEs, Acl removeACEs);
/**
+ * get all the children of this folder. To support paging an initial offset
+ * and a maximum number of children to retrieve can be passed
+ *
+ * @param folder
+ * folder to get children from
+ * @param maxItems
+ * max. number of items to return
+ * @param skipCount
+ * initial offset where to start fetching
+ * @param user
+ * user to determine visible children
+ * @param usePwc
+ * if true return private working copy otherwise return latest
+ * version;
+ *
+ * @return list of children objects
+ */
+ ChildrenResult getChildren(Folder folder, int maxItems, int skipCount, String user, boolean usePwc);
+
+ /**
+ * get all the children of this folder which are folders. To support paging
+ * an initial offset and a maximum number of children to retrieve can be
+ * passed.
+ *
+ * @param folder
+ * folder to get children from
+ * @param maxItems
+ * max. number of items to return
+ * @param skipCount
+ * initial offset where to start fetching
+ * @param user
+ * @return list of children folders
+ */
+ ChildrenResult getFolderChildren(Folder folder, int maxItems, int skipCount, String user);
+
+ /**
+ * Move an object to a different folder.
+ *
+ * @param so
+ * object to be moved
+ * @param oldParent
+ * old parent folder for the object
+ * @param newParent
+ * new parent folder for the object
+ */
+ void move(StoredObject so, Folder oldParent, Folder newParent);
+
+ /**
+ * Rename an object
+ *
+ * @param so
+ * object to be renamed
+ * @param newName
+ * new name to be assigned
+ */
+ void rename(Fileable so, String newName);
+
+ /**
* Persist a new version in the store (created from a check-out)
*
* @param version
@@ -338,4 +414,32 @@ public interface ObjectStore {
* @return ACL of this id
*/
Acl getAcl(int aclId);
+
+
+ // Multifiling methods:
+ /**
+ * get all parent ids of this object visible for a user
+ *
+ * @param user
+ * user who can see parents
+ * @return list of folder ids
+ */
+ List<String> getParentIds(Filing spo, String user);
+
+ /**
+ * Add this document to a new parent folder as child object
+ *
+ * @param parentId
+ * id of parent folder the document is to be added to
+ */
+ void addParent(StoredObject so, Folder parent);
+
+ /**
+ * Remove this object from the children of parent
+ *
+ * @param parentId
+ * id of parent folder the document is to be removed from
+ */
+ void removeParent(StoredObject so, Folder parent);
+
}
\ No newline at end of file
Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/ObjectStoreImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/ObjectStoreImpl.java?rev=1515275&r1=1515274&r2=1515275&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/ObjectStoreImpl.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/ObjectStoreImpl.java Mon Aug 19 05:48:40 2013
@@ -49,7 +49,6 @@ import org.apache.chemistry.opencmis.inm
import org.apache.chemistry.opencmis.inmemory.storedobj.api.Folder;
import org.apache.chemistry.opencmis.inmemory.storedobj.api.MultiFiling;
import org.apache.chemistry.opencmis.inmemory.storedobj.api.ObjectStore;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.ObjectStoreMultiFiling;
import org.apache.chemistry.opencmis.inmemory.storedobj.api.Relationship;
import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoredObject;
import org.apache.chemistry.opencmis.inmemory.storedobj.api.VersionedDocument;
@@ -84,7 +83,7 @@ import org.apache.chemistry.opencmis.inm
* implement finer grained locks on a folder or document rather than the
* complete repository.
*/
-public class ObjectStoreImpl implements ObjectStore, ObjectStoreMultiFiling {
+public class ObjectStoreImpl implements ObjectStore {
private static final int FIRST_ID = 100;