You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@chemistry.apache.org by je...@apache.org on 2013/08/08 10:40:27 UTC

svn commit: r1511617 [3/5] - in /chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src: main/java/org/apache/chemistry/opencmis/inmemory/ main/java/org/apache/chemistry/opencmis/inmemory/query/ main/java/org/apache/c...

Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/types/DefaultTypeSystemCreator.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/types/DefaultTypeSystemCreator.java?rev=1511617&r1=1511616&r2=1511617&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/types/DefaultTypeSystemCreator.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/types/DefaultTypeSystemCreator.java Thu Aug  8 08:40:26 2013
@@ -20,16 +20,21 @@ package org.apache.chemistry.opencmis.in
 
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
-import java.util.Map;
 
 import org.apache.chemistry.opencmis.commons.definitions.Choice;
-import org.apache.chemistry.opencmis.commons.definitions.DocumentTypeDefinition;
+import org.apache.chemistry.opencmis.commons.definitions.MutableDocumentTypeDefinition;
+import org.apache.chemistry.opencmis.commons.definitions.MutableItemTypeDefinition;
+import org.apache.chemistry.opencmis.commons.definitions.MutablePolicyTypeDefinition;
+import org.apache.chemistry.opencmis.commons.definitions.MutableRelationshipTypeDefinition;
+import org.apache.chemistry.opencmis.commons.definitions.MutableSecondaryTypeDefinition;
+import org.apache.chemistry.opencmis.commons.definitions.MutableTypeDefinition;
 import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
 import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
+import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
 import org.apache.chemistry.opencmis.commons.enums.Updatability;
+import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
 import org.apache.chemistry.opencmis.commons.impl.dataobjects.ChoiceImpl;
 import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDateTimeDefinitionImpl;
 import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDecimalDefinitionImpl;
@@ -39,6 +44,7 @@ import org.apache.chemistry.opencmis.com
 import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyStringDefinitionImpl;
 import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyUriDefinitionImpl;
 import org.apache.chemistry.opencmis.inmemory.TypeCreator;
+import org.apache.chemistry.opencmis.server.support.TypeDefinitionFactory;
 
 public class DefaultTypeSystemCreator implements TypeCreator {
     public static final List<TypeDefinition> singletonTypes = buildTypesList();
@@ -79,273 +85,323 @@ public class DefaultTypeSystemCreator im
      */
     private static List<TypeDefinition> buildTypesList() {
         // always add CMIS default types
+        TypeDefinitionFactory typeFactory =  DocumentTypeCreationHelper.getTypeDefinitionFactory();
+
         List<TypeDefinition> typesList = new LinkedList<TypeDefinition>();
 
-        InMemoryDocumentTypeDefinition cmisType1 = new InMemoryDocumentTypeDefinition("MyDocType1",
-                "My Type 1 Level 1", InMemoryDocumentTypeDefinition.getRootDocumentType());
-        typesList.add(cmisType1);
-
-        InMemoryDocumentTypeDefinition cmisType2 = new InMemoryDocumentTypeDefinition("MyDocType2",
-                "My Type 2 Level 1", InMemoryDocumentTypeDefinition.getRootDocumentType());
-        typesList.add(cmisType2);
-
-        InMemoryDocumentTypeDefinition cmisType11 = new InMemoryDocumentTypeDefinition("MyDocType1.1",
-                "My Type 3 Level 2", cmisType1);
-        typesList.add(cmisType11);
-
-        InMemoryDocumentTypeDefinition cmisType111 = new InMemoryDocumentTypeDefinition("MyDocType1.1.1",
-                "My Type 4 Level 3", cmisType11);
-        typesList.add(cmisType111);
-
-        InMemoryDocumentTypeDefinition cmisType112 = new InMemoryDocumentTypeDefinition("MyDocType1.1.2",
-                "My Type 5 Level 3", cmisType11);
-        typesList.add(cmisType112);
-
-        InMemoryDocumentTypeDefinition cmisType12 = new InMemoryDocumentTypeDefinition("MyDocType1.2",
-                "My Type 6 Level 2", cmisType1);
-        typesList.add(cmisType12);
-
-        InMemoryDocumentTypeDefinition cmisType21 = new InMemoryDocumentTypeDefinition("MyDocType2.1",
-                "My Type 7 Level 2", cmisType2);
-        typesList.add(cmisType21);
-
-        InMemoryDocumentTypeDefinition cmisType22 = new InMemoryDocumentTypeDefinition("MyDocType2.2",
-                "My Type 8 Level 2", cmisType2);
-        typesList.add(cmisType22);
-        InMemoryDocumentTypeDefinition cmisType23 = new InMemoryDocumentTypeDefinition("MyDocType2.3",
-                "My Type 9 Level 2", cmisType2);
-        typesList.add(cmisType23);
-        DocumentTypeDefinition cmisType24 = new InMemoryDocumentTypeDefinition("MyDocType2.4", "My Type 10 Level 2",
-                cmisType2);
-        typesList.add(cmisType24);
-        InMemoryDocumentTypeDefinition cmisType25 = new InMemoryDocumentTypeDefinition("MyDocType2.5",
-                "My Type 11 Level 2", cmisType2);
-        typesList.add(cmisType25);
-
-        InMemoryDocumentTypeDefinition cmisType26 = new InMemoryDocumentTypeDefinition("MyDocType2.6",
-                "My Type 12 Level 2", cmisType2);
-        typesList.add(cmisType26);
-        InMemoryDocumentTypeDefinition cmisType27 = new InMemoryDocumentTypeDefinition("MyDocType2.7",
-                "My Type 13 Level 2", cmisType2);
-        typesList.add(cmisType27);
-        InMemoryDocumentTypeDefinition cmisType28 = new InMemoryDocumentTypeDefinition("MyDocType2.8",
-                "My Type 14 Level 2", cmisType2);
-        typesList.add(cmisType28);
-        InMemoryDocumentTypeDefinition cmisType29 = new InMemoryDocumentTypeDefinition("MyDocType2.9",
-                "My Type 15 Level 2", cmisType2);
-        typesList.add(cmisType29);
-
-        // create a complex type with properties
-        InMemoryDocumentTypeDefinition cmisComplexType = new InMemoryDocumentTypeDefinition(COMPLEX_TYPE,
-                "Complex type with properties, Level 1", InMemoryDocumentTypeDefinition.getRootDocumentType());
-
-        // create a boolean property definition
-
-        Map<String, PropertyDefinition<?>> propertyDefinitions = new HashMap<String, PropertyDefinition<?>>();
-
-        PropertyDefinition<Boolean> prop = PropertyCreationHelper.createBooleanDefinition("BooleanProp",
-                "Sample Boolean Property", Updatability.READWRITE);
-        propertyDefinitions.put(prop.getId(), prop);
-
-        prop = PropertyCreationHelper.createBooleanMultiDefinition("BooleanPropMV",
-                "Sample Boolean multi-value Property", Updatability.READWRITE);
-        propertyDefinitions.put(prop.getId(), prop);
-
-        PropertyDateTimeDefinitionImpl prop2 = PropertyCreationHelper.createDateTimeDefinition("DateTimeProp",
-                "Sample DateTime Property", Updatability.READWRITE);
-        propertyDefinitions.put(prop2.getId(), prop2);
-
-        prop2 = PropertyCreationHelper.createDateTimeMultiDefinition("DateTimePropMV",
-                "Sample DateTime multi-value Property", Updatability.READWRITE);
-        propertyDefinitions.put(prop2.getId(), prop2);
-
-        PropertyDecimalDefinitionImpl prop3 = PropertyCreationHelper.createDecimalDefinition("DecimalProp",
-                "Sample Decimal Property", Updatability.READWRITE);
-        propertyDefinitions.put(prop3.getId(), prop3);
-
-        prop3 = PropertyCreationHelper.createDecimalMultiDefinition("DecimalPropMV",
-                "Sample Decimal multi-value Property", Updatability.READWRITE);
-        propertyDefinitions.put(prop3.getId(), prop3);
-
-        PropertyHtmlDefinitionImpl prop4 = PropertyCreationHelper.createHtmlDefinition("HtmlProp",
-                "Sample Html Property", Updatability.READWRITE);
-        propertyDefinitions.put(prop4.getId(), prop4);
-
-        prop4 = PropertyCreationHelper.createHtmlMultiDefinition("HtmlPropMV", "Sample Html multi-value Property",
-                Updatability.READWRITE);
-        propertyDefinitions.put(prop4.getId(), prop4);
-
-        PropertyIdDefinitionImpl prop5 = PropertyCreationHelper.createIdDefinition("IdProp", "Sample Id Property",
-                Updatability.READWRITE);
-        propertyDefinitions.put(prop5.getId(), prop5);
-
-        prop5 = PropertyCreationHelper.createIdMultiDefinition("IdPropMV", "Sample Id Html multi-value Property",
-                Updatability.READWRITE);
-        propertyDefinitions.put(prop5.getId(), prop5);
-
-        PropertyIntegerDefinitionImpl prop6 = PropertyCreationHelper.createIntegerDefinition("IntProp",
-                "Sample Int Property", Updatability.READWRITE);
-        propertyDefinitions.put(prop6.getId(), prop6);
-
-        prop6 = PropertyCreationHelper.createIntegerMultiDefinition("IntPropMV", "Sample Int multi-value Property",
-                Updatability.READWRITE);
-        propertyDefinitions.put(prop6.getId(), prop6);
-
-        PropertyStringDefinitionImpl prop7 = PropertyCreationHelper.createStringDefinition("StringProp",
-                "Sample String Property", Updatability.READWRITE);
-        propertyDefinitions.put(prop7.getId(), prop7);
-
-        PropertyUriDefinitionImpl prop8 = PropertyCreationHelper.createUriDefinition("UriProp", "Sample Uri Property",
-                Updatability.READWRITE);
-        propertyDefinitions.put(prop8.getId(), prop8);
-
-        prop8 = PropertyCreationHelper.createUriMultiDefinition("UriPropMV", "Sample Uri multi-value Property",
-                Updatability.READWRITE);
-        propertyDefinitions.put(prop8.getId(), prop8);
-
-        PropertyStringDefinitionImpl prop9 = PropertyCreationHelper.createStringDefinition("PickListProp",
-                "Sample Pick List Property", Updatability.READWRITE);
-        List<Choice<String>> choiceList = new ArrayList<Choice<String>>();
-        ChoiceImpl<String> elem = new ChoiceImpl<String>();
-        elem.setValue(Collections.singletonList("red"));
-        choiceList.add(elem);
-        elem = new ChoiceImpl<String>();
-        elem.setValue(Collections.singletonList("green"));
-        choiceList.add(elem);
-        elem = new ChoiceImpl<String>();
-        elem.setValue(Collections.singletonList("blue"));
-        choiceList.add(elem);
-        elem = new ChoiceImpl<String>();
-        elem.setValue(Collections.singletonList("black"));
-        choiceList.add(elem);
-        prop9.setChoices(choiceList);
-        prop9.setDefaultValue(Collections.singletonList("blue"));
-        propertyDefinitions.put(prop9.getId(), prop9);
-
-        /*
-         * try short form: / PropertyCreationHelper.addElemToPicklist(prop9,
-         * "red"); PropertyCreationHelper.addElemToPicklist(prop9, "green");
-         * PropertyCreationHelper.addElemToPicklist(prop9, "blue");
-         * PropertyCreationHelper.addElemToPicklist(prop9, "black");
-         * PropertyCreationHelper.setDefaultValue(prop9, "blue"); /
-         */
-
-        cmisComplexType.setPropertyDefinitions(propertyDefinitions);
-
-        // add type to types collection
-        typesList.add(cmisComplexType);
-
-        // create a type hierarchy with inherited properties
-        InMemoryDocumentTypeDefinition cmisDocTypeTopLevel = new InMemoryDocumentTypeDefinition(TOPLEVEL_TYPE,
-                "Document type with properties, Level 1", InMemoryDocumentTypeDefinition.getRootDocumentType());
-
-        InMemoryDocumentTypeDefinition cmisDocTypeLevel1 = new InMemoryDocumentTypeDefinition(LEVEL1_TYPE,
-                "Document type with inherited properties, Level 2", cmisDocTypeTopLevel);
-
-        InMemoryDocumentTypeDefinition cmisDocTypeLevel2 = new InMemoryDocumentTypeDefinition(LEVEL2_TYPE,
-                "Document type with inherited properties, Level 3", cmisDocTypeLevel1);
-
-        propertyDefinitions = new HashMap<String, PropertyDefinition<?>>();
-        PropertyStringDefinitionImpl propTop = PropertyCreationHelper.createStringDefinition("StringPropTopLevel",
-                "Sample String Property", Updatability.READWRITE);
-        propertyDefinitions.put(propTop.getId(), propTop);
-        cmisDocTypeTopLevel.setPropertyDefinitions(propertyDefinitions);
-
-        propertyDefinitions = new HashMap<String, PropertyDefinition<?>>();
-        PropertyStringDefinitionImpl propLevel1 = PropertyCreationHelper.createStringDefinition("StringPropLevel1",
-                "String Property Level 1", Updatability.READWRITE);
-        propertyDefinitions.put(propLevel1.getId(), propLevel1);
-        cmisDocTypeLevel1.setPropertyDefinitions(propertyDefinitions);
-
-        propertyDefinitions = new HashMap<String, PropertyDefinition<?>>();
-        PropertyStringDefinitionImpl propLevel2 = PropertyCreationHelper.createStringDefinition("StringPropLevel2",
-                "String Property Level 2", Updatability.READWRITE);
-        propertyDefinitions.put(propLevel2.getId(), propLevel2);
-        cmisDocTypeLevel2.setPropertyDefinitions(propertyDefinitions);
-
-        // add type to types collection
-        typesList.add(cmisDocTypeTopLevel);
-        typesList.add(cmisDocTypeLevel1);
-        typesList.add(cmisDocTypeLevel2);
-
-        // Create a type that is versionable
-        InMemoryDocumentTypeDefinition cmisVersionedType = new InMemoryDocumentTypeDefinition(VERSIONED_TYPE,
-                "VersionedType", InMemoryDocumentTypeDefinition.getRootDocumentType());
-
-        // create a single String property definition
-
-        propertyDefinitions = new HashMap<String, PropertyDefinition<?>>();
-
-        PropertyStringDefinitionImpl prop1 = PropertyCreationHelper.createStringDefinition("VersionedStringProp",
-                "Sample String Property", Updatability.WHENCHECKEDOUT);
-        propertyDefinitions.put(prop1.getId(), prop1);
-
-        cmisVersionedType.addCustomPropertyDefinitions(propertyDefinitions);
-        cmisVersionedType.setIsVersionable(true); // make it a versionable type;
-
-        // add type to types collection
-        typesList.add(cmisVersionedType);
-        
-        //CMIS 1.1 create an item item type
-
-        InMemoryItemTypeDefinition cmisItemType = new InMemoryItemTypeDefinition(ITEM_TYPE, "MyItemType");
-
-        // create a single String property definition
-
-        propertyDefinitions = new HashMap<String, PropertyDefinition<?>>();
-
-        prop1 = PropertyCreationHelper.createStringDefinition("ItemStringProp",
-                "Item String Property", Updatability.READWRITE);
-        propertyDefinitions.put(prop1.getId(), prop1);
-        cmisItemType.addCustomPropertyDefinitions(propertyDefinitions);
-        // add type to types collection
-        typesList.add(cmisItemType);
-        
-
-        InMemorySecondaryTypeDefinition cmisSecondaryType = new InMemorySecondaryTypeDefinition(SECONDARY_TYPE_ID, 
-                "MySecondaryType");
-        // create a single String property definition
-        Map<String, PropertyDefinition<?>> secondaryPropertyDefinitions = new HashMap<String, PropertyDefinition<?>>();
-        PropertyStringDefinitionImpl propS1 = PropertyCreationHelper.createStringDefinition("SecondaryStringProp",
-                "Secondary String Property", Updatability.READWRITE);
-        secondaryPropertyDefinitions.put(propS1.getId(), propS1);
-        PropertyIntegerDefinitionImpl propS2 = PropertyCreationHelper.createIntegerDefinition("SecondaryIntegerProp",
-                "Secondary Integer Property", Updatability.READWRITE);
-        propS2.setIsRequired(true);
-        secondaryPropertyDefinitions.put(propS2.getId(), propS2);
-        cmisSecondaryType.addCustomPropertyDefinitions(secondaryPropertyDefinitions);
-        // add type to types collection
-        typesList.add(cmisSecondaryType);
-
-        // add relationship type
-        InMemoryRelationshipTypeDefinition cmisRelType = new InMemoryRelationshipTypeDefinition(
-                "CrossReferenceType", "CrossReferenceRelationshipType");
-        // create a single String property definition
-
-        propertyDefinitions = new HashMap<String, PropertyDefinition<?>>();
-        propertyDefinitions = new HashMap<String, PropertyDefinition<?>>();
-        prop1 = PropertyCreationHelper.createStringDefinition("CrossReferenceKind",
-                "CrossReferenceType", Updatability.READWRITE);
-        propertyDefinitions.put(prop1.getId(), prop1);
-        cmisRelType.addCustomPropertyDefinitions(propertyDefinitions);
-        typesList.add(cmisRelType);            
-
-        // add a policy type
-        InMemoryPolicyTypeDefinition polType = new InMemoryPolicyTypeDefinition(
-                "AuditPolicy", "Audit Policy", InMemoryPolicyTypeDefinition.getRootPolicyType());
-
-        // create a String property definition
-
-        propertyDefinitions = new HashMap<String, PropertyDefinition<?>>();
-
-        prop1 = PropertyCreationHelper.createStringDefinition("AuditSettings",
-                "Audit Kind Property", Updatability.READWRITE);
-        propertyDefinitions.put(prop1.getId(), prop1);
-
-        polType.addCustomPropertyDefinitions(propertyDefinitions);
-        typesList.add(polType);            
-        
-        return typesList;
+        MutableDocumentTypeDefinition cmisType1;        
+        try {
+            cmisType1 = typeFactory.createDocumentTypeDefinition(CmisVersion.CMIS_1_1, DocumentTypeCreationHelper.getCmisDocumentType().getId());
+            cmisType1.setId("MyDocType1");
+            cmisType1.setDisplayName("My Type 1 Level 1");
+            cmisType1.setDescription("Builtin InMemory type definition MyDocType1");
+            typesList.add(cmisType1);
+
+            MutableDocumentTypeDefinition cmisType2;        
+            cmisType2 = typeFactory.createDocumentTypeDefinition(CmisVersion.CMIS_1_1, DocumentTypeCreationHelper.getCmisDocumentType().getId());
+            cmisType2.setId("MyDocType2");
+            cmisType2.setDisplayName("My Type 2 Level 1");
+            cmisType2.setDescription("Builtin InMemory type definition MyDocType2");
+            typesList.add(cmisType2);
+
+            MutableTypeDefinition cmisType11;        
+            cmisType11 = typeFactory.createChildTypeDefinition(cmisType1, "MyDocType1.1");
+            cmisType11.setDisplayName("My Type 3 Level 2");
+            cmisType11.setDescription("Builtin InMemory type definition MyDocType1.1");
+            typesList.add(cmisType11);
+
+            MutableTypeDefinition cmisType111;        
+            cmisType111 = typeFactory.createChildTypeDefinition(cmisType11, "MyDocType1.1.1");
+            cmisType111.setDisplayName("My Type 4 Level 3");
+            cmisType111.setDescription("Builtin InMemory type definition MyDocType1.1.1");
+            typesList.add(cmisType111);
+
+            MutableTypeDefinition cmisType112;        
+            cmisType112 = typeFactory.createChildTypeDefinition(cmisType11, "MyDocType1.1.2");
+            cmisType112.setId("MyDocType1.1.2");
+            cmisType112.setDisplayName("My Type 5 Level 3");
+            cmisType112.setDescription("Builtin InMemory type definition MyDocType1.1.2");
+            typesList.add(cmisType112);
+
+            MutableTypeDefinition cmisType12;        
+            cmisType12 = typeFactory.createChildTypeDefinition(cmisType1, "MyDocType1.2");
+            cmisType12.setDisplayName("My Type 6 Level 2");
+            cmisType12.setDescription("Builtin InMemory type definition MyDocType1.2");
+            typesList.add(cmisType12);
+
+            MutableTypeDefinition cmisType21;        
+            cmisType21 = typeFactory.createChildTypeDefinition(cmisType2, "MyDocType2.1");
+            cmisType21.setDisplayName("My Type 7 Level 2");
+            cmisType21.setDescription("Builtin InMemory type definition MyDocType2.1");
+            typesList.add(cmisType21);
+
+            MutableTypeDefinition cmisType22;        
+            cmisType22 = typeFactory.createChildTypeDefinition(cmisType2, "MyDocType2.2");
+            cmisType22.setDisplayName("My Type 8 Level 2");
+            cmisType22.setDescription("Builtin InMemory type definition MyDocType2.2");
+            typesList.add(cmisType22);
+
+            MutableTypeDefinition cmisType23;        
+            cmisType23 = typeFactory.createChildTypeDefinition(cmisType2, "MyDocType2.3");
+            cmisType23.setDisplayName("My Type 9 Level 2");
+            cmisType23.setDescription("Builtin InMemory type definition MyDocType2.3");
+            typesList.add(cmisType23);
+
+            MutableTypeDefinition cmisType24;        
+            cmisType24 = typeFactory.createChildTypeDefinition(cmisType2, "MyDocType2.4");
+            cmisType24.setDisplayName("My Type 10 Level 2");
+            cmisType24.setDescription("Builtin InMemory type definition MyDocType2.4");
+            typesList.add(cmisType24);
+
+            MutableTypeDefinition cmisType25;        
+            cmisType25 = typeFactory.createChildTypeDefinition(cmisType2, "MyDocType2.5");
+            cmisType25.setDisplayName("My Type 11 Level 2");
+            cmisType25.setDescription("Builtin InMemory type definition MyDocType2.5");
+            typesList.add(cmisType25);
+
+            MutableTypeDefinition cmisType26;        
+            cmisType26 = typeFactory.createChildTypeDefinition(cmisType2, "MyDocType2.6");
+            cmisType26.setDisplayName("My Type 12 Level 2");
+            cmisType26.setDescription("Builtin InMemory type definition MyDocType2.6");
+            typesList.add(cmisType26);
+
+            MutableTypeDefinition cmisType27;        
+            cmisType27 = typeFactory.createChildTypeDefinition(cmisType2, "MyDocType2.7");
+            cmisType27.setDisplayName("My Type 13 Level 2");
+            cmisType27.setDescription("Builtin InMemory type definition MyDocType2.7");
+            typesList.add(cmisType27);
+
+            MutableTypeDefinition cmisType28;        
+            cmisType28 = typeFactory.createChildTypeDefinition(cmisType2, "MyDocType2.8");
+            cmisType28.setDisplayName("My Type 14 Level 2");
+            cmisType28.setDescription("Builtin InMemory type definition MyDocType2.8");
+            typesList.add(cmisType28);
+
+            MutableTypeDefinition cmisType29;        
+            cmisType29 = typeFactory.createChildTypeDefinition(cmisType2, "MyDocType2.9");
+            cmisType29.setDisplayName("My Type 15 Level 2");
+            cmisType29.setDescription("Builtin InMemory type definition MyDocType2.9");
+            typesList.add(cmisType29);
+
+            // create a complex type with properties
+            MutableDocumentTypeDefinition cmisComplexType;        
+            cmisComplexType = typeFactory.createDocumentTypeDefinition(CmisVersion.CMIS_1_1, DocumentTypeCreationHelper.getCmisDocumentType().getId());
+            cmisComplexType.setId(COMPLEX_TYPE);
+            cmisComplexType.setDisplayName("Complex type with properties, Level 1");
+            cmisComplexType.setDescription("Builtin InMemory type definition ComplexType");
+
+            PropertyDefinition<Boolean> prop = PropertyCreationHelper.createBooleanDefinition("BooleanProp",
+                    "Sample Boolean Property", Updatability.READWRITE);
+            cmisComplexType.addPropertyDefinition(prop);
+
+            prop = PropertyCreationHelper.createBooleanMultiDefinition("BooleanPropMV",
+                    "Sample Boolean multi-value Property", Updatability.READWRITE);
+            cmisComplexType.addPropertyDefinition(prop);
+
+            PropertyDateTimeDefinitionImpl prop2 = PropertyCreationHelper.createDateTimeDefinition("DateTimeProp",
+                    "Sample DateTime Property", Updatability.READWRITE);
+            cmisComplexType.addPropertyDefinition(prop2);
+
+            prop2 = PropertyCreationHelper.createDateTimeMultiDefinition("DateTimePropMV",
+                    "Sample DateTime multi-value Property", Updatability.READWRITE);
+            cmisComplexType.addPropertyDefinition(prop2);
+
+            PropertyDecimalDefinitionImpl prop3 = PropertyCreationHelper.createDecimalDefinition("DecimalProp",
+                    "Sample Decimal Property", Updatability.READWRITE);
+            cmisComplexType.addPropertyDefinition(prop3);
+
+            prop3 = PropertyCreationHelper.createDecimalMultiDefinition("DecimalPropMV",
+                    "Sample Decimal multi-value Property", Updatability.READWRITE);
+            cmisComplexType.addPropertyDefinition(prop3);
+
+            PropertyHtmlDefinitionImpl prop4 = PropertyCreationHelper.createHtmlDefinition("HtmlProp",
+                    "Sample Html Property", Updatability.READWRITE);
+            cmisComplexType.addPropertyDefinition(prop4);
+
+            prop4 = PropertyCreationHelper.createHtmlMultiDefinition("HtmlPropMV", "Sample Html multi-value Property",
+                    Updatability.READWRITE);
+            cmisComplexType.addPropertyDefinition(prop4);
+
+            PropertyIdDefinitionImpl prop5 = PropertyCreationHelper.createIdDefinition("IdProp", "Sample Id Property",
+                    Updatability.READWRITE);
+            cmisComplexType.addPropertyDefinition(prop5);
+
+            prop5 = PropertyCreationHelper.createIdMultiDefinition("IdPropMV", "Sample Id Html multi-value Property",
+                    Updatability.READWRITE);
+            cmisComplexType.addPropertyDefinition(prop5);
+
+            PropertyIntegerDefinitionImpl prop6 = PropertyCreationHelper.createIntegerDefinition("IntProp",
+                    "Sample Int Property", Updatability.READWRITE);
+            cmisComplexType.addPropertyDefinition(prop6);
+
+            prop6 = PropertyCreationHelper.createIntegerMultiDefinition("IntPropMV", "Sample Int multi-value Property",
+                    Updatability.READWRITE);
+            cmisComplexType.addPropertyDefinition(prop6);
+
+            PropertyStringDefinitionImpl prop7 = PropertyCreationHelper.createStringDefinition("StringProp",
+                    "Sample String Property", Updatability.READWRITE);
+            cmisComplexType.addPropertyDefinition(prop7);
+
+            PropertyUriDefinitionImpl prop8 = PropertyCreationHelper.createUriDefinition("UriProp", "Sample Uri Property",
+                    Updatability.READWRITE);
+            cmisComplexType.addPropertyDefinition(prop8);
+
+            prop8 = PropertyCreationHelper.createUriMultiDefinition("UriPropMV", "Sample Uri multi-value Property",
+                    Updatability.READWRITE);
+            cmisComplexType.addPropertyDefinition(prop8);
+
+            PropertyStringDefinitionImpl prop9 = PropertyCreationHelper.createStringDefinition("PickListProp",
+                    "Sample Pick List Property", Updatability.READWRITE);
+            List<Choice<String>> choiceList = new ArrayList<Choice<String>>();
+            ChoiceImpl<String> elem = new ChoiceImpl<String>();
+            elem.setValue(Collections.singletonList("red"));
+            choiceList.add(elem);
+            elem = new ChoiceImpl<String>();
+            elem.setValue(Collections.singletonList("green"));
+            choiceList.add(elem);
+            elem = new ChoiceImpl<String>();
+            elem.setValue(Collections.singletonList("blue"));
+            choiceList.add(elem);
+            elem = new ChoiceImpl<String>();
+            elem.setValue(Collections.singletonList("black"));
+            choiceList.add(elem);
+            prop9.setChoices(choiceList);
+            prop9.setDefaultValue(Collections.singletonList("blue"));
+            cmisComplexType.addPropertyDefinition(prop9);
+
+            /*
+             * try short form: / PropertyCreationHelper.addElemToPicklist(prop9,
+             * "red"); PropertyCreationHelper.addElemToPicklist(prop9, "green");
+             * PropertyCreationHelper.addElemToPicklist(prop9, "blue");
+             * PropertyCreationHelper.addElemToPicklist(prop9, "black");
+             * PropertyCreationHelper.setDefaultValue(prop9, "blue"); /
+             */
+
+            // add type to types collection
+            typesList.add(cmisComplexType);
+
+            // create a type hierarchy with inherited properties
+            MutableDocumentTypeDefinition cmisDocTypeTopLevel;        
+            cmisDocTypeTopLevel = typeFactory.createDocumentTypeDefinition(CmisVersion.CMIS_1_1, DocumentTypeCreationHelper.getCmisDocumentType().getId());
+            cmisDocTypeTopLevel.setId(TOPLEVEL_TYPE);
+            cmisDocTypeTopLevel.setDisplayName("Document type with properties, Level 1");
+            cmisDocTypeTopLevel.setDescription("Builtin InMemory type definition " + TOPLEVEL_TYPE);
+
+            MutableTypeDefinition cmisDocTypeLevel1;        
+            cmisDocTypeLevel1 = typeFactory.createChildTypeDefinition(cmisDocTypeTopLevel, LEVEL1_TYPE);
+            cmisDocTypeLevel1.setDisplayName("Document type with inherited properties, Level 2");
+            cmisDocTypeLevel1 .setDescription("Builtin InMemory type definition " + LEVEL1_TYPE);
+
+            MutableTypeDefinition cmisDocTypeLevel2;        
+            cmisDocTypeLevel2 = typeFactory.createChildTypeDefinition(cmisDocTypeLevel1, LEVEL2_TYPE);
+            cmisDocTypeLevel2.setDisplayName("Document type with inherited properties, Level 3");
+            cmisDocTypeLevel2.setDescription("Builtin InMemory type definition " + LEVEL2_TYPE);
+
+            PropertyStringDefinitionImpl propTop = PropertyCreationHelper.createStringDefinition("StringPropTopLevel",
+                    "Sample String Property", Updatability.READWRITE);
+            cmisDocTypeTopLevel.addPropertyDefinition(propTop);
+
+            PropertyStringDefinitionImpl propLevel1 = PropertyCreationHelper.createStringDefinition("StringPropLevel1",
+                    "String Property Level 1", Updatability.READWRITE);
+            cmisDocTypeLevel1.addPropertyDefinition(propLevel1);
+
+            PropertyStringDefinitionImpl propLevel2 = PropertyCreationHelper.createStringDefinition("StringPropLevel2",
+                    "String Property Level 2", Updatability.READWRITE);
+            cmisDocTypeLevel2.addPropertyDefinition(propLevel2);
+
+            // add type to types collection
+            typesList.add(cmisDocTypeTopLevel);
+            typesList.add(cmisDocTypeLevel1);
+            typesList.add(cmisDocTypeLevel2);
+
+            // Create a type that is versionable
+            MutableDocumentTypeDefinition cmisVersionedType;        
+            cmisVersionedType = typeFactory.createDocumentTypeDefinition(CmisVersion.CMIS_1_1, DocumentTypeCreationHelper.getCmisDocumentType().getId());
+            cmisVersionedType.setId(VERSIONED_TYPE);
+            cmisVersionedType.setDisplayName("Versioned Type");
+            cmisVersionedType.setDescription("Builtin InMemory type definition " + VERSIONED_TYPE);
+            cmisVersionedType.setIsVersionable(true); // make it a versionable type;
+
+            // create a single String property definition
+            PropertyStringDefinitionImpl prop1 = PropertyCreationHelper.createStringDefinition("VersionedStringProp",
+                    "Sample String Property", Updatability.WHENCHECKEDOUT);
+            cmisVersionedType.addPropertyDefinition(prop1);
+
+            // add type to types collection
+            typesList.add(cmisVersionedType);
+
+            // CMIS 1.1 create an item item type
+
+            MutableItemTypeDefinition itemType;        
+            itemType = typeFactory.createItemTypeDefinition(CmisVersion.CMIS_1_1, DocumentTypeCreationHelper.getCmisItemType().getId());
+            itemType.setId(ITEM_TYPE);
+            itemType.setDisplayName("MyItemType");
+            itemType.setDescription("Builtin InMemory type definition " + ITEM_TYPE);
+            DocumentTypeCreationHelper.setDefaultTypeCapabilities(itemType);
+
+            // create a single String property definition
+
+            prop1 = PropertyCreationHelper.createStringDefinition("ItemStringProp",
+                    "Item String Property", Updatability.READWRITE);
+            itemType.addPropertyDefinition(prop1);
+            // add type to types collection
+            typesList.add(itemType);
+
+
+            MutableSecondaryTypeDefinition cmisSecondaryType;        
+            cmisSecondaryType = typeFactory.createSecondaryTypeDefinition(CmisVersion.CMIS_1_1, DocumentTypeCreationHelper.getCmisSecondaryType().getId());
+            cmisSecondaryType.setId(SECONDARY_TYPE_ID);
+            cmisSecondaryType.setDisplayName("MySecondaryType");
+            cmisSecondaryType.setDescription("Builtin InMemory type definition " + SECONDARY_TYPE_ID);
+            DocumentTypeCreationHelper.setDefaultTypeCapabilities(cmisSecondaryType);
+            cmisSecondaryType.setIsFileable(false);
+            
+            // create a single String property definition
+            PropertyStringDefinitionImpl propS1 = PropertyCreationHelper.createStringDefinition("SecondaryStringProp",
+                    "Secondary String Property", Updatability.READWRITE);
+            cmisSecondaryType.addPropertyDefinition(propS1);
+            PropertyIntegerDefinitionImpl propS2 = PropertyCreationHelper.createIntegerDefinition("SecondaryIntegerProp",
+                    "Secondary Integer Property", Updatability.READWRITE);
+            propS2.setIsRequired(true);
+            cmisSecondaryType.addPropertyDefinition(propS2);
+            // add type to types collection
+            typesList.add(cmisSecondaryType);
+
+            // add relationship type
+            MutableRelationshipTypeDefinition relType;        
+            relType = typeFactory.createRelationshipTypeDefinition(CmisVersion.CMIS_1_1, DocumentTypeCreationHelper.getCmisRelationshipType().getId());
+            relType.setId("CrossReferenceType");
+            relType.setDisplayName("CrossReferenceType");
+            relType.setDescription("Builtin InMemory type definition CrossReferenceType");
+            DocumentTypeCreationHelper.setDefaultTypeCapabilities(relType);
+            relType.setIsFileable(false);
+
+            // create a single String property definition
+
+            prop1 = PropertyCreationHelper.createStringDefinition("CrossReferenceKind",
+                    "CrossReferenceType", Updatability.READWRITE);
+            relType.addPropertyDefinition(prop1);
+            typesList.add(relType);            
+
+            // add a policy type
+            MutablePolicyTypeDefinition polType;        
+            polType = typeFactory.createPolicyTypeDefinition(CmisVersion.CMIS_1_1, DocumentTypeCreationHelper.getCmisPolicyType().getId());
+            polType.setId("AuditPolicy");
+            polType.setDisplayName("Audit Policy");
+            polType.setDescription("Builtin InMemory type definition AuditPolicy");
+            DocumentTypeCreationHelper.setDefaultTypeCapabilities(polType);
+            polType.setIsFileable(false);
+
+            // create a String property definition
+            prop1 = PropertyCreationHelper.createStringDefinition("AuditSettings",
+                    "Audit Kind Property", Updatability.READWRITE);
+            polType.addPropertyDefinition(prop1);
+            typesList.add(polType);            
+
+            return typesList;
+        } catch (Exception e) {
+            throw new CmisRuntimeException("Error when creating built-in InMemory types.", e);
+        }
     }
 
 }

Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/types/DocumentTypeCreationHelper.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/types/DocumentTypeCreationHelper.java?rev=1511617&r1=1511616&r2=1511617&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/types/DocumentTypeCreationHelper.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/types/DocumentTypeCreationHelper.java Thu Aug  8 08:40:26 2013
@@ -24,20 +24,216 @@ import java.util.List;
 import java.util.Map;
 
 import org.apache.chemistry.opencmis.commons.PropertyIds;
+import org.apache.chemistry.opencmis.commons.definitions.DocumentTypeDefinition;
+import org.apache.chemistry.opencmis.commons.definitions.FolderTypeDefinition;
+import org.apache.chemistry.opencmis.commons.definitions.ItemTypeDefinition;
+import org.apache.chemistry.opencmis.commons.definitions.MutableDocumentTypeDefinition;
+import org.apache.chemistry.opencmis.commons.definitions.MutableFolderTypeDefinition;
+import org.apache.chemistry.opencmis.commons.definitions.MutableItemTypeDefinition;
+import org.apache.chemistry.opencmis.commons.definitions.MutablePolicyTypeDefinition;
+import org.apache.chemistry.opencmis.commons.definitions.MutablePropertyDefinition;
+import org.apache.chemistry.opencmis.commons.definitions.MutableRelationshipTypeDefinition;
+import org.apache.chemistry.opencmis.commons.definitions.MutableSecondaryTypeDefinition;
+import org.apache.chemistry.opencmis.commons.definitions.MutableTypeDefinition;
 import org.apache.chemistry.opencmis.commons.definitions.PolicyTypeDefinition;
 import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
 import org.apache.chemistry.opencmis.commons.definitions.RelationshipTypeDefinition;
+import org.apache.chemistry.opencmis.commons.definitions.SecondaryTypeDefinition;
 import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
+import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
+import org.apache.chemistry.opencmis.commons.enums.ContentStreamAllowed;
 import org.apache.chemistry.opencmis.commons.enums.Updatability;
+import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
+import org.apache.chemistry.opencmis.commons.impl.dataobjects.DocumentTypeDefinitionImpl;
+import org.apache.chemistry.opencmis.commons.impl.dataobjects.FolderTypeDefinitionImpl;
+import org.apache.chemistry.opencmis.commons.impl.dataobjects.ItemTypeDefinitionImpl;
+import org.apache.chemistry.opencmis.commons.impl.dataobjects.PolicyTypeDefinitionImpl;
 import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyBooleanDefinitionImpl;
 import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDateTimeDefinitionImpl;
 import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIdDefinitionImpl;
 import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIntegerDefinitionImpl;
 import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyStringDefinitionImpl;
+import org.apache.chemistry.opencmis.commons.impl.dataobjects.RelationshipTypeDefinitionImpl;
+import org.apache.chemistry.opencmis.commons.impl.dataobjects.SecondaryTypeDefinitionImpl;
+import org.apache.chemistry.opencmis.commons.impl.dataobjects.TypeMutabilityImpl;
+import org.apache.chemistry.opencmis.server.support.TypeDefinitionFactory;
 
 public class DocumentTypeCreationHelper {
+    
+    public static class InMemoryDocumentType extends DocumentTypeDefinitionImpl {
+
+        private static final long serialVersionUID = 1L;
+
+        @Override
+        public void addPropertyDefinition(PropertyDefinition<?> propertyDefinition) {
+            DocumentTypeCreationHelper.addPropertyDefinition(propertyDefinition);
+            super.addPropertyDefinition(propertyDefinition);
+        }        
+
+        @Override
+        public void setId(String id) {
+            super.setId(id);
+            super.setLocalName(id);
+            super.setQueryName(DocumentTypeCreationHelper.getQueryName(id));
+        }
+    }
+
+    public static class InMemoryFolderType extends FolderTypeDefinitionImpl {
+
+        private static final long serialVersionUID = 1L;
+
+        @Override
+        public void addPropertyDefinition(PropertyDefinition<?> propertyDefinition) {
+            DocumentTypeCreationHelper.addPropertyDefinition(propertyDefinition);
+            super.addPropertyDefinition(propertyDefinition);
+        }        
+
+        @Override
+        public void setId(String id) {
+            super.setId(id);
+            super.setLocalName(id);
+            super.setQueryName(DocumentTypeCreationHelper.getQueryName(id));
+        }
+    }
+
+    public static class InMemoryRelationshipType extends RelationshipTypeDefinitionImpl {
+
+        private static final long serialVersionUID = 1L;
+
+        @Override
+        public void addPropertyDefinition(PropertyDefinition<?> propertyDefinition) {
+            DocumentTypeCreationHelper.addPropertyDefinition(propertyDefinition);
+            super.addPropertyDefinition(propertyDefinition);
+        }        
+
+        @Override
+        public void setId(String id) {
+            super.setId(id);
+            super.setLocalName(id);
+            super.setQueryName(DocumentTypeCreationHelper.getQueryName(id));
+        }
+    }
+    
+    public static class InMemoryPolicyType extends PolicyTypeDefinitionImpl {
+
+        private static final long serialVersionUID = 1L;
+
+        @Override
+        public void addPropertyDefinition(PropertyDefinition<?> propertyDefinition) {
+            DocumentTypeCreationHelper.addPropertyDefinition(propertyDefinition);
+            super.addPropertyDefinition(propertyDefinition);
+        }        
+
+        @Override
+        public void setId(String id) {
+            super.setId(id);
+            super.setLocalName(id);
+            super.setQueryName(DocumentTypeCreationHelper.getQueryName(id));
+        }
+    }
+
+    public static class InMemoryItemType extends ItemTypeDefinitionImpl {
+
+        private static final long serialVersionUID = 1L;
+
+        @Override
+        public void addPropertyDefinition(PropertyDefinition<?> propertyDefinition) {
+            DocumentTypeCreationHelper.addPropertyDefinition(propertyDefinition);
+            super.addPropertyDefinition(propertyDefinition);
+        }        
+
+        @Override
+        public void setId(String id) {
+            super.setId(id);
+            super.setLocalName(id);
+            super.setQueryName(id);
+        }
+    }
+
+    public static class InMemorySecondaryType extends SecondaryTypeDefinitionImpl {
+
+        private static final long serialVersionUID = 1L;
+
+        @Override
+        public void addPropertyDefinition(PropertyDefinition<?> propertyDefinition) {
+            DocumentTypeCreationHelper.addPropertyDefinition(propertyDefinition);
+            super.addPropertyDefinition(propertyDefinition);
+        }        
+
+        @Override
+        public void setId(String id) {
+            super.setId(id);
+            super.setLocalName(id);
+            super.setQueryName(id);
+        }
+    }
 
     private static final List<TypeDefinition> defaultTypes = createCmisDefaultTypes();
+    private static TypeDefinitionFactory typeFactory;
+    private static MutableDocumentTypeDefinition cmisTypeDoc;
+    private static MutableFolderTypeDefinition cmisTypeFolder;
+    private static MutableRelationshipTypeDefinition cmisTypeRel;
+    private static MutablePolicyTypeDefinition cmisTypePolicy;
+    private static MutableItemTypeDefinition cmisTypeItem;
+    private static MutableSecondaryTypeDefinition cmisTypeSecondary;
+    
+    public static DocumentTypeDefinition getCmisDocumentType() {
+        return cmisTypeDoc;
+    }
+    
+    public static FolderTypeDefinition getCmisFolderType() {
+        return cmisTypeFolder;
+    }
+    
+    public static RelationshipTypeDefinition getCmisRelationshipType() {
+        return cmisTypeRel;
+    }
+
+    public static PolicyTypeDefinition getCmisPolicyType() {
+        return cmisTypePolicy;
+    }
+    
+    public static ItemTypeDefinition getCmisItemType() {
+        return cmisTypeItem;
+    }
+    
+    public static SecondaryTypeDefinition getCmisSecondaryType() {
+        return cmisTypeSecondary;
+    }
+    
+    private static void initType(MutableTypeDefinition type, TypeDefinition parentTypeDefinition) {
+        type.setBaseTypeId(parentTypeDefinition.getBaseTypeId());
+        type.setParentTypeId(parentTypeDefinition.getId());
+        type.setIsControllableAcl(parentTypeDefinition.isControllableAcl());
+        type.setIsControllablePolicy(parentTypeDefinition.isControllablePolicy());
+        type.setIsCreatable(parentTypeDefinition.isCreatable());
+        type.setDescription(null);
+        type.setDisplayName(null);
+        type.setIsFileable(parentTypeDefinition.isFileable());
+        type.setIsFulltextIndexed(parentTypeDefinition.isFulltextIndexed());
+        type.setIsIncludedInSupertypeQuery(parentTypeDefinition.isIncludedInSupertypeQuery());
+        type.setLocalName(null);
+        type.setLocalNamespace(parentTypeDefinition.getLocalNamespace());
+        type.setIsQueryable(parentTypeDefinition.isQueryable());
+        type.setQueryName(null);
+        type.setId(null);
+        type.setTypeMutability(parentTypeDefinition.getTypeMutability());
+    }
+
+    /**
+     * Creates a new mutable document type definition, which is a child of the
+     * provided type definition. Property definitions are not added which is useful
+     * for creating additional types at runtime
+     */
+    public static MutableDocumentTypeDefinition createDocumentTypeDefinitionWithoutBaseProperties(DocumentTypeDefinition parentTypeDefinition)
+            throws InstantiationException, IllegalAccessException {
+        MutableDocumentTypeDefinition documentType = new InMemoryDocumentType();
+        initType(documentType, parentTypeDefinition);
+
+        documentType.setIsVersionable(parentTypeDefinition.isVersionable());
+        documentType.setContentStreamAllowed(parentTypeDefinition.getContentStreamAllowed());
+        return documentType;
+    }
 
     private DocumentTypeCreationHelper() {
     }
@@ -51,33 +247,114 @@ public class DocumentTypeCreationHelper 
     public static final List<TypeDefinition> getDefaultTypes() {
         return defaultTypes;
     }
+    
+    private static void addPropertyDefinition(PropertyDefinition<?> propertyDefinition)  {
+        if (propertyDefinition.getId().equals(PropertyIds.SECONDARY_OBJECT_TYPE_IDS)) {
+            MutablePropertyDefinition<?> propDef = (MutablePropertyDefinition<?>) propertyDefinition;
+            propDef.setUpdatability(Updatability.READWRITE);
+        }        
+    }
 
+    private static String getQueryName(String id) {
+        if (null == id)
+            return null;
+        
+        StringBuffer sb = new StringBuffer(id);
+        for (int i=0; i<sb.length(); i++) {
+            char c = sb.charAt(i);
+            if (c == '.' || c == ' ') {
+                sb.setCharAt(i, '_');
+            }
+        }
+        return sb.toString();
+    }
+    
+    public static void setDefaultTypeCapabilities(MutableTypeDefinition cmisType) {
+        cmisType.setIsCreatable(true);
+        cmisType.setIsFileable(true);
+        cmisType.setIsFulltextIndexed(false);
+    }
+    
+    static TypeMutabilityImpl getBaseTypeMutability() {
+        TypeMutabilityImpl typeMutability = new TypeMutabilityImpl();
+        typeMutability.setCanCreate(true);
+        typeMutability.setCanUpdate(false);
+        typeMutability.setCanDelete(false);
+        return typeMutability;
+    }
+    
     private static List<TypeDefinition> createCmisDefaultTypes() {
+        TypeDefinitionFactory typeFactory = getTypeDefinitionFactory();
+        
         List<TypeDefinition> typesList = new LinkedList<TypeDefinition>();
 
         // create root types:
-        TypeDefinition cmisType = InMemoryDocumentTypeDefinition.getRootDocumentType();
-        typesList.add(cmisType);
-
-        cmisType = InMemoryFolderTypeDefinition.getRootFolderType();
-        typesList.add(cmisType);
-
-        cmisType = InMemoryRelationshipTypeDefinition.getRootRelationshipType();
-        typesList.add(cmisType);
-        
-        cmisType = InMemoryPolicyTypeDefinition.getRootPolicyType();
-        typesList.add(cmisType);
-
-        // CMIS 1.1
-        cmisType = InMemoryItemTypeDefinition.getRootItemType();
-        typesList.add(cmisType);
-        
-        cmisType = InMemorySecondaryTypeDefinition.getRootSecondaryType();
-        typesList.add(cmisType);
+        try {
+            cmisTypeDoc = typeFactory.createDocumentTypeDefinition(CmisVersion.CMIS_1_1, null);
+            setDefaultTypeCapabilities(cmisTypeDoc);
+            cmisTypeDoc.setTypeMutability(getBaseTypeMutability());
+            cmisTypeDoc.setContentStreamAllowed(ContentStreamAllowed.ALLOWED);
+            cmisTypeDoc.setIsVersionable(false);
+            typesList.add(cmisTypeDoc);
+
+            cmisTypeFolder = typeFactory.createFolderTypeDefinition(CmisVersion.CMIS_1_1, null);
+            setDefaultTypeCapabilities(cmisTypeFolder);
+            cmisTypeFolder.setTypeMutability(getBaseTypeMutability());
+            typesList.add(cmisTypeFolder);
+            
+            cmisTypeRel = typeFactory.createRelationshipTypeDefinition(CmisVersion.CMIS_1_1, null);
+            setDefaultTypeCapabilities(cmisTypeRel);
+            cmisTypeRel.setTypeMutability(getBaseTypeMutability());
+            cmisTypeRel.setIsFileable(false);
+            typesList.add(cmisTypeRel);
+
+            cmisTypePolicy = typeFactory.createPolicyTypeDefinition(CmisVersion.CMIS_1_1, null);
+            setDefaultTypeCapabilities(cmisTypePolicy);
+            cmisTypePolicy.setTypeMutability(getBaseTypeMutability());
+            cmisTypePolicy.setIsFileable(false);
+            typesList.add(cmisTypePolicy);
+            
+            cmisTypeItem = typeFactory.createItemTypeDefinition(CmisVersion.CMIS_1_1, null);
+            setDefaultTypeCapabilities(cmisTypeItem);
+            cmisTypeItem.setTypeMutability(getBaseTypeMutability());
+            cmisTypeItem.setIsFileable(true);
+            typesList.add(cmisTypeItem);
+            
+            cmisTypeSecondary = typeFactory.createSecondaryTypeDefinition(CmisVersion.CMIS_1_1, null);
+            setDefaultTypeCapabilities(cmisTypeSecondary);
+            cmisTypeSecondary.setTypeMutability(getBaseTypeMutability());
+            cmisTypeSecondary.setIsFileable(false);
+            typesList.add(cmisTypeSecondary);            
+        } catch (Exception e) {
+            throw new CmisRuntimeException("Error when creating base types. ", e);
+        }
 
         return typesList;
     }
 
+    public static TypeDefinitionFactory getTypeDefinitionFactory() {
+        if (null == typeFactory) {
+            typeFactory = TypeDefinitionFactory.newInstance();
+            typeFactory.setDefaultControllableAcl(true);
+            typeFactory.setDefaultControllablePolicy(true);
+            typeFactory.setDefaultNamespace("http://apache.org");
+            //        typeFactory.setDefaultIsFulltextIndexed(false);
+            typeFactory.setDefaultQueryable(true);
+            TypeMutabilityImpl typeMutability = new TypeMutabilityImpl();
+            typeMutability.setCanCreate(true);
+            typeMutability.setCanUpdate(true);
+            typeMutability.setCanDelete(true);
+            typeFactory.setDefaultTypeMutability(typeMutability);
+            typeFactory.setDocumentTypeDefinitionClass(InMemoryDocumentType.class);
+            typeFactory.setFolderTypeDefinitionClass(InMemoryFolderType.class);
+            typeFactory.setRelationshipTypeDefinitionClass(InMemoryRelationshipType.class);
+            typeFactory.setPolicyTypeDefinitionClass(InMemoryPolicyType.class);
+            typeFactory.setItemTypeDefinitionClass(InMemoryItemType.class);
+            typeFactory.setSecondaryTypeDefinitionClass(InMemorySecondaryType.class);
+        }
+        return typeFactory;
+    }
+
     /**
      * create root types and a collection of sample types
      *

Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/types/PropertyCreationHelper.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/types/PropertyCreationHelper.java?rev=1511617&r1=1511616&r2=1511617&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/types/PropertyCreationHelper.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/types/PropertyCreationHelper.java Thu Aug  8 08:40:26 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);
@@ -534,7 +549,7 @@ public final class PropertyCreationHelpe
         else if (propDef.getPropertyType().equals(PropertyType.DECIMAL))
         	emptyValue =  new PropertyDecimalImpl(propDef.getId(), (BigDecimal) null);
         else if (propDef.getPropertyType().equals(PropertyType.HTML))
-        	emptyValue =  new PropertyHtmlImpl(propDef.getId(), (String) null);
+            emptyValue =  new PropertyHtmlImpl(propDef.getId(), (String) null);
         else if (propDef.getPropertyType().equals(PropertyType.ID))
         	emptyValue =  new PropertyIdImpl(propDef.getId(), (String) null);
         else if (propDef.getPropertyType().equals(PropertyType.INTEGER))

Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/webapp/WEB-INF/classes/repository.properties
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/webapp/WEB-INF/classes/repository.properties?rev=1511617&r1=1511616&r2=1511617&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/webapp/WEB-INF/classes/repository.properties (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/webapp/WEB-INF/classes/repository.properties Thu Aug  8 08:40:26 2013
@@ -25,6 +25,8 @@ InMemoryServer.User=dummyuser
 InMemoryServer.Password=dummysecret
 InMemoryServer.TypesCreatorClass=org.apache.chemistry.opencmis.inmemory.types.DefaultTypeSystemCreator
 InMemoryServer.TypeDefinitionsFile=types.xml
+InMemoryServer.Class=org.apache.chemistry.opencmis.inmemory.storedobj.impl.StoreManagerImpl
+# InMemoryServer.Class=org.apache.chemistry.opencmis.inmemory.storedobj.dbimpl.StoreManagerImpl
 
 # InMemoryServer.MemoryThreshold=10485760
 # InMemoryServer.TempDir=/path/to/your/tmp
@@ -33,6 +35,7 @@ InMemoryServer.EncryptTempFiles=true
 
 # settings for init repository with data
   # enable or disable
+# RepositoryFiller.Enable=false
 RepositoryFiller.Enable=true
   # Type id of documents that are created
 RepositoryFiller.DocumentTypeId=ComplexType

Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/AclServiceTest.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/AclServiceTest.java?rev=1511617&r1=1511616&r2=1511617&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/AclServiceTest.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/AclServiceTest.java Thu Aug  8 08:40:26 2013
@@ -21,7 +21,6 @@ package org.apache.chemistry.opencmis.in
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
 import java.util.ArrayList;
@@ -38,13 +37,12 @@ import org.apache.chemistry.opencmis.com
 import org.apache.chemistry.opencmis.commons.impl.jaxb.EnumBasicPermissions;
 import org.apache.chemistry.opencmis.inmemory.ObjectServiceTest.ObjectTestTypeSystemCreator;
 import org.apache.chemistry.opencmis.inmemory.storedobj.impl.InMemoryAce;
-import org.apache.chemistry.opencmis.inmemory.types.InMemoryDocumentTypeDefinition;
-import org.apache.chemistry.opencmis.inmemory.types.InMemoryFolderTypeDefinition;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.chemistry.opencmis.inmemory.types.DocumentTypeCreationHelper;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class AclServiceTest extends AbstractServiceTest {
 
@@ -52,8 +50,8 @@ public class AclServiceTest extends Abst
     private ObjectCreator fCreator;
     private static final String DOCUMENT_NAME = "DocumentWithAcl";
     private static final String FOLDER_NAME = "FolderWithAcl";
-    private static final String DOCUMENT_TYPE_ID = InMemoryDocumentTypeDefinition.getRootDocumentType().getId();
-    private static final String FOLDER_TYPE_ID = InMemoryFolderTypeDefinition.getRootFolderType().getId();
+    private static final String DOCUMENT_TYPE_ID = DocumentTypeCreationHelper.getCmisDocumentType().getId();
+    private static final String FOLDER_TYPE_ID = DocumentTypeCreationHelper.getCmisFolderType().getId();
     private static final String USER = "user";
     private static final String ALICE = "alice";
     private static final String BOB = "bob";

Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/FolderTest.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/FolderTest.java?rev=1511617&r1=1511616&r2=1511617&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/FolderTest.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/FolderTest.java Thu Aug  8 08:40:26 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/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/MultiFilingTest.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/MultiFilingTest.java?rev=1511617&r1=1511616&r2=1511617&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/MultiFilingTest.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/MultiFilingTest.java Thu Aug  8 08:40:26 2013
@@ -40,18 +40,18 @@ import org.apache.chemistry.opencmis.com
 import org.apache.chemistry.opencmis.commons.exceptions.CmisNotSupportedException;
 import org.apache.chemistry.opencmis.commons.server.CallContext;
 import org.apache.chemistry.opencmis.commons.spi.Holder;
-import org.apache.chemistry.opencmis.inmemory.types.InMemoryFolderTypeDefinition;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.chemistry.opencmis.inmemory.types.DocumentTypeCreationHelper;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class MultiFilingTest extends AbstractServiceTest {
 
     private static final Logger LOG = LoggerFactory.getLogger(MultiFilingTest.class);
     private static final String DOCUMENT_TYPE_ID = UnitTestTypeSystemCreator.COMPLEX_TYPE;
-    private static final String FOLDER_TYPE_ID = InMemoryFolderTypeDefinition.getRootFolderType().getId();
+    private static final String FOLDER_TYPE_ID = DocumentTypeCreationHelper.getCmisFolderType().getId();
     private static final String UNFILED_DOC_NAME = "Unfiled document";
     private static final String RENAMED_DOC_NAME = "My Renamed Document";
 
@@ -178,6 +178,16 @@ public class MultiFilingTest extends Abs
         LOG.debug("End testRenameMultiFiledDocument()");
     }
 
+        
+    @Test
+    public void testRemoveDocumentFromAllFolders() {
+        LOG.debug("Begin testRemoveDocumentFromAllFolders()");
+
+        String docId = createUnfiledDocument();
+        removeDocumentFromAllFolders(docId);
+        LOG.debug("End testRemoveDocumentFromAllFolders()");
+    }
+    
     @Test
     public void testAddVersionedDocumentToFolder() {
         LOG.debug("Begin testAddVersionedDocumentToFolder()");
@@ -195,6 +205,15 @@ public class MultiFilingTest extends Abs
         LOG.debug("End testRemoveVersionedDocumentFromFolder()");
     }
 
+    @Test
+    public void testRemoveVersionedDocumentFromAllFolders() {
+        LOG.debug("Begin testRemoveVersionedDocumentFromAllFolders()");
+
+        String docId = createVersionedDocument();
+        removeDocumentFromAllFolders(docId);
+        LOG.debug("End testRemoveVersionedDocumentFromAllFolders()");
+    }
+    
     private void createFolders() {
         fId1 = createFolder("folder1", fRootFolderId, FOLDER_TYPE_ID);
         fId2 = createFolder("folder2", fRootFolderId, FOLDER_TYPE_ID);
@@ -249,6 +268,15 @@ public class MultiFilingTest extends Abs
         assertEquals(0, parents.size());
     }
 
+    private void removeDocumentFromAllFolders(String docId) {
+        prepareMultiFiledDocument(docId);
+
+        fMultiSvc.removeObjectFromFolder(fRepositoryId, docId, null, null);
+        List<ObjectParentData> parents = fNavSvc.getObjectParents(fRepositoryId, docId, "*", false,
+                IncludeRelationships.NONE, null, true, null);
+        assertEquals(0, parents.size());
+    }
+    
     private String createUnfiledDocument() {
         return createDocument(UNFILED_DOC_NAME, null, DOCUMENT_TYPE_ID, true);
     }

Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/NavigationServiceTest.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/NavigationServiceTest.java?rev=1511617&r1=1511616&r2=1511617&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/NavigationServiceTest.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/NavigationServiceTest.java Thu Aug  8 08:40:26 2013
@@ -36,13 +36,13 @@ import org.apache.chemistry.opencmis.com
 import org.apache.chemistry.opencmis.commons.data.PropertyData;
 import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
 import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.inmemory.types.InMemoryFolderTypeDefinition;
+import org.apache.chemistry.opencmis.inmemory.types.DocumentTypeCreationHelper;
 import org.apache.chemistry.opencmis.util.repository.ObjectGenerator;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * @author Jens
@@ -205,8 +205,8 @@ public class NavigationServiceTest exten
     public void testGetPaging() {
         log.info("starting testGetPaging() ...");
         // create a folder
-        String folderId = super.createFolder("PagingFolder", fRootFolderId, InMemoryFolderTypeDefinition
-                .getRootFolderType().getId());
+        String folderId = super.createFolder("PagingFolder", fRootFolderId, DocumentTypeCreationHelper
+                .getCmisFolderType().getId());
         
         // create some documents
         for (int i=0; i<10; i++) {
@@ -275,8 +275,8 @@ public class NavigationServiceTest exten
         for (int i = 0; i < NUM_ROOT_FOLDERS; i++) {
             List<PropertyData<?>> properties = new ArrayList<PropertyData<?>>();
             properties.add(fFactory.createPropertyIdData(PropertyIds.NAME, "Folder " + i));
-            properties.add(fFactory.createPropertyIdData(PropertyIds.OBJECT_TYPE_ID, InMemoryFolderTypeDefinition
-                    .getRootFolderType().getId()));
+            properties.add(fFactory.createPropertyIdData(PropertyIds.OBJECT_TYPE_ID, DocumentTypeCreationHelper
+                    .getCmisFolderType().getId()));
             Properties props = fFactory.createPropertiesData(properties);
             String id = fObjSvc.createFolder(fRepositoryId, props, fRootFolderId, null, null, null, null);
             if (i == 3) {