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/07/28 13:02:15 UTC

svn commit: r1507777 [2/2] - in /chemistry/opencmis/branches/inmemory-refactoring/src: main/java/org/apache/chemistry/opencmis/inmemory/ main/java/org/apache/chemistry/opencmis/inmemory/query/ main/java/org/apache/chemistry/opencmis/inmemory/server/ ma...

Modified: chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/StoredObjectImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/StoredObjectImpl.java?rev=1507777&r1=1507776&r2=1507777&view=diff
==============================================================================
--- chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/StoredObjectImpl.java (original)
+++ chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/StoredObjectImpl.java Sun Jul 28 11:02:14 2013
@@ -22,7 +22,6 @@ import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
-import java.math.BigInteger;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Date;
@@ -34,26 +33,19 @@ import java.util.Map.Entry;
 import java.util.TimeZone;
 
 import org.apache.chemistry.opencmis.commons.PropertyIds;
-import org.apache.chemistry.opencmis.commons.data.Acl;
 import org.apache.chemistry.opencmis.commons.data.AllowableActions;
 import org.apache.chemistry.opencmis.commons.data.ContentStream;
-import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
-import org.apache.chemistry.opencmis.commons.data.ObjectList;
 import org.apache.chemistry.opencmis.commons.data.PropertyData;
 import org.apache.chemistry.opencmis.commons.data.RenditionData;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
-import org.apache.chemistry.opencmis.commons.enums.RelationshipDirection;
 import org.apache.chemistry.opencmis.commons.spi.BindingsObjectFactory;
 import org.apache.chemistry.opencmis.inmemory.DataObjectCreator;
 import org.apache.chemistry.opencmis.inmemory.FilterParser;
-import org.apache.chemistry.opencmis.inmemory.server.InMemoryServiceContext;
 import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoredObject;
-import org.apache.chemistry.opencmis.inmemory.types.PropertyCreationHelper;
 
 /**
  * StoredObject is the common superclass of all objects hold in the repository
  * Documents, Folders, Relationships and Policies
- *
+ * 
  * @author Jens
  */
 public class StoredObjectImpl implements StoredObject {
@@ -72,24 +64,22 @@ public class StoredObjectImpl implements
     protected GregorianCalendar fModifiedAt;
     protected String fRepositoryId;
     protected Map<String, PropertyData<?>> fProperties;
-    protected final ObjectStoreImpl fObjStore;
     protected int fAclId;
     protected String description; // CMIS 1.1
     protected List<String> secondaryTypeIds; // CMIS 1.1
     protected List<String> policyIds;
 
-    StoredObjectImpl(ObjectStoreImpl objStore) { // visibility should be package
+    StoredObjectImpl() { // visibility should be package
         GregorianCalendar now = getNow();
         now.setTime(new Date());
         fCreatedAt = now;
         fModifiedAt = now;
-        fObjStore = objStore;
         secondaryTypeIds = new ArrayList<String>();
         policyIds = null;
     }
 
     @Override
-	public String getId() {
+    public String getId() {
         return fId;
     }
 
@@ -97,64 +87,64 @@ public class StoredObjectImpl implements
     public void setId(String id) {
         fId = id;
     }
-    
+
     @Override
-	public String getName() {
+    public String getName() {
         return fName;
     }
 
     @Override
-	public void setName(String name) {
+    public void setName(String name) {
         fName = name;
     }
 
     @Override
-	public String getTypeId() {
+    public String getTypeId() {
         return fTypeId;
     }
 
     @Override
-	public void setTypeId(String type) {
+    public void setTypeId(String type) {
         fTypeId = type;
     }
 
     @Override
-	public String getCreatedBy() {
+    public String getCreatedBy() {
         return fCreatedBy;
     }
 
     @Override
-	public void setCreatedBy(String createdBy) {
+    public void setCreatedBy(String createdBy) {
         this.fCreatedBy = createdBy;
     }
 
     @Override
-	public String getModifiedBy() {
+    public String getModifiedBy() {
         return fModifiedBy;
     }
 
     @Override
-	public void setModifiedBy(String modifiedBy) {
+    public void setModifiedBy(String modifiedBy) {
         this.fModifiedBy = modifiedBy;
     }
 
     @Override
-	public GregorianCalendar getCreatedAt() {
+    public GregorianCalendar getCreatedAt() {
         return fCreatedAt;
     }
 
     @Override
-	public void setCreatedAt(GregorianCalendar createdAt) {
+    public void setCreatedAt(GregorianCalendar createdAt) {
         this.fCreatedAt = createdAt;
     }
 
     @Override
-	public GregorianCalendar getModifiedAt() {
+    public GregorianCalendar getModifiedAt() {
         return fModifiedAt;
     }
 
     @Override
-	public void setModifiedAtNow() {
+    public void setModifiedAtNow() {
         this.fModifiedAt = getNow();
     }
 
@@ -164,23 +154,23 @@ public class StoredObjectImpl implements
     }
 
     @Override
-	public void setRepositoryId(String repositoryId) {
+    public void setRepositoryId(String repositoryId) {
         fRepositoryId = repositoryId;
     }
 
     @Override
-	public String getRepositoryId() {
+    public String getRepositoryId() {
         return fRepositoryId;
     }
-    
+
     @Override
-	public List<String> getAppliedPolicies() {
+    public List<String> getAppliedPolicies() {
         if (null == policyIds)
             return null;
         else
             return Collections.unmodifiableList(policyIds);
     }
-    
+
     public void setAppliedPolicies(List<String> newPolicies) {
         if (null == newPolicies) {
             policyIds = null;
@@ -191,9 +181,9 @@ public class StoredObjectImpl implements
             policyIds.addAll(newPolicies);
         }
     }
-    
+
     @Override
-	public void addAppliedPolicy(String policyId) {
+    public void addAppliedPolicy(String policyId) {
         if (null == policyIds) {
             policyIds = new ArrayList<String>();
         }
@@ -203,7 +193,7 @@ public class StoredObjectImpl implements
     }
 
     @Override
-	public void removePolicy(String policyId) {
+    public void removePolicy(String policyId) {
         if (null != policyIds && policyIds.contains(policyId)) {
             policyIds.remove(policyId);
             if (policyIds.isEmpty()) {
@@ -211,55 +201,55 @@ public class StoredObjectImpl implements
             }
         }
     }
-    
+
     // CMIS 1.1:
     @Override
-	public void setDescription(String descr) {
+    public void setDescription(String descr) {
         description = descr;
     }
-    
+
     // CMIS 1.1:
     @Override
-	public String getDescription() {
+    public String getDescription() {
         return description;
     }
 
     @Override
-	public List<String> getSecondaryTypeIds() {
+    public List<String> getSecondaryTypeIds() {
         return Collections.unmodifiableList(secondaryTypeIds);
     }
 
     @Override
-	public void setProperties(Map<String, PropertyData<?>> props) {
+    public void setProperties(Map<String, PropertyData<?>> props) {
         fProperties = props;
     }
 
     @Override
-	public Map<String, PropertyData<?>> getProperties() {
+    public Map<String, PropertyData<?>> getProperties() {
         return fProperties;
     }
 
     @Override
-	public String getChangeToken() {
+    public String getChangeToken() {
         GregorianCalendar lastModified = getModifiedAt();
         String token = Long.valueOf(lastModified.getTimeInMillis()).toString();
         return token;
     }
 
     @Override
-	public void createSystemBasePropertiesWhenCreated(Map<String, PropertyData<?>> properties, String user) {
+    public void createSystemBasePropertiesWhenCreated(Map<String, PropertyData<?>> properties, String user) {
         addSystemBaseProperties(properties, user, true);
     }
 
     @Override
-	public void updateSystemBasePropertiesWhenModified(Map<String, PropertyData<?>> properties, String user) {
+    public void updateSystemBasePropertiesWhenModified(Map<String, PropertyData<?>> properties, String user) {
         addSystemBaseProperties(properties, user, false);
     }
 
     @Override
-	public void fillProperties(Map<String, PropertyData<?>> properties, BindingsObjectFactory objFactory,
+    public void fillProperties(Map<String, PropertyData<?>> properties, BindingsObjectFactory objFactory,
             List<String> requestedIds) {
-        
+
         if (FilterParser.isContainedInFilter(PropertyIds.NAME, requestedIds)) {
             properties.put(PropertyIds.NAME, objFactory.createPropertyStringData(PropertyIds.NAME, getName()));
         }
@@ -267,8 +257,8 @@ public class StoredObjectImpl implements
             properties.put(PropertyIds.OBJECT_ID, objFactory.createPropertyIdData(PropertyIds.OBJECT_ID, getId()));
         }
         if (FilterParser.isContainedInFilter(PropertyIds.OBJECT_TYPE_ID, requestedIds)) {
-            properties.put(PropertyIds.OBJECT_TYPE_ID, objFactory.createPropertyIdData(PropertyIds.OBJECT_TYPE_ID,
-                    getTypeId()));
+            properties.put(PropertyIds.OBJECT_TYPE_ID,
+                    objFactory.createPropertyIdData(PropertyIds.OBJECT_TYPE_ID, getTypeId()));
         }
         // set the base type id outside becaus it requires the type definition
         // if (FilterParser.isContainedInFilter(PropertyIds.CMIS_BASE_TYPE_ID,
@@ -277,36 +267,36 @@ public class StoredObjectImpl implements
         // CMIS_BASE_TYPE_ID, getBaseTypeId()));
         // }
         if (FilterParser.isContainedInFilter(PropertyIds.CREATED_BY, requestedIds)) {
-            properties.put(PropertyIds.CREATED_BY, objFactory.createPropertyStringData(PropertyIds.CREATED_BY,
-                    getCreatedBy()));
+            properties.put(PropertyIds.CREATED_BY,
+                    objFactory.createPropertyStringData(PropertyIds.CREATED_BY, getCreatedBy()));
         }
         if (FilterParser.isContainedInFilter(PropertyIds.CREATION_DATE, requestedIds)) {
-            properties.put(PropertyIds.CREATION_DATE, objFactory.createPropertyDateTimeData(PropertyIds.CREATION_DATE,
-                    getCreatedAt()));
+            properties.put(PropertyIds.CREATION_DATE,
+                    objFactory.createPropertyDateTimeData(PropertyIds.CREATION_DATE, getCreatedAt()));
         }
         if (FilterParser.isContainedInFilter(PropertyIds.LAST_MODIFIED_BY, requestedIds)) {
-            properties.put(PropertyIds.LAST_MODIFIED_BY, objFactory.createPropertyStringData(
-                    PropertyIds.LAST_MODIFIED_BY, getModifiedBy()));
+            properties.put(PropertyIds.LAST_MODIFIED_BY,
+                    objFactory.createPropertyStringData(PropertyIds.LAST_MODIFIED_BY, getModifiedBy()));
         }
         if (FilterParser.isContainedInFilter(PropertyIds.LAST_MODIFICATION_DATE, requestedIds)) {
-            properties.put(PropertyIds.LAST_MODIFICATION_DATE, objFactory.createPropertyDateTimeData(
-                    PropertyIds.LAST_MODIFICATION_DATE, getModifiedAt()));
+            properties.put(PropertyIds.LAST_MODIFICATION_DATE,
+                    objFactory.createPropertyDateTimeData(PropertyIds.LAST_MODIFICATION_DATE, getModifiedAt()));
         }
         if (FilterParser.isContainedInFilter(PropertyIds.CHANGE_TOKEN, requestedIds)) {
             String token = getChangeToken();
-            properties.put(PropertyIds.CHANGE_TOKEN, objFactory.createPropertyStringData(PropertyIds.CHANGE_TOKEN,
-                    token));
+            properties.put(PropertyIds.CHANGE_TOKEN,
+                    objFactory.createPropertyStringData(PropertyIds.CHANGE_TOKEN, token));
         }
-        
+
         // CMIS 1.1 properties:
         if (FilterParser.isContainedInFilter(PropertyIds.DESCRIPTION, requestedIds)) {
-            properties.put(PropertyIds.DESCRIPTION, objFactory.createPropertyStringData(PropertyIds.DESCRIPTION,
-                    description));
+            properties.put(PropertyIds.DESCRIPTION,
+                    objFactory.createPropertyStringData(PropertyIds.DESCRIPTION, description));
         }
         if (FilterParser.isContainedInFilter(PropertyIds.SECONDARY_OBJECT_TYPE_IDS, requestedIds)) {
-            properties.put(PropertyIds.SECONDARY_OBJECT_TYPE_IDS, objFactory.createPropertyIdData(PropertyIds.SECONDARY_OBJECT_TYPE_IDS,
-                    secondaryTypeIds));
-        }            
+            properties.put(PropertyIds.SECONDARY_OBJECT_TYPE_IDS,
+                    objFactory.createPropertyIdData(PropertyIds.SECONDARY_OBJECT_TYPE_IDS, secondaryTypeIds));
+        }
 
         // add custom properties of type definition to the collection
         if (null != fProperties) {
@@ -316,14 +306,14 @@ public class StoredObjectImpl implements
                 }
             }
         }
-        
+
     }
 
     // ///////////////////////////////////////////
     // private helper methods
 
     @Override
-	public void setCustomProperties(Map<String, PropertyData<?>> properties) {
+    public void setCustomProperties(Map<String, PropertyData<?>> properties) {
         properties = new HashMap<String, PropertyData<?>>(properties); // get a
         // writable
         // collection
@@ -351,13 +341,13 @@ public class StoredObjectImpl implements
         // constructor.
         setModifiedBy(user);
         if (null != properties.get(PropertyIds.DESCRIPTION))
-            setDescription((String)properties.get(PropertyIds.DESCRIPTION).getFirstValue());
-        
+            setDescription((String) properties.get(PropertyIds.DESCRIPTION).getFirstValue());
+
         if (null != properties.get(PropertyIds.SECONDARY_OBJECT_TYPE_IDS)) {
             secondaryTypeIds.clear();
-            secondaryTypeIds.addAll((List<String>)properties.get(PropertyIds.SECONDARY_OBJECT_TYPE_IDS).getValues());
+            secondaryTypeIds.addAll((List<String>) properties.get(PropertyIds.SECONDARY_OBJECT_TYPE_IDS).getValues());
         }
-        
+
         if (isCreated) {
             setCreatedBy(user);
             setName((String) properties.get(PropertyIds.NAME).getFirstValue());
@@ -386,7 +376,7 @@ public class StoredObjectImpl implements
      * CMIS_NAME CMIS_OBJECT_ID CMIS_OBJECT_TYPE_ID CMIS_BASE_TYPE_ID
      * CMIS_CREATED_BY CMIS_CREATION_DATE CMIS_LAST_MODIFIED_BY
      * CMIS_LAST_MODIFICATION_DATE CMIS_CHANGE_TOKEN
-     *
+     * 
      * // ---- document ---- CMIS_IS_IMMUTABLE CMIS_IS_LATEST_VERSION
      * CMIS_IS_MAJOR_VERSION CMIS_IS_LATEST_MAJOR_VERSION CMIS_VERSION_LABEL
      * CMIS_VERSION_SERIES_ID CMIS_IS_VERSION_SERIES_CHECKED_OUT
@@ -394,12 +384,12 @@ public class StoredObjectImpl implements
      * CMIS_CHECKIN_COMMENT CMIS_CONTENT_STREAM_LENGTH
      * CMIS_CONTENT_STREAM_MIME_TYPE CMIS_CONTENT_STREAM_FILE_NAME
      * CMIS_CONTENT_STREAM_ID
-     *
+     * 
      * // ---- folder ---- CMIS_PARENT_ID CMIS_ALLOWED_CHILD_OBJECT_TYPE_IDS
      * CMIS_PATH
-     *
+     * 
      * // ---- relationship ---- CMIS_SOURCE_ID CMIS_TARGET_ID
-     *
+     * 
      * // ---- policy ---- CMIS_POLICY_TEXT
      */
     private static void removeAllSystemProperties(Map<String, PropertyData<?>> properties) {
@@ -498,89 +488,68 @@ public class StoredObjectImpl implements
     }
 
     @Override
-	public void persist() {
-        // in-memory implementation does not need to to anything to persist,
-        // but after this call the id should be set.
-        fId = fObjStore.storeObject(this);
-    }
-
-	@Override
-	public Acl getAcl() {
-	    return fObjStore.getAcl(fAclId);
-	}
-
-	public int getAclId() {
-	    return fAclId;
-	}
-	
-	public void setAclId(int aclId) {
-	    fAclId = aclId;
-	}
-	
-    @Override
-	public List<StoredObject> getObjectRelationships(RelationshipDirection relationshipDirection, String user) {
-	    
-        List<StoredObject> rels = fObjStore.getRelationships(getId(), null, relationshipDirection);
-		return rels;
-	}
-
-	@Override
-	public AllowableActions getAllowableActions(String user) {
-		AllowableActions actions = DataObjectCreator.fillAllowableActions(this, user);
-		return actions;
-	}
+    public int getAclId() {
+        return fAclId;
+    }
+
+    public void setAclId(int aclId) {
+        fAclId = aclId;
+    }
+
+    @Override
+    public AllowableActions getAllowableActions(String user) {
+        AllowableActions actions = DataObjectCreator.fillAllowableActions(this, user);
+        return actions;
+    }
 
     @Override
-	public List<RenditionData> getRenditions(String renditionFilter, long maxItems, long skipCount) {
+    public List<RenditionData> getRenditions(String renditionFilter, long maxItems, long skipCount) {
         return null;
     }
 
     @Override
-	public ContentStream getRenditionContent(String streamId, long offset, long length) {
+    public ContentStream getRenditionContent(String streamId, long offset, long length) {
         return null;
     }
 
     @Override
-	public boolean hasRendition(String user) {
+    public boolean hasRendition(String user) {
         return false;
     }
-    
-    protected  ContentStream getIconFromResourceDir(String name) throws IOException {
-        
+
+    protected ContentStream getIconFromResourceDir(String name) throws IOException {
+
         InputStream imageStream = this.getClass().getResourceAsStream(name);
         ContentStreamDataImpl content = new ContentStreamDataImpl(0);
         content.setFileName(name);
         content.setMimeType("image/png");
 
         ByteArrayOutputStream ba = new ByteArrayOutputStream();
-        byte[] buffer = new byte [65536];
+        byte[] buffer = new byte[65536];
         int noBytesRead = 0;
 
-        while ((noBytesRead = imageStream.read(buffer)) >=0 ) {
+        while ((noBytesRead = imageStream.read(buffer)) >= 0) {
             ba.write(buffer, 0, noBytesRead);
         }
-        
+
         content.setContent(new ByteArrayInputStream(ba.toByteArray()));
         return content;
     }
-    
+
     protected boolean testRenditionFilterForImage(String[] formats) {
         if (formats.length == 1 && null != formats[0] && formats[0].equals("cmis:none"))
             return false;
         else
-            return arrayContainsString(formats, "*")  || arrayContainsString(formats, "image/*") 
-                || arrayContainsString(formats, "image/jpeg") ;
+            return arrayContainsString(formats, "*") || arrayContainsString(formats, "image/*")
+                    || arrayContainsString(formats, "image/jpeg");
     }
-    
+
     private boolean arrayContainsString(String[] formats, String val) {
         for (String s : formats) {
             if (val.equals(s))
-                return true;            
+                return true;
         }
         return false;
     }
 
-
-
-
 }

Modified: chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/VersionedDocumentImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/VersionedDocumentImpl.java?rev=1507777&r1=1507776&r2=1507777&view=diff
==============================================================================
--- chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/VersionedDocumentImpl.java (original)
+++ chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/VersionedDocumentImpl.java Sun Jul 28 11:02:14 2013
@@ -40,8 +40,8 @@ public class VersionedDocumentImpl exten
     private String fCheckedOutUser;
     private final List<DocumentVersion> fVersions;
 
-    public VersionedDocumentImpl(ObjectStoreImpl objStore) {
-        super(objStore);
+    public VersionedDocumentImpl() {
+        super();
         fVersions = new ArrayList<DocumentVersion>();
         fIsCheckedOut = false;
     }
@@ -53,10 +53,9 @@ public class VersionedDocumentImpl exten
             throw new CmisConstraintException("Cannot add a version to document, document is checked out.");
         }
 
-        DocumentVersionImpl ver = new DocumentVersionImpl(fRepositoryId, this, content, verState, fObjStore);
+        DocumentVersionImpl ver = new DocumentVersionImpl(fRepositoryId, this, content, verState);
         ver.setSystemBasePropertiesWhenCreatedDirect(getName(), getTypeId(), user); // copy
         // name and type id from version series.
-        ver.persist();
         fVersions.add(ver);
         if (verState == VersioningState.CHECKEDOUT) {
             fCheckedOutUser = user;
@@ -215,7 +214,6 @@ public class VersionedDocumentImpl exten
     }
 
     private void cancelCheckOut(boolean deleteInObjectStore) {
-
         DocumentVersion pwc = getPwc();
         fIsCheckedOut = false;
         fCheckedOutUser = null;
@@ -227,8 +225,6 @@ public class VersionedDocumentImpl exten
             }
         }
 
-        if (deleteInObjectStore)
-            fObjStore.removeVersion(pwc);
     }
 
 }

Modified: chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/types/PropertyCreationHelper.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/types/PropertyCreationHelper.java?rev=1507777&r1=1507776&r2=1507777&view=diff
==============================================================================
--- chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/types/PropertyCreationHelper.java (original)
+++ chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/types/PropertyCreationHelper.java Sun Jul 28 11:02:14 2013
@@ -73,6 +73,8 @@ import org.apache.chemistry.opencmis.inm
 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.Folder;
+import org.apache.chemistry.opencmis.inmemory.storedobj.api.ObjectStore;
 import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoredObject;
 import org.apache.chemistry.opencmis.server.support.TypeManager;
 import org.slf4j.Logger;
@@ -207,7 +209,7 @@ public final class PropertyCreationHelpe
         prop.setDefaultValue(Collections.singletonList(defVal));
     }
 
-    public static Properties getPropertiesFromObject(StoredObject so, TypeManager typeManager,
+    public static Properties getPropertiesFromObject(StoredObject so, ObjectStore objectStore, TypeManager typeManager,
             List<String> requestedIds, boolean fillOptionalPropertyData) {
         // build properties collection
 
@@ -217,6 +219,10 @@ public final class PropertyCreationHelpe
         TypeDefinition td = typeManager.getTypeById(so.getTypeId()).getTypeDefinition();
 
         String typeId = so.getTypeId();
+        if (so instanceof Folder && FilterParser.isContainedInFilter(PropertyIds.PATH, requestedIds)) {
+            String path = objectStore.getFolderPath(so.getId());
+            properties.put(PropertyIds.PATH, objectFactory.createPropertyStringData(PropertyIds.PATH, path));
+        }
         if (FilterParser.isContainedInFilter(PropertyIds.BASE_TYPE_ID, requestedIds)) {
             if (td == null) {
                 log.warn("getPropertiesFromObject(), cannot get type definition, a type with id " + typeId
@@ -260,7 +266,7 @@ public final class PropertyCreationHelpe
         return props;
     }
 
-    public static Properties getPropertiesFromObject(StoredObject so, TypeDefinition primaryType, List<TypeDefinition> secondaryTypes,
+    public static Properties getPropertiesFromObject(StoredObject so, ObjectStore objectStore, TypeDefinition primaryType, List<TypeDefinition> secondaryTypes,
             Map<String, String> requestedIds, Map<String, String> requestedFuncs) {
         // build properties collection
 
@@ -268,6 +274,11 @@ public final class PropertyCreationHelpe
         BindingsObjectFactory objectFactory = new BindingsObjectFactoryImpl();
         Map<String, PropertyData<?>> properties = new HashMap<String, PropertyData<?>>();
         so.fillProperties(properties, objectFactory, idList);
+        // special handling for path
+        if (so instanceof Folder && FilterParser.isContainedInFilter(PropertyIds.PATH, idList)) {
+            String path = objectStore.getFolderPath(so.getId());
+            properties.put(PropertyIds.PATH, objectFactory.createPropertyStringData(PropertyIds.PATH, path));
+        }
 
         if (FilterParser.isContainedInFilter(PropertyIds.BASE_TYPE_ID, idList)) {
             String baseTypeId = primaryType.getBaseTypeId().value();
@@ -391,9 +402,9 @@ public final class PropertyCreationHelpe
         }
     }
 
-    public static ObjectData getObjectData(TypeManager tm, StoredObject so, String filter, String user,
-            Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
-            Boolean includePolicyIds, Boolean includeACL, ExtensionsData extension) {
+    public static ObjectData getObjectData(TypeManager tm, ObjectStore objectStore, StoredObject so, String filter,
+            String user, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
+            String renditionFilter, Boolean includePolicyIds, Boolean includeACL, ExtensionsData extension) {
 
         ObjectDataImpl od = new ObjectDataImpl();
 
@@ -403,7 +414,7 @@ public final class PropertyCreationHelpe
 
         // build properties collection
         List<String> requestedIds = FilterParser.getRequestedIdsFromFilter(filter);
-        Properties props = getPropertiesFromObject(so, tm, requestedIds, true);
+        Properties props = getPropertiesFromObject(so, objectStore, tm, requestedIds, true);
 
         // fill output object
         if (null != includeAllowableActions && includeAllowableActions) {
@@ -416,7 +427,8 @@ public final class PropertyCreationHelpe
             od.setRenditions(renditions);
 
         if (null != includeACL && includeACL) {
-            Acl acl = so instanceof DocumentVersion ? ((DocumentVersion) so).getParentDocument().getAcl() : so.getAcl();
+            int aclId = so instanceof DocumentVersion ? ((DocumentVersion) so).getParentDocument().getAclId() : so.getAclId();
+            Acl acl = objectStore.getAcl(aclId);
             od.setAcl(acl);
         }
         od.setIsExactAcl(true);
@@ -426,7 +438,7 @@ public final class PropertyCreationHelpe
         }
 
         if (null != includeRelationships && includeRelationships != IncludeRelationships.NONE) {
-            od.setRelationships(DataObjectCreator.fillRelationships(tm, includeRelationships, so, user));
+            od.setRelationships(DataObjectCreator.fillRelationships(tm, objectStore, includeRelationships, so, user));
         }
 
         if (null != includePolicyIds && includePolicyIds) {
@@ -443,15 +455,15 @@ public final class PropertyCreationHelpe
         return od;
     }
 
-    public static ObjectData getObjectDataQueryResult(TypeManager tm, TypeDefinition primaryType, StoredObject so,
-            String user, Map<String, String> requestedProperties, Map<String, String> requestedFuncs,
-            List<TypeDefinition> secondaryTypes, Boolean includeAllowableActions,
+    public static ObjectData getObjectDataQueryResult(TypeManager tm, ObjectStore objectStore,
+            TypeDefinition primaryType, StoredObject so, String user, Map<String, String> requestedProperties,
+            Map<String, String> requestedFuncs, List<TypeDefinition> secondaryTypes, Boolean includeAllowableActions,
             IncludeRelationships includeRelationships, String renditionFilter) {
 
         ObjectDataImpl od = new ObjectDataImpl();
 
         // build properties collection
-        Properties props = getPropertiesFromObject(so, primaryType, secondaryTypes, requestedProperties, requestedFuncs);
+        Properties props = getPropertiesFromObject(so, objectStore, primaryType, secondaryTypes, requestedProperties, requestedFuncs);
 
         // fill output object
         if (null != includeAllowableActions && includeAllowableActions) {
@@ -461,11 +473,14 @@ public final class PropertyCreationHelpe
             od.setAllowableActions(allowableActions);
         }
 
-        od.setAcl(so.getAcl());
+        int aclId = so.getAclId();
+        Acl acl = objectStore.getAcl(aclId);
+        od.setAcl(acl);
+
         od.setIsExactAcl(true);
 
         if (null != includeRelationships && includeRelationships != IncludeRelationships.NONE) {
-            od.setRelationships(DataObjectCreator.fillRelationships(tm, includeRelationships, so, user));
+            od.setRelationships(DataObjectCreator.fillRelationships(tm, objectStore, includeRelationships, so, user));
         }
 
         List<RenditionData> renditions = so.getRenditions(renditionFilter, 0, 0);

Modified: chemistry/opencmis/branches/inmemory-refactoring/src/test/java/org/apache/chemistry/opencmis/inmemory/FolderTest.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/branches/inmemory-refactoring/src/test/java/org/apache/chemistry/opencmis/inmemory/FolderTest.java?rev=1507777&r1=1507776&r2=1507777&view=diff
==============================================================================
--- chemistry/opencmis/branches/inmemory-refactoring/src/test/java/org/apache/chemistry/opencmis/inmemory/FolderTest.java (original)
+++ chemistry/opencmis/branches/inmemory-refactoring/src/test/java/org/apache/chemistry/opencmis/inmemory/FolderTest.java Sun Jul 28 11:02:14 2013
@@ -70,9 +70,9 @@ public class FolderTest extends TestCase
         assertNull(fRoot.getParentId());
         assertEquals(fRoot.getId(), f1.getParentId());
         assertEquals(f1.getId(), f11.getParentId());
-        assertEquals(Filing.PATH_SEPARATOR, fRoot.getPath());
-        assertEquals("/Folder 1", f1.getPath());
-        assertEquals("/Folder 1/Folder 1.1", f11.getPath());
+        assertEquals(Filing.PATH_SEPARATOR, getPath(fRoot));
+        assertEquals("/Folder 1", getPath(f1));
+        assertEquals("/Folder 1/Folder 1.1", getPath(f11));
         StoredObject fTest = fStore.getObjectByPath("/", USER);
         assertEquals(fRoot, fTest);
         fTest = fStore.getObjectByPath("/Folder 1", USER);
@@ -91,10 +91,10 @@ public class FolderTest extends TestCase
     public void testRenameFolder() {
         // rename top level folder
         String newName = "Folder B";
-        String oldPath = f2.getPath();
+        String oldPath = getPath(f2);
         fStore.rename(f2, newName);
         assertEquals(f2.getName(), newName);
-        assertEquals(f2.getPath(), Filing.PATH_SEPARATOR + newName);
+        assertEquals(getPath(f2), Filing.PATH_SEPARATOR + newName);
         assertNull(fStore.getObjectByPath(oldPath, USER));
         assertEquals(f2, fStore.getObjectByPath(Filing.PATH_SEPARATOR + newName, USER));
         try {
@@ -104,10 +104,10 @@ public class FolderTest extends TestCase
         }
 
         // rename sub folder
-        oldPath = f11.getPath();
+        oldPath = getPath(f11);
         fStore.rename(f11, newName);
         assertEquals(f11.getName(), newName);
-        assertEquals(f11.getPath(), "/Folder 1/Folder B");
+        assertEquals(getPath(f11), "/Folder 1/Folder B");
         assertNull(fStore.getObjectByPath(oldPath, USER));
         assertEquals(f11, fStore.getObjectByPath("/Folder 1/Folder B", USER));
         try {
@@ -126,11 +126,11 @@ public class FolderTest extends TestCase
 
     @Test
     public void testMoveFolder() {
-        String oldPath = f1.getPath();
+        String oldPath = getPath(f1);
         Folder f1Parent = fRoot;
         fStore.move(f1, f1Parent, f3);
         assertNull(fStore.getObjectByPath(oldPath, USER));
-        assertEquals(f1.getPath(), "/Folder 3/Folder 1");
+        assertEquals(getPath(f1), "/Folder 3/Folder 1");
         assertEquals(f1, fStore.getObjectByPath("/Folder 3/Folder 1", USER));
 
         fStore.rename(f2, "Folder 1");
@@ -144,7 +144,7 @@ public class FolderTest extends TestCase
 
     @Test
     public void testDeleteFolder() {
-        String oldPath = f2.getPath();
+        String oldPath = getPath(f2);
         fStore.deleteObject(f2.getId(), true, "TestUser");
         assertNull(fStore.getObjectByPath(oldPath, USER));
 
@@ -158,22 +158,21 @@ public class FolderTest extends TestCase
     private void createFolders() {
         fRoot = (FolderImpl) fStore.getRootFolder();
         f1 = (FolderImpl) createFolder("Folder 1", fRoot);
-        f1.persist();
 
         f2 = (FolderImpl) createFolder("Folder 2", fRoot);
-        f2.persist();
 
         f3 = (FolderImpl) createFolder("Folder 3", fRoot);
-        f3.persist();
 
         f4 = (FolderImpl) createFolder("Folder 4", fRoot);
-        f4.persist();
 
         f11 = (FolderImpl) createFolder("Folder 1.1", f1);
-        f11.persist();
     }
     
     private Folder createFolder(String name, Folder parent) {
     	return fStore.createFolder(name, null, "user", parent, null, null, null);    	
     }
+    
+    private String getPath(Folder folder) {
+        return fStore.getFolderPath(folder.getId());
+    }
 }

Modified: chemistry/opencmis/branches/inmemory-refactoring/src/test/java/org/apache/chemistry/opencmis/inmemory/TypeValidationTest.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/branches/inmemory-refactoring/src/test/java/org/apache/chemistry/opencmis/inmemory/TypeValidationTest.java?rev=1507777&r1=1507776&r2=1507777&view=diff
==============================================================================
--- chemistry/opencmis/branches/inmemory-refactoring/src/test/java/org/apache/chemistry/opencmis/inmemory/TypeValidationTest.java (original)
+++ chemistry/opencmis/branches/inmemory-refactoring/src/test/java/org/apache/chemistry/opencmis/inmemory/TypeValidationTest.java Sun Jul 28 11:02:14 2013
@@ -735,7 +735,7 @@ public class TypeValidationTest extends 
     private static TypeManager buildInheritedTypes() {
 
         TypeManagerImpl tm = new TypeManagerImpl();
-        tm.initTypeSystem(null); // create CMIS default types
+        tm.initTypeSystem(null, true); // create CMIS default types
 
         // create super type
         InMemoryDocumentTypeDefinition cmisSuperType = new InMemoryDocumentTypeDefinition(DOC_TYPE_SUPER,

Modified: chemistry/opencmis/branches/inmemory-refactoring/src/test/java/org/apache/chemistry/opencmis/inmemory/query/ProcessQueryTest.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/branches/inmemory-refactoring/src/test/java/org/apache/chemistry/opencmis/inmemory/query/ProcessQueryTest.java?rev=1507777&r1=1507776&r2=1507777&view=diff
==============================================================================
--- chemistry/opencmis/branches/inmemory-refactoring/src/test/java/org/apache/chemistry/opencmis/inmemory/query/ProcessQueryTest.java (original)
+++ chemistry/opencmis/branches/inmemory-refactoring/src/test/java/org/apache/chemistry/opencmis/inmemory/query/ProcessQueryTest.java Sun Jul 28 11:02:14 2013
@@ -414,7 +414,7 @@ public class ProcessQueryTest extends Ab
     @Before
     public void setUp() {
         tm = new TypeManagerImpl();
-        tm.initTypeSystem(null); // create CMIS default types
+        tm.initTypeSystem(null, true); // create CMIS default types
 
         // create some types for testing
         List<TypeDefinition> typeDefs = super.createTypes();

Modified: chemistry/opencmis/branches/inmemory-refactoring/src/test/java/org/apache/chemistry/opencmis/inmemory/query/QueryTypesTest.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/branches/inmemory-refactoring/src/test/java/org/apache/chemistry/opencmis/inmemory/query/QueryTypesTest.java?rev=1507777&r1=1507776&r2=1507777&view=diff
==============================================================================
--- chemistry/opencmis/branches/inmemory-refactoring/src/test/java/org/apache/chemistry/opencmis/inmemory/query/QueryTypesTest.java (original)
+++ chemistry/opencmis/branches/inmemory-refactoring/src/test/java/org/apache/chemistry/opencmis/inmemory/query/QueryTypesTest.java Sun Jul 28 11:02:14 2013
@@ -63,7 +63,7 @@ public class QueryTypesTest extends Abst
     @Before
     public void setUp() {
         tm = new TypeManagerImpl();
-        tm.initTypeSystem(null); // create CMIS default types
+        tm.initTypeSystem(null, true); // create CMIS default types
 
         // create some types for testing
         List<TypeDefinition> typeDefs = super.createTypes();
@@ -533,7 +533,7 @@ public class QueryTypesTest extends Abst
     public void testSecondaryJoin() throws RecognitionException {
         // needs some special types:
         tm = new TypeManagerImpl();
-        tm.initTypeSystem(null); // create CMIS default types
+        tm.initTypeSystem(null, true); // create CMIS default types
 
         // create some types for testing
         List<TypeDefinition> typeDefs = UnitTestTypeSystemCreator.getTypesList();