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/09/10 10:26:44 UTC

svn commit: r1521367 - in /chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src: main/java/org/apache/chemistry/opencmis/inmemory/server/ main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/ main/java/org...

Author: jens
Date: Tue Sep 10 08:26:43 2013
New Revision: 1521367

URL: http://svn.apache.org/r1521367
Log:
Minor InMemory changes

Modified:
    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
    chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/StoredObjectImpl.java
    chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/types/PropertyCreationHelper.java
    chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/FolderTest.java
    chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/ObjectServiceTest.java

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=1521367&r1=1521366&r2=1521367&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 Tue Sep 10 08:26:43 2013
@@ -530,7 +530,7 @@ public class InMemoryObjectServiceImpl e
             throw new CmisNotSupportedException("Destination of a move cannot be a subfolder of the source");
         }
 
-        objectStore.move(so, sourceFolder, targetFolder);
+        objectStore.move(so, sourceFolder, targetFolder, user);
         objectId.setValue(so.getId());
 
         LOG.debug("stop moveObject()");
@@ -617,7 +617,7 @@ public class InMemoryObjectServiceImpl e
 
         isCheckedOut = isCheckedOut(so, user);
 
-        Map<String, PropertyData<?>> oldProperties = so.getProperties();
+        Map<String, PropertyData<?>> oldProperties = new HashMap<String, PropertyData<?>>();
 
         // check properties for validity
         boolean cmis11 = context.getCmisVersion() != CmisVersion.CMIS_1_0;
@@ -651,7 +651,7 @@ public class InMemoryObjectServiceImpl e
             List<String> propertiesIdToDelete = getListOfPropertiesToDeleteFromRemovedSecondaryTypes(repositoryId, so,
                     newSecondaryTypeIds);
             for (String propIdToRemove : propertiesIdToDelete) {
-                so.getProperties().remove(propIdToRemove);
+                oldProperties.put(propIdToRemove, null);
             }
         }
 
@@ -684,7 +684,7 @@ public class InMemoryObjectServiceImpl e
                             "updateProperties failed, following property can't be deleted, because it is required: "
                                     + key);
                 }
-                oldProperties.remove(key);
+                oldProperties.put(key, null);
                 hasUpdatedProp = true;
             } else {
                 if (propDef.getUpdatability() == Updatability.WHENCHECKEDOUT) {
@@ -702,7 +702,7 @@ public class InMemoryObjectServiceImpl e
                 hasUpdatedProp = true;
             }
         }
-
+        
         // get name from properties and perform special rename to check if
         // path already exists
         PropertyData<?> pd = properties.getProperties().get(PropertyIds.NAME);
@@ -720,18 +720,11 @@ public class InMemoryObjectServiceImpl e
             }
             // Note: the test for duplicated name in folder is left to the
             // object store
-            objStore.rename((Fileable) so, (String) pd.getFirstValue());
+            objStore.rename((Fileable) so, (String) pd.getFirstValue(), user);
             hasUpdatedProp = true;
         }
 
-        if (hasUpdatedProp) {
-            // set user, creation date, etc.
-            if (user == null) {
-                user = UNKNOWN_USER;
-            }
-            so.updateSystemBasePropertiesWhenModified(properties.getProperties(), user);
-            // set changeToken
-        }
+        objStore.updateObject(so, oldProperties, user);
 
         if (hasUpdatedProp) {
             objectId.setValue(so.getId()); // might have a new id

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=1521367&r1=1521366&r2=1521367&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 Tue Sep 10 08:26:43 2013
@@ -290,8 +290,10 @@ public interface ObjectStore {
      *            old parent folder for the object
      * @param newParent
      *            new parent folder for the object
+     * @param user
+     *            user performing the operation
      */
-    void move(StoredObject so, Folder oldParent, Folder newParent);
+    void move(StoredObject so, Folder oldParent, Folder newParent, String user);
 
     /**
      * Rename an object.
@@ -300,8 +302,10 @@ public interface ObjectStore {
      *            object to be renamed
      * @param newName
      *            new name to be assigned
+     * @param user
+     *            user performing the operation
      */
-    void rename(Fileable so, String newName);
+    void rename(StoredObject so, String newName, String user);
 
     /**
      * Persist a new version in the store (created from a check-out).
@@ -320,12 +324,14 @@ public interface ObjectStore {
     void deleteVersion(DocumentVersion version);
 
     /**
-     * Persist an object after modifying the properties.
+     * Modify and store the properties of an object.
      * 
      * @param so
-     *            object to be updated
+     *            object to update
+     * @param properties
+     *            map containing properties to be updated
      */
-    void upateObject(StoredObject so);
+    void updateObject(StoredObject so, Map<String, PropertyData<?>> properties, String user);
 
     /**
      * get the path of this folder (for folder in CMIS path is unique).

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=1521367&r1=1521366&r2=1521367&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 Tue Sep 10 08:26:43 2013
@@ -28,6 +28,7 @@ import java.util.concurrent.ConcurrentHa
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReentrantLock;
 
+import org.apache.chemistry.opencmis.commons.PropertyIds;
 import org.apache.chemistry.opencmis.commons.data.Ace;
 import org.apache.chemistry.opencmis.commons.data.Acl;
 import org.apache.chemistry.opencmis.commons.data.ContentStream;
@@ -438,8 +439,24 @@ public class ObjectStoreImpl implements 
     }
 
     @Override
-    public void upateObject(StoredObject so) {
+    public void updateObject(StoredObject so, Map<String, PropertyData<?>> newProperties, String user) {
         // nothing to do
+        Map<String, PropertyData<?>> properties = so.getProperties();
+        for (String key : newProperties.keySet()) {
+            PropertyData<?> value = newProperties.get(key);
+
+            if (key.equals(PropertyIds.SECONDARY_OBJECT_TYPE_IDS)) {
+                properties.put(key, value); // preserve it even if it is empty!
+            } else  if (null == value || value.getValues() == null || value.getFirstValue() == null) {
+                // delete property
+                properties.remove(key);
+            } else {
+                properties.put(key, value);
+            }
+        }
+        // update system properties and secondary object type ids
+        so.updateSystemBasePropertiesWhenModified(properties, user);
+        properties.remove(PropertyIds.SECONDARY_OBJECT_TYPE_IDS);
     }
 
     @Override
@@ -699,7 +716,7 @@ public class ObjectStoreImpl implements 
     }
 
     @Override
-    public void move(StoredObject so, Folder oldParent, Folder newParent) {
+    public void move(StoredObject so, Folder oldParent, Folder newParent, String user) {
         try {
             if (hasChild(newParent, so.getName())) {
                 throw new CmisInvalidArgumentException("Cannot move object " + so.getName() + " to folder "
@@ -719,17 +736,19 @@ public class ObjectStoreImpl implements 
     }
 
     @Override
-    public void rename(Fileable so, String newName) {
+    public void rename(StoredObject so, String newName, String user) {
         try {
             lock();
             if (so.getId().equals(fRootFolder.getId())) {
                 throw new CmisInvalidArgumentException("Root folder cannot be renamed.");
             }
-            for (String folderId : so.getParentIds()) {
-                Folder folder = (Folder) getObjectById(folderId);
-                if (hasChild(folder, newName)) {
-                    throw new CmisNameConstraintViolationException("Cannot rename object to " + newName
-                            + ". This path already exists in parent " + getFolderPath(folder.getId()) + ".");
+            if (so instanceof Fileable) {
+                for (String folderId : ((Fileable)so).getParentIds()) {
+                    Folder folder = (Folder) getObjectById(folderId);
+                    if (hasChild(folder, newName)) {
+                        throw new CmisNameConstraintViolationException("Cannot rename object to " + newName
+                                + ". This path already exists in parent " + getFolderPath(folder.getId()) + ".");
+                    }
                 }
             }
             so.setName(newName);

Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/StoredObjectImpl.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/StoredObjectImpl.java?rev=1521367&r1=1521366&r2=1521367&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/StoredObjectImpl.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/StoredObjectImpl.java Tue Sep 10 08:26:43 2013
@@ -343,10 +343,12 @@ public class StoredObjectImpl implements
                 setDescription((String) properties.get(PropertyIds.DESCRIPTION).getFirstValue());
             }
 
-            if (null != properties.get(PropertyIds.SECONDARY_OBJECT_TYPE_IDS)) {
+            if (properties.containsKey(PropertyIds.SECONDARY_OBJECT_TYPE_IDS)) {
                 secondaryTypeIds.clear();
-                secondaryTypeIds.addAll((List<String>) properties.get(PropertyIds.SECONDARY_OBJECT_TYPE_IDS)
-                        .getValues());
+            }
+            PropertyData<?> secondaryTypeProp = properties.get(PropertyIds.SECONDARY_OBJECT_TYPE_IDS);
+            if (null != secondaryTypeProp) {
+                secondaryTypeIds.addAll((List<String>) secondaryTypeProp.getValues());
             }
         }
         if (isCreated) {

Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/types/PropertyCreationHelper.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/types/PropertyCreationHelper.java?rev=1521367&r1=1521366&r2=1521367&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/types/PropertyCreationHelper.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/types/PropertyCreationHelper.java Tue Sep 10 08:26:43 2013
@@ -260,8 +260,8 @@ public final class PropertyCreationHelpe
 
         List<PropertyData<?>> propertiesList = new ArrayList<PropertyData<?>>(properties.values());
 
-        if (fillOptionalPropertyData) { // add query name, local name, display
-                                        // name
+        // add query name, local name, display name
+        if (fillOptionalPropertyData) {
             fillOptionalPropertyData(td, propertiesList);
         }
 

Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/FolderTest.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/FolderTest.java?rev=1521367&r1=1521366&r2=1521367&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/FolderTest.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/FolderTest.java Tue Sep 10 08:26:43 2013
@@ -87,33 +87,33 @@ public class FolderTest extends TestCase
         // rename top level folder
         String newName = "Folder B";
         String oldPath = getPath(f2);
-        fStore.rename(f2, newName);
+        fStore.rename(f2, newName, USER);
         assertEquals(f2.getName(), newName);
         assertEquals(getPath(f2), Filing.PATH_SEPARATOR + newName);
         assertNull(fStore.getObjectByPath(oldPath, USER));
         assertEquals(f2, fStore.getObjectByPath(Filing.PATH_SEPARATOR + newName, USER));
         try {
-            fStore.rename(f2, "Folder 3");
+            fStore.rename(f2, "Folder 3", USER);
             fail("Should not allow to rename a folder to an existing name");
         } catch (Exception e) {
         }
 
         // rename sub folder
         oldPath = getPath(f11);
-        fStore.rename(f11, newName);
+        fStore.rename(f11, newName, USER);
         assertEquals(f11.getName(), newName);
         assertEquals(getPath(f11), "/Folder 1/Folder B");
         assertNull(fStore.getObjectByPath(oldPath, USER));
         assertEquals(f11, fStore.getObjectByPath("/Folder 1/Folder B", USER));
         try {
-            fStore.rename(f2, newName);
+            fStore.rename(f2, newName, USER);
             fail("Should not allow to rename a folder to an existing name");
         } catch (Exception e) {
         }
 
         // rename root folder
         try {
-            fStore.rename(fRoot, "abc");
+            fStore.rename(fRoot, "abc", USER);
             fail("Should not be possible to rename root folder");
         } catch (Exception e) {
         }
@@ -123,15 +123,15 @@ public class FolderTest extends TestCase
     public void testMoveFolder() {
         String oldPath = getPath(f1);
         Folder f1Parent = fRoot;
-        fStore.move(f1, f1Parent, f3);
+        fStore.move(f1, f1Parent, f3, USER);
         assertNull(fStore.getObjectByPath(oldPath, USER));
         assertEquals(getPath(f1), "/Folder 3/Folder 1");
         assertEquals(f1, fStore.getObjectByPath("/Folder 3/Folder 1", USER));
 
-        fStore.rename(f2, "Folder 1");
+        fStore.rename(f2, "Folder 1", USER);
         try {
             Folder f2Parent = fRoot;
-            fStore.move(f2, f2Parent, f3);
+            fStore.move(f2, f2Parent, f3, USER);
             fail("Should not be possible to move folder to a folder that has a child with same name");
         } catch (Exception e) {
         }

Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/ObjectServiceTest.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/ObjectServiceTest.java?rev=1521367&r1=1521366&r2=1521367&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/ObjectServiceTest.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/ObjectServiceTest.java Tue Sep 10 08:26:43 2013
@@ -808,6 +808,7 @@ public class ObjectServiceTest extends A
                 fObjSvc.updateProperties(fRepositoryId, idHolder, changeTokenHolder, newProps, null);
                 fail("Update with an invalid name should fail.");
             } catch (Exception e) {
+                log.error("Wrong exception: "+ e);
                 assertTrue(e instanceof CmisInvalidArgumentException);
             }