/**
   * @param repositoryId TODO
   * @param key
   * @param userPermissions
   * @return
   */
  private boolean checkCalculatedPermissions(
      String repositoryId, String key, Set<String> userPermissions) {
    Map<String, PermissionMapping> table =
        repositoryInfoMap.get(repositoryId).getAclCapabilities().getPermissionMapping();
    List<String> actionPermissions = table.get(key).getPermissions();

    for (String up : userPermissions) {
      if (actionPermissions.contains(up) || CmisPermission.ALL.equals(up)) {
        // If any one of user permissions is contained, action is allowed.
        return true;
      }
    }
    return false;
  }
  @Override
  public void constraintPermissionDefined(
      String repositoryId, org.apache.chemistry.opencmis.commons.data.Acl acl, String objectId) {
    boolean aclIsEmpty =
        (acl == null) || (acl != null && CollectionUtils.isEmpty(acl.getAces())) ? true : false;
    List<PermissionDefinition> definitions =
        repositoryInfoMap.get(repositoryId).getAclCapabilities().getPermissions();
    List<String> definedIds = new ArrayList<String>();
    for (PermissionDefinition pdf : definitions) {
      definedIds.add(pdf.getId());
    }

    if (!aclIsEmpty) {
      for (org.apache.chemistry.opencmis.commons.data.Ace ace : acl.getAces()) {
        List<String> permissions = ace.getPermissions();
        for (String p : permissions) {
          if (!definedIds.contains(p)) {
            constraint(objectId, "A provided ACE includes an unsupported permission");
          }
        }
      }
    }
  }
 @Override
 public void objectNotFoundParentFolder(String repositoryId, String id, Content content) {
   if (!repositoryInfoMap.get(repositoryId).getCapabilities().isMultifilingSupported())
     objectNotFound(DomainType.OBJECT, content, id, "The specified parent folder is not found");
 }
 @Override
 public void invalidArgumentOrderBy(String repositoryId, String orderBy) {
   if (repositoryInfoMap.get(repositoryId).getCapabilities().getOrderByCapability()
           == CapabilityOrderBy.NONE
       && orderBy != null) invalidArgument("OrderBy capability is not supported");
 }
 @Override
 public void invalidArgumentRequiredParentFolderId(String repositoryId, String folderId) {
   if (!repositoryInfoMap.get(repositoryId).getCapabilities().isMultifilingSupported())
     invalidArgumentRequiredString("folderId", folderId);
 }
 public void constraintDeleteRootFolder(String repositoryId, String objectId) {
   String rootFolderId = repositoryInfoMap.get(repositoryId).getRootFolderId();
   if (rootFolderId.equals(objectId)) {
     constraint(objectId, "Cannot delete root folder");
   }
 }