Author: jens
Date: Wed Mar 12 19:54:02 2014
New Revision: 1576871

URL: http://svn.apache.org/r1576871
Log:
InMemory: fix bug when document is renamed in a checkIn

Modified:
    
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryVersioningServiceImpl.java
    
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/VersionedDocumentImpl.java
    
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/ObjectCreator.java
    
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/VersioningTest.java

Modified: 
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryVersioningServiceImpl.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/InMemoryVersioningServiceImpl.java?rev=1576871&r1=1576870&r2=1576871&view=diff
==============================================================================
--- 
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryVersioningServiceImpl.java
 (original)
+++ 
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryVersioningServiceImpl.java
 Wed Mar 12 19:54:02 2014
@@ -21,15 +21,18 @@ package org.apache.chemistry.opencmis.in
 import java.util.ArrayList;
 import java.util.List;
 
+import org.apache.chemistry.opencmis.commons.PropertyIds;
 import org.apache.chemistry.opencmis.commons.data.Acl;
 import org.apache.chemistry.opencmis.commons.data.ContentStream;
 import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
 import org.apache.chemistry.opencmis.commons.data.ObjectData;
 import org.apache.chemistry.opencmis.commons.data.Properties;
+import org.apache.chemistry.opencmis.commons.data.PropertyData;
 import 
org.apache.chemistry.opencmis.commons.definitions.DocumentTypeDefinition;
 import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
 import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
 import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
+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.exceptions.CmisUpdateConflictException;
@@ -38,6 +41,7 @@ import org.apache.chemistry.opencmis.com
 import org.apache.chemistry.opencmis.commons.server.ObjectInfoHandler;
 import org.apache.chemistry.opencmis.commons.spi.Holder;
 import org.apache.chemistry.opencmis.inmemory.FilterParser;
+import org.apache.chemistry.opencmis.inmemory.NameValidator;
 import org.apache.chemistry.opencmis.inmemory.storedobj.api.Content;
 import org.apache.chemistry.opencmis.inmemory.storedobj.api.Document;
 import org.apache.chemistry.opencmis.inmemory.storedobj.api.DocumentVersion;
@@ -45,6 +49,7 @@ import org.apache.chemistry.opencmis.inm
 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;
+import 
org.apache.chemistry.opencmis.inmemory.storedobj.impl.DocumentVersionImpl;
 import org.apache.chemistry.opencmis.inmemory.types.PropertyCreationHelper;
 import org.apache.chemistry.opencmis.server.support.TypeManager;
 
@@ -104,7 +109,23 @@ public class InMemoryVersioningServiceIm
         boolean major = (null == majorParam ? true : majorParam);
 
         verDoc.checkIn(major, properties, ((Content)so).getContent(), 
checkinComment, policies, user);
-        verDoc.updateSystemBasePropertiesWhenModified(null, 
context.getUsername());
+        if (null != properties && null != properties.getProperties()) {
+            // rename:
+            PropertyData<?> pd = 
properties.getProperties().get(PropertyIds.NAME);
+            if (pd != null) {
+                String newName = (String) pd.getFirstValue();
+                if (newName == null || newName.equals("")) {
+                    throw new CmisConstraintException("updateProperties 
failed, name must not be empty.");
+                }
+                if (!NameValidator.isValidName(newName)) {
+                    throw new 
CmisInvalidArgumentException(NameValidator.ERROR_ILLEGAL_NAME);
+                }
+                // Note: the test for duplicated name in folder is left to the
+                // object store
+                objStore.rename(so, (String) pd.getFirstValue(), user);
+            }
+        }
+        so.updateSystemBasePropertiesWhenModified(null, context.getUsername());
         // To be able to provide all Atom links in the response we need
         // additional information:
         if (context.isObjectInfoRequired()) {

Modified: 
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/VersionedDocumentImpl.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/VersionedDocumentImpl.java?rev=1576871&r1=1576870&r2=1576871&view=diff
==============================================================================
--- 
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/VersionedDocumentImpl.java
 (original)
+++ 
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/VersionedDocumentImpl.java
 Wed Mar 12 19:54:02 2014
@@ -31,7 +31,10 @@ import org.apache.chemistry.opencmis.com
 import 
org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
 import org.apache.chemistry.opencmis.commons.spi.BindingsObjectFactory;
 import org.apache.chemistry.opencmis.inmemory.FilterParser;
+import org.apache.chemistry.opencmis.inmemory.NameValidator;
 import org.apache.chemistry.opencmis.inmemory.storedobj.api.DocumentVersion;
+import org.apache.chemistry.opencmis.inmemory.storedobj.api.Fileable;
+import org.apache.chemistry.opencmis.inmemory.storedobj.api.Filing;
 import org.apache.chemistry.opencmis.inmemory.storedobj.api.VersionedDocument;
 
 public class VersionedDocumentImpl extends FilingImpl implements 
VersionedDocument {

Modified: 
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/ObjectCreator.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/ObjectCreator.java?rev=1576871&r1=1576870&r2=1576871&view=diff
==============================================================================
--- 
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/ObjectCreator.java
 (original)
+++ 
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/ObjectCreator.java
 Wed Mar 12 19:54:02 2014
@@ -178,6 +178,12 @@ public class ObjectCreator {
         return newProps;
     }
 
+    public List<PropertyData<?>> getUpdatePropertyDataList(String propertyId, 
String propertyValue) {
+        List<PropertyData<?>> properties = new ArrayList<PropertyData<?>>();
+        properties.add(fFactory.createPropertyStringData(propertyId, 
propertyValue));
+        return properties;
+    }
+    
     public boolean verifyProperty(String id, String propertyId, String 
propertyValue) {
         Properties props = fObjSvc.getProperties(fRepositoryId, id, "*", null);
         Map<String, PropertyData<?>> propsMap = props.getProperties();

Modified: 
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/VersioningTest.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/VersioningTest.java?rev=1576871&r1=1576870&r2=1576871&view=diff
==============================================================================
--- 
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/VersioningTest.java
 (original)
+++ 
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/VersioningTest.java
 Wed Mar 12 19:54:02 2014
@@ -59,6 +59,7 @@ public class VersioningTest extends Abst
     private static final String PROP_VALUE = "Mickey Mouse";
     private static final String PROP_VALUE_NEW = "Donald Duck";
     private static final String PROP_NAME = "My Versioned Document";
+    private static final String PROP_NEW_NAME = "My Renamed Versioned 
Document";
     private static final String TEST_USER = "TestUser";
     private static final String TEST_USER_2 = "OtherUser";
 
@@ -187,7 +188,12 @@ public class VersioningTest extends Abst
         String pwcId = idHolder.getValue();
 
         ContentStream altContent = fCreator.createAlternateContent();
-        Properties newProps = 
fCreator.getUpdatePropertyList(VersionTestTypeSystemCreator.PROPERTY_ID, 
PROP_VALUE_NEW);
+
+        // update two properties custom and name:
+        List<PropertyData<?>> newProperties = 
fCreator.getUpdatePropertyDataList(VersionTestTypeSystemCreator.PROPERTY_ID, 
PROP_VALUE_NEW);
+        newProperties.add(fFactory.createPropertyStringData(PropertyIds.NAME, 
PROP_NEW_NAME));
+        Properties newProps = fFactory.createPropertiesData(newProperties);
+
         idHolder = new Holder<String>(pwcId);
         // assertTrue(isCheckedOut(docId));
         assertTrue(isCheckedOut(pwcId));
@@ -206,6 +212,8 @@ public class VersioningTest extends Abst
         assertTrue(fCreator.verifyContent(fCreator.createAlternateContent(), 
retrievedContent));
         assertTrue(fCreator.verifyProperty(idHolder.getValue(), 
VersionTestTypeSystemCreator.PROPERTY_ID,
                 PROP_VALUE_NEW));
+        assertTrue(fCreator.verifyProperty(idHolder.getValue(), 
PropertyIds.NAME,
+                PROP_NEW_NAME));
     }
 
     @Test


Reply via email to