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";