You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@chemistry.apache.org by je...@apache.org on 2013/03/21 16:12:51 UTC
svn commit: r1459351 - in
/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src:
main/java/org/apache/chemistry/opencmis/inmemory/server/
main/java/org/apache/chemistry/opencmis/inmemory/types/
test/java/org/apache/...
Author: jens
Date: Thu Mar 21 15:12:51 2013
New Revision: 1459351
URL: http://svn.apache.org/r1459351
Log:
InMemory: set properties from secondary types correctly which are not set in getProperties(), getObject()
Modified:
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/AtomLinkInfoProvider.java
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryNavigationServiceImpl.java
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryObjectServiceImpl.java
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryVersioningServiceImpl.java
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/types/PropertyCreationHelper.java
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/ObjectServiceTest.java
Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/AtomLinkInfoProvider.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/AtomLinkInfoProvider.java?rev=1459351&r1=1459350&r2=1459351&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/AtomLinkInfoProvider.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/AtomLinkInfoProvider.java Thu Mar 21 15:12:51 2013
@@ -42,6 +42,7 @@ import org.apache.chemistry.opencmis.inm
import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoredObject;
import org.apache.chemistry.opencmis.inmemory.storedobj.api.VersionedDocument;
import org.apache.chemistry.opencmis.inmemory.types.PropertyCreationHelper;
+import org.apache.chemistry.opencmis.server.support.TypeManager;
/**
* For the Atom binding more information might be required than the result of a
@@ -163,8 +164,9 @@ public class AtomLinkInfoProvider {
}
public void fillInformationForAtomLinks(String repositoryId, StoredObject so, ObjectInfoImpl objectInfo) {
- TypeDefinition td = fStoreManager.getTypeById(repositoryId, so.getTypeId()).getTypeDefinition();
- ObjectData od = PropertyCreationHelper.getObjectData(td, so, null, null, false,
+ TypeManager tm = fStoreManager.getTypeManager(repositoryId);
+
+ ObjectData od = PropertyCreationHelper.getObjectData(tm, so, null, null, false,
IncludeRelationships.NONE, null, false, false, null);
fillInformationForAtomLinks(repositoryId, so, od, objectInfo);
}
Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryNavigationServiceImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryNavigationServiceImpl.java?rev=1459351&r1=1459350&r2=1459351&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryNavigationServiceImpl.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryNavigationServiceImpl.java Thu Mar 21 15:12:51 2013
@@ -60,6 +60,7 @@ import org.apache.chemistry.opencmis.inm
import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoreManager;
import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoredObject;
import org.apache.chemistry.opencmis.inmemory.types.PropertyCreationHelper;
+import org.apache.chemistry.opencmis.server.support.TypeManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -90,11 +91,8 @@ public class InMemoryNavigationServiceIm
List<StoredObject> checkedOuts = fStoreManager.getObjectStore(repositoryId).getCheckedOutDocuments(
orderBy, context.getUsername(), includeRelationships);
for (StoredObject checkedOut : checkedOuts) {
- TypeDefinition td = fStoreManager.getTypeById(repositoryId, checkedOut.getTypeId()).getTypeDefinition();
-// DocumentVersion workingCopy = ((VersionedDocument) checkedOut).getPwc();
-// if (null == workingCopy)
-// throw new CmisConstraintException("document " + checkedOut + " is checked out but has no working copy");
- ObjectData od = PropertyCreationHelper.getObjectData(td, checkedOut, filter, user,
+ TypeManager tm = fStoreManager.getTypeManager(repositoryId);
+ ObjectData od = PropertyCreationHelper.getObjectData(tm, checkedOut, filter, user,
includeAllowableActions, includeRelationships, renditionFilter, false, false, extension);
if (context.isObjectInfoRequired()) {
ObjectInfoImpl objectInfo = new ObjectInfoImpl();
@@ -308,8 +306,8 @@ public class InMemoryNavigationServiceIm
oifd.setPathSegment(spo.getName());
}
- TypeDefinition typeDef = fStoreManager.getTypeById(repositoryId, spo.getTypeId()).getTypeDefinition();
- ObjectData objectData = PropertyCreationHelper.getObjectData(typeDef, spo, filter, user, includeAllowableActions,
+ TypeManager tm = fStoreManager.getTypeManager(repositoryId);
+ ObjectData objectData = PropertyCreationHelper.getObjectData(tm, spo, filter, user, includeAllowableActions,
includeRelationships, renditionFilter, false, false, null);
oifd.setObject(objectData);
@@ -397,8 +395,8 @@ public class InMemoryNavigationServiceIm
if (null != parents) {
for (Folder parent : parents) {
ObjectParentDataImpl parentData = new ObjectParentDataImpl();
- TypeDefinition typeDef = fStoreManager.getTypeById(repositoryId, parent.getTypeId()).getTypeDefinition();
- ObjectData objData = PropertyCreationHelper.getObjectData(typeDef, parent, filter, user, includeAllowableActions,
+ TypeManager tm = fStoreManager.getTypeManager(repositoryId);
+ ObjectData objData = PropertyCreationHelper.getObjectData(tm, parent, filter, user, includeAllowableActions,
includeRelationships, renditionFilter, false, true, null);
parentData.setObject(objData);
@@ -448,8 +446,8 @@ public class InMemoryNavigationServiceIm
void copyFilteredProperties(String repositoryId, StoredObject so, String filter, ObjectDataImpl objData) {
List<String> requestedIds = FilterParser.getRequestedIdsFromFilter(filter);
- TypeDefinition td = fStoreManager.getTypeById(repositoryId, so.getTypeId()).getTypeDefinition();
- Properties props = PropertyCreationHelper.getPropertiesFromObject(so, td, requestedIds, true);
+ TypeManager tm = fStoreManager.getTypeManager(repositoryId);
+ Properties props = PropertyCreationHelper.getPropertiesFromObject(so, tm, requestedIds, true);
objData.setProperties(props);
}
Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryObjectServiceImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryObjectServiceImpl.java?rev=1459351&r1=1459350&r2=1459351&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryObjectServiceImpl.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryObjectServiceImpl.java Thu Mar 21 15:12:51 2013
@@ -20,7 +20,6 @@ package org.apache.chemistry.opencmis.in
import java.math.BigInteger;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
@@ -85,6 +84,7 @@ import org.apache.chemistry.opencmis.inm
import org.apache.chemistry.opencmis.inmemory.types.InMemoryPolicyTypeDefinition;
import org.apache.chemistry.opencmis.inmemory.types.InMemoryRelationshipTypeDefinition;
import org.apache.chemistry.opencmis.inmemory.types.PropertyCreationHelper;
+import org.apache.chemistry.opencmis.server.support.TypeManager;
import org.apache.chemistry.opencmis.server.support.TypeValidator;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -130,8 +130,8 @@ public class InMemoryObjectServiceImpl e
// build properties collection
List<String> requestedIds = FilterParser.getRequestedIdsFromFilter("*");
-
- Properties existingProps = PropertyCreationHelper.getPropertiesFromObject(so, td, requestedIds, true);
+ TypeManager tm = fStoreManager.getTypeManager(repositoryId);
+ Properties existingProps = PropertyCreationHelper.getPropertiesFromObject(so, tm, requestedIds, true);
PropertiesImpl newPD = new PropertiesImpl();
// copy all existing properties
@@ -231,8 +231,8 @@ public class InMemoryObjectServiceImpl e
// Make a call to getObject to convert the resulting id into an
// ObjectData
- TypeDefinition td = typeDefC.getTypeDefinition();
- ObjectData od = PropertyCreationHelper.getObjectData(td, so, null, context.getUsername(), false,
+ TypeManager tm = fStoreManager.getTypeManager(repositoryId);
+ ObjectData od = PropertyCreationHelper.getObjectData(tm, so, null, context.getUsername(), false,
IncludeRelationships.NONE, null, false, false, extension);
if (context.isObjectInfoRequired()) {
@@ -386,8 +386,8 @@ public class InMemoryObjectServiceImpl e
}
String user = context.getUsername();
- TypeDefinition td = fStoreManager.getTypeById(repositoryId, so.getTypeId()).getTypeDefinition();
- ObjectData od = PropertyCreationHelper.getObjectData(td, so, filter, user, includeAllowableActions,
+ TypeManager tm = fStoreManager.getTypeManager(repositoryId);
+ ObjectData od = PropertyCreationHelper.getObjectData(tm, so, filter, user, includeAllowableActions,
includeRelationships, renditionFilter, includePolicyIds, includeAcl, extension);
if (context.isObjectInfoRequired()) {
@@ -426,8 +426,8 @@ public class InMemoryObjectServiceImpl e
String user = context.getUsername();
- TypeDefinition td = fStoreManager.getTypeById(repositoryId, so.getTypeId()).getTypeDefinition();
- ObjectData od = PropertyCreationHelper.getObjectData(td, so, filter, user, includeAllowableActions,
+ TypeManager tm = fStoreManager.getTypeManager(repositoryId);
+ ObjectData od = PropertyCreationHelper.getObjectData(tm, so, filter, user, includeAllowableActions,
includeRelationships, renditionFilter, includePolicyIds, includeAcl, extension);
LOG.debug("stop getObjectByPath()");
@@ -455,8 +455,8 @@ public class InMemoryObjectServiceImpl e
// build properties collection
List<String> requestedIds = FilterParser.getRequestedIdsFromFilter(filter);
- TypeDefinition td = fStoreManager.getTypeById(repositoryId, so.getTypeId()).getTypeDefinition();
- Properties props = PropertyCreationHelper.getPropertiesFromObject(so, td, requestedIds, true);
+ TypeManager tm = fStoreManager.getTypeManager(repositoryId);
+ Properties props = PropertyCreationHelper.getPropertiesFromObject(so, tm, requestedIds, true);
LOG.debug("stop getProperties()");
return props;
}
@@ -535,8 +535,8 @@ public class InMemoryObjectServiceImpl e
objectId.setValue(so.getId());
LOG.debug("stop moveObject()");
- TypeDefinition td = fStoreManager.getTypeById(repositoryId, so.getTypeId()).getTypeDefinition();
- ObjectData od = PropertyCreationHelper.getObjectData(td, so, null, user, false,
+ TypeManager tm = fStoreManager.getTypeManager(repositoryId);
+ ObjectData od = PropertyCreationHelper.getObjectData(tm, so, null, user, false,
IncludeRelationships.NONE, null, false, false, extension);
// To be able to provide all Atom links in the response we need
@@ -731,8 +731,8 @@ public class InMemoryObjectServiceImpl e
// extension);
}
- TypeDefinition td = fStoreManager.getTypeById(repositoryId, so.getTypeId()).getTypeDefinition();
- ObjectData od = PropertyCreationHelper.getObjectData(td, so, null, user, false,
+ TypeManager tm = fStoreManager.getTypeManager(repositoryId);
+ ObjectData od = PropertyCreationHelper.getObjectData(tm, so, null, user, false,
IncludeRelationships.NONE, null, false, false, extension);
// To be able to provide all Atom links in the response we need
Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryVersioningServiceImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryVersioningServiceImpl.java?rev=1459351&r1=1459350&r2=1459351&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryVersioningServiceImpl.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryVersioningServiceImpl.java Thu Mar 21 15:12:51 2013
@@ -44,6 +44,7 @@ import org.apache.chemistry.opencmis.inm
import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoredObject;
import org.apache.chemistry.opencmis.inmemory.storedobj.api.VersionedDocument;
import org.apache.chemistry.opencmis.inmemory.types.PropertyCreationHelper;
+import org.apache.chemistry.opencmis.server.support.TypeManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -258,8 +259,9 @@ public class InMemoryVersioningServiceIm
List<String> requestedIds = FilterParser.getRequestedIdsFromFilter(filter);
- TypeDefinition td = fStoreManager.getTypeById(repositoryId, latestVersionObject.getTypeId()).getTypeDefinition();
- Properties props = PropertyCreationHelper.getPropertiesFromObject(latestVersionObject, td,
+ TypeManager tm = fStoreManager.getTypeManager(repositoryId);
+
+ Properties props = PropertyCreationHelper.getPropertiesFromObject(latestVersionObject, tm,
requestedIds, true);
return props;
Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/types/PropertyCreationHelper.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/types/PropertyCreationHelper.java?rev=1459351&r1=1459350&r2=1459351&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/types/PropertyCreationHelper.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/types/PropertyCreationHelper.java Thu Mar 21 15:12:51 2013
@@ -73,6 +73,7 @@ import org.apache.chemistry.opencmis.inm
import org.apache.chemistry.opencmis.inmemory.NameValidator;
import org.apache.chemistry.opencmis.inmemory.storedobj.api.DocumentVersion;
import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoredObject;
+import org.apache.chemistry.opencmis.server.support.TypeManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -205,14 +206,15 @@ public class PropertyCreationHelper {
prop.setDefaultValue(Collections.singletonList(defVal));
}
- public static Properties getPropertiesFromObject(StoredObject so, TypeDefinition td, List<String> requestedIds,
+ public static Properties getPropertiesFromObject(StoredObject so, TypeManager typeManager, List<String> requestedIds,
boolean fillOptionalPropertyData) {
// build properties collection
BindingsObjectFactory objectFactory = new BindingsObjectFactoryImpl();
Map<String, PropertyData<?>> properties = new HashMap<String, PropertyData<?>>();
so.fillProperties(properties, objectFactory, requestedIds);
-
+ TypeDefinition td = typeManager.getTypeById(so.getTypeId()).getTypeDefinition();
+
String typeId = so.getTypeId();
if (FilterParser.isContainedInFilter(PropertyIds.BASE_TYPE_ID, requestedIds)) {
if (td == null) {
@@ -232,6 +234,17 @@ public class PropertyCreationHelper {
if (!properties.containsKey(propDef.getId()) && FilterParser.isContainedInFilter(propDef.getId(), requestedIds))
properties.put(propDef.getId(), getEmptyValue(propDef));
}
+
+ // fill not-set properties from secondary types
+ List<String> secTypeIds = so.getSecondaryTypeIds();
+ for (String secTypeId: secTypeIds) {
+ td = typeManager.getTypeById(secTypeId).getTypeDefinition();
+ propDefs = td.getPropertyDefinitions();
+ for (PropertyDefinition<?> propDef : propDefs.values()) {
+ if (!properties.containsKey(propDef.getId()) && FilterParser.isContainedInFilter(propDef.getId(), requestedIds))
+ properties.put(propDef.getId(), getEmptyValue(propDef));
+ }
+ }
List<PropertyData<?>> propertiesList = new ArrayList<PropertyData<?>>(properties.values());
@@ -325,7 +338,7 @@ public class PropertyCreationHelper {
return props;
}
- public static ObjectData getObjectData(TypeDefinition typeDef, StoredObject so, String filter, String user,
+ public static ObjectData getObjectData(TypeManager tm, StoredObject so, String filter, String user,
Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
Boolean includePolicyIds, Boolean includeACL, ExtensionsData extension) {
@@ -337,7 +350,7 @@ public class PropertyCreationHelper {
// build properties collection
List<String> requestedIds = FilterParser.getRequestedIdsFromFilter(filter);
- Properties props = getPropertiesFromObject(so, typeDef, requestedIds, true);
+ Properties props = getPropertiesFromObject(so, tm, requestedIds, true);
// fill output object
if (null != includeAllowableActions && includeAllowableActions) {
Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/ObjectServiceTest.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/ObjectServiceTest.java?rev=1459351&r1=1459350&r2=1459351&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/ObjectServiceTest.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/ObjectServiceTest.java Thu Mar 21 15:12:51 2013
@@ -1231,6 +1231,40 @@ public class ObjectServiceTest extends A
log.info("... finished testSecondaryTypes()");
}
+ @Test
+ public void testSecondaryTypePropertiesNotSet() {
+ log.info("starting testSecondaryTypePropertiesNotSet() ...");
+
+ final String primaryPropVal = "Sample Doc String Property";
+
+ List<PropertyData<?>> properties = new ArrayList<PropertyData<?>>();
+ properties.add(fFactory.createPropertyStringData(PropertyIds.NAME, "ObjectWithSecondaryType"));
+ properties.add(fFactory.createPropertyIdData(PropertyIds.OBJECT_TYPE_ID, TEST_DOCUMENT_TYPE_ID));
+ properties.add(fFactory.createPropertyStringData(TEST_DOCUMENT_STRING_PROP_ID, primaryPropVal));
+ properties.add(fFactory.createPropertyIdData(PropertyIds.SECONDARY_OBJECT_TYPE_IDS, TEST_SECONDARY_TYPE_ID));
+ Properties props = fFactory.createPropertiesData(properties);
+
+ String id = fObjSvc.createDocument(fRepositoryId, props, fRootFolderId, null, VersioningState.NONE, null,
+ null, null, null);
+ assertNotNull(id);
+
+ Properties res = fObjSvc.getProperties(fRepositoryId, id, "*", null);
+ assertNotNull(res.getProperties());
+ Map<String, PropertyData<?>> returnedProps = res.getProperties();
+ assertNotNull(returnedProps);
+ boolean hasProp = returnedProps.containsKey(SECONDARY_STRING_PROP);
+ assertTrue(hasProp);
+ hasProp = returnedProps.containsKey(SECONDARY_INTEGER_PROP);
+ assertTrue(hasProp);
+ PropertyData<?> returnedValue = returnedProps.get(SECONDARY_STRING_PROP);
+ assertNotNull(returnedValue);
+ assertTrue(returnedValue.getValues().isEmpty());
+ returnedValue = returnedProps.get(SECONDARY_INTEGER_PROP);
+ assertNotNull(returnedValue);
+ assertTrue(returnedValue.getValues().isEmpty());
+
+ log.info("... finished testSecondaryTypePropertiesNotSet()");
+ }
@Test
public void testUpdatePropertiesWithTypeCreation () {