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/06 22:30:34 UTC

svn commit: r1511117 - in /chemistry/opencmis/branches/inmemory-refactoring/src: main/java/org/apache/chemistry/opencmis/inmemory/server/ main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/ test/java/org/apache/chemistry/opencmis/inmemory/

Author: jens
Date: Tue Aug  6 20:30:33 2013
New Revision: 1511117

URL: http://svn.apache.org/r1511117
Log:
InMemory: support remove object from all folders, fix [CMIS-696]

Modified:
    chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/server/BaseServiceValidatorImpl.java
    chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryMultiFilingServiceImpl.java
    chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/InMemoryServiceValidatorImpl.java
    chemistry/opencmis/branches/inmemory-refactoring/src/test/java/org/apache/chemistry/opencmis/inmemory/MultiFilingTest.java

Modified: chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/server/BaseServiceValidatorImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/server/BaseServiceValidatorImpl.java?rev=1511117&r1=1511116&r2=1511117&view=diff
==============================================================================
--- chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/server/BaseServiceValidatorImpl.java (original)
+++ chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/server/BaseServiceValidatorImpl.java Tue Aug  6 20:30:33 2013
@@ -161,6 +161,7 @@ public class BaseServiceValidatorImpl im
 
     protected StoredObject[] checkParams(String repositoryId, String objectId1, String objectId2) {
         StoredObject[] so = new StoredObject[2];
+        checkRepositoryId(repositoryId);
         ObjectStore objectStore = fStoreManager.getObjectStore(repositoryId);
         so[0] = checkExistingObjectId(objectStore, objectId1);
         so[1] = checkExistingObjectId(objectStore, objectId2);
@@ -450,7 +451,18 @@ public class BaseServiceValidatorImpl im
 	public StoredObject[] removeObjectFromFolder(CallContext context, String repositoryId, String objectId,
             String folderId, ExtensionsData extension) {
 
-        return checkParams(repositoryId, objectId, folderId);
+        if (folderId != null)
+        {
+            return checkParams(repositoryId, objectId, folderId);
+        }
+        else
+        {
+            StoredObject[] so = new StoredObject[1];
+            checkRepositoryId(repositoryId);
+            ObjectStore objectStore = fStoreManager.getObjectStore(repositoryId);
+            so[0] = checkExistingObjectId(objectStore, objectId);
+            return so;
+        }        
     }
 
     @Override

Modified: chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryMultiFilingServiceImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryMultiFilingServiceImpl.java?rev=1511117&r1=1511116&r2=1511117&view=diff
==============================================================================
--- chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryMultiFilingServiceImpl.java (original)
+++ chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryMultiFilingServiceImpl.java Tue Aug  6 20:30:33 2013
@@ -18,6 +18,8 @@
  */
 package org.apache.chemistry.opencmis.inmemory.server;
 
+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;
@@ -25,6 +27,7 @@ import org.apache.chemistry.opencmis.com
 import org.apache.chemistry.opencmis.commons.impl.server.ObjectInfoImpl;
 import org.apache.chemistry.opencmis.commons.server.CallContext;
 import org.apache.chemistry.opencmis.commons.server.ObjectInfoHandler;
+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;
@@ -75,23 +78,38 @@ public class InMemoryMultiFilingServiceI
 
         StoredObject[] sos = validator.removeObjectFromFolder(context, repositoryId, objectId, folderId, extension);
         StoredObject so = sos[0];
-
-        StoredObject folder = sos[1];
-
-        ObjectStoreMultiFiling osmf = checkObjects(repositoryId, so, folder);
-        Folder parent = (Folder) folder;
-        
-        osmf.removeParent(so, parent);
-
-        // To be able to provide all Atom links in the response we need
-        // additional information:
-        if (context.isObjectInfoRequired()) {
-            ObjectInfoImpl objectInfo = new ObjectInfoImpl();
-            fAtomLinkProvider.fillInformationForAtomLinks(repositoryId, so, objectInfo);
-            fAtomLinkProvider.fillInformationForAtomLinks(repositoryId, folder, objectInfo);
-            objectInfos.addObjectInfo(objectInfo);
+        if (null != folderId) {
+            StoredObject folder = sos[1];
+            ObjectStoreMultiFiling osmf = checkObjects(repositoryId, so, folder);
+            Folder parent = (Folder) folder;
+
+            osmf.removeParent(so, parent);
+
+            // To be able to provide all Atom links in the response we need
+            // additional information:
+            if (context.isObjectInfoRequired()) {
+                ObjectInfoImpl objectInfo = new ObjectInfoImpl();
+                fAtomLinkProvider.fillInformationForAtomLinks(repositoryId, so, objectInfo);
+                fAtomLinkProvider.fillInformationForAtomLinks(repositoryId, folder, objectInfo);
+                objectInfos.addObjectInfo(objectInfo);
+            }
+        } else {
+            ObjectStoreMultiFiling osmf = checkObjects(repositoryId, so, null);
+            List<String> parentIds = osmf.getParentIds((Filing) so,  context.getUsername());
+            for (String parentId: parentIds) {
+                Folder parent = (Folder) ((ObjectStore)osmf).getObjectById(parentId);
+                osmf.removeParent(so, parent);
+            }
+
+            // To be able to provide all Atom links in the response we need
+            // additional information:
+            if (context.isObjectInfoRequired()) {
+                ObjectInfoImpl objectInfo = new ObjectInfoImpl();
+                fAtomLinkProvider.fillInformationForAtomLinks(repositoryId, so, objectInfo);
+                objectInfos.addObjectInfo(objectInfo);
+            }
         }
-
+        
         LOG.debug("End removeObjectFromFolder()");
     }
 
@@ -106,7 +124,7 @@ public class InMemoryMultiFilingServiceI
                     + " is a folder and folders are not multi-filed.");
         }
 
-        if (!(folder instanceof Folder)) {
+        if (folder != null && !(folder instanceof Folder)) {
             throw new CmisConstraintException("Cannot add object to folder, folder id " + folder.getId()
                     + " does not refer to a folder.");
         }

Modified: chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/InMemoryServiceValidatorImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/InMemoryServiceValidatorImpl.java?rev=1511117&r1=1511116&r2=1511117&view=diff
==============================================================================
--- chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/InMemoryServiceValidatorImpl.java (original)
+++ chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/InMemoryServiceValidatorImpl.java Tue Aug  6 20:30:33 2013
@@ -832,7 +832,8 @@ public class InMemoryServiceValidatorImp
 
         StoredObject[] sos = super.removeObjectFromFolder(context, repositoryId, objectId, folderId, extension);
         checkWriteAccess(repositoryId, context.getUsername(), sos[0]);
-        checkWriteAccess(repositoryId, context.getUsername(), sos[1]);
+        if (null != folderId)
+            checkWriteAccess(repositoryId, context.getUsername(), sos[1]);
         return sos;
     }
 

Modified: chemistry/opencmis/branches/inmemory-refactoring/src/test/java/org/apache/chemistry/opencmis/inmemory/MultiFilingTest.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/branches/inmemory-refactoring/src/test/java/org/apache/chemistry/opencmis/inmemory/MultiFilingTest.java?rev=1511117&r1=1511116&r2=1511117&view=diff
==============================================================================
--- chemistry/opencmis/branches/inmemory-refactoring/src/test/java/org/apache/chemistry/opencmis/inmemory/MultiFilingTest.java (original)
+++ chemistry/opencmis/branches/inmemory-refactoring/src/test/java/org/apache/chemistry/opencmis/inmemory/MultiFilingTest.java Tue Aug  6 20:30:33 2013
@@ -178,6 +178,16 @@ public class MultiFilingTest extends Abs
         LOG.debug("End testRenameMultiFiledDocument()");
     }
 
+        
+    @Test
+    public void testRemoveDocumentFromAllFolders() {
+        LOG.debug("Begin testRemoveDocumentFromAllFolders()");
+
+        String docId = createUnfiledDocument();
+        removeDocumentFromAllFolders(docId);
+        LOG.debug("End testRemoveDocumentFromAllFolders()");
+    }
+    
     @Test
     public void testAddVersionedDocumentToFolder() {
         LOG.debug("Begin testAddVersionedDocumentToFolder()");
@@ -195,6 +205,15 @@ public class MultiFilingTest extends Abs
         LOG.debug("End testRemoveVersionedDocumentFromFolder()");
     }
 
+    @Test
+    public void testRemoveVersionedDocumentFromAllFolders() {
+        LOG.debug("Begin testRemoveVersionedDocumentFromAllFolders()");
+
+        String docId = createVersionedDocument();
+        removeDocumentFromAllFolders(docId);
+        LOG.debug("End testRemoveVersionedDocumentFromAllFolders()");
+    }
+    
     private void createFolders() {
         fId1 = createFolder("folder1", fRootFolderId, FOLDER_TYPE_ID);
         fId2 = createFolder("folder2", fRootFolderId, FOLDER_TYPE_ID);
@@ -249,6 +268,15 @@ public class MultiFilingTest extends Abs
         assertEquals(0, parents.size());
     }
 
+    private void removeDocumentFromAllFolders(String docId) {
+        prepareMultiFiledDocument(docId);
+
+        fMultiSvc.removeObjectFromFolder(fRepositoryId, docId, null, null);
+        List<ObjectParentData> parents = fNavSvc.getObjectParents(fRepositoryId, docId, "*", false,
+                IncludeRelationships.NONE, null, true, null);
+        assertEquals(0, parents.size());
+    }
+    
     private String createUnfiledDocument() {
         return createDocument(UNFILED_DOC_NAME, null, DOCUMENT_TYPE_ID, true);
     }