package com.constellio.app.api.cmis.binding.collection; import static com.constellio.app.api.cmis.builders.object.AclBuilder.CMIS_ALL; import static com.constellio.app.api.cmis.builders.object.AclBuilder.CMIS_DELETE; import static com.constellio.app.api.cmis.builders.object.AclBuilder.CMIS_READ; import static com.constellio.app.api.cmis.builders.object.AclBuilder.CMIS_WRITE; import java.util.ArrayList; import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import org.apache.chemistry.opencmis.commons.data.PermissionMapping; import org.apache.chemistry.opencmis.commons.data.RepositoryInfo; import org.apache.chemistry.opencmis.commons.definitions.PermissionDefinition; import org.apache.chemistry.opencmis.commons.enums.AclPropagation; import org.apache.chemistry.opencmis.commons.enums.CapabilityAcl; import org.apache.chemistry.opencmis.commons.enums.CapabilityChanges; import org.apache.chemistry.opencmis.commons.enums.CapabilityContentStreamUpdates; import org.apache.chemistry.opencmis.commons.enums.CapabilityJoin; import org.apache.chemistry.opencmis.commons.enums.CapabilityQuery; import org.apache.chemistry.opencmis.commons.enums.CapabilityRenditions; import org.apache.chemistry.opencmis.commons.enums.CmisVersion; import org.apache.chemistry.opencmis.commons.enums.SupportedPermissions; import org.apache.chemistry.opencmis.commons.impl.dataobjects.AclCapabilitiesDataImpl; import org.apache.chemistry.opencmis.commons.impl.dataobjects.CreatablePropertyTypesImpl; import org.apache.chemistry.opencmis.commons.impl.dataobjects.NewTypeSettableAttributesImpl; import org.apache.chemistry.opencmis.commons.impl.dataobjects.PermissionDefinitionDataImpl; import org.apache.chemistry.opencmis.commons.impl.dataobjects.PermissionMappingDataImpl; import org.apache.chemistry.opencmis.commons.impl.dataobjects.RepositoryCapabilitiesImpl; import org.apache.chemistry.opencmis.commons.impl.dataobjects.RepositoryInfoImpl; import org.apache.chemistry.opencmis.commons.server.CallContext; import com.constellio.app.api.cmis.builders.object.AclBuilder; public class ConstellioCollectionRepositoryInfoManager { private static final String ROOT_ID = "@root@"; private final String collection; private final String constellioVersion; private final RepositoryInfo repositoryInfoForStandardVersion1_0; private final RepositoryInfo repositoryInfoForStandardVersion1_1; public ConstellioCollectionRepositoryInfoManager(String collection, String constellioVersion) { this.collection = collection; this.constellioVersion = constellioVersion; repositoryInfoForStandardVersion1_0 = createRepositoryInfo(CmisVersion.CMIS_1_0); repositoryInfoForStandardVersion1_1 = createRepositoryInfo(CmisVersion.CMIS_1_1); } private RepositoryInfo createRepositoryInfo(CmisVersion cmisVersion) { assert cmisVersion != null; RepositoryInfoImpl repositoryInfo = new RepositoryInfoImpl(); repositoryInfo.setId(collection); repositoryInfo.setName(collection); repositoryInfo.setDescription(collection); repositoryInfo.setCmisVersionSupported(cmisVersion.value()); repositoryInfo.setProductName("Constellio"); repositoryInfo.setProductVersion(constellioVersion); repositoryInfo.setVendorName("DocuLibre"); repositoryInfo.setRootFolder(ROOT_ID); repositoryInfo.setThinClientUri(""); repositoryInfo.setChangesIncomplete(true); RepositoryCapabilitiesImpl capabilities = new RepositoryCapabilitiesImpl(); capabilities.setCapabilityAcl(CapabilityAcl.MANAGE); capabilities.setAllVersionsSearchable(false); capabilities.setCapabilityJoin(CapabilityJoin.NONE); capabilities.setSupportsMultifiling(false); capabilities.setSupportsUnfiling(false); capabilities.setSupportsVersionSpecificFiling(false); capabilities.setIsPwcSearchable(false); capabilities.setIsPwcUpdatable(false); capabilities.setCapabilityQuery(CapabilityQuery.METADATAONLY); capabilities.setCapabilityChanges(CapabilityChanges.NONE); capabilities .setCapabilityContentStreamUpdates(CapabilityContentStreamUpdates.ANYTIME); capabilities.setSupportsGetDescendants(true); capabilities.setSupportsGetFolderTree(true); capabilities.setCapabilityRendition(CapabilityRenditions.NONE); if (cmisVersion != CmisVersion.CMIS_1_0) { //capabilities.setOrderByCapability(CapabilityOrderBy.NONE); NewTypeSettableAttributesImpl typeSetAttributes = new NewTypeSettableAttributesImpl(); typeSetAttributes.setCanSetControllableAcl(true); typeSetAttributes.setCanSetControllablePolicy(false); typeSetAttributes.setCanSetCreatable(false); typeSetAttributes.setCanSetDescription(false); typeSetAttributes.setCanSetDisplayName(false); typeSetAttributes.setCanSetFileable(false); typeSetAttributes.setCanSetFulltextIndexed(false); typeSetAttributes.setCanSetId(false); typeSetAttributes.setCanSetIncludedInSupertypeQuery(false); typeSetAttributes.setCanSetLocalName(false); typeSetAttributes.setCanSetLocalNamespace(false); typeSetAttributes.setCanSetQueryable(false); typeSetAttributes.setCanSetQueryName(false); capabilities.setNewTypeSettableAttributes(typeSetAttributes); CreatablePropertyTypesImpl creatablePropertyTypes = new CreatablePropertyTypesImpl(); capabilities.setCreatablePropertyTypes(creatablePropertyTypes); } repositoryInfo.setCapabilities(capabilities); AclCapabilitiesDataImpl aclCapability = new AclCapabilitiesDataImpl(); aclCapability.setSupportedPermissions(SupportedPermissions.BASIC); aclCapability.setAclPropagation(AclPropagation.REPOSITORYDETERMINED); // permissions List<PermissionDefinition> permissions = new ArrayList<PermissionDefinition>(); permissions.add(createPermission(CMIS_READ, "Read")); permissions.add(createPermission(CMIS_WRITE, "Write")); permissions.add(createPermission(CMIS_DELETE, "Delete")); permissions.add(createPermission(CMIS_ALL, "All")); aclCapability.setPermissionDefinitionData(permissions); // mapping List<PermissionMapping> list = new ArrayList<PermissionMapping>(); list.add(createMapping(PermissionMapping.CAN_CREATE_DOCUMENT_FOLDER, CMIS_READ)); list.add(createMapping(PermissionMapping.CAN_CREATE_FOLDER_FOLDER, CMIS_READ)); list.add(createMapping(PermissionMapping.CAN_DELETE_CONTENT_DOCUMENT, CMIS_WRITE)); list.add(createMapping(PermissionMapping.CAN_DELETE_OBJECT, CMIS_ALL)); list.add(createMapping(PermissionMapping.CAN_DELETE_TREE_FOLDER, CMIS_ALL)); list.add(createMapping(PermissionMapping.CAN_GET_ACL_OBJECT, CMIS_READ)); list.add(createMapping(PermissionMapping.CAN_APPLY_ACL_OBJECT, CMIS_READ)); list.add(createMapping(PermissionMapping.CAN_GET_ALL_VERSIONS_VERSION_SERIES, CMIS_READ)); list.add(createMapping(PermissionMapping.CAN_GET_CHILDREN_FOLDER, CMIS_READ)); list.add(createMapping(PermissionMapping.CAN_GET_DESCENDENTS_FOLDER, CMIS_READ)); list.add(createMapping(PermissionMapping.CAN_GET_FOLDER_PARENT_OBJECT, CMIS_READ)); list.add(createMapping(PermissionMapping.CAN_GET_PARENTS_FOLDER, CMIS_READ)); list.add(createMapping(PermissionMapping.CAN_GET_PROPERTIES_OBJECT, CMIS_READ)); list.add(createMapping(PermissionMapping.CAN_MOVE_OBJECT, CMIS_WRITE)); list.add(createMapping(PermissionMapping.CAN_MOVE_SOURCE, CMIS_READ)); list.add(createMapping(PermissionMapping.CAN_MOVE_TARGET, CMIS_WRITE)); list.add(createMapping(PermissionMapping.CAN_SET_CONTENT_DOCUMENT, CMIS_WRITE)); list.add(createMapping(PermissionMapping.CAN_UPDATE_PROPERTIES_OBJECT, CMIS_WRITE)); list.add(createMapping(PermissionMapping.CAN_VIEW_CONTENT_OBJECT, CMIS_READ)); Map<String, PermissionMapping> map = new LinkedHashMap<String, PermissionMapping>(); for (PermissionMapping pm : list) { map.put(pm.getKey(), pm); } aclCapability.setPermissionMappingData(map); repositoryInfo.setAclCapabilities(aclCapability); return repositoryInfo; } private PermissionDefinition createPermission(String permission, String description) { PermissionDefinitionDataImpl pd = new PermissionDefinitionDataImpl(); pd.setId(permission); pd.setDescription(description); return pd; } private PermissionMapping createMapping(String key, String permission) { PermissionMappingDataImpl pm = new PermissionMappingDataImpl(); pm.setKey(key); pm.setPermissions(Collections.singletonList(permission)); return pm; } /** * CMIS getRepositoryInfo. */ public RepositoryInfo getRepositoryInfo(CallContext context) { if (context.getCmisVersion() == CmisVersion.CMIS_1_0) { return repositoryInfoForStandardVersion1_0; } else { return repositoryInfoForStandardVersion1_1; } } }