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/31 18:39:14 UTC
svn commit: r1463002 [1/5] - in
/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src:
main/java/org/apache/chemistry/opencmis/inmemory/
main/java/org/apache/chemistry/opencmis/inmemory/query/
main/java/org/apache/c...
Author: jens
Date: Sun Mar 31 16:39:14 2013
New Revision: 1463002
URL: http://svn.apache.org/r1463002
Log:
InMemory: start implementing relationships and policies
Added:
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryPolicyServiceImpl.java
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryRelationshipServiceImpl.java
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/Policy.java
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/Relationship.java
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/PolicyImpl.java
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/RelationshipImpl.java
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/PolicyTest.java
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/RelationshipServiceTest.java
Modified:
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/DataObjectCreator.java
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/query/InMemoryQueryProcessor.java
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/BaseServiceValidatorImpl.java
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryDiscoveryServiceImpl.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/InMemoryService.java
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryServiceFactoryImpl.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/storedobj/api/CmisServiceValidator.java
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/ObjectStore.java
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/StoredObject.java
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/VersionedDocument.java
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/FolderImpl.java
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/InMemoryServiceValidatorImpl.java
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/ObjectStoreImpl.java
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/StoredObjectImpl.java
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/VersionedDocumentImpl.java
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/types/DocumentTypeCreationHelper.java
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/types/InMemoryPolicyTypeDefinition.java
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/types/InMemoryRelationshipTypeDefinition.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/main/java/org/apache/chemistry/opencmis/inmemory/types/PropertyUtil.java
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/AbstractServiceTest.java
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/FolderTest.java
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/ObjectServiceTest.java
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/RepositoryServiceTest.java
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/EvalQueryTest.java
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/QueryTestDataCreator.java
Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/DataObjectCreator.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/DataObjectCreator.java?rev=1463002&r1=1463001&r2=1463002&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/DataObjectCreator.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/DataObjectCreator.java Sun Mar 31 16:39:14 2013
@@ -20,6 +20,7 @@ package org.apache.chemistry.opencmis.in
import java.math.BigInteger;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
import java.util.Set;
@@ -43,9 +44,13 @@ import org.apache.chemistry.opencmis.inm
import org.apache.chemistry.opencmis.inmemory.storedobj.api.Filing;
import org.apache.chemistry.opencmis.inmemory.storedobj.api.Folder;
import org.apache.chemistry.opencmis.inmemory.storedobj.api.Item;
+import org.apache.chemistry.opencmis.inmemory.storedobj.api.Policy;
+import org.apache.chemistry.opencmis.inmemory.storedobj.api.Relationship;
import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoredObject;
import org.apache.chemistry.opencmis.inmemory.storedobj.api.Version;
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;
/**
* @author Jens A collection of utility functions to fill the data objects used
@@ -53,7 +58,7 @@ import org.apache.chemistry.opencmis.inm
*/
public class DataObjectCreator {
- public static BigInteger MINUS_ONE = BigInteger.valueOf(-1L);
+ public static BigInteger MINUS_ONE = BigInteger.valueOf(-1L);
// Utility class
private DataObjectCreator() {
@@ -64,17 +69,20 @@ public class DataObjectCreator {
boolean isFolder = so instanceof Folder;
boolean isDocument = so instanceof Content;
boolean isItem = so instanceof Item;
+ boolean isRelationship = so instanceof Relationship;
+ boolean isFileable = isFolder || isDocument || isItem;
+ boolean isPolicy = so instanceof Policy;
boolean isCheckedOut = false;
boolean canCheckOut = false;
boolean canCheckIn = false;
boolean isVersioned = so instanceof Version || so instanceof VersionedDocument;
boolean hasContent = so instanceof Content && ((Content) so).hasContent();
- boolean isRootFolder = isFolder && ((Folder)so).getParent() == null;
+ boolean isRootFolder = isFolder && ((Folder) so).getParent() == null;
boolean hasRendition = so.hasRendition(user);
- boolean canGetAcl = user != null && (isDocument || isFolder);
+ boolean canGetAcl = user != null && (isDocument || isFolder || isItem);
boolean canSetAcl = canGetAcl;
- boolean cmis11 = InMemoryServiceContext.getCallContext().getCmisVersion() != CmisVersion.CMIS_1_0;
-
+ boolean cmis11 = InMemoryServiceContext.getCallContext().getCmisVersion() != CmisVersion.CMIS_1_0;
+
if (so instanceof Version) {
isCheckedOut = ((Version) so).isPwc();
canCheckIn = isCheckedOut && ((Version) so).getParentDocument().getCheckedOutBy().equals(user);
@@ -84,18 +92,21 @@ public class DataObjectCreator {
canCheckOut = !((VersionedDocument) so).isCheckedOut();
canCheckIn = isCheckedOut && ((VersionedDocument) so).getCheckedOutBy().equals(user);
}
-
+
AllowableActionsImpl allowableActions = new AllowableActionsImpl();
Set<Action> set = allowableActions.getAllowableActions();
+
if (!isRootFolder) {
set.add(Action.CAN_DELETE_OBJECT);
set.add(Action.CAN_UPDATE_PROPERTIES);
+ set.add(Action.CAN_APPLY_POLICY);
+ set.add(Action.CAN_GET_APPLIED_POLICIES);
}
- if (isFolder || isDocument || isItem) {
+ if (isFolder || isDocument || isItem || isRelationship || isPolicy) {
set.add(Action.CAN_GET_PROPERTIES);
- if (!isRootFolder) {
- set.add(Action.CAN_GET_OBJECT_PARENTS);
+ if (!isRootFolder && isFileable) {
+ set.add(Action.CAN_GET_OBJECT_PARENTS);
set.add(Action.CAN_MOVE_OBJECT);
}
}
@@ -132,27 +143,27 @@ public class DataObjectCreator {
}
if (isDocument || isItem) {
- if (so instanceof Filing && ((Filing)so).hasParent()) {
+ if (so instanceof Filing && ((Filing) so).hasParent()) {
set.add(Action.CAN_ADD_OBJECT_TO_FOLDER);
set.add(Action.CAN_REMOVE_OBJECT_FROM_FOLDER);
}
- if (isDocument)
- if (isVersioned) {
- if (canCheckIn)
+ if (isDocument)
+ if (isVersioned) {
+ if (canCheckIn)
+ set.add(Action.CAN_SET_CONTENT_STREAM);
+ } else
set.add(Action.CAN_SET_CONTENT_STREAM);
- } else
- set.add(Action.CAN_SET_CONTENT_STREAM);
}
if (hasRendition) {
set.add(Action.CAN_GET_RENDITIONS);
}
-
- if (canSetAcl)
+
+ if (canSetAcl)
set.add(Action.CAN_APPLY_ACL);
- if (canGetAcl)
+ if (canGetAcl)
set.add(Action.CAN_GET_ACL);
-
+
allowableActions.setAllowableActions(set);
return allowableActions;
}
@@ -172,8 +183,9 @@ public class DataObjectCreator {
return polIds;
}
- public static List<ObjectData> fillRelationships(IncludeRelationships includeRelationships, StoredObject so, String user) {
- return getRelationships(includeRelationships, so, user);
+ public static List<ObjectData> fillRelationships(TypeManager tm, IncludeRelationships includeRelationships,
+ StoredObject so, String user) {
+ return getRelationships(tm, includeRelationships, so, user);
}
public static ChangeEventInfo fillChangeEventInfo(StoredObject so) {
@@ -181,23 +193,26 @@ public class DataObjectCreator {
ChangeEventInfo changeEventInfo = new ChangeEventInfoDataImpl();
return changeEventInfo;
}
-
- public static List<ObjectData> getRelationships(IncludeRelationships includeRelationships,
- StoredObject spo, String user)
- {
- if (includeRelationships != IncludeRelationships.NONE)
- {
- RelationshipDirection relationshipDirection = RelationshipDirection.SOURCE;
- // source is default
- if (includeRelationships == IncludeRelationships.TARGET)
- relationshipDirection = RelationshipDirection.TARGET;
- else if (includeRelationships == IncludeRelationships.BOTH)
- relationshipDirection = RelationshipDirection.EITHER; // either and both!!
-
- ObjectList relationships = spo.getObjectRelationships(false, relationshipDirection,
- null, null, false, MINUS_ONE, MINUS_ONE, null, user);
- return (relationships == null? null : relationships.getObjects());
+
+ public static List<ObjectData> getRelationships(TypeManager tm, IncludeRelationships includeRelationships,
+ StoredObject spo, String user) {
+ if (includeRelationships != IncludeRelationships.NONE) {
+ RelationshipDirection relationshipDirection = RelationshipDirection.SOURCE;
+ // source is default
+ if (includeRelationships == IncludeRelationships.TARGET)
+ relationshipDirection = RelationshipDirection.TARGET;
+ else if (includeRelationships == IncludeRelationships.BOTH)
+ relationshipDirection = RelationshipDirection.EITHER;
+
+ List<StoredObject> relationships = spo.getObjectRelationships(relationshipDirection, user);
+ List<ObjectData> res = new ArrayList<ObjectData>(relationships.size());
+ for (StoredObject so : relationships) {
+ ObjectData od = PropertyCreationHelper.getObjectData(tm, so, null, user, false,
+ IncludeRelationships.NONE, null, false, false, null);
+ res.add(od);
+ }
+ return res;
}
- return null;
+ return null;
}
}
Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/query/InMemoryQueryProcessor.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/query/InMemoryQueryProcessor.java?rev=1463002&r1=1463001&r2=1463002&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/query/InMemoryQueryProcessor.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/query/InMemoryQueryProcessor.java Sun Mar 31 16:39:14 2013
@@ -153,7 +153,7 @@ public class InMemoryQueryProcessor {
String queryName = queryObj.getTypes().values().iterator().next();
TypeDefinition td = queryObj.getTypeDefinitionFromQueryName(queryName);
- ObjectData od = PropertyCreationHelper.getObjectDataQueryResult(td, so, user, props, funcs,
+ ObjectData od = PropertyCreationHelper.getObjectDataQueryResult(tm, td, so, user, props, funcs,
fromType, includeAllowableActions, includeRelationships, renditionFilter);
objDataList.add(od);
@@ -243,19 +243,15 @@ public class InMemoryQueryProcessor {
private void match(StoredObject so, String user, boolean searchAllVersions) {
// log.debug("checkMatch() for object: " + so.getId());
// first check if type is matching...
- String queryName = queryObj.getTypes().values().iterator().next(); // as
- // we
- // don't
- // support
- // JOINS
- // take
- // first
- // type
+
+ // as we don't support joins take first type
+ String queryName = queryObj.getTypes().values().iterator().next();
+
TypeDefinition td = queryObj.getTypeDefinitionFromQueryName(queryName);
- boolean skip = so instanceof VersionedDocument; // we are only
- // interested in
- // versions not in the
- // series
+
+ // we are only interested in versions not in the series
+ boolean skip = so instanceof VersionedDocument;
+
boolean typeMatches = typeMatches(td, so);
if (!searchAllVersions && so instanceof DocumentVersion
&& ((DocumentVersion) so).getParentDocument().getLatestVersion(false) != so) {
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=1463002&r1=1463001&r2=1463002&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 Sun Mar 31 16:39:14 2013
@@ -30,6 +30,7 @@ import org.apache.chemistry.opencmis.com
import org.apache.chemistry.opencmis.commons.data.RenditionData;
import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
+import org.apache.chemistry.opencmis.commons.enums.RelationshipDirection;
import org.apache.chemistry.opencmis.commons.impl.server.ObjectInfoImpl;
import org.apache.chemistry.opencmis.commons.impl.server.RenditionInfoImpl;
import org.apache.chemistry.opencmis.commons.server.ObjectInfoHandler;
@@ -129,7 +130,6 @@ public class AtomLinkInfoProvider {
objInfo.setHasParent(false);
}
- // Renditions, currently not supported by in-memory provider
List<RenditionData> renditions = so.getRenditions("*", 0, 0);
if (renditions == null || renditions.size() == 0)
objInfo.setRenditionInfos(null);
@@ -147,10 +147,19 @@ public class AtomLinkInfoProvider {
objInfo.setRenditionInfos(infos);
}
- // Relationships, currently not supported by in-memory provider
- objInfo.setSupportsRelationships(false);
- objInfo.setRelationshipSourceIds(null);
- objInfo.setRelationshipTargetIds(null);
+ // Relationships
+ objInfo.setSupportsRelationships(true);
+ List<StoredObject> rels = so.getObjectRelationships(RelationshipDirection.SOURCE, null);
+ List<String> srcIds = new ArrayList<String>(rels.size());
+ for (StoredObject rel : rels)
+ srcIds.add(rel.getId());
+
+ rels = so.getObjectRelationships(RelationshipDirection.TARGET, null);
+ List<String> targetIds = new ArrayList<String>(rels.size());
+ for (StoredObject rel : rels)
+ targetIds.add(rel.getId());
+ objInfo.setRelationshipSourceIds(srcIds);
+ objInfo.setRelationshipTargetIds(targetIds);
// Policies, currently not supported by in-memory provider
objInfo.setSupportsPolicies(false);
Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/BaseServiceValidatorImpl.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/BaseServiceValidatorImpl.java?rev=1463002&r1=1463001&r2=1463002&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/BaseServiceValidatorImpl.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/BaseServiceValidatorImpl.java Sun Mar 31 16:39:14 2013
@@ -23,7 +23,10 @@ import java.util.List;
import org.apache.chemistry.opencmis.commons.data.Acl;
import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
import org.apache.chemistry.opencmis.commons.data.Properties;
+import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
+import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionContainer;
import org.apache.chemistry.opencmis.commons.enums.AclPropagation;
+import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
import org.apache.chemistry.opencmis.commons.enums.RelationshipDirection;
import org.apache.chemistry.opencmis.commons.enums.UnfileObject;
import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
@@ -47,7 +50,7 @@ public class BaseServiceValidatorImpl im
* Check if repository is known and that object exists. To avoid later calls
* to again retrieve the object from the id return the retrieved object for
* later use.
- *
+ *
* @param repositoryId
* repository id
* @param objectId
@@ -157,11 +160,23 @@ public class BaseServiceValidatorImpl im
protected StoredObject[] checkParams(String repositoryId, String objectId1, String objectId2) {
StoredObject[] so = new StoredObject[2];
- so[0] = checkStandardParameters(repositoryId, objectId1);
ObjectStore objectStore = fStoreManager.getObjectStore(repositoryId);
+ so[0] = checkExistingObjectId(objectStore, objectId1);
so[1] = checkExistingObjectId(objectStore, objectId2);
return so;
}
+
+ protected void checkPolicies(String repositoryId, List<String> policyIds) {
+ if (policyIds != null && policyIds.size() > 0) {
+ for (String policyId : policyIds) {
+ TypeDefinitionContainer tdc = fStoreManager.getTypeById(repositoryId, policyId);
+ if (tdc == null)
+ throw new CmisInvalidArgumentException("Unknown policy type: " + policyId);
+ if (tdc.getTypeDefinition().getBaseTypeId() != BaseTypeId.CMIS_POLICY)
+ throw new CmisInvalidArgumentException( policyId + " is not a policy type");
+ }
+ }
+ }
public void getRepositoryInfos(CallContext context, ExtensionsData extension) {
}
@@ -171,20 +186,17 @@ public class BaseServiceValidatorImpl im
checkRepositoryId(repositoryId);
}
- public void getTypeChildren(CallContext context, String repositoryId, String typeId,
- ExtensionsData extension) {
+ public void getTypeChildren(CallContext context, String repositoryId, String typeId, ExtensionsData extension) {
checkRepositoryId(repositoryId);
}
- public void getTypeDescendants(CallContext context, String repositoryId, String typeId,
- ExtensionsData extension) {
+ public void getTypeDescendants(CallContext context, String repositoryId, String typeId, ExtensionsData extension) {
checkRepositoryId(repositoryId);
}
- public void getTypeDefinition(CallContext context, String repositoryId, String typeId,
- ExtensionsData extension) {
+ public void getTypeDefinition(CallContext context, String repositoryId, String typeId, ExtensionsData extension) {
checkRepositoryId(repositoryId);
}
@@ -231,36 +243,39 @@ public class BaseServiceValidatorImpl im
}
public StoredObject createDocument(CallContext context, String repositoryId, String folderId,
- ExtensionsData extension) {
+ List<String> policyIds, ExtensionsData extension) {
return checkStandardParametersAllowNull(repositoryId, folderId);
}
public StoredObject createDocumentFromSource(CallContext context, String repositoryId, String sourceId,
- String folderId, ExtensionsData extension) {
+ String folderId, List<String> policyIds, ExtensionsData extension) {
return checkStandardParametersAllowNull(repositoryId, sourceId);
}
- public StoredObject createFolder(CallContext context, String repositoryId, String folderId, ExtensionsData extension) {
+ public StoredObject createFolder(CallContext context, String repositoryId, String folderId, List<String> policyIds,
+ ExtensionsData extension) {
return checkStandardParameters(repositoryId, folderId);
}
public StoredObject[] createRelationship(CallContext context, String repositoryId, String sourceId,
- String targetId, ExtensionsData extension) {
+ String targetId, List<String> policyIds, ExtensionsData extension) {
checkRepositoryId(repositoryId);
checkStandardParametersAllowNull(repositoryId, null);
return checkParams(repositoryId, sourceId, targetId);
}
- public StoredObject createPolicy(CallContext context, String repositoryId, String folderId, ExtensionsData extension) {
- return checkStandardParameters(repositoryId, folderId);
+ public StoredObject createPolicy(CallContext context, String repositoryId, String folderId, Acl addAces,
+ Acl removeAces, List<String> policyIds, ExtensionsData extension) {
+
+ return checkStandardParametersAllowNull(repositoryId, null);
}
// CMIS 1.1
public StoredObject createItem(CallContext context, String repositoryId, Properties properties, String folderId,
List<String> policies, Acl addAces, Acl removeAces, ExtensionsData extension) {
return checkStandardParametersAllowNull(repositoryId, folderId);
- }
+ }
public StoredObject getAllowableActions(CallContext context, String repositoryId, String objectId,
ExtensionsData extension) {
@@ -289,7 +304,7 @@ public class BaseServiceValidatorImpl im
public StoredObject getObjectByPath(CallContext context, String repositoryId, String path, ExtensionsData extension) {
return checkStandardParametersByPath(repositoryId, path, context.getUsername());
- }
+ }
public StoredObject getContentStream(CallContext context, String repositoryId, String objectId, String streamId,
ExtensionsData extension) {
@@ -307,7 +322,7 @@ public class BaseServiceValidatorImpl im
String targetFolderId, String sourceFolderId, ExtensionsData extension) {
StoredObject[] res = new StoredObject[3];
- res [0] = checkStandardParameters(repositoryId, objectId.getValue());
+ res[0] = checkStandardParameters(repositoryId, objectId.getValue());
res[1] = checkExistingObjectId(fStoreManager.getObjectStore(repositoryId), sourceFolderId);
res[2] = checkExistingObjectId(fStoreManager.getObjectStore(repositoryId), targetFolderId);
return res;
@@ -352,8 +367,8 @@ public class BaseServiceValidatorImpl im
return checkStandardParameters(repositoryId, objectId);
}
- public StoredObject checkIn(CallContext context, String repositoryId, Holder<String> objectId,
- Acl addAces, Acl removeAces, ExtensionsData extension) {
+ public StoredObject checkIn(CallContext context, String repositoryId, Holder<String> objectId, Acl addAces,
+ Acl removeAces, List<String> policyIds, ExtensionsData extension) {
return checkStandardParameters(repositoryId, objectId.getValue());
}
@@ -400,7 +415,24 @@ public class BaseServiceValidatorImpl im
public StoredObject getObjectRelationships(CallContext context, String repositoryId, String objectId,
RelationshipDirection relationshipDirection, String typeId, ExtensionsData extension) {
- return checkStandardParameters(repositoryId, objectId);
+ StoredObject so = checkStandardParameters(repositoryId, objectId);
+
+ if (relationshipDirection == null) {
+ throw new CmisInvalidArgumentException("Relationship direction cannot be null.");
+ }
+
+ if (typeId != null) {
+ TypeDefinition typeDef = fStoreManager.getTypeById(repositoryId, typeId).getTypeDefinition();
+ if (typeDef == null) {
+ throw new CmisInvalidArgumentException("Type Id " + typeId + " is not known in repository "
+ + repositoryId);
+ }
+
+ if (!typeDef.getBaseTypeId().equals(BaseTypeId.CMIS_RELATIONSHIP)) {
+ throw new CmisInvalidArgumentException("Type Id " + typeId + " is not a relationship type.");
+ }
+ }
+ return so;
}
public StoredObject getAcl(CallContext context, String repositoryId, String objectId, ExtensionsData extension) {
Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryDiscoveryServiceImpl.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/InMemoryDiscoveryServiceImpl.java?rev=1463002&r1=1463001&r2=1463002&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryDiscoveryServiceImpl.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryDiscoveryServiceImpl.java Sun Mar 31 16:39:14 2013
@@ -90,6 +90,10 @@ public class InMemoryDiscoveryServiceImp
changeEventInfo.setChangeType(ChangeType.DELETED);
changeEventInfo.setChangeTime(new GregorianCalendar());
odImpl.setChangeEventInfo(changeEventInfo);
+ if (includePolicyIds != null && includePolicyIds) {
+ // TODO set policies
+ // odImpl.setPolicyIds(policyIds)
+ }
lod.add(odImpl);
objList.setObjects(lod);
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=1463002&r1=1463001&r2=1463002&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 Sun Mar 31 16:39:14 2013
@@ -424,7 +424,8 @@ public class InMemoryNavigationServiceIm
copyFilteredProperties(repositoryId, parentFolder, filter, parent);
- parent.setRelationships(DataObjectCreator.getRelationships(includeRelationships, parentFolder, user));
+ TypeManager tm = fStoreManager.getTypeManager(repositoryId);
+ parent.setRelationships(DataObjectCreator.getRelationships(tm, includeRelationships, parentFolder, user));
if (includeAllowableActions != null && includeAllowableActions) {
// AllowableActions allowableActions = DataObjectCreator.fillAllowableActions(spo, user);
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=1463002&r1=1463001&r2=1463002&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 Sun Mar 31 16:39:14 2013
@@ -104,8 +104,8 @@ public class InMemoryObjectServiceImpl e
// Attach the CallContext to a thread local context that can be
// accessed from everywhere
- StoredObject so = createDocumentIntern(context, repositoryId, properties, folderId, contentStream, versioningState,
- policies, addAces, removeAces, extension);
+ StoredObject so = createDocumentIntern(context, repositoryId, properties, folderId, contentStream,
+ versioningState, policies, addAces, removeAces, extension);
LOG.debug("stop createDocument()");
return so.getId();
}
@@ -115,8 +115,14 @@ public class InMemoryObjectServiceImpl e
Acl addAces, Acl removeAces, ExtensionsData extension) {
LOG.debug("start createDocumentFromSource()");
- StoredObject so = validator.createDocumentFromSource(context, repositoryId, sourceId, folderId, extension);
- TypeDefinition td = getTypeDefinition(repositoryId, so); // type definition may be copied from source object
+ StoredObject so = validator.createDocumentFromSource(context, repositoryId, sourceId, folderId, policies,
+ extension);
+ TypeDefinition td = getTypeDefinition(repositoryId, so); // type
+ // definition
+ // may be
+ // copied from
+ // source
+ // object
ContentStream content = getContentStream(context, repositoryId, sourceId, null, BigInteger.valueOf(-1),
BigInteger.valueOf(-1), null);
@@ -163,8 +169,8 @@ public class InMemoryObjectServiceImpl e
// TODO to be completed if policies are implemented
LOG.debug("start createPolicy()");
- StoredObject so = createPolicyIntern(context, repositoryId, properties, folderId, policies, addAces, removeAces,
- extension);
+ StoredObject so = createPolicyIntern(context, repositoryId, properties, folderId, policies, addAces,
+ removeAces, extension);
LOG.debug("stop createPolicy()");
return so == null ? null : so.getId();
}
@@ -172,17 +178,18 @@ public class InMemoryObjectServiceImpl e
public String createRelationship(CallContext context, String repositoryId, Properties properties,
List<String> policies, Acl addAces, Acl removeAces, ExtensionsData extension) {
- // TODO to be completed if relationships are implemented
LOG.debug("start createRelationship()");
- StoredObject so = createRelationshipIntern(context, repositoryId, properties, policies, addAces, removeAces, extension);
+ StoredObject so = createRelationshipIntern(context, repositoryId, properties, policies, addAces, removeAces,
+ extension);
LOG.debug("stop createRelationship()");
return so == null ? null : so.getId();
}
// CMIS 1.1
- public String createItem(CallContext context, String repositoryId, Properties properties, String folderId, List<String> policies,
- Acl addAces, Acl removeAces, ExtensionsData extension) {
- StoredObject so = createItemIntern(context, repositoryId, properties, folderId, policies, addAces, removeAces, extension);
+ public String createItem(CallContext context, String repositoryId, Properties properties, String folderId,
+ List<String> policies, Acl addAces, Acl removeAces, ExtensionsData extension) {
+ StoredObject so = createItemIntern(context, repositoryId, properties, folderId, policies, addAces, removeAces,
+ extension);
return so.getId();
}
@@ -212,8 +219,8 @@ public class InMemoryObjectServiceImpl e
BaseTypeId typeBaseId = typeDefC.getTypeDefinition().getBaseTypeId();
StoredObject so = null;
if (typeBaseId.equals(InMemoryDocumentTypeDefinition.getRootDocumentType().getBaseTypeId())) {
- so = createDocumentIntern(context, repositoryId, properties, folderId, contentStream, versioningState, null, null,
- null, null);
+ so = createDocumentIntern(context, repositoryId, properties, folderId, contentStream, versioningState,
+ null, null, null, null);
} else if (typeBaseId.equals(InMemoryFolderTypeDefinition.getRootFolderType().getBaseTypeId())) {
so = createFolderIntern(context, repositoryId, properties, folderId, null, null, null, null);
} else if (typeBaseId.equals(InMemoryPolicyTypeDefinition.getRootPolicyType().getBaseTypeId())) {
@@ -250,9 +257,9 @@ public class InMemoryObjectServiceImpl e
throw new CmisObjectNotFoundException("Unknown object id: " + objectId);
}
- if ( so.getChangeToken() != null && ( changeToken == null || !so.getChangeToken().equals( changeToken.getValue() ) ) )
- throw new CmisUpdateConflictException( "deleteContentStream failed, ChangeToken does not match." );
-
+ if (so.getChangeToken() != null && (changeToken == null || !so.getChangeToken().equals(changeToken.getValue())))
+ throw new CmisUpdateConflictException("deleteContentStream failed, ChangeToken does not match.");
+
if (!(so instanceof Content)) {
throw new CmisObjectNotFoundException("Id" + objectId
+ " does not refer to a document, but only documents can have content");
@@ -262,8 +269,8 @@ public class InMemoryObjectServiceImpl e
LOG.debug("stop deleteContentStream()");
}
- public void deleteObject(CallContext context, String repositoryId, String objectId,
- Boolean allVersions, ExtensionsData extension) {
+ public void deleteObject(CallContext context, String repositoryId, String objectId, Boolean allVersions,
+ ExtensionsData extension) {
LOG.debug("start deleteObject()");
validator.deleteObject(context, repositoryId, objectId, allVersions, extension);
@@ -300,7 +307,8 @@ public class InMemoryObjectServiceImpl e
ObjectStore objectStore = fStoreManager.getObjectStore(repositoryId);
if (null == so) {
- throw new CmisInvalidArgumentException("Cannot delete object with id " + folderId + ". Object does not exist.");
+ throw new CmisInvalidArgumentException("Cannot delete object with id " + folderId
+ + ". Object does not exist.");
}
if (!(so instanceof Folder)) {
@@ -318,7 +326,8 @@ public class InMemoryObjectServiceImpl e
}
// recursively delete folder
- deleteRecursive(objectStore, (Folder) so, continueOnFailure, allVersions, failedToDeleteIds, context.getUsername());
+ deleteRecursive(objectStore, (Folder) so, continueOnFailure, allVersions, failedToDeleteIds,
+ context.getUsername());
result.setIds(failedToDeleteIds);
LOG.debug("stop deleteTree()");
@@ -338,7 +347,8 @@ public class InMemoryObjectServiceImpl e
}
String user = context.getUsername();
-// AllowableActions allowableActions = DataObjectCreator.fillAllowableActions(so, user);
+ // AllowableActions allowableActions =
+ // DataObjectCreator.fillAllowableActions(so, user);
AllowableActions allowableActions = so.getAllowableActions(user);
LOG.debug("stop getAllowableActions()");
return allowableActions;
@@ -350,7 +360,6 @@ public class InMemoryObjectServiceImpl e
LOG.debug("start getContentStream()");
StoredObject so = validator.getContentStream(context, repositoryId, objectId, streamId, extension);
-
if (so == null) {
throw new CmisObjectNotFoundException("Unknown object id: " + objectId);
}
@@ -402,8 +411,8 @@ public class InMemoryObjectServiceImpl e
extElements.add(new CmisExtensionElementImpl(ns, "objectId", attr, objectId));
extElements.add(new CmisExtensionElementImpl(ns, "name", null, so.getName()));
- od.setExtensions(Collections.singletonList(
- (CmisExtensionElement) new CmisExtensionElementImpl(ns, "exampleExtension",null, extElements)));
+ od.setExtensions(Collections.singletonList((CmisExtensionElement) new CmisExtensionElementImpl(ns,
+ "exampleExtension", null, extElements)));
LOG.debug("stop getObject()");
@@ -468,7 +477,8 @@ public class InMemoryObjectServiceImpl e
throw new CmisObjectNotFoundException("Unknown object id: " + objectId);
}
- List<RenditionData> renditions = so.getRenditions(renditionFilter, maxItems==null ? 0 : maxItems.longValue(), skipCount==null ? 0: skipCount.longValue());
+ List<RenditionData> renditions = so.getRenditions(renditionFilter, maxItems == null ? 0 : maxItems.longValue(),
+ skipCount == null ? 0 : skipCount.longValue());
LOG.debug("stop getRenditions()");
return renditions;
}
@@ -477,7 +487,8 @@ public class InMemoryObjectServiceImpl e
String targetFolderId, String sourceFolderId, ExtensionsData extension, ObjectInfoHandler objectInfos) {
LOG.debug("start moveObject()");
- StoredObject[] sos = validator.moveObject(context, repositoryId, objectId, targetFolderId, sourceFolderId, extension);
+ StoredObject[] sos = validator.moveObject(context, repositoryId, objectId, targetFolderId, sourceFolderId,
+ extension);
StoredObject so = sos[0];
Folder targetFolder = null;
Folder sourceFolder = null;
@@ -533,8 +544,8 @@ public class InMemoryObjectServiceImpl e
LOG.debug("stop moveObject()");
TypeManager tm = fStoreManager.getTypeManager(repositoryId);
- ObjectData od = PropertyCreationHelper.getObjectData(tm, so, null, user, false,
- IncludeRelationships.NONE, null, false, false, extension);
+ 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
// additional information:
@@ -552,7 +563,7 @@ public class InMemoryObjectServiceImpl e
LOG.debug("start setContentStream()");
Content content;
- if ( null == overwriteFlag ) {
+ if (null == overwriteFlag) {
overwriteFlag = Boolean.TRUE;
}
@@ -562,7 +573,7 @@ public class InMemoryObjectServiceImpl e
&& Long.valueOf(so.getChangeToken()) > Long.valueOf(changeToken.getValue())) {
throw new CmisUpdateConflictException("updateProperties failed: changeToken does not match");
}
-
+
if (!(so instanceof Document || so instanceof VersionedDocument || so instanceof DocumentVersion)) {
throw new CmisObjectNotFoundException("Id" + objectId
+ " does not refer to a document, but only documents can have content");
@@ -572,7 +583,7 @@ public class InMemoryObjectServiceImpl e
TypeDefinition typeDef = getTypeDefinition(repositoryId, so);
if (!(typeDef instanceof DocumentTypeDefinition))
throw new CmisInvalidArgumentException("Object does not refer to a document, can't set content");
- TypeValidator.validateContentAllowed((DocumentTypeDefinition) typeDef , null != contentStream);
+ TypeValidator.validateContentAllowed((DocumentTypeDefinition) typeDef, null != contentStream);
if (so instanceof Document) {
content = ((Document) so);
@@ -587,7 +598,8 @@ public class InMemoryObjectServiceImpl e
}
if (!overwriteFlag && content.getContent(0, -1) != null) {
- throw new CmisContentAlreadyExistsException("cannot overwrite existing content if overwrite flag is not set");
+ throw new CmisContentAlreadyExistsException(
+ "cannot overwrite existing content if overwrite flag is not set");
}
content.setContent(contentStream, true);
@@ -625,7 +637,8 @@ public class InMemoryObjectServiceImpl e
// Find secondary type definitions to consider for update
List<String> existingSecondaryTypeIds = so.getSecondaryTypeIds();
@SuppressWarnings("unchecked")
- PropertyData<String> pdSec = (PropertyData<String>) properties.getProperties().get(PropertyIds.SECONDARY_OBJECT_TYPE_IDS);
+ PropertyData<String> pdSec = (PropertyData<String>) properties.getProperties().get(
+ PropertyIds.SECONDARY_OBJECT_TYPE_IDS);
List<String> newSecondaryTypeIds = pdSec == null ? null : pdSec.getValues();
Set<String> secondaryTypeIds = new HashSet<String>();
if (null != existingSecondaryTypeIds)
@@ -633,72 +646,76 @@ public class InMemoryObjectServiceImpl e
if (null != newSecondaryTypeIds)
secondaryTypeIds.addAll(newSecondaryTypeIds);
- // Find secondary type definitions to delete (null means not set --> do not change, empty --> remove all secondary types)
+ // Find secondary type definitions to delete (null means not set --> do
+ // not change, empty --> remove all secondary types)
if (null != newSecondaryTypeIds) {
- List<String> propertiesIdToDelete = getListOfPropertiesToDeleteFromRemovedSecondaryTypes(repositoryId, so, newSecondaryTypeIds);
+ List<String> propertiesIdToDelete = getListOfPropertiesToDeleteFromRemovedSecondaryTypes(repositoryId, so,
+ newSecondaryTypeIds);
for (String propIdToRemove : propertiesIdToDelete) {
so.getProperties().remove(propIdToRemove);
}
}
// update properties:
- if(properties != null) {
- for (String key : properties.getProperties().keySet()) {
- if (key.equals(PropertyIds.NAME)) {
- continue; // ignore here
- }
+ if (properties != null) {
+ for (String key : properties.getProperties().keySet()) {
+ if (key.equals(PropertyIds.NAME)) {
+ continue; // ignore here
+ }
- PropertyData<?> value = properties.getProperties().get(key);
+ PropertyData<?> value = properties.getProperties().get(key);
PropertyDefinition<?> propDef = typeDef.getPropertyDefinitions().get(key);
- if (null == propDef && cmis11) {
- TypeDefinition typeDefSecondary= getSecondaryTypeDefinition(repositoryId, secondaryTypeIds, key);
- if (null == typeDefSecondary)
- throw new CmisInvalidArgumentException("Cannot update property " + key + ": not contained in type");
- propDef = typeDefSecondary.getPropertyDefinitions().get(key);
- }
-
- if (value.getValues() == null || value.getFirstValue() == null) {
- // delete property
- // check if a required a property
- if (propDef.isRequired()) {
- throw new CmisConstraintException(
- "updateProperties failed, following property can't be deleted, because it is required: "
- + key);
- }
- oldProperties.remove(key);
- hasUpdatedProp = true;
- } else {
- if (propDef.getUpdatability().equals(Updatability.WHENCHECKEDOUT)) {
- if (!isCheckedOut)
- throw new CmisUpdateConflictException(
- "updateProperties failed, following property can't be updated, because it is not checked-out: "
- + key);
- } else if (!propDef.getUpdatability().equals(Updatability.READWRITE)) {
- throw new CmisConstraintException(
- "updateProperties failed, following property can't be updated, because it is not writable: "
- + key);
- }
- oldProperties.put(key, value);
- hasUpdatedProp = true;
- }
- }
-
- // get name from properties and perform special rename to check if
- // path already exists
- PropertyData<?> pd = properties.getProperties().get(PropertyIds.NAME);
- if (pd != null && so instanceof Filing) {
- String newName = (String) pd.getFirstValue();
- List<Folder> parents = ((Filing) so).getParents(user);
- if (so instanceof Folder && parents.isEmpty()) {
- throw new CmisConstraintException("updateProperties failed, you cannot rename the root folder");
- }
- if (newName == null || newName.equals("")) {
- throw new CmisConstraintException("updateProperties failed, name must not be empty.");
- }
-
- so.rename((String) pd.getFirstValue()); // note: this does persist
- hasUpdatedProp = true;
- }
+ if (null == propDef && cmis11) {
+ TypeDefinition typeDefSecondary = getSecondaryTypeDefinition(repositoryId, secondaryTypeIds, key);
+ if (null == typeDefSecondary)
+ throw new CmisInvalidArgumentException("Cannot update property " + key
+ + ": not contained in type");
+ propDef = typeDefSecondary.getPropertyDefinitions().get(key);
+ }
+
+ if (value.getValues() == null || value.getFirstValue() == null) {
+ // delete property
+ // check if a required a property
+ if (propDef.isRequired()) {
+ throw new CmisConstraintException(
+ "updateProperties failed, following property can't be deleted, because it is required: "
+ + key);
+ }
+ oldProperties.remove(key);
+ hasUpdatedProp = true;
+ } else {
+ if (propDef.getUpdatability().equals(Updatability.WHENCHECKEDOUT)) {
+ if (!isCheckedOut)
+ throw new CmisUpdateConflictException(
+ "updateProperties failed, following property can't be updated, because it is not checked-out: "
+ + key);
+ } else if (!propDef.getUpdatability().equals(Updatability.READWRITE)) {
+ throw new CmisConstraintException(
+ "updateProperties failed, following property can't be updated, because it is not writable: "
+ + key);
+ }
+ oldProperties.put(key, value);
+ hasUpdatedProp = true;
+ }
+ }
+
+ // get name from properties and perform special rename to check if
+ // path already exists
+ PropertyData<?> pd = properties.getProperties().get(PropertyIds.NAME);
+ if (pd != null && so instanceof Filing) {
+ String newName = (String) pd.getFirstValue();
+ List<Folder> parents = ((Filing) so).getParents(user);
+ if (so instanceof Folder && parents.isEmpty()) {
+ throw new CmisConstraintException("updateProperties failed, you cannot rename the root folder");
+ }
+ if (newName == null || newName.equals("")) {
+ throw new CmisConstraintException("updateProperties failed, name must not be empty.");
+ }
+
+ so.rename((String) pd.getFirstValue()); // note: this does
+ // persist
+ hasUpdatedProp = true;
+ }
}
if (hasUpdatedProp) {
@@ -729,8 +746,8 @@ public class InMemoryObjectServiceImpl e
}
TypeManager tm = fStoreManager.getTypeManager(repositoryId);
- ObjectData od = PropertyCreationHelper.getObjectData(tm, so, null, user, false,
- IncludeRelationships.NONE, null, false, false, extension);
+ 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
// additional information:
@@ -744,11 +761,11 @@ public class InMemoryObjectServiceImpl e
}
// CMIS 1.1
- public void appendContentStream(CallContext context, String repositoryId, Holder<String> objectId, Holder<String> changeToken,
- ContentStream contentStream, ExtensionsData extension) {
+ public void appendContentStream(CallContext context, String repositoryId, Holder<String> objectId,
+ Holder<String> changeToken, ContentStream contentStream, ExtensionsData extension) {
Content content;
-
+
LOG.debug("start appendContentStream()");
StoredObject so = validator.appendContentStream(context, repositoryId, objectId, extension);
@@ -756,7 +773,7 @@ public class InMemoryObjectServiceImpl e
&& Long.valueOf(so.getChangeToken()) > Long.valueOf(changeToken.getValue())) {
throw new CmisUpdateConflictException("updateProperties failed: changeToken does not match");
}
-
+
if (!(so instanceof Document || so instanceof VersionedDocument || so instanceof DocumentVersion)) {
throw new CmisObjectNotFoundException("Id" + objectId
+ " does not refer to a document, but only documents can have content");
@@ -766,7 +783,7 @@ public class InMemoryObjectServiceImpl e
TypeDefinition typeDef = getTypeDefinition(repositoryId, so);
if (!(typeDef instanceof DocumentTypeDefinition))
throw new CmisInvalidArgumentException("Object does not refer to a document, can't set content");
- TypeValidator.validateContentAllowed((DocumentTypeDefinition) typeDef , null != contentStream);
+ TypeValidator.validateContentAllowed((DocumentTypeDefinition) typeDef, null != contentStream);
if (so instanceof Document) {
content = ((Document) so);
@@ -782,14 +799,14 @@ public class InMemoryObjectServiceImpl e
content.appendContent(contentStream);
}
-
+
public List<BulkUpdateObjectIdAndChangeToken> bulkUpdateProperties(CallContext context, String repositoryId,
List<BulkUpdateObjectIdAndChangeToken> objectIdAndChangeToken, Properties properties,
List<String> addSecondaryTypeIds, List<String> removeSecondaryTypeIds, ExtensionsData extension,
ObjectInfoHandler objectInfos) {
List<BulkUpdateObjectIdAndChangeToken> result = new ArrayList<BulkUpdateObjectIdAndChangeToken>();
- for ( BulkUpdateObjectIdAndChangeToken obj: objectIdAndChangeToken) {
+ for (BulkUpdateObjectIdAndChangeToken obj : objectIdAndChangeToken) {
Holder<String> objId = new Holder<String>(obj.getId());
Holder<String> changeToken = new Holder<String>(obj.getChangeToken());
try {
@@ -801,18 +818,19 @@ public class InMemoryObjectServiceImpl e
}
return result;
}
-
+
// ///////////////////////////////////////////////////////
// private helper methods
- private StoredObject createDocumentIntern(CallContext context, String repositoryId, Properties properties, String folderId,
- ContentStream contentStream, VersioningState versioningState, List<String> policies, Acl addACEs,
- Acl removeACEs, ExtensionsData extension) {
+ private StoredObject createDocumentIntern(CallContext context, String repositoryId, Properties properties,
+ String folderId, ContentStream contentStream, VersioningState versioningState, List<String> policies,
+ Acl addACEs, Acl removeACEs, ExtensionsData extension) {
- addACEs = org.apache.chemistry.opencmis.inmemory.TypeValidator.expandAclMakros(context.getUsername(), addACEs);
- removeACEs = org.apache.chemistry.opencmis.inmemory.TypeValidator.expandAclMakros(context.getUsername(), removeACEs);
+ addACEs = org.apache.chemistry.opencmis.inmemory.TypeValidator.expandAclMakros(context.getUsername(), addACEs);
+ removeACEs = org.apache.chemistry.opencmis.inmemory.TypeValidator.expandAclMakros(context.getUsername(),
+ removeACEs);
- validator.createDocument(context, repositoryId, folderId, extension);
+ validator.createDocument(context, repositoryId, folderId, policies, extension);
// Validation stuff
TypeValidator.validateRequiredSystemProperties(properties);
@@ -826,10 +844,9 @@ public class InMemoryObjectServiceImpl e
PropertyData<?> pd = propMap.get(PropertyIds.NAME);
String name = (String) pd.getFirstValue();
-
// validate ACL
TypeValidator.validateAcl(typeDef, addACEs, removeACEs);
-
+
Folder folder = null;
if (null != folderId) {
StoredObject so = objectStore.getObjectById(folderId);
@@ -850,7 +867,8 @@ public class InMemoryObjectServiceImpl e
// check if the given type is a document type
if (!typeDef.getBaseTypeId().equals(BaseTypeId.CMIS_DOCUMENT)) {
- throw new CmisInvalidArgumentException("Cannot create a document, with a non-document type: " + typeDef.getId());
+ throw new CmisInvalidArgumentException("Cannot create a document, with a non-document type: "
+ + typeDef.getId());
}
// check name syntax
@@ -880,9 +898,11 @@ public class InMemoryObjectServiceImpl e
StoredObject so = null;
- // check if content stream parameters are set and if not set some defaults
- if (null != contentStream && (contentStream.getFileName() == null || contentStream.getFileName().length() == 0 ||
- contentStream.getMimeType() == null || contentStream.getMimeType().length() == 0)) {
+ // check if content stream parameters are set and if not set some
+ // defaults
+ if (null != contentStream
+ && (contentStream.getFileName() == null || contentStream.getFileName().length() == 0
+ || contentStream.getMimeType() == null || contentStream.getMimeType().length() == 0)) {
ContentStreamImpl cs = new ContentStreamImpl();
cs.setStream(contentStream.getStream());
if (contentStream.getFileName() == null || contentStream.getFileName().length() == 0) {
@@ -902,12 +922,13 @@ public class InMemoryObjectServiceImpl e
// Now we are sure to have document type definition:
if (((DocumentTypeDefinition) typeDef).isVersionable()) {
- DocumentVersion version = objectStore.createVersionedDocument(name, propMap,
- user, folder, addACEs, removeACEs, contentStream, versioningState);
+ DocumentVersion version = objectStore.createVersionedDocument(name, propMap, user, folder, policies,
+ addACEs, removeACEs, contentStream, versioningState);
version.persist();
- so = version; // return the version and not the version series to caller
+ so = version; // return the version and not the version series to
+ // caller
} else {
- Document doc = objectStore.createDocument(name, propMap, user, folder, addACEs, removeACEs);
+ Document doc = objectStore.createDocument(name, propMap, user, folder, policies, addACEs, removeACEs);
doc.setContent(contentStream, false);
doc.persist();
so = doc;
@@ -919,10 +940,11 @@ public class InMemoryObjectServiceImpl e
private Folder createFolderIntern(CallContext context, String repositoryId, Properties properties, String folderId,
List<String> policies, Acl addACEs, Acl removeACEs, ExtensionsData extension) {
- addACEs = org.apache.chemistry.opencmis.inmemory.TypeValidator.expandAclMakros(context.getUsername(), addACEs);
- removeACEs = org.apache.chemistry.opencmis.inmemory.TypeValidator.expandAclMakros(context.getUsername(), removeACEs);
+ addACEs = org.apache.chemistry.opencmis.inmemory.TypeValidator.expandAclMakros(context.getUsername(), addACEs);
+ removeACEs = org.apache.chemistry.opencmis.inmemory.TypeValidator.expandAclMakros(context.getUsername(),
+ removeACEs);
- validator.createFolder(context, repositoryId, folderId, extension);
+ validator.createFolder(context, repositoryId, folderId, policies, extension);
TypeValidator.validateRequiredSystemProperties(properties);
String user = context.getUsername();
@@ -938,10 +960,9 @@ public class InMemoryObjectServiceImpl e
// check name syntax
if (!NameValidator.isValidName(folderName)) {
- throw new CmisInvalidArgumentException(NameValidator.ERROR_ILLEGAL_NAME + " Name is: " + folderName);
+ throw new CmisInvalidArgumentException(NameValidator.ERROR_ILLEGAL_NAME + " Name is: " + folderName);
}
-
TypeDefinition typeDef = getTypeDefinition(repositoryId, properties);
// check if the given type is a folder type
@@ -982,34 +1003,48 @@ public class InMemoryObjectServiceImpl e
}
ObjectStore objStore = fStoreManager.getObjectStore(repositoryId);
- Folder newFolder = objStore.createFolder(folderName, properties.getProperties(), user, parent,
- addACEs, removeACEs);
+ Folder newFolder = objStore.createFolder(folderName, properties.getProperties(), user, parent, policies,
+ addACEs, removeACEs);
LOG.debug("stop createFolder()");
newFolder.persist();
return newFolder;
}
- private StoredObject createPolicyIntern(CallContext context, String repositoryId, Properties properties, String folderId,
- List<String> policies, Acl addAces, Acl removeAces, ExtensionsData extension) {
+ private StoredObject createPolicyIntern(CallContext context, String repositoryId, Properties properties,
+ String folderId, List<String> policies, Acl addAces, Acl removeAces, ExtensionsData extension) {
+
+ validator.createPolicy(context, repositoryId, folderId, addAces, removeAces, policies, extension);
+
+ addAces = org.apache.chemistry.opencmis.inmemory.TypeValidator.expandAclMakros(context.getUsername(), addAces);
+ removeAces = org.apache.chemistry.opencmis.inmemory.TypeValidator.expandAclMakros(context.getUsername(),
+ removeAces);
+
+ String user = context.getUsername();
+ Map<String, PropertyData<?>> propMap = properties.getProperties();
+ // get name from properties
+ PropertyData<?> pd = propMap.get(PropertyIds.NAME);
+ String name = (String) pd.getFirstValue();
+ pd = propMap.get(PropertyIds.POLICY_TEXT);
+ String policyText = (String) pd.getFirstValue();
+
+ ObjectStore objStore = fStoreManager.getObjectStore(repositoryId);
+ StoredObject storedObject = objStore.createPolicy(name, policyText, propMap, user);
- addAces = org.apache.chemistry.opencmis.inmemory.TypeValidator.expandAclMakros(context.getUsername(), addAces);
- removeAces = org.apache.chemistry.opencmis.inmemory.TypeValidator.expandAclMakros(context.getUsername(), removeAces);
- validator.createPolicy(context, repositoryId, folderId, extension);
- throw new CmisNotSupportedException("createPolicy is not supported.");
+ return storedObject;
}
- private StoredObject createRelationshipIntern(CallContext context, String repositoryId,
- Properties properties, List<String> policies,
- Acl addACEs, Acl removeACEs, ExtensionsData extension) {
+ private StoredObject createRelationshipIntern(CallContext context, String repositoryId, Properties properties,
+ List<String> policies, Acl addACEs, Acl removeACEs, ExtensionsData extension) {
TypeValidator.validateRequiredSystemProperties(properties);
String user = context.getUsername();
-
- addACEs = org.apache.chemistry.opencmis.inmemory.TypeValidator.expandAclMakros(context.getUsername(), addACEs);
- removeACEs = org.apache.chemistry.opencmis.inmemory.TypeValidator.expandAclMakros(context.getUsername(), removeACEs);
- // get required properties
+ addACEs = org.apache.chemistry.opencmis.inmemory.TypeValidator.expandAclMakros(context.getUsername(), addACEs);
+ removeACEs = org.apache.chemistry.opencmis.inmemory.TypeValidator.expandAclMakros(context.getUsername(),
+ removeACEs);
+
+ // get required properties
PropertyData<?> pd = properties.getProperties().get(PropertyIds.SOURCE_ID);
String sourceId = (String) pd.getFirstValue();
if (null == sourceId || sourceId.length() == 0)
@@ -1020,55 +1055,61 @@ public class InMemoryObjectServiceImpl e
if (null == targetId || targetId.length() == 0)
throw new CmisInvalidArgumentException("Cannot create a relationship without a targetId.");
- RelationshipTypeDefinition typeDef = (RelationshipTypeDefinition) getTypeDefinition(repositoryId, properties);
+ TypeDefinition typeDef = getTypeDefinition(repositoryId, properties);
// check if the given type is a relationship type
if (!typeDef.getBaseTypeId().equals(BaseTypeId.CMIS_RELATIONSHIP))
- throw new CmisInvalidArgumentException("Cannot create a relationship, with a non-relationship type: " + typeDef.getId());
+ throw new CmisInvalidArgumentException("Cannot create a relationship, with a non-relationship type: "
+ + typeDef.getId());
- StoredObject[] relationObjects = validator.createRelationship(context, repositoryId, sourceId, targetId, extension);
+ StoredObject[] relationObjects = validator.createRelationship(context, repositoryId, sourceId, targetId,
+ policies, extension);
+ // set default properties
+ Map<String, PropertyData<?>> propMap = properties.getProperties();
+ Map<String, PropertyData<?>> propMapNew = setDefaultProperties(typeDef, propMap);
+ if (propMapNew != propMap) {
+ properties = new PropertiesImpl(propMapNew.values());
+ }
- // set default properties
- Map<String, PropertyData<?>> propMap = properties.getProperties();
- Map<String, PropertyData<?>> propMapNew = setDefaultProperties(typeDef, propMap);
- if (propMapNew != propMap) {
- properties = new PropertiesImpl(propMapNew.values());
- }
-
- boolean cmis11 = context.getCmisVersion() != CmisVersion.CMIS_1_0;
- validateProperties(repositoryId, null, properties, false, cmis11);
+ boolean cmis11 = context.getCmisVersion() != CmisVersion.CMIS_1_0;
+ validateProperties(repositoryId, null, properties, false, cmis11);
- // validate ACL
- TypeValidator.validateAcl(typeDef, addACEs, removeACEs);
+ // validate ACL
+ TypeValidator.validateAcl(typeDef, addACEs, removeACEs);
- // validate the allowed types of the relationship
- ObjectStore objStore = fStoreManager.getObjectStore(repositoryId);
+ // validate the allowed types of the relationship
+ ObjectStore objStore = fStoreManager.getObjectStore(repositoryId);
- TypeDefinition sourceTypeDef = fStoreManager.getTypeById(repositoryId, objStore.getObjectById(sourceId).getTypeId()).getTypeDefinition();
- TypeDefinition targetTypeDef = fStoreManager.getTypeById(repositoryId, objStore.getObjectById(targetId).getTypeId()).getTypeDefinition();
- TypeValidator.validateAllowedRelationshipTypes(typeDef, sourceTypeDef, targetTypeDef);
+ TypeDefinition sourceTypeDef = fStoreManager.getTypeById(repositoryId,
+ objStore.getObjectById(sourceId).getTypeId()).getTypeDefinition();
+ TypeDefinition targetTypeDef = fStoreManager.getTypeById(repositoryId,
+ objStore.getObjectById(targetId).getTypeId()).getTypeDefinition();
+ TypeValidator.validateAllowedRelationshipTypes((RelationshipTypeDefinition) typeDef, sourceTypeDef,
+ targetTypeDef);
- // get name from properties
- pd = propMap.get(PropertyIds.NAME);
- String name = (String) pd.getFirstValue();
+ // get name from properties
+ pd = propMap.get(PropertyIds.NAME);
+ String name = (String) pd.getFirstValue();
- StoredObject storedObject = objStore.createRelationship( relationObjects[0], relationObjects[1],
- propMap, user, addACEs, removeACEs);
-// StoredObject storedObject = objStore.createRelationship(name, relationObjects[0], relationObjects[1],
-// propMap, user, addACEs, removeACEs);
- return storedObject;
+ // StoredObject storedObject = objStore.createRelationship(
+ // relationObjects[0], relationObjects[1],
+ // propMap, user, addACEs, removeACEs);
+ StoredObject storedObject = objStore.createRelationship(name, relationObjects[0], relationObjects[1], propMap,
+ user, addACEs, removeACEs);
+ return storedObject;
}
- private StoredObject createItemIntern(CallContext context, String repositoryId, Properties properties, String folderId,
- List<String> policies, Acl addACEs, Acl removeACEs, ExtensionsData extension) {
+ private StoredObject createItemIntern(CallContext context, String repositoryId, Properties properties,
+ String folderId, List<String> policies, Acl addACEs, Acl removeACEs, ExtensionsData extension) {
validator.createItem(context, repositoryId, properties, folderId, policies, addACEs, removeACEs, extension);
-
- addACEs = org.apache.chemistry.opencmis.inmemory.TypeValidator.expandAclMakros(context.getUsername(), addACEs);
- removeACEs = org.apache.chemistry.opencmis.inmemory.TypeValidator.expandAclMakros(context.getUsername(), removeACEs);
- validator.createDocument(context, repositoryId, folderId, extension);
+ addACEs = org.apache.chemistry.opencmis.inmemory.TypeValidator.expandAclMakros(context.getUsername(), addACEs);
+ removeACEs = org.apache.chemistry.opencmis.inmemory.TypeValidator.expandAclMakros(context.getUsername(),
+ removeACEs);
+
+ validator.createDocument(context, repositoryId, folderId, policies, extension);
// Validation stuff
TypeValidator.validateRequiredSystemProperties(properties);
@@ -1082,10 +1123,9 @@ public class InMemoryObjectServiceImpl e
PropertyData<?> pd = propMap.get(PropertyIds.NAME);
String name = (String) pd.getFirstValue();
-
// validate ACL
TypeValidator.validateAcl(typeDef, addACEs, removeACEs);
-
+
Folder folder = null;
if (null != folderId) {
StoredObject so = objectStore.getObjectById(folderId);
@@ -1132,9 +1172,9 @@ public class InMemoryObjectServiceImpl e
StoredObject so = null;
// Now we are sure to have document type definition:
- so = objectStore.createItem(name, propMap, user, folder, addACEs, removeACEs);
+ so = objectStore.createItem(name, propMap, user, folder, policies, addACEs, removeACEs);
so.persist();
-
+
return so;
}
@@ -1143,7 +1183,8 @@ public class InMemoryObjectServiceImpl e
String sourceId = sourceFolder.getId();
String targetId = targetFolder.getId();
while (targetId != null) {
- // log.debug("comparing source id " + sourceId + " with predecessor "
+ // log.debug("comparing source id " + sourceId +
+ // " with predecessor "
// +
// targetId);
if (targetId.equals(sourceId)) {
@@ -1162,7 +1203,7 @@ public class InMemoryObjectServiceImpl e
/**
* Recursively delete a tree by traversing it and first deleting all
* children and then the object itself
- *
+ *
* @param folderStore
* @param parentFolder
* @param continueOnFailure
@@ -1184,8 +1225,7 @@ public class InMemoryObjectServiceImpl e
if (child instanceof Folder) {
boolean mustContinue = deleteRecursive(folderStore, (Folder) child, continueOnFailure, allVersions,
failedToDeleteIds, user);
- if (!mustContinue && !continueOnFailure)
- {
+ if (!mustContinue && !continueOnFailure) {
return false; // stop further deletions
}
} else {
@@ -1204,64 +1244,70 @@ public class InMemoryObjectServiceImpl e
ContentStream csd = null;
long lOffset = offset == null ? 0 : offset.longValue();
long lLength = length == null ? -1 : length.longValue();
-
+
if (streamId == null) {
csd = ((Content) so).getContent(lOffset, lLength);
return csd;
} else if (streamId.endsWith("-rendition")) {
csd = so.getRenditionContent(streamId, lOffset, lLength);
}
-
+
return csd;
}
- private Map<String, PropertyData<?>> setDefaultProperties(TypeDefinition typeDef, Map<String, PropertyData<?>> properties) {
+ private Map<String, PropertyData<?>> setDefaultProperties(TypeDefinition typeDef,
+ Map<String, PropertyData<?>> properties) {
Map<String, PropertyDefinition<?>> propDefs = typeDef.getPropertyDefinitions();
boolean hasCopied = false;
- for ( PropertyDefinition<?> propDef : propDefs.values()) {
+ for (PropertyDefinition<?> propDef : propDefs.values()) {
String propId = propDef.getId();
List<?> defaultVal = propDef.getDefaultValue();
if (defaultVal != null && null == properties.get(propId)) {
if (!hasCopied) {
- properties = new HashMap<String, PropertyData<?>>(properties); // copy because it is an unmodified collection
+ properties = new HashMap<String, PropertyData<?>>(properties); // copy
+ // because
+ // it
+ // is
+ // an
+ // unmodified
+ // collection
hasCopied = true;
}
- Object value = propDef.getCardinality() == Cardinality.SINGLE ? defaultVal.get(0)
- : defaultVal;
- PropertyData<?> pd = fStoreManager.getObjectFactory().createPropertyData(
- propDef, value);
+ Object value = propDef.getCardinality() == Cardinality.SINGLE ? defaultVal.get(0) : defaultVal;
+ PropertyData<?> pd = fStoreManager.getObjectFactory().createPropertyData(propDef, value);
// set property:
properties.put(propId, pd);
}
}
return properties;
}
-
- private void validateProperties(String repositoryId, StoredObject so, Properties properties, boolean checkMandatory, boolean cmis11) {
+
+ private void validateProperties(String repositoryId, StoredObject so, Properties properties,
+ boolean checkMandatory, boolean cmis11) {
TypeDefinition typeDef;
-
+
if (null != so)
typeDef = getTypeDefinition(repositoryId, so);
else
typeDef = getTypeDefinition(repositoryId, properties);
-
+
// check properties for validity
if (!cmis11) {
TypeValidator.validateProperties(typeDef, properties, checkMandatory, cmis11);
return;
}
-
+
// CMIS 1.1 secondary types
PropertyData<?> pd = properties.getProperties().get(PropertyIds.SECONDARY_OBJECT_TYPE_IDS);
-
+
@SuppressWarnings("unchecked")
List<String> secondaryTypeIds = (List<String>) (pd == null ? null : pd.getValues());
// if no secondary types are passed use the existing ones:
if (null != so && (null == secondaryTypeIds || secondaryTypeIds.size() == 0)) {
secondaryTypeIds = so.getSecondaryTypeIds();
}
-
+
if (null != secondaryTypeIds && secondaryTypeIds.size() != 0) {
List<String> allTypeIds = new ArrayList<String>(secondaryTypeIds);
allTypeIds.add(typeDef.getId());
@@ -1271,11 +1317,12 @@ public class InMemoryObjectServiceImpl e
TypeValidator.validateProperties(typeDef, properties, checkMandatory, true);
}
}
-
- private TypeDefinition getSecondaryTypeDefinition(String repositoryId, Set<String> secondaryTypeIds, String propertyId) {
+
+ private TypeDefinition getSecondaryTypeDefinition(String repositoryId, Set<String> secondaryTypeIds,
+ String propertyId) {
if (null == secondaryTypeIds || secondaryTypeIds.isEmpty())
return null;
-
+
for (String typeId : secondaryTypeIds) {
TypeDefinitionContainer typeDefC = fStoreManager.getTypeById(repositoryId, typeId);
TypeDefinition typeDef = typeDefC.getTypeDefinition();
@@ -1290,9 +1337,11 @@ public class InMemoryObjectServiceImpl e
private List<String> getListOfPropertiesToDeleteFromRemovedSecondaryTypes(String repositoryId, StoredObject so,
List<String> newSecondaryTypeIds) {
-
- List<String> propertiesToDelete = new ArrayList<String>(); // properties id to be removed
-
+
+ List<String> propertiesToDelete = new ArrayList<String>(); // properties
+ // id to be
+ // removed
+
// calculate delta to be removed
List<String> existingSecondaryTypeIds = so.getSecondaryTypeIds();
List<String> delta = new ArrayList<String>(existingSecondaryTypeIds);
@@ -1303,7 +1352,8 @@ public class InMemoryObjectServiceImpl e
propertiesToDelete.addAll(typeDef.getPropertyDefinitions().keySet());
}
- // TODO: the list may contain too many properties, if the same property is also in a type not to be removed
+ // TODO: the list may contain too many properties, if the same property
+ // is also in a type not to be removed
return propertiesToDelete;
}
Added: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryPolicyServiceImpl.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/InMemoryPolicyServiceImpl.java?rev=1463002&view=auto
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryPolicyServiceImpl.java (added)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryPolicyServiceImpl.java Sun Mar 31 16:39:14 2013
@@ -0,0 +1,45 @@
+/*
+ * 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.chemistry.opencmis.inmemory.server;
+
+import java.util.List;
+
+import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
+import org.apache.chemistry.opencmis.commons.data.ObjectData;
+import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoreManager;
+
+public class InMemoryPolicyServiceImpl extends AbstractServiceImpl {
+
+ protected InMemoryPolicyServiceImpl(StoreManager storeManager) {
+ super(storeManager);
+ }
+
+ public List<ObjectData> getAppliedPolicies(String repositoryId, String objectId, String filter,
+ ExtensionsData extension) {
+ return null;
+ }
+
+ public void removePolicy(String repositoryId, String policyId, String objectId, ExtensionsData extension) {
+
+ }
+
+ public void applyPolicy(String repositoryId, String policyId, String objectId, ExtensionsData extension) {
+ }
+
+}