You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@chemistry.apache.org by dc...@apache.org on 2010/02/16 17:04:07 UTC
svn commit: r910572 [31/36] - in /incubator/chemistry/trunk/opencmis: ./
_dev/ opencmis-client/ opencmis-client/opencmis-client-api/
opencmis-client/opencmis-client-api/src/
opencmis-client/opencmis-client-api/src/main/
opencmis-client/opencmis-client-...
Added: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/types/DocumentTypeCreationHelper.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/types/DocumentTypeCreationHelper.java?rev=910572&view=auto
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/types/DocumentTypeCreationHelper.java (added)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/types/DocumentTypeCreationHelper.java Tue Feb 16 16:03:38 2010
@@ -0,0 +1,263 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.opencmis.inmemory.types;
+
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.opencmis.commons.PropertyIds;
+import org.apache.opencmis.commons.api.PropertyDefinition;
+import org.apache.opencmis.commons.api.TypeDefinition;
+import org.apache.opencmis.commons.enums.Cardinality;
+import org.apache.opencmis.commons.enums.Updatability;
+import org.apache.opencmis.commons.impl.dataobjects.PropertyBooleanDefinitionImpl;
+import org.apache.opencmis.commons.impl.dataobjects.PropertyDateTimeDefinitionImpl;
+import org.apache.opencmis.commons.impl.dataobjects.PropertyIdDefinitionImpl;
+import org.apache.opencmis.commons.impl.dataobjects.PropertyIntegerDefinitionImpl;
+import org.apache.opencmis.commons.impl.dataobjects.PropertyStringDefinitionImpl;
+
+public class DocumentTypeCreationHelper {
+
+ static private List<TypeDefinition> defaultTypes = createCmisDefaultTypes();
+
+ static public List<TypeDefinition> createMapWithDefaultTypes() {
+ List<TypeDefinition> typesList = new LinkedList<TypeDefinition>();
+ typesList.addAll(defaultTypes);
+ return typesList;
+ }
+
+ static public final List<TypeDefinition> getDefaultTypes() {
+ return defaultTypes;
+ }
+
+ static private List<TypeDefinition> createCmisDefaultTypes() {
+ List<TypeDefinition> typesList = new LinkedList<TypeDefinition>();
+
+ // create root types:
+ TypeDefinition cmisType = InMemoryDocumentTypeDefinition.getRootDocumentType();
+ typesList.add(cmisType);
+
+ cmisType = InMemoryFolderTypeDefinition.getRootFolderType();
+ typesList.add(cmisType);
+
+// cmisType = RelationshipTypeDefinition.getRootRelationshipType();
+// typesList.add(cmisType);
+//
+// cmisType = PolicyTypeDefinition.getRootPolicyType();
+// typesList.add(cmisType);
+
+ return typesList;
+ }
+
+ /**
+ * create root types and a collection of sample types
+ *
+ * @return typesMap map filled with created types
+ */
+ static public List<TypeDefinition> createDefaultTypes() {
+ List<TypeDefinition> typesList = createCmisDefaultTypes();
+
+ return typesList;
+ }
+
+ public static void setBasicPropertyDefinitions(
+ Map<String, PropertyDefinition<?>> propertyDefinitions) {
+
+ PropertyStringDefinitionImpl propS = PropertyCreationHelper.createStringDefinition(
+ PropertyIds.CMIS_NAME, "CMIS Name Property");
+ propS.setUpdatability(Updatability.READWRITE);
+ propertyDefinitions.put(propS.getId(), propS);
+
+ PropertyIdDefinitionImpl propId = PropertyCreationHelper.createIdDefinition(
+ PropertyIds.CMIS_OBJECT_ID, "CMIS Object Id Property");
+ propId.setUpdatability(Updatability.READONLY);
+ propertyDefinitions.put(propId.getId(), propId);
+
+ propId = PropertyCreationHelper.createIdDefinition(
+ PropertyIds.CMIS_OBJECT_TYPE_ID, "CMIS Object Type Id Property");
+ propId.setUpdatability(Updatability.ONCREATE);
+ propId.setIsRequired(true);
+ propertyDefinitions.put(propId.getId(), propId);
+
+ propId = PropertyCreationHelper.createIdDefinition(
+ PropertyIds.CMIS_BASE_TYPE_ID, "CMIS Base Type Id Property");
+ propId.setUpdatability(Updatability.READONLY);
+ propertyDefinitions.put(propId.getId(), propId);
+
+ propS = PropertyCreationHelper.createStringDefinition(
+ PropertyIds.CMIS_CREATED_BY, "CMIS Created By Property");
+ propS.setUpdatability(Updatability.READONLY);
+ propertyDefinitions.put(propS.getId(), propS);
+
+ PropertyDateTimeDefinitionImpl propD = PropertyCreationHelper.createDateTimeDefinition(
+ PropertyIds.CMIS_CREATION_DATE, "CMIS Creation Date Property");
+ propD.setUpdatability(Updatability.READONLY);
+ propertyDefinitions.put(propD.getId(), propD);
+
+ propS = PropertyCreationHelper.createStringDefinition(
+ PropertyIds.CMIS_LAST_MODIFIED_BY, "CMIS Last Modified By Property");
+ propS.setUpdatability(Updatability.READONLY);
+ propertyDefinitions.put(propS.getId(), propS);
+
+ propD = PropertyCreationHelper.createDateTimeDefinition(
+ PropertyIds.CMIS_LAST_MODIFICATION_DATE, "CMIS Last Modification Date Property");
+ propD.setUpdatability(Updatability.READONLY);
+ propertyDefinitions.put(propD.getId(), propD);
+
+ propS = PropertyCreationHelper.createStringDefinition(
+ PropertyIds.CMIS_CHANGE_TOKEN, "CMIS Change Token Property");
+ propS.setUpdatability(Updatability.READONLY);
+ propertyDefinitions.put(propS.getId(), propS);
+ }
+
+ public static void setBasicDocumentPropertyDefinitions(
+ Map<String, PropertyDefinition<?>> propertyDefinitions) {
+
+ setBasicPropertyDefinitions(propertyDefinitions);
+ PropertyBooleanDefinitionImpl propB = PropertyCreationHelper.createBooleanDefinition(
+ PropertyIds.CMIS_IS_IMMUTABLE, "CMIS Is Immutable Property");
+ propB.setUpdatability(Updatability.READONLY);
+ propertyDefinitions.put(propB.getId(), propB);
+
+ propB = PropertyCreationHelper.createBooleanDefinition(
+ PropertyIds.CMIS_IS_LATEST_VERSION, "CMIS Is Latest Version Property");
+ propB.setUpdatability(Updatability.READONLY);
+ propertyDefinitions.put(propB.getId(), propB);
+
+ propB = PropertyCreationHelper.createBooleanDefinition(
+ PropertyIds.CMIS_IS_MAJOR_VERSION, "CMIS Is Major Version Property");
+ propB.setUpdatability(Updatability.READONLY);
+ propertyDefinitions.put(propB.getId(), propB);
+
+ propB = PropertyCreationHelper.createBooleanDefinition(
+ PropertyIds.CMIS_IS_LATEST_MAJOR_VERSION, "CMIS Is Latest Major Version Property");
+ propB.setUpdatability(Updatability.READONLY);
+ propertyDefinitions.put(propB.getId(), propB);
+
+ PropertyStringDefinitionImpl propS = PropertyCreationHelper.createStringDefinition(
+ PropertyIds.CMIS_VERSION_LABEL, "CMIS Version Label Property");
+ propS.setUpdatability(Updatability.READONLY);
+ propertyDefinitions.put(propS.getId(), propS);
+
+ PropertyIdDefinitionImpl propId = PropertyCreationHelper.createIdDefinition(
+ PropertyIds.CMIS_VERSION_SERIES_ID, "CMIS Version Series Id Property");
+ propId.setUpdatability(Updatability.READONLY);
+ propertyDefinitions.put(propId.getId(), propId);
+
+ propB = PropertyCreationHelper.createBooleanDefinition(
+ PropertyIds.CMIS_IS_VERSION_SERIES_CHECKED_OUT, "CMIS Is Version Series Checked Out Property");
+ propB.setUpdatability(Updatability.READONLY);
+ propertyDefinitions.put(propB.getId(), propS);
+
+ propS = PropertyCreationHelper.createStringDefinition(
+ PropertyIds.CMIS_VERSION_SERIES_CHECKED_OUT_BY, "CMIS Version Series Checked Out By Property");
+ propS.setUpdatability(Updatability.READONLY);
+ propertyDefinitions.put(propS.getId(), propS);
+
+ propId = PropertyCreationHelper.createIdDefinition(
+ PropertyIds.CMIS_VERSION_SERIES_CHECKED_OUT_ID, "CMIS Version Series Checked Out Id Property");
+ propId.setUpdatability(Updatability.READONLY);
+ propertyDefinitions.put(propId.getId(), propId);
+
+ propS = PropertyCreationHelper.createStringDefinition(
+ PropertyIds.CMIS_CHECKIN_COMMENT, "CMIS Checkin Comment Property");
+ propId.setUpdatability(Updatability.READONLY); // Note: spec says read-only, because not set as property
+ propertyDefinitions.put(propS.getId(), propS);
+
+ PropertyIntegerDefinitionImpl propI= PropertyCreationHelper.createIntegerDefinition(
+ PropertyIds.CMIS_CONTENT_STREAM_LENGTH, "CMIS Content Stream Length Property");
+ propI.setUpdatability(Updatability.READONLY);
+ propertyDefinitions.put(propI.getId(), propI);
+
+ propS = PropertyCreationHelper.createStringDefinition(
+ PropertyIds.CMIS_CONTENT_STREAM_MIME_TYPE, "CMIS Content Stream Mime Type Property");
+ propS.setUpdatability(Updatability.READONLY);
+ propertyDefinitions.put(propS.getId(), propS);
+
+ propS = PropertyCreationHelper.createStringDefinition(
+ PropertyIds.CMIS_CONTENT_STREAM_FILE_NAME, "CMIS Content Stream File Name Property");
+ propertyDefinitions.put(propS.getId(), propS);
+
+ propId = PropertyCreationHelper.createIdDefinition(
+ PropertyIds.CMIS_CONTENT_STREAM_ID, "CMIS Stream Id Property");
+ propId.setUpdatability(Updatability.READONLY);
+ propertyDefinitions.put(propId.getId(), propId);
+
+
+ }
+
+ public static void setBasicFolderPropertyDefinitions(
+ Map<String, PropertyDefinition<?>> propertyDefinitions) {
+
+ setBasicPropertyDefinitions(propertyDefinitions);
+ PropertyIdDefinitionImpl propId = PropertyCreationHelper.createIdDefinition(
+ PropertyIds.CMIS_PARENT_ID, "CMIS Parent Id Property");
+ propId.setUpdatability(Updatability.READONLY);
+ propertyDefinitions.put(propId.getId(), propId);
+
+ propId = PropertyCreationHelper.createIdDefinition(
+ PropertyIds.CMIS_ALLOWED_CHILD_OBJECT_TYPE_IDS, "CMIS Allowed Childe Object Type Ids Property");
+ propId.setUpdatability(Updatability.READONLY);
+ propId.setCardinality(Cardinality.MULTI);
+ propertyDefinitions.put(propId.getId(), propId);
+
+ PropertyStringDefinitionImpl propS = PropertyCreationHelper.createStringDefinition(
+ PropertyIds.CMIS_PATH, "CMIS Path Property");
+ propId.setUpdatability(Updatability.READONLY);
+ propertyDefinitions.put(propS.getId(), propS);
+
+ }
+
+ public static void setBasicPolicyPropertyDefinitions(
+ Map<String, PropertyDefinition<?>> propertyDefinitions) {
+
+ setBasicPropertyDefinitions(propertyDefinitions);
+ PropertyStringDefinitionImpl propS = PropertyCreationHelper.createStringDefinition(
+ PropertyIds.CMIS_POLICY_TEXT, "CMIS Policy Text Property");
+ propS.setIsRequired(true);
+ propertyDefinitions.put(propS.getId(), propS);
+ }
+
+ public static void setBasicRelationshipPropertyDefinitions(
+ Map<String, PropertyDefinition<?>> propertyDefinitions) {
+
+ setBasicPropertyDefinitions(propertyDefinitions);
+ PropertyIdDefinitionImpl propId = PropertyCreationHelper.createIdDefinition(
+ PropertyIds.CMIS_SOURCE_ID, "CMIS Source Id Property");
+ propId.setIsRequired(true);
+ propertyDefinitions.put(propId.getId(), propId);
+
+ propId = PropertyCreationHelper.createIdDefinition(
+ PropertyIds.CMIS_TARGET_ID, "CMIS Target Id Property");
+ propId.setIsRequired(true);
+ propertyDefinitions.put(propId.getId(), propId);
+ }
+
+ public static void mergePropertyDefinitions(Map<String, PropertyDefinition<?>> existingPpropertyDefinitions, Map<String, PropertyDefinition<?>> newPropertyDefinitions) {
+ for (String propId : newPropertyDefinitions.keySet()) {
+ if (existingPpropertyDefinitions.containsKey(propId))
+ throw new RuntimeException("You can't set a property with id " + propId
+ + ". This property id already exists already or exists in supertype");
+ }
+ existingPpropertyDefinitions.putAll(newPropertyDefinitions);
+ }
+
+}
Propchange: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/types/DocumentTypeCreationHelper.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/types/InMemoryDocumentTypeDefinition.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/types/InMemoryDocumentTypeDefinition.java?rev=910572&view=auto
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/types/InMemoryDocumentTypeDefinition.java (added)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/types/InMemoryDocumentTypeDefinition.java Tue Feb 16 16:03:38 2010
@@ -0,0 +1,114 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.opencmis.inmemory.types;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.opencmis.commons.api.PropertyDefinition;
+import org.apache.opencmis.commons.enums.BaseObjectTypeIds;
+import org.apache.opencmis.commons.enums.ContentStreamAllowed;
+import org.apache.opencmis.commons.impl.dataobjects.DocumentTypeDefinitionImpl;
+import org.apache.opencmis.inmemory.NameValidator;
+
+/**
+ * A small convenience class simplifying document type creation
+ *
+ */
+
+public class InMemoryDocumentTypeDefinition extends DocumentTypeDefinitionImpl {
+
+ private static final long serialVersionUID = 1L;
+ private static InMemoryDocumentTypeDefinition DOCUMENT_TYPE = new InMemoryDocumentTypeDefinition();
+
+ public static InMemoryDocumentTypeDefinition getRootDocumentType() {
+ return DOCUMENT_TYPE;
+ }
+
+ /* This constructor is just for creating the root document */
+ public InMemoryDocumentTypeDefinition() {
+ init(BaseObjectTypeIds.CMIS_DOCUMENT.value(), "CMIS Document");
+ setParentId(null);
+ // set base properties
+ Map<String, PropertyDefinition<?>> props = getPropertyDefinitions();
+ DocumentTypeCreationHelper.setBasicDocumentPropertyDefinitions(props);
+ }
+
+ public InMemoryDocumentTypeDefinition(String id, String displayName) {
+ init(id, displayName);
+ setParentId(DOCUMENT_TYPE.getId());
+ }
+
+ public InMemoryDocumentTypeDefinition(String id, String displayName, InMemoryDocumentTypeDefinition parentType) {
+ // get root type
+ init(id, displayName);
+ if (parentType != null)
+ setBaseId(parentType.getBaseId());
+ else
+ throw new IllegalArgumentException(
+ "Must provide a parent type when creating a document type definition");
+ setParentId(parentType.getId());
+ }
+
+ /*
+ * Set the property definitions for this type. The parameter propertyDefinitions should only
+ * contain the custom property definitions for this type. The standard property definitions are
+ * added automatically.
+ * @see org.apache.opencmis.commons.impl.dataobjects.AbstractTypeDefinition#setPropertyDefinitions(java.util.Map)
+ */
+ public void addCustomPropertyDefinitions(Map<String, PropertyDefinition<?>> propertyDefinitions) {
+ DocumentTypeCreationHelper.mergePropertyDefinitions(getPropertyDefinitions(), propertyDefinitions);
+ }
+
+// public void setProperties() {
+// Map<String, PropertyDefinition<?>> propertyDefinitions = new HashMap<String, PropertyDefinition<?>>();
+// this.setPropertyDefinitions(propertyDefinitions);
+// }
+
+ private void init(String id, String displayName) {
+ if (!NameValidator.isValidId(id))
+ throw new IllegalArgumentException(NameValidator.ERROR_ILLEGAL_ID);
+
+ setBaseId(BaseObjectTypeIds.CMIS_DOCUMENT);
+ setId(id);
+ if (displayName == null)
+ displayName = '#' + id + '#';
+ setDisplayName(displayName);
+ // create some suitable defaults for convenience
+ setDescription("Description of " + getDisplayName() + " Type");
+ setLocalName(id);
+ setLocalNamespace("local");
+ setQueryName(id);
+ setIsControllableAcl(false);
+ setIsControllablePolicy(false);
+ setIsCreatable(true);
+ setIsFileable(true);
+ setIsFulltextIndexed(false);
+ setIsIncludedInSupertypeQuery(true);
+ setIsQueryable(false);
+
+ Map<String, PropertyDefinition<?>> props = new HashMap<String, PropertyDefinition<?>>();
+ setPropertyDefinitions(props); // set initial empty set of properties
+
+ // document specifics:
+ setContentStreamAllowed(ContentStreamAllowed.ALLOWED);
+ setIsVersionable(false);
+ }
+}
Propchange: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/types/InMemoryDocumentTypeDefinition.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/types/InMemoryFolderTypeDefinition.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/types/InMemoryFolderTypeDefinition.java?rev=910572&view=auto
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/types/InMemoryFolderTypeDefinition.java (added)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/types/InMemoryFolderTypeDefinition.java Tue Feb 16 16:03:38 2010
@@ -0,0 +1,99 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.opencmis.inmemory.types;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.opencmis.commons.api.PropertyDefinition;
+import org.apache.opencmis.commons.enums.BaseObjectTypeIds;
+import org.apache.opencmis.commons.impl.dataobjects.FolderTypeDefinitionImpl;
+import org.apache.opencmis.inmemory.NameValidator;
+
+public class InMemoryFolderTypeDefinition extends FolderTypeDefinitionImpl {
+
+ private static final long serialVersionUID = 1L;
+ private static InMemoryFolderTypeDefinition FOLDER_TYPE = new InMemoryFolderTypeDefinition();
+
+ public static InMemoryFolderTypeDefinition getRootFolderType() {
+ return FOLDER_TYPE;
+ }
+
+ /* This constructor is just for creating the root document */
+ public InMemoryFolderTypeDefinition() {
+ init(BaseObjectTypeIds.CMIS_FOLDER.value(), "CMIS Folder");
+ setParentId(null);
+ // set base properties
+ Map<String, PropertyDefinition<?>> props = getPropertyDefinitions();
+ DocumentTypeCreationHelper.setBasicFolderPropertyDefinitions(props);
+ }
+
+ public InMemoryFolderTypeDefinition(String id, String displayName) {
+ init(id, displayName);
+ setParentId(FOLDER_TYPE.getId());
+ }
+
+ public InMemoryFolderTypeDefinition(String id, String displayName, InMemoryFolderTypeDefinition parentType) {
+ // get root type
+ init(id, displayName);
+ if (parentType != null)
+ setBaseId(parentType.getBaseId());
+ else
+ throw new IllegalArgumentException(
+ "Must provide a parent type when creating a folder type definition");
+ setParentId(parentType.getId());
+ }
+
+ /*
+ * Set the property definitions for this type. The parameter propertyDefinitions should only
+ * contain the custom property definitions for this type. The standard property definitions are
+ * added automatically.
+ * @see org.apache.opencmis.commons.impl.dataobjects.AbstractTypeDefinition#setPropertyDefinitions(java.util.Map)
+ */
+ public void addCustomPropertyDefinitions(Map<String, PropertyDefinition<?>> propertyDefinitions) {
+ DocumentTypeCreationHelper.mergePropertyDefinitions(getPropertyDefinitions(), propertyDefinitions);
+ }
+
+ private void init(String id, String displayName) {
+ if (!NameValidator.isValidId(id))
+ throw new IllegalArgumentException(NameValidator.ERROR_ILLEGAL_NAME);
+
+ setBaseId(BaseObjectTypeIds.CMIS_FOLDER);
+ setId(id);
+ if (displayName == null)
+ displayName = '#' + id + '#';
+ setDisplayName(displayName);
+ // create some suitable defaults for convenience
+ setDescription("Description of " + getDisplayName() + " Type");
+ setLocalName(id);
+ setLocalNamespace("local");
+ setQueryName(id);
+ setIsControllableAcl(false);
+ setIsControllablePolicy(false);
+ setIsCreatable(true);
+ setIsFileable(true);
+ setIsFulltextIndexed(false);
+ setIsIncludedInSupertypeQuery(true);
+ setIsQueryable(false);
+
+ Map<String, PropertyDefinition<?>> props = new HashMap<String, PropertyDefinition<?>>();
+ setPropertyDefinitions(props); // set initial empty set of properties
+ }
+}
Propchange: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/types/InMemoryFolderTypeDefinition.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/types/InMemoryPolicyTypeDefinition.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/types/InMemoryPolicyTypeDefinition.java?rev=910572&view=auto
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/types/InMemoryPolicyTypeDefinition.java (added)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/types/InMemoryPolicyTypeDefinition.java Tue Feb 16 16:03:38 2010
@@ -0,0 +1,102 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.opencmis.inmemory.types;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.opencmis.commons.api.PropertyDefinition;
+import org.apache.opencmis.commons.enums.BaseObjectTypeIds;
+import org.apache.opencmis.commons.impl.dataobjects.PolicyTypeDefinitionImpl;
+import org.apache.opencmis.inmemory.NameValidator;
+
+public class InMemoryPolicyTypeDefinition extends PolicyTypeDefinitionImpl {
+
+ private static final long serialVersionUID = 1L;
+ private static InMemoryPolicyTypeDefinition POLICY_TYPE = new InMemoryPolicyTypeDefinition();
+
+ public static InMemoryPolicyTypeDefinition getRootPolicyType() {
+ return POLICY_TYPE;
+ }
+
+ /* This constructor is just for creating the root document */
+ public InMemoryPolicyTypeDefinition() {
+ init(BaseObjectTypeIds.CMIS_POLICY.value(), "CMIS Policy");
+ setParentId(null);
+
+ Map<String, PropertyDefinition<?>> props = getPropertyDefinitions();
+ DocumentTypeCreationHelper.setBasicPolicyPropertyDefinitions(props);
+ }
+
+ public InMemoryPolicyTypeDefinition(String id, String displayName) {
+ init(id, displayName);
+ setParentId(POLICY_TYPE.getId());
+ }
+
+ public InMemoryPolicyTypeDefinition(String id, String displayName, InMemoryPolicyTypeDefinition parentType) {
+ // get root type
+ init(id, displayName);
+ if (parentType != null)
+ setBaseId(parentType.getBaseId());
+ else
+ throw new IllegalArgumentException(
+ "Must provide a parent type when creating a policy definition");
+ setParentId(parentType.getId());
+ }
+
+ /*
+ * Set the property definitions for this type. The parameter propertyDefinitions should only
+ * contain the custom property definitions for this type. The standard property definitions are
+ * added automatically.
+ * @see org.apache.opencmis.commons.impl.dataobjects.AbstractTypeDefinition#setPropertyDefinitions(java.util.Map)
+ */
+ public void addCustomPropertyDefinitions(Map<String, PropertyDefinition<?>> propertyDefinitions) {
+ DocumentTypeCreationHelper.mergePropertyDefinitions(getPropertyDefinitions(), propertyDefinitions);
+ }
+
+ private void init(String id, String displayName) {
+ if (!NameValidator.isValidId(id))
+ throw new IllegalArgumentException(NameValidator.ERROR_ILLEGAL_NAME);
+
+ setBaseId(BaseObjectTypeIds.CMIS_POLICY);
+ setId(id);
+ if (displayName == null)
+ displayName = '#' + id + '#';
+ setDisplayName(displayName);
+ // create some suitable defaults for convenience
+ setDescription("Description of " + getDisplayName() + " Type");
+ setLocalName(id);
+ setLocalNamespace("local");
+ setQueryName(id);
+ setIsControllableAcl(false);
+ setIsControllablePolicy(false);
+ setIsCreatable(true);
+ setIsFileable(true);
+ setIsFulltextIndexed(false);
+ setIsIncludedInSupertypeQuery(true);
+ setIsQueryable(false);
+
+ // set base properties
+ Map<String, PropertyDefinition<?>> props = new HashMap<String, PropertyDefinition<?>>();
+ setPropertyDefinitions(props); // set initial empty set of properties
+
+ // policy specifics: none
+ }
+}
Propchange: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/types/InMemoryPolicyTypeDefinition.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/types/InMemoryRelationshipTypeDefinition.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/types/InMemoryRelationshipTypeDefinition.java?rev=910572&view=auto
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/types/InMemoryRelationshipTypeDefinition.java (added)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/types/InMemoryRelationshipTypeDefinition.java Tue Feb 16 16:03:38 2010
@@ -0,0 +1,106 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.opencmis.inmemory.types;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.opencmis.commons.api.PropertyDefinition;
+import org.apache.opencmis.commons.enums.BaseObjectTypeIds;
+import org.apache.opencmis.commons.impl.dataobjects.RelationshipTypeDefinitionImpl;
+import org.apache.opencmis.inmemory.NameValidator;
+
+public class InMemoryRelationshipTypeDefinition extends RelationshipTypeDefinitionImpl {
+
+ private static final long serialVersionUID = 1L;
+ private static InMemoryRelationshipTypeDefinition RELATIONSHIP_TYPE = new InMemoryRelationshipTypeDefinition();
+
+ public static InMemoryRelationshipTypeDefinition getRootRelationshipType() {
+ return RELATIONSHIP_TYPE;
+ }
+
+ /* This constructor is just for creating the root document */
+ public InMemoryRelationshipTypeDefinition() {
+ init(BaseObjectTypeIds.CMIS_RELATIONSHIP.value(), "CMIS Relation");
+ setParentId(null);
+
+ Map<String, PropertyDefinition<?>> props = getPropertyDefinitions();
+ DocumentTypeCreationHelper.setBasicRelationshipPropertyDefinitions(props);
+ }
+
+ public InMemoryRelationshipTypeDefinition(String id, String displayName) {
+ init(id, displayName);
+ setParentId(RELATIONSHIP_TYPE.getId());
+ }
+
+ public InMemoryRelationshipTypeDefinition(String id, String displayName,
+ InMemoryRelationshipTypeDefinition parentType) {
+ // get root type
+ init(id, displayName);
+ if (parentType != null)
+ setBaseId(parentType.getBaseId());
+ else
+ throw new IllegalArgumentException(
+ "Must provide a parent type when creating a relationship definition");
+ setParentId(parentType.getId());
+ }
+
+ /*
+ * Set the property definitions for this type. The parameter propertyDefinitions should only
+ * contain the custom property definitions for this type. The standard property definitions are
+ * added automatically.
+ * @see org.apache.opencmis.commons.impl.dataobjects.AbstractTypeDefinition#setPropertyDefinitions(java.util.Map)
+ */
+ public void addCustomPropertyDefinitions(Map<String, PropertyDefinition<?>> propertyDefinitions) {
+ DocumentTypeCreationHelper.mergePropertyDefinitions(getPropertyDefinitions(), propertyDefinitions);
+ }
+
+ private void init(String id, String displayName) {
+ if (!NameValidator.isValidId(id))
+ throw new IllegalArgumentException(NameValidator.ERROR_ILLEGAL_NAME);
+
+ setBaseId(BaseObjectTypeIds.CMIS_RELATIONSHIP);
+ setId(id);
+ if (displayName == null)
+ displayName = '#' + id + '#';
+ setDisplayName(displayName);
+ // create some suitable defaults for convenience
+ setDescription("Description of " + getDisplayName() + " Type");
+ setLocalName(id);
+ setLocalNamespace("local");
+ setQueryName(id);
+ setIsControllableAcl(false);
+ setIsControllablePolicy(false);
+ setIsCreatable(true);
+ setIsFileable(true);
+ setIsFulltextIndexed(false);
+ setIsIncludedInSupertypeQuery(true);
+ setIsQueryable(false);
+
+ // relationship specifics
+ setAllowedSourceTypes(null);
+ setAllowedTargetTypes(null);
+
+ // set base properties
+ Map<String, PropertyDefinition<?>> props = new HashMap<String, PropertyDefinition<?>>();
+ setPropertyDefinitions(props); // set initial empty set of properties
+ }
+
+}
Propchange: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/types/InMemoryRelationshipTypeDefinition.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/types/PropertyCreationHelper.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/types/PropertyCreationHelper.java?rev=910572&view=auto
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/types/PropertyCreationHelper.java (added)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/types/PropertyCreationHelper.java Tue Feb 16 16:03:38 2010
@@ -0,0 +1,268 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.opencmis.inmemory.types;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.opencmis.commons.PropertyIds;
+import org.apache.opencmis.commons.api.Choice;
+import org.apache.opencmis.commons.api.ExtensionsData;
+import org.apache.opencmis.commons.api.TypeDefinitionContainer;
+import org.apache.opencmis.commons.api.TypeDefinition;
+import org.apache.opencmis.commons.enums.Cardinality;
+import org.apache.opencmis.commons.enums.IncludeRelationships;
+import org.apache.opencmis.commons.enums.PropertyType;
+import org.apache.opencmis.commons.enums.Updatability;
+import org.apache.opencmis.commons.exceptions.CmisObjectNotFoundException;
+import org.apache.opencmis.commons.impl.dataobjects.AbstractPropertyDefinition;
+import org.apache.opencmis.commons.impl.dataobjects.ChoiceImpl;
+import org.apache.opencmis.commons.impl.dataobjects.ObjectDataImpl;
+import org.apache.opencmis.commons.impl.dataobjects.PropertyBooleanDefinitionImpl;
+import org.apache.opencmis.commons.impl.dataobjects.PropertyDateTimeDefinitionImpl;
+import org.apache.opencmis.commons.impl.dataobjects.PropertyDecimalDefinitionImpl;
+import org.apache.opencmis.commons.impl.dataobjects.PropertyHtmlDefinitionImpl;
+import org.apache.opencmis.commons.impl.dataobjects.PropertyIdDefinitionImpl;
+import org.apache.opencmis.commons.impl.dataobjects.PropertyIntegerDefinitionImpl;
+import org.apache.opencmis.commons.impl.dataobjects.PropertyStringDefinitionImpl;
+import org.apache.opencmis.commons.impl.dataobjects.PropertyUriDefinitionImpl;
+import org.apache.opencmis.commons.provider.AllowableActionsData;
+import org.apache.opencmis.commons.provider.ObjectData;
+import org.apache.opencmis.commons.provider.PropertiesData;
+import org.apache.opencmis.commons.provider.PropertyData;
+import org.apache.opencmis.commons.provider.ProviderObjectFactory;
+import org.apache.opencmis.inmemory.DataObjectCreator;
+import org.apache.opencmis.inmemory.FilterParser;
+import org.apache.opencmis.inmemory.NameValidator;
+import org.apache.opencmis.inmemory.storedobj.api.StoreManager;
+import org.apache.opencmis.inmemory.storedobj.api.StoredObject;
+
+/**
+ * @author Jens
+ *
+ */
+
+public class PropertyCreationHelper {
+ private static Log log = LogFactory.getLog(PropertyCreationHelper.class);
+
+ public static PropertyBooleanDefinitionImpl createBooleanDefinition(String id, String displayName) {
+ PropertyBooleanDefinitionImpl prop = new PropertyBooleanDefinitionImpl();
+ createStandardDefinition(prop, id, PropertyType.BOOLEAN, displayName, Cardinality.SINGLE);
+ return prop;
+ }
+
+ public static PropertyBooleanDefinitionImpl createBooleanMultiDefinition(String id, String displayName) {
+ PropertyBooleanDefinitionImpl prop = new PropertyBooleanDefinitionImpl();
+ createStandardDefinition(prop, id, PropertyType.BOOLEAN, displayName, Cardinality.MULTI);
+ return prop;
+ }
+
+ public static PropertyDateTimeDefinitionImpl createDateTimeDefinition(String id, String displayName) {
+ PropertyDateTimeDefinitionImpl prop = new PropertyDateTimeDefinitionImpl();
+ createStandardDefinition(prop, id, PropertyType.DATETIME, displayName, Cardinality.SINGLE);
+ return prop;
+ }
+
+ public static PropertyDateTimeDefinitionImpl createDateTimeMultiDefinition(String id, String displayName) {
+ PropertyDateTimeDefinitionImpl prop = new PropertyDateTimeDefinitionImpl();
+ createStandardDefinition(prop, id, PropertyType.DATETIME, displayName, Cardinality.MULTI);
+ return prop;
+ }
+
+ public static PropertyDecimalDefinitionImpl createDecimalDefinition(String id, String displayName) {
+ PropertyDecimalDefinitionImpl prop = new PropertyDecimalDefinitionImpl();
+ createStandardDefinition(prop, id, PropertyType.DECIMAL, displayName, Cardinality.SINGLE);
+ return prop;
+ }
+
+ public static PropertyDecimalDefinitionImpl createDecimalMultiDefinition(String id, String displayName) {
+ PropertyDecimalDefinitionImpl prop = new PropertyDecimalDefinitionImpl();
+ createStandardDefinition(prop, id, PropertyType.DECIMAL, displayName, Cardinality.MULTI);
+ return prop;
+ }
+
+ public static PropertyHtmlDefinitionImpl createHtmlDefinition(String id, String displayName) {
+ PropertyHtmlDefinitionImpl prop = new PropertyHtmlDefinitionImpl();
+ createStandardDefinition(prop, id, PropertyType.HTML, displayName, Cardinality.SINGLE);
+ return prop;
+ }
+
+ public static PropertyHtmlDefinitionImpl createHtmlMultiDefinition(String id, String displayName) {
+ PropertyHtmlDefinitionImpl prop = new PropertyHtmlDefinitionImpl();
+ createStandardDefinition(prop, id, PropertyType.HTML, displayName, Cardinality.MULTI);
+ return prop;
+ }
+
+ public static PropertyIdDefinitionImpl createIdDefinition(String id, String displayName) {
+ PropertyIdDefinitionImpl prop = new PropertyIdDefinitionImpl();
+ createStandardDefinition(prop, id, PropertyType.ID, displayName, Cardinality.SINGLE);
+ return prop;
+ }
+
+ public static PropertyIdDefinitionImpl createIdMultiDefinition(String id, String displayName) {
+ PropertyIdDefinitionImpl prop = new PropertyIdDefinitionImpl();
+ createStandardDefinition(prop, id, PropertyType.ID, displayName, Cardinality.MULTI);
+ return prop;
+ }
+
+ public static PropertyIntegerDefinitionImpl createIntegerDefinition(String id, String displayName) {
+ PropertyIntegerDefinitionImpl prop = new PropertyIntegerDefinitionImpl();
+ createStandardDefinition(prop, id, PropertyType.INTEGER, displayName, Cardinality.SINGLE);
+ return prop;
+ }
+
+ public static PropertyIntegerDefinitionImpl createIntegerMultiDefinition(String id, String displayName) {
+ PropertyIntegerDefinitionImpl prop = new PropertyIntegerDefinitionImpl();
+ createStandardDefinition(prop, id, PropertyType.INTEGER, displayName, Cardinality.MULTI);
+ return prop;
+ }
+
+ public static PropertyStringDefinitionImpl createStringDefinition(String id, String displayName) {
+ PropertyStringDefinitionImpl prop = new PropertyStringDefinitionImpl();
+ createStandardDefinition(prop, id, PropertyType.STRING, displayName, Cardinality.SINGLE);
+ return prop;
+ }
+
+ public static PropertyStringDefinitionImpl createStringMultiDefinition(String id, String displayName) {
+ PropertyStringDefinitionImpl prop = new PropertyStringDefinitionImpl();
+ createStandardDefinition(prop, id, PropertyType.STRING, displayName, Cardinality.MULTI);
+ return prop;
+ }
+
+ public static PropertyUriDefinitionImpl createUriDefinition(String id, String displayName) {
+ PropertyUriDefinitionImpl prop = new PropertyUriDefinitionImpl();
+ createStandardDefinition(prop, id, PropertyType.URI, displayName, Cardinality.SINGLE);
+ return prop;
+ }
+
+ public static PropertyUriDefinitionImpl createUriMultiDefinition(String id, String displayName) {
+ PropertyUriDefinitionImpl prop = new PropertyUriDefinitionImpl();
+ createStandardDefinition(prop, id, PropertyType.URI, displayName, Cardinality.MULTI);
+ return prop;
+ }
+
+
+ public static<T> void addElemToPicklist(AbstractPropertyDefinition<T> prop, T value) {
+ List<Choice<T>> choiceList = prop.getChoices();
+ if (choiceList == null)
+ choiceList = new ArrayList<Choice<T>>();
+
+ ChoiceImpl<T> elem = new ChoiceImpl<T>();
+ elem.setValue( Collections.singletonList(value));
+ choiceList.add(elem);
+ }
+
+ public static<T> void setDefaultValue(AbstractPropertyDefinition<T> prop , T defVal) {
+ prop.setDefaultValue(Collections.singletonList(defVal));
+ }
+
+
+ // internal helpers
+ private static void createStandardDefinition(AbstractPropertyDefinition<?> prop,
+ String id, PropertyType propType, String displayName, Cardinality card) {
+
+ if (!NameValidator.isValidId(id))
+ if (!NameValidator.isValidId(id))
+ throw new IllegalArgumentException(NameValidator.ERROR_ILLEGAL_NAME);
+
+ prop.setId(id);
+ if (displayName == null)
+ prop.setDisplayName("Sample " + prop.getId() + " boolean property");
+ else
+ prop.setDisplayName(displayName);
+ prop.setLocalName(id);
+ prop.setLocalNamespace("local");
+ prop.setQueryName(id);
+ prop.setIsInherited(false);
+ prop.setCardinality(card);
+ prop.setIsOpenChoice(false);
+ prop.setIsQueryable(true);
+ prop.setIsRequired(false);
+ prop.setPropertyType(propType);
+ prop.setUpdatability(Updatability.READWRITE);
+ }
+
+ public static PropertiesData getPropertiesFromObject(String repositoryId, StoredObject so,
+ StoreManager storeManager, List<String> requestedIds) {
+ // build properties collection
+
+ ProviderObjectFactory objectFactory = storeManager.getObjectFactory();
+ List<PropertyData<?>> properties = new ArrayList<PropertyData<?>>();
+ so.fillProperties(properties, objectFactory, requestedIds);
+
+ String typeId = so.getTypeId();
+ // (String) props.getProperties().get(PropertyIds.CMIS_OBJECT_TYPE_ID).getFirstValue();
+ if (FilterParser.isContainedInFilter(PropertyIds.CMIS_BASE_TYPE_ID, requestedIds)) {
+ TypeDefinitionContainer typeDefC = storeManager.getTypeById(repositoryId, typeId);
+ if (typeDefC == null) {
+ log.warn("getPropertiesFromObject(), cannot get type definition, a type with id " + typeId
+ + " is unknown");
+ } else {
+ TypeDefinition typeDef = typeDefC.getTypeDefinition();
+ String baseTypeId = typeDef.getBaseId().value();
+ properties.add(objectFactory.createPropertyIdData(PropertyIds.CMIS_BASE_TYPE_ID, baseTypeId));
+ }
+ }
+ PropertiesData props = objectFactory.createPropertiesData(properties);
+ return props;
+ }
+
+ public static ObjectData getObjectData(StoreManager sm, StoredObject so, String filter,
+ Boolean includeAllowableActions, IncludeRelationships includeRelationships,
+ String renditionFilter, Boolean includePolicyIds, Boolean includeACL, ExtensionsData extension) {
+
+ ObjectDataImpl od = new ObjectDataImpl();
+
+ if (so == null)
+ throw new CmisObjectNotFoundException("Illegal object id: null");
+
+ // build properties collection
+ List<String> requestedIds = FilterParser.getRequestedIdsFromFilter(filter);
+ PropertiesData props = getPropertiesFromObject(so.getRepositoryId(), so,
+ sm, requestedIds);
+
+ // fill output object
+ if (null != includeAllowableActions && includeAllowableActions) {
+ AllowableActionsData allowableActions = DataObjectCreator.fillAllowableActions(so);
+ od.setAllowableActions(allowableActions);
+ }
+ if (null != includeACL && includeACL)
+ od.setAcl(null);
+ od.setIsExactAcl(true);
+
+ if (null != includePolicyIds && includePolicyIds)
+ od.setPolicyIds(DataObjectCreator.fillPolicyIds(so));
+
+ if (null != includeRelationships && includeRelationships != IncludeRelationships.NONE)
+ od.setRelationships(DataObjectCreator.fillRelationships(includeRelationships, so));
+
+ if (renditionFilter != null && renditionFilter.length() > 0)
+ od.setRenditions(DataObjectCreator.fillRenditions(so));
+
+ od.setProperties(props);
+
+ // Note: do not set change event info for this call
+ log.debug("stop getObject()");
+ return od;
+ }
+
+}
Propchange: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/java/org/apache/opencmis/inmemory/types/PropertyCreationHelper.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/webapp/WEB-INF/classes/repository.properties
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/webapp/WEB-INF/classes/repository.properties?rev=910572&view=auto
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/webapp/WEB-INF/classes/repository.properties (added)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/webapp/WEB-INF/classes/repository.properties Tue Feb 16 16:03:38 2010
@@ -0,0 +1,33 @@
+class=org.apache.opencmis.inmemory.server.ServiceFactory
+
+repository.id=dummy-rep
+repository.name=Dummy Repository
+
+# In Memory Settings
+InMemoryServer.RepositoryId=A1
+# InMemoryServer.RepositoryInfoCreatorClass=org.apache.opencmis.client.provider.inmemory.UnitTestRepositoryInfo
+InMemoryServer.User=dummyuser
+InMemoryServer.Password=dummysecret
+InMemoryServer.TypesCreatorClass=org.apache.opencmis.inmemory.types.DefaultTypeSystemCreator
+
+# settings for init repository with data
+ # enable or disable
+RepositoryFiller.Enable=true
+ # Type id of documents that are created
+RepositoryFiller.DocumentTypeId=ComplexType
+ # Type id of folders that are created
+RepositoryFiller.FolderTypeId=cmis:folder
+ # Number of documents created per folder
+RepositoryFiller.DocsPerFolder=3
+ # Number of folders created per folder
+RepositoryFiller.FolderPerFolder=2
+ # number of folder levels created (depth of hierarchy)
+RepositoryFiller.Depth=3
+ # Size of content for documents (0=do not create content), default=0
+RepositoryFiller.ContentSizeInKB=32
+ # properties to set for a document
+RepositoryFiller.DocumentProperty.0=StringProp
+#RepositoryFiller.DocumentProperty.1=StringPropMV
+ # properties to set for a folder
+#RepositoryFiller.FolderProperty.0=StringFolderProp
+
\ No newline at end of file
Propchange: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/main/webapp/WEB-INF/classes/repository.properties
------------------------------------------------------------------------------
svn:eol-style = native
Added: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/FolderTest.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/FolderTest.java?rev=910572&view=auto
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/FolderTest.java (added)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/FolderTest.java Tue Feb 16 16:03:38 2010
@@ -0,0 +1,173 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.opencmis.inmemory;
+
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.apache.opencmis.inmemory.storedobj.api.Folder;
+import org.apache.opencmis.inmemory.storedobj.api.ObjectStore;
+import org.apache.opencmis.inmemory.storedobj.api.Path;
+import org.apache.opencmis.inmemory.storedobj.api.StoredObject;
+import org.apache.opencmis.inmemory.storedobj.impl.FolderImpl;
+import org.apache.opencmis.inmemory.storedobj.impl.ObjectStoreImpl;
+
+/**
+ * @author <a href="mailto:fmueller@opentext.com">Florian Müller</a>
+ * @author Jens
+ */
+
+/* Some test directly against the in-memory folder object
+ *
+ */
+
+public class FolderTest extends TestCase {
+
+ private ObjectStore fStore;
+ private FolderImpl fRoot;
+ private FolderImpl f1;
+ private FolderImpl f2;
+ private FolderImpl f3;
+ private FolderImpl f4;
+ private FolderImpl f11;
+ private static final String TEST_REPOSITORY_ID = "TestRepositoryId";
+
+ protected void setUp() throws Exception {
+ fStore = new ObjectStoreImpl(TEST_REPOSITORY_ID);
+ createFolders();
+ }
+
+ public void testCreatAndGetFolders() {
+ try {
+ Folder childFolder = fStore.createFolder("Folder 1");
+ fRoot.addChildFolder(childFolder);
+ fail("Should throw exception if folder already exists.");
+ } catch (Exception e) {
+ }
+ assertEquals(f1.getName(), "Folder 1");
+ assertEquals(f11.getName(), "Folder 1.1");
+ assertNull(fRoot.getParent());
+ assertEquals(fRoot, f1.getParent());
+ assertEquals(f1, f11.getParent());
+ assertEquals(Path.PATH_SEPARATOR, fRoot.getPath());
+ assertEquals("/Folder 1", f1.getPath());
+ assertEquals("/Folder 1/Folder 1.1", f11.getPath());
+ StoredObject fTest = fStore.getObjectByPath("/");
+ assertEquals(fRoot, fTest);
+ fTest = fStore.getObjectByPath("/Folder 1");
+ assertEquals(f1, fTest);
+ fTest = fStore.getObjectByPath("/Folder 1/Folder 1.1");
+ assertEquals(f11, fTest);
+ List<StoredObject> subFolders = fRoot.getChildren(-1, -1);
+ assertEquals(4, subFolders.size());
+ subFolders = f2.getChildren(-1, -1);
+ assertEquals(0, subFolders.size());
+ subFolders = f1.getChildren(-1, -1);
+ assertEquals(1, subFolders.size());
+ }
+
+ public void testRenameFolder() {
+ // rename top level folder
+ String newName = "Folder B";
+ String oldPath = f2.getPath();
+ f2.rename(newName);
+ assertEquals(f2.getName(), newName);
+ assertEquals(f2.getPath(), Path.PATH_SEPARATOR + newName);
+ assertNull(fStore.getObjectByPath(oldPath));
+ assertEquals(f2, fStore.getObjectByPath(Path.PATH_SEPARATOR + newName));
+ try {
+ f2.rename("Folder 3");
+ fail("Should not allow to rename a folder to an existing name");
+ } catch (Exception e) {
+ }
+
+ // rename sub folder
+ oldPath = f11.getPath();
+ f11.rename(newName);
+ assertEquals(f11.getName(), newName);
+ assertEquals(f11.getPath(), "/Folder 1/Folder B");
+ assertNull(fStore.getObjectByPath(oldPath));
+ assertEquals(f11, fStore.getObjectByPath("/Folder 1/Folder B"));
+ try {
+ f2.rename(newName);
+ fail("Should not allow to rename a folder to an existing name");
+ } catch (Exception e) {
+ }
+ try {
+ f2.rename("illegal/name");
+ fail("Should not allow to rename a folder to a name with illegal name");
+ } catch (Exception e) {
+ }
+
+ // rename root folder
+ try {
+ fRoot.rename("abc");
+ fail("Should not be possible to rename root folder");
+ } catch (Exception e) {
+ }
+ }
+
+ public void testMoveFolder() {
+ String oldPath = f1.getPath();
+ f1.move(f3);
+ assertNull(fStore.getObjectByPath(oldPath));
+ assertEquals(f1.getPath(), "/Folder 3/Folder 1");
+ assertEquals(f1, fStore.getObjectByPath("/Folder 3/Folder 1"));
+
+ f2.rename("Folder 1");
+ try {
+ f2.move(f3);
+ fail("Should not be possible to move folder to a folder that has a child with same name");
+ } catch (Exception e) {
+ }
+ }
+
+ public void testDeleteFolder() {
+ String oldPath = f2.getPath();
+ fStore.deleteObject(f2.getId());
+ assertNull(fStore.getObjectByPath(oldPath));
+
+ try {
+ fStore.deleteObject(f1.getId());
+ fail("Should not be possible to move folder that has children");
+ } catch (Exception e) {
+ }
+
+
+ }
+
+ private void createFolders() {
+ fRoot = (FolderImpl)fStore.getRootFolder();
+ f1 = (FolderImpl) fStore.createFolder("Folder 1");
+ fRoot.addChildFolder(f1);
+
+ f2 = (FolderImpl) fStore.createFolder("Folder 2");
+ fRoot.addChildFolder(f2);
+
+ f3 = (FolderImpl) fStore.createFolder("Folder 3");
+ fRoot.addChildFolder(f3);
+
+ f4 = (FolderImpl) fStore.createFolder("Folder 4");
+ fRoot.addChildFolder(f4);
+
+ f11 = (FolderImpl) fStore.createFolder("Folder 1.1");
+ f1.addChildFolder(f11);
+ }
+}
Propchange: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/FolderTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/NavigationServiceTest.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/NavigationServiceTest.java?rev=910572&view=auto
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/NavigationServiceTest.java (added)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/NavigationServiceTest.java Tue Feb 16 16:03:38 2010
@@ -0,0 +1,272 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.opencmis.inmemory;
+
+import java.math.BigInteger;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import junit.framework.TestCase;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.opencmis.client.provider.factory.CmisProviderFactory;
+import org.apache.opencmis.commons.PropertyIds;
+import org.apache.opencmis.commons.SessionParameter;
+import org.apache.opencmis.commons.enums.IncludeRelationships;
+import org.apache.opencmis.commons.exceptions.CmisInvalidArgumentException;
+import org.apache.opencmis.commons.provider.CmisProvider;
+import org.apache.opencmis.commons.provider.NavigationService;
+import org.apache.opencmis.commons.provider.ObjectData;
+import org.apache.opencmis.commons.provider.ObjectInFolderContainer;
+import org.apache.opencmis.commons.provider.ObjectInFolderData;
+import org.apache.opencmis.commons.provider.ObjectInFolderList;
+import org.apache.opencmis.commons.provider.ObjectService;
+import org.apache.opencmis.commons.provider.PropertiesData;
+import org.apache.opencmis.commons.provider.PropertyData;
+import org.apache.opencmis.commons.provider.ProviderObjectFactory;
+import org.apache.opencmis.commons.provider.RepositoryInfoData;
+import org.apache.opencmis.commons.provider.RepositoryService;
+import org.apache.opencmis.inmemory.ConfigConstants;
+import org.apache.opencmis.inmemory.ConfigMap;
+import org.apache.opencmis.inmemory.MapConfigReader;
+import org.apache.opencmis.inmemory.RepositoryServiceTest.UnitTestRepositoryInfo;
+import org.apache.opencmis.inmemory.clientprovider.CmisInMemorySpi;
+import org.apache.opencmis.inmemory.server.RuntimeContext;
+import org.apache.opencmis.inmemory.storedobj.impl.SessionConfigReader;
+import org.apache.opencmis.inmemory.types.InMemoryFolderTypeDefinition;
+import org.apache.opencmis.util.repository.ObjectGenerator;
+
+
+/**
+ * @author Jens
+ */
+public class NavigationServiceTest extends TestCase {
+ private static Log log = LogFactory.getLog(NavigationServiceTest.class);
+ private static final String REPOSITORY_ID = "UnitTestRepository";
+ private ProviderObjectFactory fFactory;
+ private CmisProvider fProvider;
+ private static final int NUM_ROOT_FOLDERS = 10;
+ private String fLevel1FolderId;
+ String fRootFolderId;
+ private String fRepositoryId;
+
+ protected void setUp() throws Exception {
+
+ Map<String, String> parameters = new HashMap<String, String>();
+ parameters.put(SessionParameter.BINDING_SPI_CLASS, CmisProviderFactory.BINDING_SPI_INMEMORY);
+ // attach repository info to the session:
+ parameters
+ .put(ConfigConstants.REPOSITORY_INFO_CREATOR_CLASS, UnitTestRepositoryInfo.class.getName());
+ parameters.put(ConfigConstants.REPOSITORY_ID, REPOSITORY_ID);
+
+ // get factory and create provider
+ CmisProviderFactory factory = CmisProviderFactory.newInstance();
+ fProvider = factory.createCmisProvider(parameters);
+ assertNotNull(fProvider);
+ fFactory = fProvider.getObjectFactory();
+ RepositoryService repSvc = fProvider.getRepositoryService();
+ RepositoryInfoData rep = repSvc.getRepositoryInfo(REPOSITORY_ID, null);
+ fRootFolderId = rep.getRootFolderId();
+ fRepositoryId = rep.getRepositoryId();
+ // Attach the CallContext to a thread local context that can be accessed from everywhere
+ ConfigMap cfgReader = new MapConfigReader(parameters);
+ RuntimeContext.getRuntimeConfig().attachCfg(cfgReader);
+ }
+
+ protected void tearDown() throws Exception {
+ }
+
+ public void testGetChildren() {
+ log.info("starting testGetChildren() ...");
+ createLevel1Folders();
+ NavigationService navSvc = fProvider.getNavigationService();
+
+ log.info("test getting all objects with getChildren");
+ BigInteger maxItems = BigInteger.valueOf(NUM_ROOT_FOLDERS *2);
+ BigInteger skipCount = BigInteger.valueOf(0);
+ ObjectInFolderList result = navSvc.getChildren(fRepositoryId, fRootFolderId, "*", null, false,
+ IncludeRelationships.NONE, null, true, maxItems, skipCount, null);
+ List<ObjectInFolderData> folders = result.getObjects();
+ log.info(" found " + folders.size() + " folders in getChildren()");
+ for (ObjectInFolderData folder : folders) {
+ log.info(" found folder id " + folder.getObject().getId() + " path segment "
+ + folder.getPathSegment());
+ }
+ assertEquals(NUM_ROOT_FOLDERS, folders.size());
+
+ log.info("test paging with getChildren");
+ maxItems = BigInteger.valueOf(3);
+ skipCount = BigInteger.valueOf(3);
+ result = navSvc.getChildren(fRepositoryId, fRootFolderId, "*", null, false,
+ IncludeRelationships.NONE, null, true, maxItems, skipCount, null);
+ folders = result.getObjects();
+ log.info(" found " + folders.size() + " folders in getChildren()");
+ for (ObjectInFolderData folder : folders) {
+ log.info(" found folder id " + folder.getObject().getId() + " path segment "
+ + folder.getPathSegment());
+ }
+ assertEquals(3, folders.size());
+ assertEquals("Folder 3", folders.get(0).getPathSegment());
+ log.info("... testGetChildren() finished.");
+ }
+
+ public void testGetFolderTree() {
+ log.info("starting testGetFolderTree() ...");
+ createFolderHierachy(3, 5);
+ //createLevel1Folders();
+ NavigationService navSvc = fProvider.getNavigationService();
+
+ log.info("test getting all objects with getFolderTree");
+ BigInteger depth = BigInteger.valueOf(-1);
+ Boolean includePathSegments = true;
+ String propertyFilter = "*";
+ String renditionFilter = null;
+ Boolean includeAllowableActions = false;
+ String objectId = fRootFolderId;
+
+ List<ObjectInFolderContainer> tree = navSvc.getFolderTree(fRepositoryId, objectId,
+ depth, propertyFilter, includeAllowableActions, IncludeRelationships.NONE, renditionFilter,
+ includePathSegments, null);
+
+ log.info("Descendants for object id " + objectId + " are: ");
+ for (ObjectInFolderContainer folder : tree) {
+ logFolderContainer(folder, 0);
+ }
+
+ log.info("... testGetFolderTree() finished.");
+ }
+
+ private void logFolderContainer(ObjectInFolderContainer folder, int depth) {
+ StringBuilder prefix = new StringBuilder();
+ for (int i=0; i<depth; i++)
+ prefix.append(" ");
+
+ log.info(prefix + "name: " + folder.getObject().getPathSegment());
+ List<ObjectInFolderContainer> children = folder.getChildren();
+ if (null != children) {
+ for (ObjectInFolderContainer child: children) {
+ logFolderContainer(child, depth+1);
+ }
+ }
+ }
+
+ public void testGetDescendants() {
+ log.info("starting testGetDescendants() ...");
+ final int numLevels = 3;
+ final int childrenPerLevel = 3;
+ int objCount = createFolderHierachy(numLevels, childrenPerLevel);
+ NavigationService navSvc = fProvider.getNavigationService();
+
+ log.info("test getting all objects with getDescendants");
+ List<ObjectInFolderContainer> result = navSvc.getDescendants(fRepositoryId, fRootFolderId, BigInteger.valueOf(-1),
+ "*", Boolean.TRUE, IncludeRelationships.NONE, null, Boolean.TRUE, null);
+
+ for (ObjectInFolderContainer obj: result) {
+ log.info(" found folder id " + obj.getObject().getObject().getId() + " path segment "
+ + obj.getObject().getPathSegment());
+ }
+ int sizeOfDescs = getSizeOfDescendants(result);
+ assertEquals(objCount, sizeOfDescs);
+
+ log.info("test getting one level with getDescendants");
+ result = navSvc.getDescendants(fRepositoryId, fRootFolderId, BigInteger.valueOf(1),
+ "*", Boolean.TRUE, IncludeRelationships.NONE, null, Boolean.TRUE, null);
+
+ for (ObjectInFolderContainer obj: result) {
+ log.info(" found folder id " + obj.getObject().getObject().getId() + " path segment "
+ + obj.getObject().getPathSegment());
+ }
+ sizeOfDescs = getSizeOfDescendants(result);
+ assertEquals(childrenPerLevel, sizeOfDescs);
+
+ log.info("test getting two levels with getDescendants");
+ result = navSvc.getDescendants(fRepositoryId, fRootFolderId, BigInteger.valueOf(2),
+ "*", Boolean.TRUE, IncludeRelationships.NONE, null, Boolean.TRUE, null);
+
+ for (ObjectInFolderContainer obj: result) {
+ log.info(" found folder id " + obj.getObject().getObject().getId() + " path segment "
+ + obj.getObject().getPathSegment());
+ }
+ sizeOfDescs = getSizeOfDescendants(result);
+ assertEquals(childrenPerLevel*childrenPerLevel+childrenPerLevel, sizeOfDescs);
+
+ log.info("... testGetDescendants() finished.");
+ }
+
+ public void testGetFolderParent() {
+ log.info("starting testGetFolderParent() ...");
+ createLevel1Folders();
+ NavigationService navSvc = fProvider.getNavigationService();
+ String folderId = fLevel1FolderId;
+
+ ObjectData result = navSvc.getFolderParent(fRepositoryId, folderId, null, null);
+ log.info(" found parent for id \'" + folderId + "\' is \'" + result.getId() + "\'");
+ assertEquals(fRootFolderId, result.getId()); // should be root folder
+
+ folderId = fRootFolderId;
+ try {
+ result = navSvc.getFolderParent(fRepositoryId, folderId, null, null);
+ log.info(" found parent for id " + folderId + " is " + result.getId());
+ fail("Should not be possible to get parent for root folder");
+ } catch (Exception e) {
+ assertEquals(CmisInvalidArgumentException.class, e.getClass());
+ log.info(" getParent() for root folder raised expected exception");
+ }
+ log.info("... testGetFolderParent() finished.");
+ }
+
+ private int getSizeOfDescendants(List<ObjectInFolderContainer> objs) {
+ int sum = objs.size();
+ if (null != objs) {
+ for (ObjectInFolderContainer obj: objs) {
+ if (null != obj.getChildren())
+ sum += getSizeOfDescendants(obj.getChildren());
+ }
+ }
+ return sum;
+ }
+
+ private void createLevel1Folders() {
+ ObjectService objSvc = fProvider.getObjectService();
+ for (int i = 0; i < NUM_ROOT_FOLDERS; i++) {
+ List<PropertyData<?>> properties = new ArrayList<PropertyData<?>>();
+ properties.add(fFactory.createPropertyIdData(PropertyIds.CMIS_NAME, "Folder " + i));
+ properties.add(fFactory.createPropertyIdData(PropertyIds.CMIS_OBJECT_TYPE_ID,
+ InMemoryFolderTypeDefinition.getRootFolderType().getId()));
+ PropertiesData props = fFactory.createPropertiesData(properties);
+ String id = objSvc.createFolder(fRepositoryId, props, fRootFolderId, null, null, null, null);
+ if (i==3) // store one
+ fLevel1FolderId = id;
+ }
+ }
+
+ private int createFolderHierachy(int levels, int childrenPerLevel) {
+ NavigationService navSvc = fProvider.getNavigationService();
+ ObjectService objSvc = fProvider.getObjectService();
+
+ ObjectGenerator gen = new ObjectGenerator(fFactory, navSvc, objSvc, fRepositoryId);
+ gen.createFolderHierachy(levels, childrenPerLevel, fRootFolderId);
+ int objCount = gen.getObjectsInTotal();
+ return objCount;
+ }
+
+}
Propchange: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/NavigationServiceTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/ObjectCreator.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/ObjectCreator.java?rev=910572&view=auto
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/ObjectCreator.java (added)
+++ incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/ObjectCreator.java Tue Feb 16 16:03:38 2010
@@ -0,0 +1,185 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.opencmis.inmemory;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.math.BigInteger;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.apache.opencmis.commons.PropertyIds;
+import org.apache.opencmis.commons.api.ExtensionsData;
+import org.apache.opencmis.commons.enums.VersioningState;
+import org.apache.opencmis.commons.impl.dataobjects.ContentStreamDataImpl;
+import org.apache.opencmis.commons.provider.AccessControlList;
+import org.apache.opencmis.commons.provider.ContentStreamData;
+import org.apache.opencmis.commons.provider.Holder;
+import org.apache.opencmis.commons.provider.ObjectService;
+import org.apache.opencmis.commons.provider.PropertiesData;
+import org.apache.opencmis.commons.provider.PropertyData;
+import org.apache.opencmis.commons.provider.PropertyStringData;
+import org.apache.opencmis.commons.provider.ProviderObjectFactory;
+
+public class ObjectCreator {
+
+ private ProviderObjectFactory fFactory;
+ private ObjectService fObjSvc;
+ private String fRepositoryId;
+
+ public ObjectCreator(ProviderObjectFactory factory, ObjectService objSvc, String repositoryId) {
+ fObjSvc = objSvc;
+ fFactory = factory;
+ fRepositoryId = repositoryId;
+ }
+
+ public String createDocument(String name, String typeId, String folderId, VersioningState versioningState, Map<String, String> propsToSet) {
+ ContentStreamData contentStream = null;
+ List<String> policies = null;
+ AccessControlList addACEs = null;
+ AccessControlList removeACEs = null;
+ ExtensionsData extension = null;
+
+ PropertiesData props = createStringDocumentProperties(name, typeId, propsToSet);
+
+ contentStream = createContent();
+
+ String id = null;
+ id = fObjSvc.createDocument(fRepositoryId, props, folderId, contentStream, versioningState,
+ policies, addACEs, removeACEs, extension);
+ if (null == id)
+ junit.framework.Assert.fail("createDocument failed.");
+
+ return id;
+ }
+
+ public PropertiesData createStringDocumentProperties(String name, String typeId, Map<String, String> propsToSet) {
+ List<PropertyData<?>> properties = new ArrayList<PropertyData<?>>();
+ properties.add(fFactory.createPropertyIdData(PropertyIds.CMIS_NAME, name));
+ properties.add(fFactory.createPropertyIdData(PropertyIds.CMIS_OBJECT_TYPE_ID, typeId));
+ if (null != propsToSet)
+ for (Entry<String, String> propToSet : propsToSet.entrySet()) {
+ properties.add(fFactory.createPropertyStringData(propToSet.getKey(), propToSet.getValue()));
+ }
+ PropertiesData props = fFactory.createPropertiesData(properties);
+ return props;
+ }
+
+ public ContentStreamData createContent() {
+ ContentStreamDataImpl content = new ContentStreamDataImpl();
+ content.setFilename("data.txt");
+ content.setMimeType("text/plain");
+ int len = 32 * 1024;
+ byte[] b = {0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
+ 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x0c, 0x0a,
+ 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
+ 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x0c, 0x0a
+ }; // 32 Bytes
+ ByteArrayOutputStream ba = new ByteArrayOutputStream(len);
+ try {
+ for (int i=0; i<1024; i++)
+ ba.write(b);
+ } catch (IOException e) {
+ throw new RuntimeException("Failed to fill content stream with data", e) ;
+ }
+ content.setStream(new ByteArrayInputStream(ba.toByteArray()));
+ content.setLength(BigInteger.valueOf(len));
+ return content;
+ }
+
+ public ContentStreamData createAlternateContent() {
+ ContentStreamDataImpl content = new ContentStreamDataImpl();
+ content.setFilename("data.txt");
+ content.setMimeType("text/plain");
+ int len = 32 * 1024;
+ byte[] b = {0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61,
+ 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61,
+ 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61,
+ 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61
+ }; // 32 Bytes
+ ByteArrayOutputStream ba = new ByteArrayOutputStream(len);
+ try {
+ for (int i=0; i<1024; i++)
+ ba.write(b);
+ } catch (IOException e) {
+ throw new RuntimeException("Failed to fill content stream with data", e) ;
+ }
+ content.setStream(new ByteArrayInputStream(ba.toByteArray()));
+ content.setLength(BigInteger.valueOf(len));
+ return content;
+ }
+
+ /**
+ * Compare two streams and return true if they are equal
+ * @param csd1
+ * @param csd2
+ * @return
+ */
+ public boolean verifyContent(ContentStreamData csd1, ContentStreamData csd2) {
+ if (!csd1.getFilename().equals(csd2.getFilename()))
+ return false;
+ if (!csd1.getLength().equals(csd2.getLength()))
+ return false;
+ if (!csd1.getMimeType().equals(csd2.getMimeType()))
+ return false;
+ long len = csd1.getLength().longValue();
+ InputStream s1 = csd1.getStream();
+ InputStream s2 = csd2.getStream();
+ try {
+ for (int i=0; i<len; i++) {
+ int val1 = s1.read();
+ int val2 = s2.read();
+ if (val1 != val2)
+ return false;
+ }
+ }
+ catch (IOException e) {
+ e.printStackTrace();
+ return false;
+ }
+ return true;
+ }
+
+ public void updateProperty(String id, String propertyId, String propertyValue) {
+ PropertiesData properties = getUpdatePropertyList(propertyId, propertyValue);
+
+ Holder<String> idHolder = new Holder<String>(id);
+ Holder<String> changeTokenHolder = new Holder<String>();
+ fObjSvc.updateProperties(fRepositoryId, idHolder, changeTokenHolder, properties, null);
+ }
+
+ public PropertiesData getUpdatePropertyList(String propertyId, String propertyValue) {
+ List<PropertyData<?>> properties = new ArrayList<PropertyData<?>>();
+ properties.add(fFactory.createPropertyStringData(propertyId, propertyValue));
+ PropertiesData newProps = fFactory.createPropertiesData(properties);
+ return newProps;
+ }
+
+ public boolean verifyProperty(String id, String propertyId, String propertyValue) {
+ PropertiesData props = fObjSvc.getProperties(fRepositoryId, id, "*", null);
+ Map<String, PropertyData<?>> propsMap = props.getProperties();
+ PropertyStringData pd = (PropertyStringData) propsMap.get(propertyId);
+ return propertyValue.equals(pd.getFirstValue());
+ }
+
+}
Propchange: incubator/chemistry/trunk/opencmis/opencmis-server/opencmis-server-inmemory/src/test/java/org/apache/opencmis/inmemory/ObjectCreator.java
------------------------------------------------------------------------------
svn:eol-style = native