You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@chemistry.apache.org by fm...@apache.org on 2017/03/16 12:03:46 UTC
svn commit: r1787163 - in /chemistry/opencmis/trunk:
chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/
chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemi...
Author: fmui
Date: Thu Mar 16 12:03:46 2017
New Revision: 1787163
URL: http://svn.apache.org/viewvc?rev=1787163&view=rev
Log:
introduced lazy loading of policies
Modified:
chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/CmisObject.java
chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/AbstractCmisObject.java
chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/test/java/org/apache/chemistry/opencmis/client/runtime/CmisObjectMock.java
chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/CreateAndDeletePolicyTest.java
Modified: chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/CmisObject.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/CmisObject.java?rev=1787163&r1=1787162&r2=1787163&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/CmisObject.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/CmisObject.java Thu Mar 16 12:03:46 2017
@@ -112,9 +112,9 @@ public interface CmisObject extends Obje
*
* @param allVersions
* if this object is a document this parameter defines whether
- * only this version ({@code false}) or all versions ({@code true}
- * ) should be deleted, the parameter is ignored for all other
- * object types
+ * only this version ({@code false}) or all versions
+ * ({@code true} ) should be deleted, the parameter is ignored
+ * for all other object types
*
* @cmis 1.0
*/
@@ -296,15 +296,35 @@ public interface CmisObject extends Obje
/**
* Returns the applied policies if they have been fetched for this object.
+ * This method fetches the policy objects from the repository when this
+ * method is called for the first time. Policy objects that don't exist are
+ * ignored.
*
* @return the list of policies applied to this object or {@code null} if
* the policies have not been requested or no policies are applied
* to this object
*
+ * @see #getPolicyIds()
+ *
* @cmis 1.0
*/
List<Policy> getPolicies();
+ /**
+ * Returns the applied policy IDs if they have been fetched for this object.
+ * All applied policy IDs are returned, even IDs of policies that don't
+ * exist.
+ *
+ * @return the list of IDs of applied policies or {@code null} if the
+ * policies have not been requested or no policies are applied to
+ * this object
+ *
+ * @see #getPolicies()
+ *
+ * @cmis 1.0
+ */
+ List<ObjectId> getPolicyIds();
+
// ACL service
/**
Modified: chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/AbstractCmisObject.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/AbstractCmisObject.java?rev=1787163&r1=1787162&r2=1787163&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/AbstractCmisObject.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/AbstractCmisObject.java Thu Mar 16 12:03:46 2017
@@ -57,6 +57,7 @@ import org.apache.chemistry.opencmis.com
import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
import org.apache.chemistry.opencmis.commons.enums.ExtensionLevel;
import org.apache.chemistry.opencmis.commons.enums.Updatability;
+import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
import org.apache.chemistry.opencmis.commons.spi.CmisBinding;
import org.apache.chemistry.opencmis.commons.spi.Holder;
@@ -74,6 +75,7 @@ public abstract class AbstractCmisObject
private AllowableActions allowableActions;
private List<Rendition> renditions;
private Acl acl;
+ private List<String> policyIds;
private List<Policy> policies;
private List<Relationship> relationships;
private Map<ExtensionLevel, List<CmisExtensionElement>> extensions;
@@ -129,7 +131,7 @@ public abstract class AbstractCmisObject
List<String> stids = (List<String>) objectData.getProperties().getProperties()
.get(PropertyIds.SECONDARY_OBJECT_TYPE_IDS).getValues();
if (isNotEmpty(stids)) {
- secondaryTypes = new ArrayList<SecondaryType>();
+ secondaryTypes = new ArrayList<SecondaryType>(stids.size());
for (String stid : stids) {
if (stid != null) {
ObjectType type = session.getTypeDefinition(stid);
@@ -157,7 +159,7 @@ public abstract class AbstractCmisObject
// handle renditions
if (objectData.getRenditions() != null && !objectData.getRenditions().isEmpty()) {
- renditions = new ArrayList<Rendition>();
+ renditions = new ArrayList<Rendition>(objectData.getRenditions().size());
for (RenditionData rd : objectData.getRenditions()) {
renditions.add(of.convertRendition(getId(), rd));
}
@@ -201,26 +203,21 @@ public abstract class AbstractCmisObject
}
// handle policies
+ policies = null;
if (objectData.getPolicyIds() != null && objectData.getPolicyIds().getPolicyIds() != null) {
if (objectData.getPolicyIds().getPolicyIds().isEmpty()) {
- policies = null;
+ policyIds = null;
} else {
- policies = new ArrayList<Policy>();
- for (String pid : objectData.getPolicyIds().getPolicyIds()) {
- CmisObject policy = session.getObject(pid);
- if (policy instanceof Policy) {
- policies.add((Policy) policy);
- }
- }
+ policyIds = objectData.getPolicyIds().getPolicyIds();
}
extensions.put(ExtensionLevel.POLICIES, objectData.getPolicyIds().getExtensions());
} else {
- policies = null;
+ policyIds = null;
}
// handle relationships
if (objectData.getRelationships() != null && !objectData.getRelationships().isEmpty()) {
- relationships = new ArrayList<Relationship>();
+ relationships = new ArrayList<Relationship>(objectData.getRelationships().size());
for (ObjectData rod : objectData.getRelationships()) {
CmisObject relationship = of.convertObject(rod, this.creationContext);
if (relationship instanceof Relationship) {
@@ -397,12 +394,10 @@ public abstract class AbstractCmisObject
}
// it's time to update
- getBinding().getObjectService().updateProperties(
- getRepositoryId(),
- objectIdHolder,
- changeTokenHolder,
- getObjectFactory()
- .convertProperties(properties, this.objectType, this.secondaryTypes, updatebility), null);
+ getBinding().getObjectService().updateProperties(getRepositoryId(), objectIdHolder, changeTokenHolder,
+ getObjectFactory().convertProperties(properties, this.objectType, this.secondaryTypes,
+ updatebility),
+ null);
newObjectId = objectIdHolder.getValue();
@@ -607,7 +602,7 @@ public abstract class AbstractCmisObject
public ObjectType getType() {
readLock();
try {
- return this.objectType;
+ return objectType;
} finally {
readUnlock();
}
@@ -658,7 +653,7 @@ public abstract class AbstractCmisObject
public AllowableActions getAllowableActions() {
readLock();
try {
- return this.allowableActions;
+ return allowableActions;
} finally {
readUnlock();
}
@@ -684,7 +679,7 @@ public abstract class AbstractCmisObject
public List<Rendition> getRenditions() {
readLock();
try {
- return this.renditions;
+ return renditions;
} finally {
readUnlock();
}
@@ -820,8 +815,50 @@ public abstract class AbstractCmisObject
public List<Policy> getPolicies() {
readLock();
try {
+ if (policies != null || policyIds == null) {
+ return policies;
+ }
+ } finally {
+ readUnlock();
+ }
+
+ writeLock();
+ try {
+ if (policies == null) {
+ policies = new ArrayList<Policy>(policyIds.size());
+ for (String pid : policyIds) {
+ try {
+ CmisObject policy = session.getObject(pid);
+ if (policy instanceof Policy) {
+ policies.add((Policy) policy);
+ }
+ } catch (CmisObjectNotFoundException nfe) {
+ // ignore
+ }
+ }
+ }
+
return policies;
} finally {
+ writeUnlock();
+ }
+ }
+
+ @Override
+ public List<ObjectId> getPolicyIds() {
+ readLock();
+ try {
+ if (policyIds == null) {
+ return null;
+ }
+
+ List<ObjectId> result = new ArrayList<ObjectId>(policyIds.size());
+ for (String pid : policyIds) {
+ result.add(session.createObjectId(pid));
+ }
+
+ return result;
+ } finally {
readUnlock();
}
}
@@ -878,12 +915,9 @@ public abstract class AbstractCmisObject
OperationContext oc = getCreationContext();
// get the latest data from the repository
- ObjectData objectData = getSession()
- .getBinding()
- .getObjectService()
- .getObject(getRepositoryId(), objectId, oc.getFilterString(), oc.isIncludeAllowableActions(),
- oc.getIncludeRelationships(), oc.getRenditionFilterString(), oc.isIncludePolicies(),
- oc.isIncludeAcls(), null);
+ ObjectData objectData = getSession().getBinding().getObjectService().getObject(getRepositoryId(), objectId,
+ oc.getFilterString(), oc.isIncludeAllowableActions(), oc.getIncludeRelationships(),
+ oc.getRenditionFilterString(), oc.isIncludePolicies(), oc.isIncludeAcls(), null);
// reset this object
initialize(session, session.getTypeDefinition(objectType.getId()), objectData, creationContext);
Modified: chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/test/java/org/apache/chemistry/opencmis/client/runtime/CmisObjectMock.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/test/java/org/apache/chemistry/opencmis/client/runtime/CmisObjectMock.java?rev=1787163&r1=1787162&r2=1787163&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/test/java/org/apache/chemistry/opencmis/client/runtime/CmisObjectMock.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/test/java/org/apache/chemistry/opencmis/client/runtime/CmisObjectMock.java Thu Mar 16 12:03:46 2017
@@ -148,6 +148,11 @@ public class CmisObjectMock implements C
}
@Override
+ public List<ObjectId> getPolicyIds() {
+ return null;
+ }
+
+ @Override
public List<Property<?>> getProperties() {
return null;
}
Modified: chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/CreateAndDeletePolicyTest.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/CreateAndDeletePolicyTest.java?rev=1787163&r1=1787162&r2=1787163&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/CreateAndDeletePolicyTest.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/CreateAndDeletePolicyTest.java Thu Mar 16 12:03:46 2017
@@ -21,6 +21,7 @@ package org.apache.chemistry.opencmis.tc
import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.FAILURE;
import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.INFO;
import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.SKIPPED;
+import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.WARNING;
import java.util.List;
import java.util.Map;
@@ -42,7 +43,8 @@ public class CreateAndDeletePolicyTest e
public void init(Map<String, String> parameters) {
super.init(parameters);
setName("Create and Delete Policy Test");
- setDescription("Creates a policy object, checks the newly created policy object, applys and removes it from a document, and finally deletes the created policy object.");
+ setDescription(
+ "Creates a policy object, checks the newly created policy object, applys and removes it from a document, and finally deletes the created policy object.");
}
@Override
@@ -78,6 +80,10 @@ public class CreateAndDeletePolicyTest e
+ ", Doc Id: " + doc.getId());
addResult(assertIsTrue(found1, null, f));
+ // check if policy IDs and policy object match
+ f = createResult(WARNING, "Not all policy IDs can be resolved to policy objects.");
+ addResult(assertEquals(doc.getPolicyIds().size(), doc.getPolicies().size(), null, f));
+
// get the policies
List<ObjectData> policiesData2 = session.getBinding().getPolicyService()
.getAppliedPolicies(session.getRepositoryInfo().getId(), doc.getId(), "*", null);
@@ -92,9 +98,8 @@ public class CreateAndDeletePolicyTest e
}
}
- f = createResult(FAILURE,
- "Applied policy is not returned by the repository! Policy Id: " + policy.getId()
- + ", Doc Id: " + doc.getId());
+ f = createResult(FAILURE, "Applied policy is not returned by the repository! Policy Id: "
+ + policy.getId() + ", Doc Id: " + doc.getId());
addResult(assertIsTrue(found2, null, f));
// remove policy
@@ -111,17 +116,13 @@ public class CreateAndDeletePolicyTest e
}
}
- f = createResult(FAILURE,
- "Policy has not been removed from document! Policy Id: " + policy.getId()
- + ", Doc Id: " + doc.getId());
+ f = createResult(FAILURE, "Policy has not been removed from document! Policy Id: "
+ + policy.getId() + ", Doc Id: " + doc.getId());
addResult(assertIsFalse(found3, null, f));
}
} else {
- addResult(createResult(
- INFO,
- "Document type "
- + doc.getType().getId()
- + " does not allow applying and removing policies. Choose a different document type for this test."));
+ addResult(createResult(INFO, "Document type " + doc.getType().getId()
+ + " does not allow applying and removing policies. Choose a different document type for this test."));
}
// delete document