use of org.apache.chemistry.opencmis.commons.enums.Action in project iaf by ibissource.
the class CmisSender method sendMessageForActionFetch.
private String sendMessageForActionFetch(String correlationID, String message, ParameterResolutionContext prc) throws SenderException, TimeOutException {
Element queryElement = null;
try {
if (XmlUtils.isWellFormed(message, "cmis")) {
queryElement = XmlUtils.buildElement(message);
} else {
queryElement = XmlUtils.buildElement("<cmis/>");
}
} catch (DomBuilderException e) {
throw new SenderException(e);
}
String objectIdstr = XmlUtils.getChildTagAsString(queryElement, "objectId");
String filter = XmlUtils.getChildTagAsString(queryElement, "filter");
boolean includeAllowableActions = XmlUtils.getChildTagAsBoolean(queryElement, "includeAllowableActions");
boolean includePolicies = XmlUtils.getChildTagAsBoolean(queryElement, "includePolicies");
boolean includeAcl = XmlUtils.getChildTagAsBoolean(queryElement, "includeAcl");
OperationContext operationContext = session.createOperationContext();
if (StringUtils.isNotEmpty(filter))
operationContext.setFilterString(filter);
operationContext.setIncludeAllowableActions(includeAllowableActions);
operationContext.setIncludePolicies(includePolicies);
operationContext.setIncludeAcls(includeAcl);
CmisObject object = null;
try {
object = session.getObject(session.createObjectId(objectIdstr), operationContext);
} catch (CmisObjectNotFoundException e) {
if (StringUtils.isNotEmpty(getResultOnNotFound())) {
log.info(getLogPrefix() + "document with id [" + message + "] not found", e);
return getResultOnNotFound();
} else {
throw new SenderException(e);
}
}
XmlBuilder cmisXml = new XmlBuilder("cmis");
XmlBuilder propertiesXml = new XmlBuilder("properties");
for (Iterator it = object.getProperties().iterator(); it.hasNext(); ) {
Property property = (Property) it.next();
propertiesXml.addSubElement(getPropertyXml(property));
}
cmisXml.addSubElement(propertiesXml);
XmlBuilder allowableActionsXml = new XmlBuilder("allowableActions");
Set<Action> actions = object.getAllowableActions().getAllowableActions();
for (Action action : actions) {
XmlBuilder actionXml = new XmlBuilder("action");
actionXml.setValue(action.value());
allowableActionsXml.addSubElement(actionXml);
}
cmisXml.addSubElement(allowableActionsXml);
XmlBuilder isExactAclXml = new XmlBuilder("isExactAcl");
if (object.getAcl() != null)
isExactAclXml.setValue(object.getAcl().isExact().toString());
cmisXml.addSubElement(isExactAclXml);
XmlBuilder policiesXml = new XmlBuilder("policyIds");
List<ObjectId> policies = object.getPolicyIds();
if (policies != null) {
for (ObjectId objectId : policies) {
XmlBuilder policyXml = new XmlBuilder("policyId");
policyXml.setValue(objectId.getId());
policiesXml.addSubElement(policyXml);
}
}
cmisXml.addSubElement(policiesXml);
XmlBuilder relationshipsXml = new XmlBuilder("relationships");
List<Relationship> relationships = object.getRelationships();
if (relationships != null) {
for (Relationship relation : relationships) {
XmlBuilder policyXml = new XmlBuilder("relation");
policyXml.setValue(relation.getId());
relationshipsXml.addSubElement(policyXml);
}
}
cmisXml.addSubElement(relationshipsXml);
return cmisXml.toXML();
}
use of org.apache.chemistry.opencmis.commons.enums.Action in project iaf by ibissource.
the class ObjectServiceImpl method getObject.
@Override
public ObjectData getObject(String repositoryId, String objectId, String filter, Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter, Boolean includePolicyIds, Boolean includeAcl, ExtensionsData extensions) {
boolean bypass = AppConstants.getInstance().getBoolean("cmis.proxy.bypass.getObject", false);
if (!bypass) {
ObjectData objectData = objectService.getObject(repositoryId, objectId, filter, includeAllowableActions, includeRelationships, renditionFilter, includePolicyIds, includeAcl, extensions);
return objectData;
} else {
XmlBuilder cmisXml = new XmlBuilder("cmis");
cmisXml.addSubElement(buildXml("repositoryId", repositoryId));
cmisXml.addSubElement(buildXml("objectId", objectId));
cmisXml.addSubElement(buildXml("filter", filter));
cmisXml.addSubElement(buildXml("includeAllowableActions", includeAllowableActions));
cmisXml.addSubElement(buildXml("includePolicies", includePolicyIds));
cmisXml.addSubElement(buildXml("includeAcl", includeAcl));
ObjectDataImpl impl = new ObjectDataImpl();
try {
IPipeLineSession messageContext = new PipeLineSessionBase();
String result = CmisServletDispatcher.getInstance().getCmisListener().processRequest(null, cmisXml.toXML(), messageContext);
Element cmisElement;
if (XmlUtils.isWellFormed(result, "cmis")) {
cmisElement = XmlUtils.buildElement(result);
} else {
cmisElement = XmlUtils.buildElement("<cmis/>");
}
// Handle allowable actions
Element allowableActionsElem = XmlUtils.getFirstChildTag(cmisElement, "allowableActions");
if (allowableActionsElem != null) {
AllowableActionsImpl allowableActions = new AllowableActionsImpl();
Set<Action> actions = EnumSet.noneOf(Action.class);
Iterator<Node> actionIterator = XmlUtils.getChildTags(allowableActionsElem, "action").iterator();
while (actionIterator.hasNext()) {
String property = XmlUtils.getStringValue((Element) actionIterator.next());
actions.add(Action.fromValue(property));
}
allowableActions.setAllowableActions(actions);
impl.setAllowableActions(allowableActions);
}
// Handle isExactAcl
impl.setIsExactAcl(XmlUtils.getChildTagAsBoolean(cmisElement, "isExactAcl"));
// Handle policyIds
Element policyIdsElem = XmlUtils.getFirstChildTag(cmisElement, "policyIds");
if (policyIdsElem != null) {
PolicyIdListImpl policyIdList = new PolicyIdListImpl();
List<String> policies = new ArrayList<String>();
Iterator<Node> policyIterator = XmlUtils.getChildTags(allowableActionsElem, "policyId").iterator();
while (policyIterator.hasNext()) {
String policyId = XmlUtils.getStringValue((Element) policyIterator.next());
policies.add(policyId);
}
policyIdList.setPolicyIds(policies);
impl.setPolicyIds(policyIdList);
}
// Handle properties
impl.setProperties(processProperties(cmisElement));
} catch (Exception e) {
log.error("error creating CMIS objectData: " + e.getMessage(), e.getCause());
}
impl.setRenditions(null);
impl.setExtensions(null);
impl.setChangeEventInfo(null);
impl.setRelationships(null);
return impl;
}
}
use of org.apache.chemistry.opencmis.commons.enums.Action in project copper-cms by PogeyanOSS.
the class AbstractSessionTest method checkChild.
private void checkChild(Session session, List<CmisTestResult> results, Folder folder, CmisObject child) {
CmisTestResult f;
if (child == null) {
addResult(results, createResult(FAILURE, "Folder contains a null child!"));
} else {
String[] propertiesToCheck = new String[child.getType().getPropertyDefinitions().size()];
int i = 0;
for (String propId : child.getType().getPropertyDefinitions().keySet()) {
propertiesToCheck[i++] = propId;
}
addResult(results, checkObject(session, child, propertiesToCheck, "Child check: " + child.getId()));
addResult(results, checkVersionHistory(session, child, propertiesToCheck, "Child version history check: " + child.getId()));
f = createResult(FAILURE, "Child is not fileable! ID: " + child.getId() + " / Type: " + child.getType().getId());
addResult(results, assertIsTrue(child instanceof FileableCmisObject, null, f));
if (child instanceof FileableCmisObject) {
FileableCmisObject fileableChild = (FileableCmisObject) child;
Set<Action> actions = fileableChild.getAllowableActions().getAllowableActions();
boolean hasObjectParentsAction = actions.contains(Action.CAN_GET_OBJECT_PARENTS);
boolean hasFolderParentAction = actions.contains(Action.CAN_GET_FOLDER_PARENT);
if (hasObjectParentsAction || hasFolderParentAction) {
List<Folder> parents = fileableChild.getParents();
f = createResult(FAILURE, "Child has no parents! ID: " + child.getId());
addResult(results, assertListNotEmpty(parents, null, f));
if (child instanceof Folder) {
f = createResult(FAILURE, "Child is a folder and has more than one parent! ID: " + child.getId());
addResult(results, assertIsFalse(parents.size() > 1, null, f));
Folder folderParent = ((Folder) child).getFolderParent();
if (folderParent == null) {
addResult(results, createResult(FAILURE, "getFolderParent() returns null for a non-root folder object! ID: " + child.getId()));
} else {
f = createResult(FAILURE, "getFolderParent() returns wrong parent object! ID: " + child.getId());
addResult(results, assertEquals(folder.getId(), folderParent.getId(), null, f));
if (parents.size() > 0 && parents.get(0) != null) {
f = createResult(FAILURE, "getFolderParent() and getParents() return different parents for a folder object! ID: " + child.getId());
addResult(results, assertEquals(parents.get(0).getId(), folderParent.getId(), null, f));
}
}
}
boolean foundParent = false;
for (Folder parent : parents) {
if (parent == null) {
f = createResult(FAILURE, "One of childs parents is null! ID: " + child.getId());
addResult(results, assertListNotEmpty(parents, null, f));
} else if (folder.getId().equals(parent.getId())) {
foundParent = true;
break;
}
}
if (!foundParent) {
addResult(results, createResult(FAILURE, "Parent folder is not in parents of the child! ID: " + child.getId()));
}
}
// get object by ID and compare
CmisObject objectById = session.getObject(child.getId(), SELECT_ALL_NO_CACHE_OC);
f = createResult(FAILURE, "Child and object fetched by ID don't match! ID: " + child.getId());
addResult(results, assertEquals(child, objectById, null, f, false, false));
// get object by path and compare
List<String> paths = ((FileableCmisObject) child).getPaths();
if (isNullOrEmpty(paths)) {
addResult(results, createResult(FAILURE, "Child has no path! " + child.getId()));
} else {
for (String path : paths) {
CmisObject objectByPath = session.getObjectByPath(path, SELECT_ALL_NO_CACHE_OC);
f = createResult(FAILURE, "Child and object fetched by path don't match! ID: " + child.getId() + " / Path: " + path);
addResult(results, assertEquals(child, objectByPath, null, f, false, false));
f = createResult(FAILURE, "Object fetched by id and object fetched by path don't match! ID: " + child.getId() + " / Path: " + path);
addResult(results, assertEquals(objectById, objectByPath, null, f, true, true));
}
}
}
if (child instanceof Folder) {
f = createResult(WARNING, "Child has no CAN_GET_FOLDER_PARENT allowable action! ID: " + child.getId());
addResult(results, assertAllowableAction(child, Action.CAN_GET_FOLDER_PARENT, null, f));
} else {
f = createResult(WARNING, "Child has no CAN_GET_OBJECT_PARENTS allowable action! ID: " + child.getId());
addResult(results, assertAllowableAction(child, Action.CAN_GET_OBJECT_PARENTS, null, f));
}
}
}
use of org.apache.chemistry.opencmis.commons.enums.Action in project copper-cms by PogeyanOSS.
the class AbstractSessionTest method checkObject.
protected CmisTestResult checkObject(Session session, CmisObject object, String[] properties, String message) {
List<CmisTestResult> results = new ArrayList<CmisTestResult>();
CmisTestResult f;
f = createResult(FAILURE, "Object is null!", true);
addResult(results, assertNotNull(object, null, f));
if (object != null) {
f = createResult(FAILURE, "Object ID is not set!");
addResult(results, assertStringNotEmpty(object.getId(), null, f));
GregorianCalendar creationDate = null;
GregorianCalendar lastModificationDate = null;
// properties
for (String propId : properties) {
Property<?> prop = object.getProperty(propId);
// values of non-spec properties are not checked here
PropertyCheckEnum propertyCheck = PropertyCheckEnum.NO_VALUE_CHECK;
// known properties that are strings and must be set
if (PropertyIds.OBJECT_ID.equals(propId) || PropertyIds.BASE_TYPE_ID.equals(propId) || PropertyIds.OBJECT_TYPE_ID.equals(propId) || PropertyIds.PATH.equals(propId) || PropertyIds.SOURCE_ID.equals(propId) || PropertyIds.TARGET_ID.equals(propId)) {
propertyCheck = PropertyCheckEnum.STRING_MUST_NOT_BE_EMPTY;
}
if (!(object instanceof Relationship)) {
if (PropertyIds.CREATED_BY.equals(propId) || PropertyIds.LAST_MODIFIED_BY.equals(propId)) {
propertyCheck = PropertyCheckEnum.STRING_MUST_NOT_BE_EMPTY;
}
}
// known properties that are strings and should be set
if (PropertyIds.NAME.equals(propId) || PropertyIds.POLICY_TEXT.equals(propId)) {
propertyCheck = PropertyCheckEnum.STRING_SHOULD_NOT_BE_EMPTY;
}
// known properties that are not strings and must be set
if (PropertyIds.IS_IMMUTABLE.equals(propId)) {
propertyCheck = PropertyCheckEnum.MUST_BE_SET;
}
if (!(object instanceof Relationship)) {
if (PropertyIds.CREATION_DATE.equals(propId) || PropertyIds.LAST_MODIFICATION_DATE.equals(propId)) {
propertyCheck = PropertyCheckEnum.MUST_BE_SET;
}
}
// special case: parent
if (PropertyIds.PARENT_ID.equals(propId)) {
if (object instanceof Folder) {
if (((Folder) object).isRootFolder()) {
propertyCheck = PropertyCheckEnum.MUST_NOT_BE_SET;
} else {
propertyCheck = PropertyCheckEnum.STRING_MUST_NOT_BE_EMPTY;
}
} else {
addResult(results, createResult(FAILURE, "Property " + PropertyIds.PARENT_ID + " is only defined for folders!"));
}
}
// special case: path
if (PropertyIds.PATH.equals(propId) && prop.getFirstValue() != null) {
Object path = prop.getFirstValue();
if (path instanceof String) {
f = createResult(FAILURE, "Path does not start with '/': " + path);
addResult(results, assertIsTrue(((String) path).length() > 0 && ((String) path).charAt(0) == '/', null, f));
} else {
addResult(results, createResult(FAILURE, "Property " + PropertyIds.PATH + " is not a string!"));
}
}
// check property
addResult(results, checkProperty(prop, "Property " + propId, propertyCheck));
// catch creationDate and lastModificationDate
if (PropertyIds.CREATION_DATE.equals(propId)) {
if (prop != null) {
creationDate = (GregorianCalendar) prop.getFirstValue();
}
} else if (PropertyIds.LAST_MODIFICATION_DATE.equals(propId)) {
if (prop != null) {
lastModificationDate = (GregorianCalendar) prop.getFirstValue();
}
}
}
// check creationDate <= lastModificationDate
if (creationDate != null && lastModificationDate != null) {
f = createResult(FAILURE, "Last modification date precedes creation date!");
addResult(results, assertIsTrue(creationDate.getTimeInMillis() <= lastModificationDate.getTimeInMillis(), null, f));
f = createResult(WARNING, "Creation date and last modification date have different timezones.");
addResult(assertIsTrue(creationDate.getTimeZone().hasSameRules(lastModificationDate.getTimeZone()), null, f));
}
// allowable actions
if ((object.getAllowableActions() == null) || (object.getAllowableActions().getAllowableActions() == null)) {
addResult(results, createResult(FAILURE, "Object has no allowable actions!"));
} else {
Set<Action> actions = object.getAllowableActions().getAllowableActions();
f = createResult(FAILURE, "Object has no CAN_GET_PROPERTIES allowable action!");
addResult(results, assertAllowableAction(object, Action.CAN_GET_PROPERTIES, null, f));
addResult(results, assertIsTrue(object.hasAllowableAction(Action.CAN_GET_PROPERTIES), null, f));
if (object instanceof Document) {
if (actions.contains(Action.CAN_CHECK_OUT) && actions.contains(Action.CAN_CHECK_IN)) {
addResult(results, createResult(FAILURE, "Document object has CAN_CHECK_OUT and CAN_CHECK_IN allowable actions!"));
}
if (actions.contains(Action.CAN_CHECK_OUT) && actions.contains(Action.CAN_CANCEL_CHECK_OUT)) {
addResult(results, createResult(FAILURE, "Document object has CAN_CHECK_OUT and CAN_CANCEL_CHECK_OUT allowable actions!"));
}
Document doc = (Document) object;
DocumentTypeDefinition docType = (DocumentTypeDefinition) doc.getType();
if (doc.isVersionSeriesCheckedOut() != null) {
if (doc.isVersionSeriesCheckedOut()) {
f = createResult(WARNING, "Document is checked out and has CAN_CHECK_OUT allowable action!");
addResult(results, assertNotAllowableAction(object, Action.CAN_CHECK_OUT, null, f));
if (doc.getVersionSeriesCheckedOutId() == null) {
addResult(results, createResult(WARNING, "Document is checked out and but the property cmis:versionSeriesCheckedOutId is not set!"));
} else {
if (doc.getVersionSeriesCheckedOutId().equals(object.getId())) {
// object is PWC
f = createResult(FAILURE, "PWC doesn't have CAN_CHECK_IN allowable action!");
addResult(results, assertAllowableAction(object, Action.CAN_CHECK_IN, null, f));
f = createResult(FAILURE, "PWC doesn't have CAN_CANCEL_CHECK_OUT allowable action!");
addResult(results, assertAllowableAction(object, Action.CAN_CANCEL_CHECK_OUT, null, f));
} else {
// object is not PWC
f = createResult(WARNING, "Non-PWC has CAN_CHECK_IN allowable action!");
addResult(results, assertNotAllowableAction(object, Action.CAN_CHECK_IN, null, f));
f = createResult(WARNING, "Non-PWC has CAN_CANCEL_CHECK_OUT allowable action!");
addResult(results, assertNotAllowableAction(object, Action.CAN_CANCEL_CHECK_OUT, null, f));
}
}
} else {
f = createResult(FAILURE, "Document is not checked out and has CAN_CHECK_IN allowable action!");
addResult(results, assertNotAllowableAction(object, Action.CAN_CHECK_IN, null, f));
f = createResult(FAILURE, "Document is not checked out and has CAN_CANCEL_CHECK_OUT allowable action!");
addResult(results, assertNotAllowableAction(object, Action.CAN_CANCEL_CHECK_OUT, null, f));
// versionable check
if (docType.isVersionable()) {
//
if (Boolean.TRUE.equals(doc.isLatestVersion())) {
f = createResult(WARNING, "Document is versionable and not checked but has no CAN_CHECK_OUT allowable action!");
addResult(results, assertAllowableAction(object, Action.CAN_CHECK_OUT, null, f));
}
} else {
f = createResult(FAILURE, "Document is not versionable but has CAN_CHECK_OUT allowable action!");
addResult(results, assertNotAllowableAction(object, Action.CAN_CHECK_OUT, null, f));
}
}
} else {
addResult(results, createResult(WARNING, "Property cmis:isVersionSeriesCheckedOut is not set!"));
}
// immutable check
if (Boolean.TRUE.equals(doc.isImmutable())) {
f = createResult(FAILURE, "Document is immutable and has CAN_UPDATE_PROPERTIES allowable action!");
addResult(results, assertNotAllowableAction(object, Action.CAN_UPDATE_PROPERTIES, null, f));
f = createResult(FAILURE, "Document is immutable and has CAN_DELETE_OBJECT allowable action!");
addResult(results, assertNotAllowableAction(object, Action.CAN_DELETE_OBJECT, null, f));
}
} else {
f = createResult(FAILURE, "Non-Document object has CAN_CHECK_IN allowable action!");
addResult(results, assertNotAllowableAction(object, Action.CAN_CHECK_IN, null, f));
f = createResult(FAILURE, "Non-Document object has CAN_CHECK_OUT allowable action!");
addResult(results, assertNotAllowableAction(object, Action.CAN_CHECK_OUT, null, f));
f = createResult(FAILURE, "Non-Document object has CAN_CANCEL_CHECK_OUT allowable action!");
addResult(results, assertNotAllowableAction(object, Action.CAN_CANCEL_CHECK_OUT, null, f));
f = createResult(FAILURE, "Non-Document object has CAN_GET_CONTENT_STREAM allowable action!");
addResult(results, assertNotAllowableAction(object, Action.CAN_GET_CONTENT_STREAM, null, f));
f = createResult(FAILURE, "Non-Document object has CAN_DELETE_CONTENT_STREAM allowable action!");
addResult(results, assertNotAllowableAction(object, Action.CAN_DELETE_CONTENT_STREAM, null, f));
f = createResult(FAILURE, "Non-Document object has CAN_GET_ALL_VERSIONS allowable action!");
addResult(results, assertNotAllowableAction(object, Action.CAN_GET_ALL_VERSIONS, null, f));
}
if (object instanceof Folder) {
Folder folder = (Folder) object;
if (folder.isRootFolder()) {
f = createResult(FAILURE, "Root folder has CAN_DELETE_OBJECT allowable action!");
addResult(results, assertNotAllowableAction(object, Action.CAN_DELETE_OBJECT, null, f));
f = createResult(FAILURE, "Root folder has CAN_GET_FOLDER_PARENT allowable action!");
addResult(results, assertNotAllowableAction(object, Action.CAN_GET_FOLDER_PARENT, null, f));
f = createResult(FAILURE, "Root folder has CAN_MOVE_OBJECT allowable action!");
addResult(results, assertNotAllowableAction(object, Action.CAN_MOVE_OBJECT, null, f));
}
} else {
f = createResult(FAILURE, "Non-Folder object has CAN_GET_DESCENDANTS allowable action!");
addResult(results, assertNotAllowableAction(object, Action.CAN_GET_DESCENDANTS, null, f));
f = createResult(FAILURE, "Non-Folder object has CAN_GET_FOLDER_PARENT allowable action!");
addResult(results, assertNotAllowableAction(object, Action.CAN_GET_FOLDER_PARENT, null, f));
f = createResult(FAILURE, "Non-Folder object has CAN_GET_CHILDREN allowable action!");
addResult(results, assertNotAllowableAction(object, Action.CAN_GET_CHILDREN, null, f));
f = createResult(FAILURE, "Non-Folder object has CAN_DELETE_TREE allowable action!");
addResult(results, assertNotAllowableAction(object, Action.CAN_DELETE_TREE, null, f));
f = createResult(FAILURE, "Non-Folder object has CAN_GET_FOLDER_PARENT allowable action!");
addResult(results, assertNotAllowableAction(object, Action.CAN_GET_FOLDER_PARENT, null, f));
f = createResult(FAILURE, "Non-Folder object has CAN_CREATE_DOCUMENT allowable action!");
addResult(results, assertNotAllowableAction(object, Action.CAN_CREATE_DOCUMENT, null, f));
f = createResult(FAILURE, "Non-Folder object has CAN_CREATE_FOLDER allowable action!");
addResult(results, assertNotAllowableAction(object, Action.CAN_CREATE_FOLDER, null, f));
}
if (!(object instanceof FileableCmisObject) || (object instanceof Folder)) {
f = createResult(FAILURE, "Non-Filable object or folder has CAN_ADD_OBJECT_TO_FOLDER allowable action!");
addResult(results, assertNotAllowableAction(object, Action.CAN_ADD_OBJECT_TO_FOLDER, null, f));
f = createResult(FAILURE, "Non-Filable object or folder has CAN_REMOVE_OBJECT_FROM_FOLDER allowable action!");
addResult(results, assertNotAllowableAction(object, Action.CAN_REMOVE_OBJECT_FROM_FOLDER, null, f));
}
if (!(object instanceof FileableCmisObject)) {
f = createResult(FAILURE, "Non-Fileable object has CAN_MOVE_OBJECT allowable action!");
addResult(results, assertNotAllowableAction(object, Action.CAN_MOVE_OBJECT, null, f));
}
// get allowable actions again
AllowableActions allowableActions = session.getBinding().getObjectService().getAllowableActions(session.getRepositoryInfo().getId(), object.getId(), null);
if (allowableActions.getAllowableActions() == null) {
addResult(results, createResult(FAILURE, "getAllowableActions() didn't returned allowable actions!"));
} else {
f = createResult(FAILURE, "Object allowable actions don't match the allowable actions returned by getAllowableActions()!");
addResult(results, assertEqualSet(object.getAllowableActions().getAllowableActions(), allowableActions.getAllowableActions(), null, f));
}
}
// check ACL
if (object.getAcl() != null && object.getAcl().getAces() != null) {
addResult(results, checkACL(session, object.getAcl(), true, "ACL"));
}
// check policies
if (hasPolicies(session)) {
try {
List<ObjectData> appliedPolicies = session.getBinding().getPolicyService().getAppliedPolicies(session.getRepositoryInfo().getId(), object.getId(), "*", null);
if (appliedPolicies == null) {
appliedPolicies = Collections.emptyList();
}
List<Policy> objectPolicies = object.getPolicies();
if (objectPolicies == null) {
objectPolicies = Collections.emptyList();
}
f = createResult(FAILURE, "The number of policies returned by getAppliedPolicies() and the number of object policies don't match!");
addResult(results, assertEquals(appliedPolicies.size(), objectPolicies.size(), null, f));
} catch (CmisNotSupportedException e) {
addResult(results, createResult(WARNING, "getAppliedPolicies() not supported for object: " + object.getId()));
}
}
// check relationships
checkRelationships(session, results, object);
// check document content
checkDocumentContent(session, results, object);
// check renditions
if (object.getRenditions() != null) {
addResult(results, checkRenditions(session, object, "Rendition check"));
}
// check allowed child object type ids
if (object instanceof Folder) {
List<String> otids = object.getPropertyValue(PropertyIds.ALLOWED_CHILD_OBJECT_TYPE_IDS);
if (otids != null) {
for (String otid : otids) {
try {
session.getTypeDefinition(otid);
} catch (CmisBaseException e) {
addResult(results, createResult(FAILURE, "The cmis:allowedChildObjectTypeIds property contains the type ID '" + otid + "' but the type doesn't exists. Folder ID: " + object.getId()));
}
}
}
}
// check path
if (object instanceof FileableCmisObject) {
List<String> paths = ((FileableCmisObject) object).getPaths();
if (object instanceof Folder) {
f = createResult(FAILURE, "Folder does not have excatly one path! This is an OpenCMIS bug!");
addResult(results, assertEquals(1, paths.size(), null, f));
} else {
if (Boolean.FALSE.equals(session.getRepositoryInfo().getCapabilities().isMultifilingSupported())) {
f = createResult(FAILURE, "Repository does not support multi-filing, but the object has more than one parent!");
addResult(results, assertIsTrue(paths.size() < 2, null, f));
}
}
}
}
CmisTestResultImpl result = createResult(getWorst(results), message);
result.getChildren().addAll(results);
return result.getStatus().getLevel() <= OK.getLevel() ? null : result;
}
Aggregations