You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@chemistry.apache.org by fm...@apache.org on 2013/08/08 22:40:12 UTC
svn commit: r1512023 - in /chemistry/opencmis/trunk:
chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/
chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/j...
Author: fmui
Date: Thu Aug 8 20:40:11 2013
New Revision: 1512023
URL: http://svn.apache.org/r1512023
Log:
added createTypeDescendants to TypeDefinitionFactory
Modified:
chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/TypeMutabilityImpl.java
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/TypeDefinitionFactory.java
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/test/java/org/apache/chemistry/opencmis/server/support/TypeDefinitionFactoryTest.java
Modified: chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/TypeMutabilityImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/TypeMutabilityImpl.java?rev=1512023&r1=1512022&r2=1512023&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/TypeMutabilityImpl.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/TypeMutabilityImpl.java Thu Aug 8 20:40:11 2013
@@ -52,4 +52,9 @@ public class TypeMutabilityImpl extends
this.canDelete = canDelete;
}
+ @Override
+ public String toString() {
+ return "TypeMutability [canCreate=" + canCreate + ", canUpdate=" + canUpdate + ", canDelete=" + canDelete + "]"
+ + super.toString();
+ }
}
Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/TypeDefinitionFactory.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/TypeDefinitionFactory.java?rev=1512023&r1=1512022&r2=1512023&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/TypeDefinitionFactory.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/main/java/org/apache/chemistry/opencmis/server/support/TypeDefinitionFactory.java Thu Aug 8 20:40:11 2013
@@ -22,7 +22,6 @@ package org.apache.chemistry.opencmis.se
import java.math.BigInteger;
import java.util.ArrayList;
-import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
@@ -55,6 +54,7 @@ import org.apache.chemistry.opencmis.com
import org.apache.chemistry.opencmis.commons.definitions.PropertyUriDefinition;
import org.apache.chemistry.opencmis.commons.definitions.RelationshipTypeDefinition;
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.definitions.TypeMutability;
import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
@@ -63,6 +63,8 @@ import org.apache.chemistry.opencmis.com
import org.apache.chemistry.opencmis.commons.enums.ContentStreamAllowed;
import org.apache.chemistry.opencmis.commons.enums.PropertyType;
import org.apache.chemistry.opencmis.commons.enums.Updatability;
+import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
+import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
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.CmisExtensionElementImpl;
@@ -80,8 +82,10 @@ import org.apache.chemistry.opencmis.com
import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyUriDefinitionImpl;
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.TypeDefinitionContainerImpl;
import org.apache.chemistry.opencmis.commons.impl.dataobjects.TypeDefinitionListImpl;
import org.apache.chemistry.opencmis.commons.impl.dataobjects.TypeMutabilityImpl;
+import org.apache.chemistry.opencmis.commons.spi.RepositoryService;
/**
* Type definition factory.
@@ -607,8 +611,17 @@ public class TypeDefinitionFactory {
return childType;
}
- public TypeDefinitionList createTypeDefinitionList(Collection<TypeDefinition> allTypes, String typeId,
+ /**
+ * Creates a {@link TypeDefinitionList} for
+ * {@link RepositoryService#getTypeChildren(String, String, Boolean, BigInteger, BigInteger, ExtensionsData)}
+ * .
+ */
+ public TypeDefinitionList createTypeDefinitionList(Map<String, TypeDefinition> allTypes, String typeId,
Boolean includePropertyDefinitions, BigInteger maxItems, BigInteger skipCount) {
+ if (typeId != null && !allTypes.containsKey(typeId)) {
+ throw new CmisObjectNotFoundException("Type '" + typeId + "' does not exist!");
+ }
+
TypeDefinitionListImpl result = new TypeDefinitionListImpl(Collections.<TypeDefinition> emptyList());
result.setHasMoreItems(false);
result.setNumItems(BigInteger.ZERO);
@@ -634,7 +647,7 @@ public class TypeDefinitionFactory {
: includePropertyDefinitions.booleanValue());
List<TypeDefinition> targetList = new ArrayList<TypeDefinition>();
- for (TypeDefinition typeDef : allTypes) {
+ for (TypeDefinition typeDef : allTypes.values()) {
if ((typeId == null && typeDef.getParentTypeId() == null)
|| (typeId != null && typeId.equals(typeDef.getParentTypeId()))) {
if (includePropertyDefinitionsBool) {
@@ -677,6 +690,72 @@ public class TypeDefinitionFactory {
return result;
}
+ /**
+ * Creates a list of {@link TypeDefinitionContainer} for
+ * {@link RepositoryService#getTypeDescendants(String, String, BigInteger, Boolean, ExtensionsData)}
+ * .
+ */
+ public List<TypeDefinitionContainer> createTypeDescendants(Map<String, TypeDefinition> allTypes, String typeId,
+ BigInteger depth, Boolean includePropertyDefinitions) {
+ int depthInt = (depth == null ? -1 : depth.intValue());
+ if (depthInt == 0) {
+ throw new CmisInvalidArgumentException("Depth must not be 0!");
+ }
+
+ if (typeId != null && !allTypes.containsKey(typeId)) {
+ throw new CmisObjectNotFoundException("Type '" + typeId + "' does not exist!");
+ }
+
+ if (allTypes == null || allTypes.isEmpty()) {
+ return Collections.<TypeDefinitionContainer> emptyList();
+ }
+
+ boolean includePropertyDefinitionsBool = (includePropertyDefinitions == null ? false
+ : includePropertyDefinitions.booleanValue());
+
+ Map<String, Set<String>> typeDefChildren = new HashMap<String, Set<String>>();
+
+ for (TypeDefinition typeDef : allTypes.values()) {
+ Set<String> children = typeDefChildren.get(typeDef.getParentTypeId());
+ if (children == null) {
+ children = new HashSet<String>();
+ typeDefChildren.put(typeDef.getParentTypeId(), children);
+ }
+ children.add(typeDef.getId());
+ }
+
+ Set<String> children = typeDefChildren.get(typeId);
+ if (children == null) {
+ return Collections.<TypeDefinitionContainer> emptyList();
+ }
+
+ List<TypeDefinitionContainer> result = new ArrayList<TypeDefinitionContainer>();
+ for (String child : children) {
+ result.add(createTypeDefinitionContainer(allTypes, typeDefChildren, child, depthInt - 1,
+ includePropertyDefinitionsBool));
+ }
+
+ return result;
+ }
+
+ private TypeDefinitionContainer createTypeDefinitionContainer(Map<String, TypeDefinition> allTypes,
+ Map<String, Set<String>> typeDefChildren, String typeId, int depth, boolean includePropertyDefinitions) {
+ TypeDefinitionContainerImpl result = new TypeDefinitionContainerImpl();
+ result.setTypeDefinition(includePropertyDefinitions ? allTypes.get(typeId) : copy(allTypes.get(typeId), false));
+
+ if (depth != 0) {
+ if (typeDefChildren.containsKey(typeId)) {
+ for (String child : typeDefChildren.get(typeId)) {
+ result.getChildren().add(
+ createTypeDefinitionContainer(allTypes, typeDefChildren, child, depth < 0 ? -1 : depth - 1,
+ includePropertyDefinitions));
+ }
+ }
+ }
+
+ return result;
+ }
+
// --- copy methods ---
/**
Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/test/java/org/apache/chemistry/opencmis/server/support/TypeDefinitionFactoryTest.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/test/java/org/apache/chemistry/opencmis/server/support/TypeDefinitionFactoryTest.java?rev=1512023&r1=1512022&r2=1512023&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/test/java/org/apache/chemistry/opencmis/server/support/TypeDefinitionFactoryTest.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-support/src/test/java/org/apache/chemistry/opencmis/server/support/TypeDefinitionFactoryTest.java Thu Aug 8 20:40:11 2013
@@ -24,9 +24,11 @@ import static org.junit.Assert.*;
import java.math.BigInteger;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
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.CmisVersion;
import org.junit.Test;
@@ -89,7 +91,7 @@ public class TypeDefinitionFactoryTest {
folderType = tdf.createBaseFolderTypeDefinition(cmisVersion);
types.put(folderType.getId(), folderType);
- TypeDefinitionList tdl1 = tdf.createTypeDefinitionList(types.values(), null, true, null, null);
+ TypeDefinitionList tdl1 = tdf.createTypeDefinitionList(types, null, true, null, null);
assertNotNull(tdl1);
assertEquals(2, tdl1.getList().size());
assertEquals(2, tdl1.getNumItems().intValue());
@@ -97,29 +99,33 @@ public class TypeDefinitionFactoryTest {
assertEquals("cmis:document", tdl1.getList().get(0).getId());
assertEquals("cmis:folder", tdl1.getList().get(1).getId());
+ assertEquals(26, tdl1.getList().get(0).getPropertyDefinitions().size());
+ assertEquals(14, tdl1.getList().get(1).getPropertyDefinitions().size());
- TypeDefinitionList tdl2 = tdf.createTypeDefinitionList(types.values(), "cmis:document", true, null, null);
+ TypeDefinitionList tdl2 = tdf.createTypeDefinitionList(types, "cmis:document", false, null, null);
assertNotNull(tdl2);
assertEquals(5, tdl2.getList().size());
assertEquals(5, tdl2.getNumItems().intValue());
assertEquals(Boolean.FALSE, tdl2.hasMoreItems());
+ assertTrue(tdl2.getList().get(0).getPropertyDefinitions().isEmpty());
- TypeDefinitionList tdl3 = tdf.createTypeDefinitionList(types.values(), "cmis:document", true,
- BigInteger.valueOf(3), BigInteger.ZERO);
+ TypeDefinitionList tdl3 = tdf.createTypeDefinitionList(types, "cmis:document", true, BigInteger.valueOf(3),
+ BigInteger.ZERO);
assertNotNull(tdl3);
assertEquals(3, tdl3.getList().size());
assertEquals(5, tdl3.getNumItems().intValue());
assertEquals(Boolean.TRUE, tdl3.hasMoreItems());
+ assertFalse(tdl3.getList().get(0).getPropertyDefinitions().isEmpty());
- TypeDefinitionList tdl4 = tdf.createTypeDefinitionList(types.values(), "cmis:document", true,
- BigInteger.valueOf(3), BigInteger.valueOf(2));
+ TypeDefinitionList tdl4 = tdf.createTypeDefinitionList(types, "cmis:document", true, BigInteger.valueOf(3),
+ BigInteger.valueOf(2));
assertNotNull(tdl4);
assertEquals(3, tdl4.getList().size());
assertEquals(5, tdl4.getNumItems().intValue());
assertEquals(Boolean.FALSE, tdl4.hasMoreItems());
- TypeDefinitionList tdl5 = tdf.createTypeDefinitionList(types.values(), "cmis:document", true,
- BigInteger.valueOf(2), BigInteger.valueOf(2));
+ TypeDefinitionList tdl5 = tdf.createTypeDefinitionList(types, "cmis:document", true, BigInteger.valueOf(2),
+ BigInteger.valueOf(2));
assertNotNull(tdl5);
assertEquals(2, tdl5.getList().size());
assertEquals(5, tdl5.getNumItems().intValue());
@@ -137,6 +143,52 @@ public class TypeDefinitionFactoryTest {
assertEquals(tdl4.getList().get(0).getId(), tdl5.getList().get(0).getId());
}
+ @Test
+ public void testCreateTypeDescendants() {
+ TypeDefinitionFactory tdf = TypeDefinitionFactory.newInstance();
+ CmisVersion cmisVersion = CmisVersion.CMIS_1_1;
+ Map<String, TypeDefinition> types = new HashMap<String, TypeDefinition>();
+
+ TypeDefinition type;
+ TypeDefinition type2;
+ TypeDefinition docType;
+ TypeDefinition folderType;
+
+ docType = tdf.createBaseDocumentTypeDefinition(cmisVersion);
+ types.put(docType.getId(), docType);
+
+ type = tdf.createChildTypeDefinition(docType, "test:docType1");
+ types.put(type.getId(), type);
+
+ type2 = tdf.createChildTypeDefinition(docType, "test:docType2");
+ types.put(type2.getId(), type2);
+
+ type = tdf.createChildTypeDefinition(type2, "test:docType2-1");
+ types.put(type.getId(), type);
+
+ type = tdf.createChildTypeDefinition(type2, "test:docType2-2");
+ types.put(type.getId(), type);
+
+ type = tdf.createChildTypeDefinition(type2, "test:docType2-3");
+ types.put(type.getId(), type);
+
+ folderType = tdf.createBaseFolderTypeDefinition(cmisVersion);
+ types.put(folderType.getId(), folderType);
+
+ List<TypeDefinitionContainer> typeDefs;
+
+ typeDefs = tdf.createTypeDescendants(types, null, BigInteger.valueOf(-1), null);
+ assertNotNull(typeDefs);
+ assertEquals(2, typeDefs.size());
+
+ typeDefs = tdf.createTypeDescendants(types, null, BigInteger.valueOf(1), null);
+ assertNotNull(typeDefs);
+ assertEquals(2, typeDefs.size());
+ assertEquals(0, typeDefs.get(0).getChildren().size());
+ assertEquals(0, typeDefs.get(1).getChildren().size());
+
+ }
+
private void assertTypeDefinition(TypeDefinition typeDef) {
assertNotNull(typeDef);
assertNotNull(typeDef.getBaseTypeId());