Author: jens
Date: Fri Jan 14 10:42:52 2011
New Revision: 1058932

URL: http://svn.apache.org/viewvc?rev=1058932&view=rev
Log:
start with implementing type mutability: allow creation of new types (delete, 
update not supported)

Modified:
    
incubator/chemistry/opencmis-cmis11/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryRepositoryServiceImpl.java
    
incubator/chemistry/opencmis-cmis11/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryService.java
    
incubator/chemistry/opencmis-cmis11/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/StoreManagerImpl.java
    
incubator/chemistry/opencmis-cmis11/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/RepositoryServiceTest.java

Modified: 
incubator/chemistry/opencmis-cmis11/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryRepositoryServiceImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/chemistry/opencmis-cmis11/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryRepositoryServiceImpl.java?rev=1058932&r1=1058931&r2=1058932&view=diff
==============================================================================
--- 
incubator/chemistry/opencmis-cmis11/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryRepositoryServiceImpl.java
 (original)
+++ 
incubator/chemistry/opencmis-cmis11/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryRepositoryServiceImpl.java
 Fri Jan 14 10:42:52 2011
@@ -29,10 +29,14 @@ import org.apache.chemistry.opencmis.com
 import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
 import 
org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionContainer;
 import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionList;
+import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
 import 
org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
+import 
org.apache.chemistry.opencmis.commons.exceptions.CmisNotSupportedException;
 import 
org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
 import 
org.apache.chemistry.opencmis.commons.impl.dataobjects.TypeDefinitionListImpl;
 import org.apache.chemistry.opencmis.commons.server.CallContext;
+import org.apache.chemistry.opencmis.commons.spi.Holder;
+import org.apache.chemistry.opencmis.inmemory.TypeManagerImpl;
 import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoreManager;
 
 public class InMemoryRepositoryServiceImpl extends InMemoryAbstractServiceImpl 
{
@@ -134,6 +138,41 @@ public class InMemoryRepositoryServiceIm
         return result;
     }
 
+    public void createTypeDefinition(String repositoryId, 
Holder<TypeDefinition> type, ExtensionsData extension) {
+
+       TypeManagerImpl typeManager = (TypeManagerImpl) 
fStoreManager.getTypeManager(repositoryId);
+        if (null == typeManager)
+            throw new CmisInvalidArgumentException("Unknown repository " + 
repositoryId);
+        
+        String typeId = type.getValue().getId();
+
+        if (null == typeId)
+               throw new CmisInvalidArgumentException("Cannot add type, type 
id is required.");
+        
+        if (typeManager.getTypeById(typeId) != null)
+                       throw new CmisInvalidArgumentException("Cannot add type 
"
+                                       + typeId + ", type already exists");
+        
+        String parentTypeId = type.getValue().getParentTypeId();
+
+        if (null == parentTypeId)
+               throw new CmisInvalidArgumentException("Cannot add type, parent 
type id is required.");
+        
+        if (typeManager.getTypeById(parentTypeId) == null)
+                       throw new CmisInvalidArgumentException("Cannot add type 
"
+                                       + parentTypeId + " is unknown.");
+
+        typeManager.addTypeDefinition(type.getValue());
+    }
+
+    public void updateTypeDefinition(String repositoryId, 
Holder<TypeDefinition> type, ExtensionsData extension) {
+       throw new CmisNotSupportedException("updating type definition is not 
supported.");
+    }
+
+    public void deleteTypeDefinition(String repositoryId, String typeId, 
ExtensionsData extension) {
+       throw new CmisNotSupportedException("deleting TypeDefinition is not 
supported.");
+    }
+    
     private RepositoryInfo getRepositoryInfoFromStoreManager(String 
repositoryId) {
         RepositoryInfo repoInfo = 
fStoreManager.getRepositoryInfo(repositoryId);
         if (null == repoInfo || !repoInfo.getId().equals(repositoryId)) {

Modified: 
incubator/chemistry/opencmis-cmis11/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryService.java
URL: 
http://svn.apache.org/viewvc/incubator/chemistry/opencmis-cmis11/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryService.java?rev=1058932&r1=1058931&r2=1058932&view=diff
==============================================================================
--- 
incubator/chemistry/opencmis-cmis11/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryService.java
 (original)
+++ 
incubator/chemistry/opencmis-cmis11/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryService.java
 Fri Jan 14 10:42:52 2011
@@ -43,6 +43,7 @@ import org.apache.chemistry.opencmis.com
 import org.apache.chemistry.opencmis.commons.enums.RelationshipDirection;
 import org.apache.chemistry.opencmis.commons.enums.UnfileObject;
 import org.apache.chemistry.opencmis.commons.enums.VersioningState;
+import 
org.apache.chemistry.opencmis.commons.exceptions.CmisNotSupportedException;
 import org.apache.chemistry.opencmis.commons.impl.server.AbstractCmisService;
 import org.apache.chemistry.opencmis.commons.server.CallContext;
 import org.apache.chemistry.opencmis.commons.spi.Holder;
@@ -108,6 +109,18 @@ public class InMemoryService extends Abs
         return fRepSvc.getTypeDefinition(getCallContext(), repositoryId, 
typeId, extension);
     }
 
+    public void createTypeDefinition(String repositoryId, 
Holder<TypeDefinition> type, ExtensionsData extension) {
+       fRepSvc.createTypeDefinition(repositoryId, type, extension);
+    }
+
+    public void updateTypeDefinition(String repositoryId, 
Holder<TypeDefinition> type, ExtensionsData extension) {
+       fRepSvc.updateTypeDefinition(repositoryId, type, extension);
+    }
+
+    public void deleteTypeDefinition(String repositoryId, String typeId, 
ExtensionsData extension) {
+       fRepSvc.deleteTypeDefinition(repositoryId, typeId, extension);
+    }
+
     public List<TypeDefinitionContainer> getTypeDescendants(String 
repositoryId, String typeId, BigInteger depth,
             Boolean includePropertyDefinitions, ExtensionsData extension) {
         return fRepSvc.getTypeDescendants(getCallContext(), repositoryId, 
typeId, depth, includePropertyDefinitions,

Modified: 
incubator/chemistry/opencmis-cmis11/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/StoreManagerImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/chemistry/opencmis-cmis11/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/StoreManagerImpl.java?rev=1058932&r1=1058931&r2=1058932&view=diff
==============================================================================
--- 
incubator/chemistry/opencmis-cmis11/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/StoreManagerImpl.java
 (original)
+++ 
incubator/chemistry/opencmis-cmis11/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/StoreManagerImpl.java
 Fri Jan 14 10:42:52 2011
@@ -27,6 +27,7 @@ import java.util.ListIterator;
 import java.util.Map;
 import java.util.Set;
 
+import org.apache.chemistry.opencmis.commons.data.NewTypeSettableAttributes;
 import org.apache.chemistry.opencmis.commons.data.ObjectList;
 import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
 import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
@@ -41,6 +42,7 @@ import org.apache.chemistry.opencmis.com
 import 
org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
 import 
org.apache.chemistry.opencmis.commons.impl.dataobjects.AbstractTypeDefinition;
 import 
org.apache.chemistry.opencmis.commons.impl.dataobjects.BindingsObjectFactoryImpl;
+import 
org.apache.chemistry.opencmis.commons.impl.dataobjects.NewTypeSettableAttributesImpl;
 import 
org.apache.chemistry.opencmis.commons.impl.dataobjects.RepositoryCapabilitiesImpl;
 import 
org.apache.chemistry.opencmis.commons.impl.dataobjects.RepositoryInfoImpl;
 import 
org.apache.chemistry.opencmis.commons.impl.dataobjects.TypeDefinitionContainerImpl;
@@ -328,6 +330,22 @@ public class StoreManagerImpl implements
         // aclCaps.setPermissionMappingData(null);
         // repoInfo.setACLCapabilities(aclCaps);
         repoInfo.setAclCapabilities(null);
+        
+        NewTypeSettableAttributesImpl tsAttrs = new 
NewTypeSettableAttributesImpl();
+        tsAttrs.setCanSetId(true);
+        tsAttrs.setCanSetLocalName(true);
+        tsAttrs.setCanSetLocalNamespace(true);
+        tsAttrs.setCanSetDisplayName(true);
+        tsAttrs.setCanSetQueryName(true);
+        tsAttrs.setCanSetDescription(true);
+        tsAttrs.setCanSetQueryable(true);
+        tsAttrs.setCanSetFulltextIndexed(false);
+        tsAttrs.setCanSetIncludedInSupertypeQuery(true);
+        tsAttrs.setCanSetControllablePolicy(false);
+        tsAttrs.setCanSetCreatable(true);
+//        repoInfo.setTypeSettableAttributes(tsAttrs);
+        repoInfo.setChangesOnType(null);
+        
         fRepositoryInfo = repoInfo;
         return repoInfo;
     }

Modified: 
incubator/chemistry/opencmis-cmis11/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/RepositoryServiceTest.java
URL: 
http://svn.apache.org/viewvc/incubator/chemistry/opencmis-cmis11/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/RepositoryServiceTest.java?rev=1058932&r1=1058931&r2=1058932&view=diff
==============================================================================
--- 
incubator/chemistry/opencmis-cmis11/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/RepositoryServiceTest.java
 (original)
+++ 
incubator/chemistry/opencmis-cmis11/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/RepositoryServiceTest.java
 Fri Jan 14 10:42:52 2011
@@ -48,6 +48,7 @@ import org.apache.chemistry.opencmis.com
 import org.apache.chemistry.opencmis.commons.enums.CapabilityQuery;
 import org.apache.chemistry.opencmis.commons.enums.CapabilityRenditions;
 import 
org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
+import 
org.apache.chemistry.opencmis.commons.exceptions.CmisNotSupportedException;
 import 
org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
 import org.apache.chemistry.opencmis.commons.impl.dataobjects.ChoiceImpl;
 import 
org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDateTimeDefinitionImpl;
@@ -59,6 +60,7 @@ import org.apache.chemistry.opencmis.com
 import 
org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyUriDefinitionImpl;
 import 
org.apache.chemistry.opencmis.commons.impl.dataobjects.RepositoryCapabilitiesImpl;
 import 
org.apache.chemistry.opencmis.commons.impl.dataobjects.RepositoryInfoImpl;
+import org.apache.chemistry.opencmis.commons.spi.Holder;
 import org.apache.chemistry.opencmis.inmemory.types.DocumentTypeCreationHelper;
 import 
org.apache.chemistry.opencmis.inmemory.types.InMemoryDocumentTypeDefinition;
 import org.apache.chemistry.opencmis.inmemory.types.PropertyCreationHelper;
@@ -479,6 +481,57 @@ public class RepositoryServiceTest exten
         log.info("... testInheritedProperties() finished.");
     }
 
+    @Test
+    public void testTypeMutabilityCreation() throws Exception {
+        log.info("");
+        log.info("starting testTypeMutabilityCreation() ...");
+        TypeDefinition typeDefRef = getTypeForAddingAtRuntime();
+        String repositoryId = getRepositoryId();
+        // add type.
+        fRepSvc.createTypeDefinition(repositoryId, new 
Holder<TypeDefinition>(typeDefRef), null);
+        TypeDefinition type = fRepSvc.getTypeDefinition(repositoryId, 
typeDefRef.getId(), null);
+        assertEquals(typeDefRef.getId(), type.getId());
+        assertEquals(typeDefRef.getDescription(), type.getDescription());
+        assertEquals(typeDefRef.getDisplayName(), type.getDisplayName());
+        assertEquals(typeDefRef.getLocalName(), type.getLocalName());
+        assertEquals(typeDefRef.getLocalNamespace(), type.getLocalNamespace());
+        containsAllBasePropertyDefinitions(type);
+        log.info("... testTypeMutabilityCreation() finished.");
+    }
+
+    @Test
+    public void testTypeMutabilityUpdate() throws Exception {
+        log.info("");
+        log.info("starting testTypeMutabilityUpdate() ...");
+        TypeDefinition typeDefRef = getTypeForAddingAtRuntime();
+        String repositoryId = getRepositoryId();
+        fRepSvc.createTypeDefinition(repositoryId, new 
Holder<TypeDefinition>(typeDefRef), null);
+        // update type.
+        try {
+               fRepSvc.updateTypeDefinition(repositoryId, new 
Holder<TypeDefinition>(typeDefRef), null);
+               fail("updating a type should throw exception.");
+        } catch (Exception e) {
+               assert(e instanceof CmisNotSupportedException);
+        }
+        log.info("... testTypeMutabilityUpdate() finished.");
+    }
+    @Test
+    public void testTypeMutabilityDeletion() throws Exception {
+        log.info("");
+        log.info("starting testTypeMutabilityDeletion() ...");
+        TypeDefinition typeDefRef = getTypeForAddingAtRuntime();
+        String repositoryId = getRepositoryId();
+        fRepSvc.createTypeDefinition(repositoryId, new 
Holder<TypeDefinition>(typeDefRef), null);
+        // delete type.
+        try {
+               fRepSvc.deleteTypeDefinition(repositoryId, typeDefRef.getId(), 
null);
+               fail("deleting a type should throw exception.");
+        } catch (Exception e) {
+               assert(e instanceof CmisNotSupportedException);
+        }
+        log.info("... testTypeMutabilityDeletion() finished.");
+    }
+
     private String getRepositoryId() {
         List<RepositoryInfo> repositories = fRepSvc.getRepositoryInfos(null);
         RepositoryInfo repository = repositories.get(0);
@@ -568,6 +621,26 @@ public class RepositoryServiceTest exten
         return size;
     }
 
+    private TypeDefinition getTypeForAddingAtRuntime() {
+        
+        InMemoryDocumentTypeDefinition cmisLaterType = new 
InMemoryDocumentTypeDefinition("BookTypeAddedLater",
+                "Type with two properties", 
InMemoryDocumentTypeDefinition.getRootDocumentType());
+
+        Map<String, PropertyDefinition<?>> propertyDefinitions = new 
HashMap<String, PropertyDefinition<?>>();
+
+        PropertyIntegerDefinitionImpl prop1 = 
PropertyCreationHelper.createIntegerDefinition("Number",
+                "Sample Int Property");
+        propertyDefinitions.put(prop1.getId(), prop1);
+
+        PropertyStringDefinitionImpl prop2 = 
PropertyCreationHelper.createStringDefinition("Title",
+                "Sample String Property");
+        propertyDefinitions.put(prop2.getId(), prop2);
+       
+        cmisLaterType.addCustomPropertyDefinitions(propertyDefinitions);
+        
+        return cmisLaterType;
+
+    }
     public static class RepositoryTestTypeSystemCreator implements TypeCreator 
{
 
         public static final String COMPLEX_TYPE = "ComplexType";


Reply via email to