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 [1/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...

Author: jens
Date: Sun Jul 28 11:02:14 2013
New Revision: 1507777

URL: http://svn.apache.org/r1507777
Log:
InMemory: more refactoring

Removed:
    chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/SingleFiling.java
    chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/FilingMutable.java
    chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/types/PropertyUtil.java
Modified:
    chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/DataObjectCreator.java
    chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/TypeManagerImpl.java
    chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/query/InMemoryQueryProcessor.java
    chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/server/AtomLinkInfoProvider.java
    chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryAclService.java
    chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryNavigationServiceImpl.java
    chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryObjectServiceImpl.java
    chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryPolicyServiceImpl.java
    chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryRelationshipServiceImpl.java
    chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryVersioningServiceImpl.java
    chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/Filing.java
    chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/Folder.java
    chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/MultiFiling.java
    chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/ObjectStore.java
    chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/StoredObject.java
    chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/VersionedDocument.java
    chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/DocumentImpl.java
    chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/DocumentVersionImpl.java
    chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/FilingImpl.java
    chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/FolderImpl.java
    chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/ItemImpl.java
    chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/ObjectStoreImpl.java
    chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/PolicyImpl.java
    chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/RelationshipImpl.java
    chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/StoreManagerImpl.java
    chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/StoredObjectImpl.java
    chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/VersionedDocumentImpl.java
    chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/types/PropertyCreationHelper.java
    chemistry/opencmis/branches/inmemory-refactoring/src/test/java/org/apache/chemistry/opencmis/inmemory/FolderTest.java
    chemistry/opencmis/branches/inmemory-refactoring/src/test/java/org/apache/chemistry/opencmis/inmemory/TypeValidationTest.java
    chemistry/opencmis/branches/inmemory-refactoring/src/test/java/org/apache/chemistry/opencmis/inmemory/query/ProcessQueryTest.java
    chemistry/opencmis/branches/inmemory-refactoring/src/test/java/org/apache/chemistry/opencmis/inmemory/query/QueryTypesTest.java

Modified: chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/DataObjectCreator.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/DataObjectCreator.java?rev=1507777&r1=1507776&r2=1507777&view=diff
==============================================================================
--- chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/DataObjectCreator.java (original)
+++ chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/DataObjectCreator.java Sun Jul 28 11:02:14 2013
@@ -20,7 +20,6 @@ package org.apache.chemistry.opencmis.in
 
 import java.math.BigInteger;
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
 import java.util.Set;
 
@@ -29,7 +28,6 @@ import org.apache.chemistry.opencmis.com
 import org.apache.chemistry.opencmis.commons.data.AllowableActions;
 import org.apache.chemistry.opencmis.commons.data.ChangeEventInfo;
 import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.ObjectList;
 import org.apache.chemistry.opencmis.commons.data.PolicyIdList;
 import org.apache.chemistry.opencmis.commons.enums.Action;
 import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
@@ -44,6 +42,7 @@ 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.Item;
+import org.apache.chemistry.opencmis.inmemory.storedobj.api.ObjectStore;
 import org.apache.chemistry.opencmis.inmemory.storedobj.api.Policy;
 import org.apache.chemistry.opencmis.inmemory.storedobj.api.Relationship;
 import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoredObject;
@@ -183,9 +182,9 @@ public class DataObjectCreator {
         return polIds;
     }
 
-    public static List<ObjectData> fillRelationships(TypeManager tm, IncludeRelationships includeRelationships,
-            StoredObject so, String user) {
-        return getRelationships(tm, includeRelationships, so, user);
+    public static List<ObjectData> fillRelationships(TypeManager tm, ObjectStore objStore,
+            IncludeRelationships includeRelationships, StoredObject so, String user) {
+        return getRelationships(tm, objStore, includeRelationships, so, user);
     }
 
     public static ChangeEventInfo fillChangeEventInfo(StoredObject so) {
@@ -194,7 +193,7 @@ public class DataObjectCreator {
         return changeEventInfo;
     }
 
-    public static List<ObjectData> getRelationships(TypeManager tm, IncludeRelationships includeRelationships,
+    public static List<ObjectData> getRelationships(TypeManager tm, ObjectStore objStore, IncludeRelationships includeRelationships,
             StoredObject spo, String user) {
         if (includeRelationships != IncludeRelationships.NONE) {
             RelationshipDirection relationshipDirection = RelationshipDirection.SOURCE;
@@ -204,10 +203,10 @@ public class DataObjectCreator {
             else if (includeRelationships == IncludeRelationships.BOTH)
                 relationshipDirection = RelationshipDirection.EITHER;
             
-            List<StoredObject>  relationships = spo.getObjectRelationships(relationshipDirection, user);
+            List<StoredObject> relationships = objStore.getRelationships(spo.getId(), null, relationshipDirection); 
             List<ObjectData> res = new ArrayList<ObjectData>(relationships.size());
             for (StoredObject so : relationships) {
-                ObjectData od = PropertyCreationHelper.getObjectData(tm, so, null, user, false,
+                ObjectData od = PropertyCreationHelper.getObjectData(tm, objStore, so, null, user, false,
                         IncludeRelationships.NONE, null, false, false, null);
                 res.add(od);
             }

Modified: chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/TypeManagerImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/TypeManagerImpl.java?rev=1507777&r1=1507776&r2=1507777&view=diff
==============================================================================
--- chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/TypeManagerImpl.java (original)
+++ chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/TypeManagerImpl.java Sun Jul 28 11:02:14 2013
@@ -114,9 +114,10 @@ public class TypeManagerImpl implements 
      *            list of types to add to the repository
      *
      */
-    public void initTypeSystem(List<TypeDefinition> typesList) {
+    public void initTypeSystem(List<TypeDefinition> typesList, boolean createCmisDefaultTypes) {
 
-        createCmisDefaultTypes();
+        if (createCmisDefaultTypes)
+            createCmisDefaultTypes();
 
         // merge all types from the list and build the correct hierachy with
         // children
@@ -141,18 +142,19 @@ public class TypeManagerImpl implements 
     @Override
 	public void addTypeDefinition(TypeDefinition cmisType) {
         
-        TypeDefinitionContainerImpl typeContainer = new TypeDefinitionContainerImpl(cmisType);
-
-        // add new type to children of parent types
-        TypeDefinitionContainer parentTypeContainer = fTypesMap.get(cmisType.getParentTypeId());
-        parentTypeContainer.getChildren().add(typeContainer);
-
-        // recursively add inherited properties
-        Map<String, PropertyDefinition<?>> propDefs = typeContainer.getTypeDefinition().getPropertyDefinitions();
-        addInheritedProperties(propDefs, parentTypeContainer.getTypeDefinition());
-
         LOG.info("Adding type definition with name " + cmisType.getLocalName() + " and id " 
                 + cmisType.getId() + " to repository.");
+        TypeDefinitionContainerImpl typeContainer = new TypeDefinitionContainerImpl(cmisType);
+
+        if (null != cmisType.getParentTypeId()) {
+            // add new type to children of parent types
+            TypeDefinitionContainer parentTypeContainer = fTypesMap.get(cmisType.getParentTypeId());
+            parentTypeContainer.getChildren().add(typeContainer);
+
+            // recursively add inherited properties
+            Map<String, PropertyDefinition<?>> propDefs = typeContainer.getTypeDefinition().getPropertyDefinitions();
+            addInheritedProperties(propDefs, parentTypeContainer.getTypeDefinition());
+        }
         // add type to type map
         fTypesMap.put(cmisType.getId(), typeContainer);
     }
@@ -238,17 +240,18 @@ public class TypeManagerImpl implements 
     }
 
     private static boolean isRootType(TypeDefinitionContainer c) {
-        if (c.getTypeDefinition().equals(InMemoryFolderTypeDefinition.getRootFolderType())
-                || c.getTypeDefinition().equals(InMemoryDocumentTypeDefinition.getRootDocumentType())
-                || c.getTypeDefinition().equals(InMemoryRelationshipTypeDefinition.getRootRelationshipType())
-                || c.getTypeDefinition().equals(InMemoryPolicyTypeDefinition.getRootPolicyType())
-                || c.getTypeDefinition().equals(InMemoryItemTypeDefinition.getRootItemType()) // CMIS 1.1
-                || c.getTypeDefinition().equals(InMemorySecondaryTypeDefinition.getRootSecondaryType()) // CMIS 1.1
-                ) {
-            return true;
-        } else {
-            return false;
-        }
+        return (c.getTypeDefinition().getId().equals(c.getTypeDefinition().getBaseTypeId().value()));
+//        if (c.getTypeDefinition().equals(InMemoryFolderTypeDefinition.getRootFolderType())
+//                || c.getTypeDefinition().equals(InMemoryDocumentTypeDefinition.getRootDocumentType())
+//                || c.getTypeDefinition().equals(InMemoryRelationshipTypeDefinition.getRootRelationshipType())
+//                || c.getTypeDefinition().equals(InMemoryPolicyTypeDefinition.getRootPolicyType())
+//                || c.getTypeDefinition().equals(InMemoryItemTypeDefinition.getRootItemType()) // CMIS 1.1
+//                || c.getTypeDefinition().equals(InMemorySecondaryTypeDefinition.getRootSecondaryType()) // CMIS 1.1
+//                ) {
+//            return true;
+//        } else {
+//            return false;
+//        }
     }
 
     private static PropertyDefinition<?> clonePropertyDefinition(PropertyDefinition<?> src) {

Modified: chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/query/InMemoryQueryProcessor.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/query/InMemoryQueryProcessor.java?rev=1507777&r1=1507776&r2=1507777&view=diff
==============================================================================
--- chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/query/InMemoryQueryProcessor.java (original)
+++ chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/query/InMemoryQueryProcessor.java Sun Jul 28 11:02:14 2013
@@ -54,7 +54,6 @@ import org.apache.chemistry.opencmis.inm
 import org.apache.chemistry.opencmis.inmemory.storedobj.impl.ContentStreamDataImpl;
 import org.apache.chemistry.opencmis.inmemory.storedobj.impl.ObjectStoreImpl;
 import org.apache.chemistry.opencmis.inmemory.types.PropertyCreationHelper;
-import org.apache.chemistry.opencmis.inmemory.types.PropertyUtil;
 import org.apache.chemistry.opencmis.server.support.TypeManager;
 import org.apache.chemistry.opencmis.server.support.query.AbstractPredicateWalker;
 import org.apache.chemistry.opencmis.server.support.query.CmisQueryWalker;
@@ -158,7 +157,7 @@ public class InMemoryQueryProcessor {
             String queryName = queryObj.getTypes().values().iterator().next();
             TypeDefinition td = queryObj.getTypeDefinitionFromQueryName(queryName);
 
-            ObjectData od = PropertyCreationHelper.getObjectDataQueryResult(tm, td, so, user, props, funcs,
+            ObjectData od = PropertyCreationHelper.getObjectDataQueryResult(tm, objStore, td, so, user, props, funcs,
                     secondaryTypeIds, includeAllowableActions, includeRelationships, renditionFilter);
             objDataList.add(od);
         }
@@ -207,8 +206,8 @@ public class InMemoryQueryProcessor {
                     String propId = ((ColumnReference) sel).getPropertyId();
                     PropertyDefinition<?> pd = ((ColumnReference) sel).getPropertyDefinition();
                     
-                    Object propVal1 = PropertyUtil.getProperty(so1, propId, pd);
-                    Object propVal2 = PropertyUtil.getProperty(so2, propId, pd);
+                    Object propVal1 = PropertyQueryUtil.getProperty(so1, propId, pd);
+                    Object propVal2 = PropertyQueryUtil.getProperty(so2, propId, pd);
 
                     if (propVal1 == null && propVal2 == null) {
                         result = 0;
@@ -363,7 +362,7 @@ public class InMemoryQueryProcessor {
             ColumnReference colRef = getColumnReference(colNode);
             PropertyDefinition<?> pd = colRef.getPropertyDefinition();
             List<Object> literals = onLiteralList(listNode);
-            Object prop = PropertyUtil.getProperty(so, colRef.getPropertyId(), pd);
+            Object prop = PropertyQueryUtil.getProperty(so, colRef.getPropertyId(), pd);
 
             if (pd.getCardinality() != Cardinality.SINGLE) {
                 throw new IllegalStateException("Operator IN only is allowed on single-value properties ");
@@ -381,7 +380,7 @@ public class InMemoryQueryProcessor {
             // then it evaluates to true for null values (not set properties).
             ColumnReference colRef = getColumnReference(colNode);
             PropertyDefinition<?> pd = colRef.getPropertyDefinition();
-            Object prop = PropertyUtil.getProperty(so, colRef.getPropertyId(), pd);
+            Object prop = PropertyQueryUtil.getProperty(so, colRef.getPropertyId(), pd);
             List<Object> literals = onLiteralList(listNode);
             if (pd.getCardinality() != Cardinality.SINGLE) {
                 throw new IllegalStateException("Operator IN only is allowed on single-value properties ");
@@ -459,7 +458,7 @@ public class InMemoryQueryProcessor {
         public Boolean walkIsNull(Tree opNode, Tree colNode) {
             ColumnReference colRef = getColumnReference(colNode);
             PropertyDefinition<?> pd = colRef.getPropertyDefinition();
-            Object propVal = PropertyUtil.getProperty(so, colRef.getPropertyId(), pd);
+            Object propVal = PropertyQueryUtil.getProperty(so, colRef.getPropertyId(), pd);
             return propVal == null;
         }
 
@@ -467,7 +466,7 @@ public class InMemoryQueryProcessor {
         public Boolean walkIsNotNull(Tree opNode, Tree colNode) {
             ColumnReference colRef = getColumnReference(colNode);
             PropertyDefinition<?> pd = colRef.getPropertyDefinition();
-            Object propVal = PropertyUtil.getProperty(so, colRef.getPropertyId(), pd);
+            Object propVal = PropertyQueryUtil.getProperty(so, colRef.getPropertyId(), pd);
             return propVal != null;
         }
 
@@ -489,7 +488,7 @@ public class InMemoryQueryProcessor {
                 throw new IllegalStateException("LIKE is not allowed for multi-value properties ");
             }
 
-            String propVal = (String) PropertyUtil.getProperty(so, colRef.getPropertyId(), pd);
+            String propVal = (String) PropertyQueryUtil.getProperty(so, colRef.getPropertyId(), pd);
             
             if (null == propVal) {
             	return false;
@@ -556,7 +555,7 @@ public class InMemoryQueryProcessor {
             // System.identityHashCode(leftChild) + " is " + leftChild);
             ColumnReference colRef = getColumnReference(leftChild);
             PropertyDefinition<?> pd = colRef.getPropertyDefinition();
-            Object val = PropertyUtil.getProperty(so, colRef.getPropertyId(), pd);
+            Object val = PropertyQueryUtil.getProperty(so, colRef.getPropertyId(), pd);
             if (val==null) {
                 return null;
             } else if (val instanceof List<?>) {

Modified: chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/server/AtomLinkInfoProvider.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/server/AtomLinkInfoProvider.java?rev=1507777&r1=1507776&r2=1507777&view=diff
==============================================================================
--- chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/server/AtomLinkInfoProvider.java (original)
+++ chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/server/AtomLinkInfoProvider.java Sun Jul 28 11:02:14 2013
@@ -77,6 +77,7 @@ public class AtomLinkInfoProvider {
             return;
         }
         TypeDefinition typeDef = fStoreManager.getTypeById(repositoryId, so.getTypeId()).getTypeDefinition();
+        ObjectStore objStore = fStoreManager.getObjectStore(repositoryId);
 
         // Fill all setters:
         objInfo.setId(so.getId());
@@ -149,12 +150,12 @@ public class AtomLinkInfoProvider {
 
         // Relationships
         objInfo.setSupportsRelationships(true);
-        List<StoredObject> rels = so.getObjectRelationships(RelationshipDirection.SOURCE, null);
+        List<StoredObject> rels = objStore.getRelationships(so.getId(), null, RelationshipDirection.SOURCE);
         List<String> srcIds = new ArrayList<String>(rels.size());
         for (StoredObject rel : rels)
             srcIds.add(rel.getId());
         
-        rels = so.getObjectRelationships(RelationshipDirection.TARGET, null);
+        rels = objStore.getRelationships(so.getId(), null, RelationshipDirection.TARGET);
         List<String> targetIds = new ArrayList<String>(rels.size());
         for (StoredObject rel : rels)
             targetIds.add(rel.getId());
@@ -172,8 +173,8 @@ public class AtomLinkInfoProvider {
 
     public void fillInformationForAtomLinks(String repositoryId, StoredObject so, ObjectInfoImpl objectInfo) {
         TypeManager tm = fStoreManager.getTypeManager(repositoryId);
-
-        ObjectData od = PropertyCreationHelper.getObjectData(tm, so, null, null, false,
+        ObjectStore objStore = fStoreManager.getObjectStore(repositoryId);
+        ObjectData od = PropertyCreationHelper.getObjectData(tm, objStore, so, null, null, false,
                 IncludeRelationships.NONE, null, false, false, null);
         fillInformationForAtomLinks(repositoryId, so, od, objectInfo);
     }

Modified: chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryAclService.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryAclService.java?rev=1507777&r1=1507776&r2=1507777&view=diff
==============================================================================
--- chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryAclService.java (original)
+++ chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryAclService.java Sun Jul 28 11:02:14 2013
@@ -26,6 +26,7 @@ import org.apache.chemistry.opencmis.com
 import org.apache.chemistry.opencmis.commons.server.ObjectInfoHandler;
 import org.apache.chemistry.opencmis.inmemory.TypeValidator;
 import org.apache.chemistry.opencmis.inmemory.storedobj.api.DocumentVersion;
+import org.apache.chemistry.opencmis.inmemory.storedobj.api.ObjectStore;
 import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoreManager;
 import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoredObject;
 import org.slf4j.Logger;
@@ -42,12 +43,15 @@ public class InMemoryAclService extends 
     public Acl getAcl(CallContext context, String repositoryId, String objectId, Boolean onlyBasicPermissions,
             ExtensionsData extension, ObjectInfoHandler objectInfos) {
         LOG.debug("start getAcl()");
-        Acl acl = null;
+        int aclId;
         StoredObject so = validator.getAcl(context, repositoryId, objectId, extension);
+        ObjectStore objectStore = fStoreManager.getObjectStore(repositoryId);
         if (so instanceof DocumentVersion)
-            acl = ((DocumentVersion) so).getParentDocument().getAcl();
+            aclId = ((DocumentVersion) so).getParentDocument().getAclId();
         else
-            acl = so.getAcl();
+            aclId = so.getAclId();
+        
+        Acl acl = objectStore.getAcl(aclId);
 
         if (context.isObjectInfoRequired()) {
             ObjectInfoImpl objectInfo = new ObjectInfoImpl();

Modified: chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryNavigationServiceImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryNavigationServiceImpl.java?rev=1507777&r1=1507776&r2=1507777&view=diff
==============================================================================
--- chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryNavigationServiceImpl.java (original)
+++ chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryNavigationServiceImpl.java Sun Jul 28 11:02:14 2013
@@ -82,12 +82,13 @@ public class InMemoryNavigationServiceIm
         LOG.debug("start getCheckedOutDocs()");
 
         String user = context.getUsername();
+        ObjectStore objStore = fStoreManager.getObjectStore(repositoryId);
         if (null == folderId) {
             List<StoredObject> checkedOuts = fStoreManager.getObjectStore(repositoryId).getCheckedOutDocuments(
                     orderBy, context.getUsername(), includeRelationships);
             for (StoredObject checkedOut : checkedOuts) {
                 TypeManager tm = fStoreManager.getTypeManager(repositoryId);
-                ObjectData od = PropertyCreationHelper.getObjectData(tm, checkedOut, filter, user,
+                ObjectData od = PropertyCreationHelper.getObjectData(tm, objStore, checkedOut, filter, user,
                         includeAllowableActions, includeRelationships, renditionFilter, false, false, extension);
                 if (context.isObjectInfoRequired()) {
                     ObjectInfoImpl objectInfo = new ObjectInfoImpl();
@@ -300,7 +301,7 @@ public class InMemoryNavigationServiceIm
             }
 
             TypeManager tm = fStoreManager.getTypeManager(repositoryId);
-            ObjectData objectData = PropertyCreationHelper.getObjectData(tm, child, filter, user, includeAllowableActions, 
+            ObjectData objectData = PropertyCreationHelper.getObjectData(tm, objStore, child, filter, user, includeAllowableActions, 
                     includeRelationships, renditionFilter, false, false, null);
 
             oifd.setObject(objectData);
@@ -373,7 +374,7 @@ public class InMemoryNavigationServiceIm
                 ObjectParentDataImpl parentData = new ObjectParentDataImpl();
                 TypeManager tm = fStoreManager.getTypeManager(repositoryId);
                 Folder parent = (Folder) objStore.getObjectById(parentId);
-                ObjectData objData = PropertyCreationHelper.getObjectData(tm, parent, filter, user, includeAllowableActions, 
+                ObjectData objData = PropertyCreationHelper.getObjectData(tm, objStore, parent, filter, user, includeAllowableActions, 
                         includeRelationships, renditionFilter, false, true, null);
 
                 parentData.setObject(objData);
@@ -409,7 +410,7 @@ public class InMemoryNavigationServiceIm
         copyFilteredProperties(repositoryId, parentFolder, filter, parent);
         
         TypeManager tm = fStoreManager.getTypeManager(repositoryId);
-        parent.setRelationships(DataObjectCreator.getRelationships(tm, includeRelationships, parentFolder, user));
+        parent.setRelationships(DataObjectCreator.getRelationships(tm, objStore, includeRelationships, parentFolder, user));
         
         if (includeAllowableActions != null && includeAllowableActions) {
             //  AllowableActions allowableActions = DataObjectCreator.fillAllowableActions(spo, user);
@@ -427,9 +428,10 @@ public class InMemoryNavigationServiceIm
     }
 
     void copyFilteredProperties(String repositoryId, StoredObject so, String filter, ObjectDataImpl objData) {
+        ObjectStore objectStore = fStoreManager.getObjectStore(repositoryId);
         List<String> requestedIds = FilterParser.getRequestedIdsFromFilter(filter);
         TypeManager tm = fStoreManager.getTypeManager(repositoryId);
-        Properties props = PropertyCreationHelper.getPropertiesFromObject(so, tm, requestedIds, true);
+        Properties props = PropertyCreationHelper.getPropertiesFromObject(so, objectStore, tm, requestedIds, true);
         objData.setProperties(props);
     }
 

Modified: chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryObjectServiceImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryObjectServiceImpl.java?rev=1507777&r1=1507776&r2=1507777&view=diff
==============================================================================
--- chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryObjectServiceImpl.java (original)
+++ chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryObjectServiceImpl.java Sun Jul 28 11:02:14 2013
@@ -119,6 +119,7 @@ public class InMemoryObjectServiceImpl e
         LOG.debug("start createDocumentFromSource()");
         StoredObject so = validator.createDocumentFromSource(context, repositoryId, sourceId, folderId, policies,
                 extension);
+        ObjectStore objectStore = fStoreManager.getObjectStore(repositoryId);
 
         ContentStream content = getContentStream(context, repositoryId, sourceId, null, BigInteger.valueOf(-1),
                 BigInteger.valueOf(-1), null);
@@ -130,7 +131,7 @@ public class InMemoryObjectServiceImpl e
         // build properties collection
         List<String> requestedIds = FilterParser.getRequestedIdsFromFilter("*");
         TypeManager tm = fStoreManager.getTypeManager(repositoryId);
-        Properties existingProps = PropertyCreationHelper.getPropertiesFromObject(so, tm, requestedIds, true);
+        Properties existingProps = PropertyCreationHelper.getPropertiesFromObject(so, objectStore, tm, requestedIds, true);
 
         PropertiesImpl newPD = new PropertiesImpl();
         // copy all existing properties
@@ -213,6 +214,8 @@ public class InMemoryObjectServiceImpl e
         // check if the given type is a document type
         BaseTypeId typeBaseId = typeDefC.getTypeDefinition().getBaseTypeId();
         StoredObject so = null;
+        ObjectStore objStore = fStoreManager.getObjectStore(repositoryId);
+
         if (typeBaseId.equals(InMemoryDocumentTypeDefinition.getRootDocumentType().getBaseTypeId())) {
             so = createDocumentIntern(context, repositoryId, properties, folderId, contentStream, versioningState,
                     null, null, null, null);
@@ -231,7 +234,7 @@ public class InMemoryObjectServiceImpl e
         // Make a call to getObject to convert the resulting id into an
         // ObjectData
         TypeManager tm = fStoreManager.getTypeManager(repositoryId);
-        ObjectData od = PropertyCreationHelper.getObjectData(tm, so, null, context.getUsername(), false,
+        ObjectData od = PropertyCreationHelper.getObjectData(tm, objStore, so, null, context.getUsername(), false,
                 IncludeRelationships.NONE, null, false, false, extension);
 
         if (context.isObjectInfoRequired()) {
@@ -381,6 +384,7 @@ public class InMemoryObjectServiceImpl e
         LOG.debug("start getObject()");
 
         StoredObject so = validator.getObject(context, repositoryId, objectId, extension);
+        ObjectStore objStore = fStoreManager.getObjectStore(repositoryId);
 
         if (so == null) {
             throw new CmisObjectNotFoundException("Unknown object id: " + objectId);
@@ -388,7 +392,7 @@ public class InMemoryObjectServiceImpl e
 
         String user = context.getUsername();
         TypeManager tm = fStoreManager.getTypeManager(repositoryId);
-        ObjectData od = PropertyCreationHelper.getObjectData(tm, so, filter, user, includeAllowableActions,
+        ObjectData od = PropertyCreationHelper.getObjectData(tm, objStore, so, filter, user, includeAllowableActions,
                 includeRelationships, renditionFilter, includePolicyIds, includeAcl, extension);
 
         if (context.isObjectInfoRequired()) {
@@ -426,9 +430,10 @@ public class InMemoryObjectServiceImpl e
         }
 
         String user = context.getUsername();
+        ObjectStore objStore = fStoreManager.getObjectStore(repositoryId);
 
         TypeManager tm = fStoreManager.getTypeManager(repositoryId);
-        ObjectData od = PropertyCreationHelper.getObjectData(tm, so, filter, user, includeAllowableActions,
+        ObjectData od = PropertyCreationHelper.getObjectData(tm, objStore, so, filter, user, includeAllowableActions,
                 includeRelationships, renditionFilter, includePolicyIds, includeAcl, extension);
 
         LOG.debug("stop getObjectByPath()");
@@ -449,6 +454,7 @@ public class InMemoryObjectServiceImpl e
 
         LOG.debug("start getProperties()");
         StoredObject so = validator.getProperties(context, repositoryId, objectId, extension);
+        ObjectStore objectStore = fStoreManager.getObjectStore(repositoryId);
 
         if (so == null) {
             throw new CmisObjectNotFoundException("Unknown object id: " + objectId);
@@ -457,7 +463,7 @@ public class InMemoryObjectServiceImpl e
         // build properties collection
         List<String> requestedIds = FilterParser.getRequestedIdsFromFilter(filter);
         TypeManager tm = fStoreManager.getTypeManager(repositoryId);
-        Properties props = PropertyCreationHelper.getPropertiesFromObject(so, tm, requestedIds, true);
+        Properties props = PropertyCreationHelper.getPropertiesFromObject(so, objectStore, tm, requestedIds, true);
         LOG.debug("stop getProperties()");
         return props;
     }
@@ -544,7 +550,7 @@ public class InMemoryObjectServiceImpl e
         LOG.debug("stop moveObject()");
 
         TypeManager tm = fStoreManager.getTypeManager(repositoryId);
-        ObjectData od = PropertyCreationHelper.getObjectData(tm, so, null, user, false, IncludeRelationships.NONE,
+        ObjectData od = PropertyCreationHelper.getObjectData(tm, objectStore, so, null, user, false, IncludeRelationships.NONE,
                 null, false, false, extension);
 
         // To be able to provide all Atom links in the response we need
@@ -613,6 +619,7 @@ public class InMemoryObjectServiceImpl e
         LOG.debug("start updateProperties()");
         StoredObject so = validator.updateProperties(context, repositoryId, objectId, extension);
         String user = context.getUsername();
+        ObjectStore objStore = fStoreManager.getObjectStore(repositoryId);
 
         // Validation
         TypeDefinition typeDef = getTypeDefinition(repositoryId, so);
@@ -720,8 +727,8 @@ 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 objStore = (ObjectStoreFiling) fStoreManager.getObjectStore(repositoryId);
-                objStore.rename((Fileable)so, (String) pd.getFirstValue()); 
+                ObjectStoreFiling objStoreFiling = (ObjectStoreFiling) objStore;
+                objStoreFiling.rename((Fileable)so, (String) pd.getFirstValue()); 
                 hasUpdatedProp = true;
             }
         }
@@ -733,7 +740,6 @@ public class InMemoryObjectServiceImpl e
             }
             so.updateSystemBasePropertiesWhenModified(properties.getProperties(), user);
             // set changeToken
-            so.persist();
         }
 
         if (hasUpdatedProp) {
@@ -755,7 +761,7 @@ public class InMemoryObjectServiceImpl e
         }
 
         TypeManager tm = fStoreManager.getTypeManager(repositoryId);
-        ObjectData od = PropertyCreationHelper.getObjectData(tm, so, null, user, false, IncludeRelationships.NONE,
+        ObjectData od = PropertyCreationHelper.getObjectData(tm, objStore, so, null, user, false, IncludeRelationships.NONE,
                 null, false, false, extension);
 
         // To be able to provide all Atom links in the response we need
@@ -933,13 +939,11 @@ public class InMemoryObjectServiceImpl e
         if (((DocumentTypeDefinition) typeDef).isVersionable()) {
             DocumentVersion version = objectStore.createVersionedDocument(name, propMap, user, folder, policies,
                     addACEs, removeACEs, contentStream, versioningState);
-            version.persist();
             so = version; // return the version and not the version series to
                           // caller
         } else {
             Document doc = objectStore.createDocument(name, propMap, user, folder, policies, addACEs, removeACEs);
             doc.setContent(contentStream, false);
-            doc.persist();
             so = doc;
         }
 
@@ -1015,7 +1019,6 @@ public class InMemoryObjectServiceImpl e
         Folder newFolder = objStore.createFolder(folderName, properties.getProperties(), user, parent, policies,
                 addACEs, removeACEs);
         LOG.debug("stop createFolder()");
-        newFolder.persist();
         return newFolder;
     }
 
@@ -1182,10 +1185,7 @@ public class InMemoryObjectServiceImpl e
 
         // Now we are sure to have document type definition:
         so = objectStore.createItem(name, propMap, user, folder, policies, addACEs, removeACEs);
-        so.persist();
-
         return so;
-
     }
 
     private boolean hasDescendant(String user, ObjectStore objStore, Folder sourceFolder, Folder targetFolder) {

Modified: chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryPolicyServiceImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryPolicyServiceImpl.java?rev=1507777&r1=1507776&r2=1507777&view=diff
==============================================================================
--- chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryPolicyServiceImpl.java (original)
+++ chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryPolicyServiceImpl.java Sun Jul 28 11:02:14 2013
@@ -43,6 +43,7 @@ public class InMemoryPolicyServiceImpl e
             String filter, ExtensionsData extension) {
 
         StoredObject so = validator.getAppliedPolicies(context, repositoryId, objectId, extension);
+        ObjectStore objStore = fStoreManager.getObjectStore(repositoryId);
 
         if (so == null) {
             throw new CmisObjectNotFoundException("Unknown object id: " + objectId);
@@ -57,7 +58,7 @@ public class InMemoryPolicyServiceImpl e
             ObjectStore os = super.fStoreManager.getObjectStore(repositoryId);
             for (String polId : polIds) {
                 StoredObject pol = os.getObjectById(polId);
-                ObjectData od = PropertyCreationHelper.getObjectData(tm, pol, filter, user, false,
+                ObjectData od = PropertyCreationHelper.getObjectData(tm, objStore, pol, filter, user, false,
                         IncludeRelationships.NONE, null, false, false, null);
                 res.add(od);
             }

Modified: chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryRelationshipServiceImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryRelationshipServiceImpl.java?rev=1507777&r1=1507776&r2=1507777&view=diff
==============================================================================
--- chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryRelationshipServiceImpl.java (original)
+++ chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryRelationshipServiceImpl.java Sun Jul 28 11:02:14 2013
@@ -81,7 +81,7 @@ public class InMemoryRelationshipService
         List<ObjectData> odList = new ArrayList<ObjectData>();
 
         for (StoredObject rel : rels) {
-            ObjectData od = PropertyCreationHelper.getObjectData(tm, rel, filter, user, includeAllowableActions,
+            ObjectData od = PropertyCreationHelper.getObjectData(tm, objStore, rel, filter, user, includeAllowableActions,
                     IncludeRelationships.NONE, null, false, false, extension);
             odList.add(od);
         }

Modified: chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryVersioningServiceImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryVersioningServiceImpl.java?rev=1507777&r1=1507776&r2=1507777&view=diff
==============================================================================
--- chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryVersioningServiceImpl.java (original)
+++ chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryVersioningServiceImpl.java Sun Jul 28 11:02:14 2013
@@ -40,6 +40,7 @@ import org.apache.chemistry.opencmis.com
 import org.apache.chemistry.opencmis.inmemory.FilterParser;
 import org.apache.chemistry.opencmis.inmemory.storedobj.api.Document;
 import org.apache.chemistry.opencmis.inmemory.storedobj.api.DocumentVersion;
+import org.apache.chemistry.opencmis.inmemory.storedobj.api.ObjectStore;
 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;
@@ -66,11 +67,12 @@ public class InMemoryVersioningServiceIm
     public void cancelCheckOut(CallContext context, String repositoryId, String objectId, ExtensionsData extension) {
 
         StoredObject so = validator.cancelCheckOut(context, repositoryId, objectId, extension);
-
+        ObjectStore objStore = fStoreManager.getObjectStore(repositoryId);
         String user = context.getUsername();
         VersionedDocument verDoc = testHasProperCheckedOutStatus(so, user);
-
+        DocumentVersion pwc = verDoc.getPwc();
         verDoc.cancelCheckOut(user);
+        objStore.deleteVersion(pwc);
 
         // if this is the last version delete the document itself
         if (verDoc.getAllVersions().size() == 0)
@@ -123,6 +125,7 @@ public class InMemoryVersioningServiceIm
 
         checkIsVersionableObject(so);
 
+        ObjectStore objectStore = fStoreManager.getObjectStore(repositoryId);
         VersionedDocument verDoc = getVersionedDocumentOfObjectId(so);
 
         ContentStream content = null;
@@ -142,6 +145,7 @@ public class InMemoryVersioningServiceIm
         checkHasUser(user);
 
         DocumentVersion pwc = verDoc.checkOut(content, user);
+        objectStore.storeVersion(pwc);
         objectId.setValue(pwc.getId()); // return the id of the created pwc
         if (null != contentCopied) // Note: always null in AtomPub binding
             contentCopied.setValue(true);
@@ -250,7 +254,7 @@ public class InMemoryVersioningServiceIm
 
         StoredObject so = validator.getPropertiesOfLatestVersion(context, repositoryId, objectId, versionSeriesId,
                 extension);
-
+        ObjectStore objectStore = fStoreManager.getObjectStore(repositoryId);
         StoredObject latestVersionObject = null;
 
         // In AtomPu8b you do not get the version series id, only the object id
@@ -271,7 +275,8 @@ public class InMemoryVersioningServiceIm
 
         TypeManager tm = fStoreManager.getTypeManager(repositoryId);
 
-        Properties props = PropertyCreationHelper.getPropertiesFromObject(latestVersionObject, tm, requestedIds, true);
+        Properties props = PropertyCreationHelper.getPropertiesFromObject(latestVersionObject, objectStore, tm,
+                requestedIds, true);
 
         return props;
     }

Modified: chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/Filing.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/Filing.java?rev=1507777&r1=1507776&r2=1507777&view=diff
==============================================================================
--- chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/Filing.java (original)
+++ chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/Filing.java Sun Jul 28 11:02:14 2013
@@ -45,7 +45,7 @@ public interface Filing {
      * 		user id
      * @return list of parent folders
      */
-    List<String> getParents();
+    List<String> getParentIds();
     
     /**
      * usually true except for the root folder, optimized call that just tests

Modified: chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/Folder.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/Folder.java?rev=1507777&r1=1507776&r2=1507777&view=diff
==============================================================================
--- chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/Folder.java (original)
+++ chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/Folder.java Sun Jul 28 11:02:14 2013
@@ -37,14 +37,13 @@ public interface Folder extends Fileable
      *      parent id of this folder
      */
     String getParentId();
-    
+      
     /**
-     * get the path of this folder (for folder in CMIS path is unique)
-     * 
-     * @return
-     *      path of this folder
+     * set the parent id of a folder
+     * @param parentId
+     *      parent id of this folder
      */
-    String getPath();
+    void setParentId(String parentId);
     
     /**
      * return a list of allowed types of children in this folder

Modified: chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/MultiFiling.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/MultiFiling.java?rev=1507777&r1=1507776&r2=1507777&view=diff
==============================================================================
--- chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/MultiFiling.java (original)
+++ chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/MultiFiling.java Sun Jul 28 11:02:14 2013
@@ -29,25 +29,18 @@ package org.apache.chemistry.opencmis.in
 public interface MultiFiling extends Filing {
 
     /**
-     * retrieve the path segment of this folder
+     * Add parent folder to this document
      * 
-     * @return
+     * @param parentId
+     *     id of parent folder to be added.
      */
-    String getPathSegment();
+    void addParentId(String parentId);
 
     /**
-     * Add this document to a new parent folder as child object
+     * Remove parent from this object
      * 
-     * @param parent
-     *            new parent folder of the document.
+     * @param parentId
+     *     id of parent folder to be removed.
      */
-    void addParent(Folder parent);
-
-    /**
-     * Remove this object from the children of parent
-     * 
-     * @param parent
-     *            parent folder of the document
-     */
-    void removeParent(Folder parent);
+    void removeParentId(String parentId);
 }

Modified: chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/ObjectStore.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/ObjectStore.java?rev=1507777&r1=1507776&r2=1507777&view=diff
==============================================================================
--- chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/ObjectStore.java (original)
+++ chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/ObjectStore.java Sun Jul 28 11:02:14 2013
@@ -197,6 +197,36 @@ public interface ObjectStore {
     public StoredObject createPolicy(String name, String policyText, Map<String, PropertyData<?>> propMap, String user);
 
     /**
+     * Persist a new version in the store (created from a check-out)
+     * @param version
+     */
+    public void storeVersion(DocumentVersion version);
+    
+    /**
+     * remove a version from the store (after a cancel check-out)
+     * @param version
+     *      version to be deleted
+     */
+    public void deleteVersion(DocumentVersion version);
+    
+    /**
+     * Persist an object after modifying the properties
+     * @param so
+     *      object to be updated
+     */
+    public void upateObject(StoredObject so);
+    
+    /**
+     * get the path of this folder (for folder in CMIS path is unique)
+     * 
+     * @param folderId
+     *      id of folder
+     * @return
+     *      path of this folder
+     */
+    String getFolderPath(String folderId);
+
+    /**
      * Clear repository and remove all data.
      */
     void clear();
@@ -301,4 +331,13 @@ public interface ObjectStore {
      */
     List<StoredObject> getRelationships(String objectId, List<String> typeIds,
             RelationshipDirection direction);
+    
+    /**
+     * get an ACL object from an ACL id
+     * @param aclId
+     *      id of ACL
+     * @return
+     *      ACL of this id
+     */
+    public Acl getAcl(int aclId);
 }
\ No newline at end of file

Modified: chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/StoredObject.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/StoredObject.java?rev=1507777&r1=1507776&r2=1507777&view=diff
==============================================================================
--- chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/StoredObject.java (original)
+++ chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/StoredObject.java Sun Jul 28 11:02:14 2013
@@ -224,12 +224,6 @@ public interface StoredObject {
     String getChangeToken();
 
     /**
-     * Persist the object so that it can be later retrieved by its id. Assign an
-     * id to the object
-     */
-    void persist();
-
-    /**
      * Create all system base properties that need to be stored with every
      * object in the repository This method is called when a new object is
      * created to record all of the capturing data like the creation time,
@@ -273,32 +267,10 @@ public interface StoredObject {
     void setCustomProperties(Map<String, PropertyData<?>> properties);
     
     /**
-     * get the Acl of the stored object
+     * get the Acl id of the stored object
      */
-    Acl getAcl();
+    int getAclId();
     
-    /**
-     * get the relationships of the object
-     * 
-     * @param includeSubRelationshipTypes
-     *            if true, relationships of a sub type will be returned as well
-     * @param relationshipDirection
-     * 			whether relationships where the object is the source, or the target or all 
-     *          are returned
-     * @param typeId
-     * 			the type of the relationship, may be null
-     * @param filter
-     * 			a property filter, "*" means all properties
-     * @param includeAllowableActions
-     * 			whether allowable actions should be returned
-     * @param maxItems
-     * @param skipCount
-     * @param extension
-     * @param user
-     * 			the id of the user calling the method 
-     */
-    public List<StoredObject> getObjectRelationships(RelationshipDirection relationshipDirection, String user);
-	
 	/*
      * get the allowable actions  of the object
      */

Modified: chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/VersionedDocument.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/VersionedDocument.java?rev=1507777&r1=1507776&r2=1507777&view=diff
==============================================================================
--- chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/VersionedDocument.java (original)
+++ chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/VersionedDocument.java Sun Jul 28 11:02:14 2013
@@ -33,7 +33,7 @@ import org.apache.chemistry.opencmis.com
  * @author Jens
  * 
  */
-public interface VersionedDocument extends Fileable {
+public interface VersionedDocument extends Filing, StoredObject {
 
     DocumentVersion addVersion(ContentStream content, VersioningState verState, String user);
 

Modified: chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/DocumentImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/DocumentImpl.java?rev=1507777&r1=1507776&r2=1507777&view=diff
==============================================================================
--- chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/DocumentImpl.java (original)
+++ chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/DocumentImpl.java Sun Jul 28 11:02:14 2013
@@ -55,8 +55,8 @@ public class DocumentImpl extends Filing
 
     public static final int THUMBNAIL_SIZE = 100;
 
-    DocumentImpl(ObjectStoreImpl objStore) { // visibility should be package
-        super(objStore);
+    public DocumentImpl() { // visibility should be package
+        super();
     }
 
     @Override

Modified: chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/DocumentVersionImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/DocumentVersionImpl.java?rev=1507777&r1=1507776&r2=1507777&view=diff
==============================================================================
--- chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/DocumentVersionImpl.java (original)
+++ chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/DocumentVersionImpl.java Sun Jul 28 11:02:14 2013
@@ -34,6 +34,7 @@ import org.apache.chemistry.opencmis.inm
 import org.apache.chemistry.opencmis.inmemory.ConfigurationSettings;
 import org.apache.chemistry.opencmis.inmemory.FilterParser;
 import org.apache.chemistry.opencmis.inmemory.storedobj.api.DocumentVersion;
+import org.apache.chemistry.opencmis.inmemory.storedobj.api.MultiFiling;
 import org.apache.chemistry.opencmis.inmemory.storedobj.api.VersionedDocument;
 
 /**
@@ -42,7 +43,7 @@ import org.apache.chemistry.opencmis.inm
  * @author Jens
  *
  */
-public class DocumentVersionImpl extends StoredObjectImpl implements DocumentVersion, FilingMutable {
+public class DocumentVersionImpl extends StoredObjectImpl implements DocumentVersion, MultiFiling {
 
     private final Long MAX_CONTENT_SIZE_KB = ConfigurationSettings.getConfigurationValueAsLong(ConfigConstants.MAX_CONTENT_SIZE_KB);
 
@@ -54,8 +55,8 @@ public class DocumentVersionImpl extends
     boolean fIsPwc; // true if this is the PWC
 
     public DocumentVersionImpl(String repositoryId, VersionedDocument container, ContentStream content,
-            VersioningState verState, ObjectStoreImpl objStore) {
-        super(objStore);
+            VersioningState verState) {
+        super();
         setRepositoryId(repositoryId);
         fContainer = (VersionedDocumentImpl) container;
         setContent(content, false);
@@ -293,8 +294,8 @@ public class DocumentVersionImpl extends
     }    
     
     @Override
-	public List<String> getParents() {
-        return fContainer.getParents();
+	public List<String> getParentIds() {
+        return fContainer.getParentIds();
     }
 
     @Override

Modified: chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/FilingImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/FilingImpl.java?rev=1507777&r1=1507776&r2=1507777&view=diff
==============================================================================
--- chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/FilingImpl.java (original)
+++ chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/FilingImpl.java Sun Jul 28 11:02:14 2013
@@ -23,17 +23,18 @@ import java.util.List;
 
 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.MultiFiling;
 
-public class FilingImpl extends StoredObjectImpl implements Fileable, FilingMutable {
+public class FilingImpl extends StoredObjectImpl implements Fileable, MultiFiling {
     
     private List<String> parentIds = new ArrayList<String>(1);
     
-    FilingImpl(ObjectStoreImpl objStore) {
-        super(objStore);
+    FilingImpl() {
+        super();
     }
 
     @Override
-    public List<String> getParents() {
+    public List<String> getParentIds() {
         return parentIds;
     }
 

Modified: chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/FolderImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/FolderImpl.java?rev=1507777&r1=1507776&r2=1507777&view=diff
==============================================================================
--- chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/FolderImpl.java (original)
+++ chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/FolderImpl.java Sun Jul 28 11:02:14 2013
@@ -39,6 +39,7 @@ import org.apache.chemistry.opencmis.com
 import org.apache.chemistry.opencmis.inmemory.FilterParser;
 import org.apache.chemistry.opencmis.inmemory.NameValidator;
 import org.apache.chemistry.opencmis.inmemory.storedobj.api.Folder;
+import org.apache.chemistry.opencmis.inmemory.storedobj.api.ObjectStore;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -46,12 +47,12 @@ public class FolderImpl extends StoredOb
     private static final Logger LOG = LoggerFactory.getLogger(FilingImpl.class.getName());
     protected String parentId;
     
-    FolderImpl(ObjectStoreImpl objStore) {
-        super(objStore);
+    public FolderImpl() {
+        super();
     }
 
-    public FolderImpl(ObjectStoreImpl objStore, String name, String parentId) {
-        super(objStore);
+    public FolderImpl(String name, String parentId) {
+        super();
         init(name, parentId);
     }
 
@@ -75,10 +76,10 @@ public class FolderImpl extends StoredOb
                     PropertyIds.ALLOWED_CHILD_OBJECT_TYPE_IDS, allowedChildObjects));
         }
 
-        if (FilterParser.isContainedInFilter(PropertyIds.PATH, requestedIds)) {
-            String path = getPath();
-            properties.put(PropertyIds.PATH, objFactory.createPropertyStringData(PropertyIds.PATH, path));
-        }
+//        if (FilterParser.isContainedInFilter(PropertyIds.PATH, requestedIds)) {
+//            String path = getPath();
+//            properties.put(PropertyIds.PATH, objFactory.createPropertyStringData(PropertyIds.PATH, path));
+//        }
     }
 
     @Override
@@ -130,7 +131,7 @@ public class FolderImpl extends StoredOb
     }
 
     @Override
-    public List<String> getParents() {
+    public List<String> getParentIds() {
         if (parentId == null)
             return Collections.emptyList();
         else
@@ -148,34 +149,15 @@ public class FolderImpl extends StoredOb
     }
 
     @Override
-    public String getPath() {
-        StringBuffer sb = new StringBuffer();
-        insertPathSegment(sb, this);
-        return sb.toString();
-    }
-    
-    @Override
     public String getPathSegment() {
         return getName();
     }
 
+    @Override
     public void setParentId (String parentId) {
         this.parentId = parentId;
     }
     
-    private void insertPathSegment(StringBuffer sb, Folder f) {
-        if (null == f.getParentId()) {
-            if (sb.length() == 0) {
-                sb.insert(0, Folder.PATH_SEPARATOR);
-            }
-        } else {
-            sb.insert(0, f.getName());
-            sb.insert(0, Folder.PATH_SEPARATOR);
-            Folder parent = (Folder) fObjStore.getObjectById(f.getParentId());
-            insertPathSegment(sb, parent);
-        }
-    }
-
     // Helper functions
     private void init(String name, String parentId) {
         if (!NameValidator.isValidName(name)) {

Modified: chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/ItemImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/ItemImpl.java?rev=1507777&r1=1507776&r2=1507777&view=diff
==============================================================================
--- chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/ItemImpl.java (original)
+++ chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/ItemImpl.java Sun Jul 28 11:02:14 2013
@@ -27,8 +27,8 @@ import org.apache.chemistry.opencmis.inm
  */
 public class ItemImpl extends FilingImpl implements Item, Filing {
 
-    ItemImpl(ObjectStoreImpl objStore) {
-        super(objStore);
+    public ItemImpl() {
+        super();
     }
 
 }

Modified: chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/ObjectStoreImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/ObjectStoreImpl.java?rev=1507777&r1=1507776&r2=1507777&view=diff
==============================================================================
--- chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/ObjectStoreImpl.java (original)
+++ chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/ObjectStoreImpl.java Sun Jul 28 11:02:14 2013
@@ -46,6 +46,7 @@ import org.apache.chemistry.opencmis.inm
 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.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;
@@ -206,15 +207,6 @@ public class ObjectStoreImpl implements 
         }
     }
 
-    public void removeVersion(DocumentVersion vers) {
-        StoredObject found = fStoredObjectMap.remove(vers.getId());
-
-        if (null == found) {
-            throw new CmisInvalidArgumentException("Cannot delete object with id  " + vers.getId()
-                    + ". Object does not exist.");
-        }
-    }
-
     public String storeObject(StoredObject so) {
         String id = so.getId();
         // check if update or create
@@ -258,7 +250,7 @@ public class ObjectStoreImpl implements 
     // private helper methods
 
     private void createRootFolder() {
-        FolderImpl rootFolder = new FolderImpl(this);
+        FolderImpl rootFolder = new FolderImpl();
         rootFolder.setName("RootFolder");
         rootFolder.setParentId(null);
         rootFolder.setTypeId(BaseTypeId.CMIS_FOLDER.value());
@@ -267,14 +259,15 @@ public class ObjectStoreImpl implements 
         rootFolder.setModifiedAtNow();
         rootFolder.setRepositoryId(fRepositoryId);
         rootFolder.setAclId(addAcl(InMemoryAcl.getDefaultAcl()));
-        rootFolder.persist();
+        String id = storeObject(rootFolder);
+        rootFolder.setId(id);
         fRootFolder = rootFolder;
     }
 
     @Override
     public Document createDocument(String name, Map<String, PropertyData<?>> propMap, String user, Folder folder,
             List<String> policies, Acl addACEs, Acl removeACEs) {
-        DocumentImpl doc = new DocumentImpl(this);
+        DocumentImpl doc = new DocumentImpl();
         doc.createSystemBasePropertiesWhenCreated(propMap, user);
         doc.setCustomProperties(propMap);
         doc.setRepositoryId(fRepositoryId);
@@ -282,20 +275,22 @@ public class ObjectStoreImpl implements 
         if (null != folder) {
             if (hasChild(folder, name))
                 throw new CmisNameConstraintViolationException("Cannot create document an object with name " + name
-                        + " already exists in folder " + folder.getPath());
+                        + " already exists in folder " + getFolderPath(folder.getId()));
             doc.addParentId(folder.getId());
         }
         int aclId = getAclId(((FolderImpl) folder), addACEs, removeACEs);
         doc.setAclId(aclId);
         if (null != policies)
             doc.setAppliedPolicies(policies);
+        String id = storeObject(doc);
+        doc.setId(id);
         return doc;
     }
 
     @Override
     public StoredObject createItem(String name, Map<String, PropertyData<?>> propMap, String user, Folder folder,
             List<String> policies, Acl addACEs, Acl removeACEs) {
-        ItemImpl item = new ItemImpl(this);
+        ItemImpl item = new ItemImpl();
         item.createSystemBasePropertiesWhenCreated(propMap, user);
         item.setCustomProperties(propMap);
         item.setRepositoryId(fRepositoryId);
@@ -303,13 +298,15 @@ public class ObjectStoreImpl implements 
         if (null != folder) {
             if (hasChild(folder, name))
                 throw new CmisNameConstraintViolationException("Cannot create document an object with name " + name
-                        + " already exists in folder " + folder.getPath());
+                        + " already exists in folder " + getFolderPath(folder.getId()));
             item.addParentId(folder.getId());
         }
         if (null != policies)
             item.setAppliedPolicies(policies);
         int aclId = getAclId(((FolderImpl) folder), addACEs, removeACEs);
         item.setAclId(aclId);
+        String id = storeObject(item);
+        item.setId(id);
         return item;
     }
 
@@ -317,25 +314,28 @@ public class ObjectStoreImpl implements 
     public DocumentVersion createVersionedDocument(String name, Map<String, PropertyData<?>> propMap, String user,
             Folder folder, List<String> policies, Acl addACEs, Acl removeACEs, ContentStream contentStream,
             VersioningState versioningState) {
-        VersionedDocumentImpl doc = new VersionedDocumentImpl(this);
+        VersionedDocumentImpl doc = new VersionedDocumentImpl();
         doc.createSystemBasePropertiesWhenCreated(propMap, user);
         doc.setCustomProperties(propMap);
         doc.setRepositoryId(fRepositoryId);
         doc.setName(name);
+        String id = storeObject(doc);
+        doc.setId(id);
         DocumentVersion version = doc.addVersion(contentStream, versioningState, user);
         version.createSystemBasePropertiesWhenCreated(propMap, user);
         version.setCustomProperties(propMap);
         if (null != folder) {
             if (hasChild(folder, name))
                 throw new CmisNameConstraintViolationException("Cannot create document an object with name " + name
-                        + " already exists in folder " + folder.getPath());
+                        + " already exists in folder " + getFolderPath(folder.getId()));
             doc.addParentId(folder.getId());
         }
         int aclId = getAclId(((FolderImpl) folder), addACEs, removeACEs);
         doc.setAclId(aclId);
         if (null != policies)
             doc.setAppliedPolicies(policies);
-        doc.persist();
+        id = storeObject(version);
+        version.setId(id);
         return version;
     }
 
@@ -346,7 +346,7 @@ public class ObjectStoreImpl implements 
         if (null != parent && hasChild(parent, name)) {
             throw new CmisNameConstraintViolationException("Cannot create folder, this name already exists in parent folder.");
         }
-        FolderImpl folder = new FolderImpl(this, name, parent.getId());
+        FolderImpl folder = new FolderImpl(name, parent.getId());
         if (null != propMap) {
             folder.createSystemBasePropertiesWhenCreated(propMap, user);
             folder.setCustomProperties(propMap);
@@ -358,49 +358,35 @@ public class ObjectStoreImpl implements 
         if (null != policies)
             folder.setAppliedPolicies(policies);
 
+        String id = storeObject(folder);
+        folder.setId(id);
         return folder;
     }
 
     public Folder createFolder(String name) {
-        Folder folder = new FolderImpl(this, name, null);
+        Folder folder = new FolderImpl(name, null);
         folder.setRepositoryId(fRepositoryId);
         return folder;
     }
 
     @Override
     public StoredObject createPolicy(String name, String policyText, Map<String, PropertyData<?>> propMap, String user) {
-        PolicyImpl policy = new PolicyImpl(this);
+        PolicyImpl policy = new PolicyImpl();
         policy.createSystemBasePropertiesWhenCreated(propMap, user);
         policy.setCustomProperties(propMap);
         policy.setRepositoryId(fRepositoryId);
         policy.setName(name);
         policy.setPolicyText(policyText);
-        policy.persist();
+        String id = storeObject(policy);
+        policy.setId(id);
         return policy;
     }
 
     @Override
-    public List<StoredObject> getCheckedOutDocuments(String orderBy, String user,
-            IncludeRelationships includeRelationships) {
-        List<StoredObject> res = new ArrayList<StoredObject>();
-
-        for (StoredObject so : fStoredObjectMap.values()) {
-            if (so instanceof VersionedDocument) {
-                VersionedDocument verDoc = (VersionedDocument) so;
-                if (verDoc.isCheckedOut() && hasReadAccess(user, verDoc)) {
-                    res.add(verDoc.getPwc());
-                }
-            }
-        }
-
-        return res;
-    }
-
-    @Override
     public StoredObject createRelationship(String name, StoredObject sourceObject, StoredObject targetObject,
             Map<String, PropertyData<?>> propMap, String user, Acl addACEs, Acl removeACEs) {
 
-        RelationshipImpl rel = new RelationshipImpl(this);
+        RelationshipImpl rel = new RelationshipImpl();
         rel.createSystemBasePropertiesWhenCreated(propMap, user);
         rel.setCustomProperties(propMap);
         rel.setRepositoryId(fRepositoryId);
@@ -411,11 +397,50 @@ public class ObjectStoreImpl implements 
             rel.setTarget(targetObject.getId());
         int aclId = getAclId(null, addACEs, removeACEs);
         rel.setAclId(aclId);
-        rel.persist();
+        String id = storeObject(rel);
+        rel.setId(id);
         return rel;
     }
 
     @Override
+    public void storeVersion(DocumentVersion version) {
+        String id = storeObject(version);
+        version.setId(id);
+    }
+    
+    @Override
+    public void deleteVersion(DocumentVersion version) {
+        StoredObject found = fStoredObjectMap.remove(version.getId());
+
+        if (null == found) {
+            throw new CmisInvalidArgumentException("Cannot delete object with id  " + version.getId()
+                    + ". Object does not exist.");
+        }
+    }
+
+    @Override
+    public void upateObject(StoredObject so) {
+        // nothing to do
+    }
+
+    @Override
+    public List<StoredObject> getCheckedOutDocuments(String orderBy, String user,
+            IncludeRelationships includeRelationships) {
+        List<StoredObject> res = new ArrayList<StoredObject>();
+
+        for (StoredObject so : fStoredObjectMap.values()) {
+            if (so instanceof VersionedDocument) {
+                VersionedDocument verDoc = (VersionedDocument) so;
+                if (verDoc.isCheckedOut() && hasReadAccess(user, verDoc)) {
+                    res.add(verDoc.getPwc());
+                }
+            }
+        }
+
+        return res;
+    }
+
+    @Override
     public List<StoredObject> getRelationships(String objectId, List<String> typeIds, RelationshipDirection direction) {
 
         List<StoredObject> res = new ArrayList<StoredObject>();
@@ -441,6 +466,27 @@ public class ObjectStoreImpl implements 
     }
 
     @Override
+    public String getFolderPath(String folderId) {
+        StringBuffer sb = new StringBuffer();
+        insertPathSegment(sb, folderId);
+        return sb.toString();     
+    }
+    
+    private void insertPathSegment(StringBuffer sb, String folderId) {
+        Folder folder = (Folder) getObjectById(folderId);
+        if (null == folder.getParentId()) {
+            if (sb.length() == 0) {
+                sb.insert(0, Folder.PATH_SEPARATOR);
+            }
+        } else {
+            sb.insert(0, folder.getName());
+            sb.insert(0, Folder.PATH_SEPARATOR);
+            insertPathSegment(sb, folder.getParentId());
+        }
+    }
+
+   
+    @Override
     public Acl applyAcl(StoredObject so, Acl addAces, Acl removeAces, AclPropagation aclPropagation, String principalId) {
         if (aclPropagation == AclPropagation.OBJECTONLY || !(so instanceof Folder)) {
             return applyAcl(so, addAces, removeAces);
@@ -467,6 +513,8 @@ public class ObjectStoreImpl implements 
         return acls;
     }
 
+   
+    @Override
     public Acl getAcl(int aclId) {
         InMemoryAcl acl = getInMemoryAcl(aclId);
         return acl == null ? InMemoryAcl.getDefaultAcl().toCommonsAcl() : acl.toCommonsAcl();
@@ -577,7 +625,7 @@ public class ObjectStoreImpl implements 
             StoredObject obj = getObject(id);
             if (obj instanceof Fileable) {
                 Fileable pathObj = (Fileable) obj;
-                if ((null == user || hasReadAccess(user, obj)) && pathObj.getParents().contains(folder.getId())) {
+                if ((null == user || hasReadAccess(user, obj)) && pathObj.getParentIds().contains(folder.getId())) {
                     if (pathObj instanceof VersionedDocument) {
                         DocumentVersion ver = ((VersionedDocument) pathObj).getLatestVersion(false);
                         children.add(ver);
@@ -598,7 +646,7 @@ public class ObjectStoreImpl implements 
             StoredObject obj = getObject(id);
             if (hasReadAccess(user, obj) && obj instanceof Folder) {
                 Folder childFolder = (Folder) obj;
-                if (childFolder.getParents().contains(folder.getId()) ) {
+                if (childFolder.getParentIds().contains(folder.getId()) ) {
                     folderChildren.add(childFolder);
                 }
             }
@@ -618,11 +666,11 @@ public class ObjectStoreImpl implements 
         try {
             if (hasChild(newParent, so.getName())) {
                 throw new CmisInvalidArgumentException("Cannot move object " + so.getName() + " to folder "
-                        + newParent.getPath() + ". A child with this name already exists.");
+                        + getFolderPath(newParent.getId()) + ". A child with this name already exists.");
             }
             lock();
-            if (so instanceof FilingMutable) {
-                FilingMutable fi = (FilingMutable) so;
+            if (so instanceof MultiFiling) {
+                MultiFiling fi = (MultiFiling) so;
                 addParentIntern(fi, newParent);
                 removeParentIntern(fi, oldParent);
             } else if (so instanceof FolderImpl) {
@@ -640,11 +688,11 @@ public class ObjectStoreImpl implements 
             if (so.getId().equals(fRootFolder.getId())) {
                 throw new CmisInvalidArgumentException("Root folder cannot be renamed.");
             }
-            for (String folderId : so.getParents()) {
+            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 " + folder.getPath() + ".");
+                            + ". This path already exists in parent " + getFolderPath(folder.getId()) + ".");
             }
             so.setName(newName);
         } finally {
@@ -664,7 +712,7 @@ public class ObjectStoreImpl implements 
     @Override
     public List<String> getParentIds(Filing fileable, String user) {
         List<String> visibleParents = new ArrayList<String>(); 
-        List<String> parents = fileable.getParents();
+        List<String> parents = fileable.getParentIds();
         for (String id: parents) {
             StoredObject so = getObjectById(id);
             if (hasReadAccess(user, so)) {
@@ -858,13 +906,13 @@ public class ObjectStoreImpl implements 
                 throw new IllegalArgumentException(
                         "Cannot assign new parent folder, this name already exists in target folder.");
             }
-            FilingMutable fi;
-            if (so instanceof FilingMutable) 
-                fi = (FilingMutable) so;
+            MultiFiling mfi;
+            if (so instanceof MultiFiling) 
+                mfi = (MultiFiling) so;
             else
                 throw new IllegalArgumentException("Object " + so.getId() + "is not fileable");
                 
-            addParentIntern(fi, parent);
+            addParentIntern(mfi, parent);
         } finally {
             unlock();
         }
@@ -874,23 +922,23 @@ public class ObjectStoreImpl implements 
     public void removeParent(StoredObject so, Folder parent) {
         try {
             lock();
-            FilingMutable fi;
-            if (so instanceof FilingMutable) 
-                fi = (FilingMutable) so;
+            MultiFiling mfi;
+            if (so instanceof MultiFiling) 
+                mfi = (MultiFiling) so;
             else
                 throw new IllegalArgumentException("Object " + so.getId() + "is not fileable");
 
-            removeParentIntern(fi, parent);
+            removeParentIntern(mfi, parent);
         } finally {
             unlock();
         }
     }
 
-    private void addParentIntern(FilingMutable so, Folder parent) {
+    private void addParentIntern(MultiFiling so, Folder parent) {
         so.addParentId(parent.getId());
     }
 
-    private void removeParentIntern(FilingMutable so, Folder parent) {
+    private void removeParentIntern(MultiFiling so, Folder parent) {
         so.removeParentId(parent.getId());
     }
 

Modified: chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/PolicyImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/PolicyImpl.java?rev=1507777&r1=1507776&r2=1507777&view=diff
==============================================================================
--- chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/PolicyImpl.java (original)
+++ chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/PolicyImpl.java Sun Jul 28 11:02:14 2013
@@ -29,8 +29,8 @@ import org.apache.chemistry.opencmis.inm
 
 public class PolicyImpl extends StoredObjectImpl implements Policy {
 
-    PolicyImpl(ObjectStoreImpl objStore) {
-        super(objStore);
+    public PolicyImpl() {
+        super();
     }
 
     private String policyText;

Modified: chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/RelationshipImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/RelationshipImpl.java?rev=1507777&r1=1507776&r2=1507777&view=diff
==============================================================================
--- chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/RelationshipImpl.java (original)
+++ chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/RelationshipImpl.java Sun Jul 28 11:02:14 2013
@@ -32,8 +32,8 @@ public class RelationshipImpl extends St
     private String sourceObjId;
     private String targetObjId;
 
-    RelationshipImpl(ObjectStoreImpl objStore) {
-        super(objStore);
+    public RelationshipImpl() {
+        super();
     }
 
     @Override

Modified: chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/StoreManagerImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/StoreManagerImpl.java?rev=1507777&r1=1507776&r2=1507777&view=diff
==============================================================================
--- chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/StoreManagerImpl.java (original)
+++ chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/StoreManagerImpl.java Sun Jul 28 11:02:14 2013
@@ -210,26 +210,11 @@ public class StoreManagerImpl implements
     @Override
 	public Collection<TypeDefinitionContainer> getTypeDefinitionList(String repositoryId,
             boolean includePropertyDefinitions) {
-//        Collection<TypeDefinitionContainer> result;
         TypeManager typeManager = fMapRepositoryToTypeManager.get(repositoryId);
         if (null == typeManager) {
             throw new CmisInvalidArgumentException("Unknown repository " + repositoryId);
         }
         Collection<TypeDefinitionContainer> typeColl = getRootTypes(repositoryId, includePropertyDefinitions);
-//        if (includePropertyDefinitions) {
-//            result = typeColl;
-//        } else {
-//            result = new ArrayList<TypeDefinitionContainer>(typeColl.size());
-//            // copy list and omit properties
-//            for (TypeDefinitionContainer c : typeColl) {
-//                AbstractTypeDefinition td = ((AbstractTypeDefinition) c.getTypeDefinition()).clone();
-//                TypeDefinitionContainerImpl tdc = new TypeDefinitionContainerImpl(td);
-//                tdc.setChildren(c.getChildren());
-//                td.setPropertyDefinitions(null);
-//                result.add(tdc);
-//            }
-//        }
-//        return result;
         return typeColl;
     }
 
@@ -327,7 +312,7 @@ public class StoreManagerImpl implements
         }
     }
 
-    public List<TypeDefinition> initTypeSystem(String typeCreatorClassName) {
+    public static List<TypeDefinition> initTypeSystem(String typeCreatorClassName) {
 
         List<TypeDefinition> typesList = null;
 
@@ -374,7 +359,7 @@ public class StoreManagerImpl implements
             typeDefs = initTypeSystem(typeCreatorClassName);
         }
 
-        typeManager.initTypeSystem(typeDefs);
+        typeManager.initTypeSystem(typeDefs, true);
     }
 
     @SuppressWarnings("serial")
@@ -565,7 +550,7 @@ public class StoreManagerImpl implements
      *            parent container where to add clone as child
      * @return cloned type definition
      */
-    private static TypeDefinitionContainer cloneTypeList(int depth, boolean includePropertyDefinitions,
+    public static TypeDefinitionContainer cloneTypeList(int depth, boolean includePropertyDefinitions,
             TypeDefinitionContainer tdc, TypeDefinitionContainer parent) {
 
         AbstractTypeDefinition tdClone = ((AbstractTypeDefinition) tdc.getTypeDefinition()).clone();