/*
* Copyright (C) 2005-2011 Alfresco Software Limited.
*
* This file is part of Alfresco
*
* Alfresco is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Alfresco is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Alfresco. If not, see .
*/
package org.alfresco.cmis;
import java.io.InputStream;
import java.io.Serializable;
import java.math.BigInteger;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.alfresco.query.PagingResults;
import org.alfresco.service.cmr.model.FileInfo;
import org.alfresco.service.cmr.repository.AssociationRef;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.StoreRef;
import org.alfresco.service.namespace.QName;
/**
* CMIS Services.
*
* @author davidc
* @author dward
*/
public interface CMISServices
{
/**
* The prefix we give to association object IDs.
*/
public static final String ASSOC_ID_PREFIX = "assoc:";
/**
* Gets the supported CMIS Version
*
* @return version of CMIS specification supported
*/
public String getCMISVersion();
/**
* Gets the supported CMIS Specification Title
*
* @return CMIS pecification Title
*/
public String getCMISSpecTitle();
/**
* Gets the default root node path
*
* @return root node path
*/
public String getDefaultRootPath();
/**
* Gets the default root node ref
*
* @return root node ref
*/
public NodeRef getDefaultRootNodeRef();
/**
* Gets the default store ref
*
* @return store ref
*/
public StoreRef getDefaultRootStoreRef();
/**
* Finds a NodeRef given a repository reference
*
* @param referenceType node, path
* @param reference node => id, path => path
* @return nodeRef (or null, if not found)
*/
public NodeRef getNode(String referenceType, String[] reference);
/**
* Gets a map of node attributes relating to renditions.
*
* @param nodeRef
* the node ref
* @param renditionFilter
* the rendition filter
* @return the attribute map
* @throws CMISFilterNotValidException
* if the rendition filter is invalid
*/
public Map getRenditions(NodeRef nodeRef, String renditionFilter)
throws CMISFilterNotValidException;
/**
* Get node children
*
* @param parent
* parent node
* @param typesFilter
* types filter
* @param orderBy
* comma-separated list of sort names and the ascending modifier "ASC" or the descending modifier "DESC"
* for each sort name
* @return children of node
*/
public NodeRef[] getChildren(NodeRef parent, CMISTypesFilterEnum typesFilter, String orderBy)
throws CMISInvalidArgumentException;
/**
* Get node children
*
* @param parent
* parent node
* @param typesFilter
* types filter
* @param maxItems
* number of items (in page)
* @param skipCount
* number of items to skip (page starts at next item)
* @param orderBy
* comma-separated list of sort names and the ascending modifier "ASC" or the descending modifier "DESC"
* for each sort name
* @return children of node
*/
public PagingResults getChildren(NodeRef parent, CMISTypesFilterEnum typesFilter, BigInteger maxItems, BigInteger skipCount, String orderBy)
throws CMISInvalidArgumentException;
/**
* Query for checked out items
*
* @param username
* for user
* @param folder
* (optional) within folder
* @param includeDescendants
* true => include descendants of folder, false => only children of folder
* @param orderBy
* comma-separated list of query names and the ascending modifier "ASC" or the descending modifier "DESC"
* for each query name
* @return checked out items
*/
public NodeRef[] getCheckedOut(String username, NodeRef folder, boolean includeDescendants, String orderBy)
throws CMISInvalidArgumentException;
/**
* Query for relationships.
*
* @param relDef
* type of relationship to query (or null, for all relationships)
* @param includeSubTypes
* the include sub types
* @param direction
* limit direction of relationships to query (or null, for both directions)
* @param node
* the node
* @return relationships
* @throws CMISInvalidArgumentException
* if an argument is invalid
*/
public AssociationRef[] getRelationships(NodeRef node, CMISTypeDefinition relDef, boolean includeSubTypes, CMISRelationshipDirectionEnum direction) throws CMISInvalidArgumentException;
/**
* Get a single property belonging to the node's type.
*
* @param nodeRef
* the node
* @param propertyName
* the property name
* @return value
* @throws CMISInvalidArgumentException
* if an argument is invalid
*/
public Serializable getProperty(NodeRef nodeRef, String propertyName) throws CMISInvalidArgumentException;
/**
* Get a single property, optionally constrained to a given node type or aspect
*
* @param nodeRef
* the node
* @param typeDef
* the node type or aspect or null
if any property can be returned
* @param propertyName
* the property name
* @return value
* @throws CMISInvalidArgumentException
* if an argument is invalid
*/
public Serializable getProperty(NodeRef nodeRef, CMISTypeDefinition typeDef, String propertyName)
throws CMISInvalidArgumentException;
/**
* Get a single property for an association.
*
* @param assocRef
* the association
* @param propertyName
* the property name
* @return value
* @throws CMISInvalidArgumentException
* if an argument is invalid
*/
public Serializable getProperty(AssociationRef assocRef, String propertyName) throws CMISInvalidArgumentException;
/**
* Get all properties of a node's type.
*
* @param nodeRef
* the node ref
* @return the properties
* @throws CMISInvalidArgumentException
* if an argument is invalid
*/
public Map getProperties(NodeRef nodeRef) throws CMISInvalidArgumentException;
/**
* Get all properties of an association's type.
*
* @param assocRef
* the association
* @return the properties
* @throws CMISInvalidArgumentException
* if an argument is invalid
*/
public Map getProperties(AssociationRef assocRef) throws CMISInvalidArgumentException;
/**
* Get all of a node's values for the properties in the given type or aspect.
*
* @param nodeRef
* the node ref
* @param typeDef
* the type or aspect definition
* @return the properties
* @throws CMISInvalidArgumentException
* if an argument is invalid
*/
public Map getProperties(NodeRef nodeRef, CMISTypeDefinition typeDef)
throws CMISInvalidArgumentException;
/**
* Gets the aspects applied to a node.
*
* @param nodeRef
* the node ref
* @return the aspect definitions
* @throws CMISInvalidArgumentException
* if an argument is invalid
*/
public Set getAspects(NodeRef nodeRef);
/**
* Set a single property belonging to the node's type.
*
* @param nodeRef
* the node ref
* @param propertyName
* the property name
* @param value
* the value
* @throws CMISInvalidArgumentException
* if an argument is invalid
* @throws CMISConstraintException
* if the property cannot be set
*/
public void setProperty(NodeRef nodeRef, String propertyName, Serializable value)
throws CMISInvalidArgumentException, CMISConstraintException;
/**
* Set a single property, optionally constrained to a given node type or aspect
*
* @param nodeRef
* the node ref
* @param typeDef
* the node type or aspect or null
if any valid property should be set (corresponding aspect
* added automatically).
* @param propertyName
* the property name
* @param value
* the value
* @throws CMISInvalidArgumentException
* if an argument is invalid
* @throws CMISConstraintException
* if the property cannot be set
*/
public void setProperty(NodeRef nodeRef, CMISTypeDefinition typeDef, String propertyName, Serializable value)
throws CMISInvalidArgumentException, CMISConstraintException;
/**
* Sets the aspects on a node (Alfresco extension).
*
* @param node
* the node
* @param aspectsToRemove
* the aspects to remove
* @param aspectsToAdd
* the aspects to add
* @throws CMISInvalidArgumentException
* if an argument is invalid
*/
public void setAspects(NodeRef node, Iterable aspectsToRemove, Iterable aspectsToAdd)
throws CMISInvalidArgumentException;
/**
* Applies a versioning state to a new node, potentially resulting in a new node.
*
* @param source
* the node
* @param versioningState
* the versioning state
* @return the node to write changes to
* @throws CMISConstraintException
* if it's not possible to apply the state
* @throws CMISInvalidArgumentException
* if an argument is invalid
*/
public NodeRef applyVersioningState(NodeRef source, CMISVersioningStateEnum versioningState)
throws CMISConstraintException, CMISInvalidArgumentException;
/**
* Gets a readable object of a required type from an object ID. The object may be immutable. Note that version
* history nodes can be returned as Versions or Nodes.
*
* @param objectId
* the object id
* @param requiredType
* the required type (NodeRef.class, Version.class, AssociationRef.class or Object.class)
* @return the readable object
* @throws CMISConstraintException
* if the object can't be returned as the right type
* @throws CMISVersioningException
* if the object's versioning state isn't as expected
* @throws CMISObjectNotFoundException
* if the object does not exist
* @throws CMISInvalidArgumentException
* if an argument is invalid
* @throws CMISPermissionDeniedException
* if access to the object is denied
*/
public T getReadableObject(String objectId, Class requiredType) throws CMISConstraintException,
CMISVersioningException, CMISObjectNotFoundException, CMISInvalidArgumentException,
CMISPermissionDeniedException;
/**
* Gets an object or a required type from an object ID. The object's mutability and versioning state will be
* validated as required.
*
* @param objectId
* the object id
* @param requiredType
* the required type (NodeRef.class, Version.class, AssociationRef.class or Object.class)
* @param forUpdate
* Do we require to write to this object? If true
then the object must not be checked out
* and must not be a version history node unless the required type is assignable from Version.class.
* @param isVersionable
* Should the object be versionable?
* @param isPwc
* If isVersionable is true
then the object should either be or not be a private working
* copy, as indicated by this flag
* @return the object
* @throws CMISConstraintException
* if the object can't be returned as the right type
* @throws CMISVersioningException
* if the object's versioning state isn't as expected
* @throws CMISObjectNotFoundException
* if the object does not exist
* @throws CMISInvalidArgumentException
* if an argument is invalid
* @throws CMISPermissionDeniedException
* if access to the object is denied
*/
public T getObject(String objectId, Class requiredType, boolean forUpdate, boolean isVersionable,
boolean isPwc) throws CMISConstraintException, CMISVersioningException, CMISObjectNotFoundException,
CMISInvalidArgumentException, CMISPermissionDeniedException;
/**
* Gets the version series of an object.
*
* @param objectId
* the object id
* @param requiredType
* the required type (NodeRef.class, Version.class or AssociationRef.class)
* @param isVersionable
* Should the object be versionable?
* @return the version series
* @throws CMISConstraintException
* if the object can't be returned as the right type
* @throws CMISVersioningException
* if the object's versioning state isn't as expected
* @throws CMISObjectNotFoundException
* if the object does not exist
* @throws CMISInvalidArgumentException
* if an argument is invalid
* @throws CMISPermissionDeniedException
* if access to the object is denied
*/
public T getVersionSeries(String objectId, Class requiredType, boolean isVersionable)
throws CMISConstraintException, CMISVersioningException, CMISObjectNotFoundException,
CMISInvalidArgumentException, CMISPermissionDeniedException;
/**
* Gets a folder from an object ID.
*
* @param objectId
* the object id
* @return the folder
* @throws CMISConstraintException
* if the object can't be returned as the right type
* @throws CMISVersioningException
* if the object's versioning state isn't as expected
* @throws CMISObjectNotFoundException
* if the object does not exist
* @throws CMISInvalidArgumentException
* if an argument is invalid
* @throws CMISPermissionDeniedException
* if access to the object is denied
*/
public NodeRef getFolder(String objectId) throws CMISConstraintException, CMISVersioningException,
CMISObjectNotFoundException, CMISInvalidArgumentException, CMISPermissionDeniedException;
/**
* Gets parent of a folder.
*
* @param folderId
* the folder id
* @return the folder parent
* @throws CMISConstraintException
* if the object can't be returned as the right type
* @throws CMISVersioningException
* if the object's versioning state isn't as expected
* @throws CMISObjectNotFoundException
* if the object does not exist
* @throws CMISInvalidArgumentException
* if an argument is invalid
* @throws CMISPermissionDeniedException
* if access to the object is denied
*/
public NodeRef getFolderParent(String folderId) throws CMISConstraintException, CMISVersioningException,
CMISObjectNotFoundException, CMISInvalidArgumentException, CMISPermissionDeniedException;
/**
* Gets the type definition for a node.
*
* @param nodeRef
* the node
* @return the type definition
* @throws CMISInvalidArgumentException
* if an argument is invalid
*/
public CMISTypeDefinition getTypeDefinition(NodeRef nodeRef) throws CMISInvalidArgumentException;
/**
* Gets the type definition for an association.
*
* @param associationRef
* the association
* @return the type definition
* @throws CMISInvalidArgumentException
* if an argument is invalid
*/
public CMISTypeDefinition getTypeDefinition(AssociationRef associationRef) throws CMISInvalidArgumentException;
/**
* Gets the type definition for a given type ID.
*
* @param typeId
* the type id
* @return the type definition
* @throws CMISInvalidArgumentException
* if an argument is invalid
*/
public CMISTypeDefinition getTypeDefinition(String typeId) throws CMISInvalidArgumentException;
/**
* Gets the type definition for a given object.
*
* @param object
* the object
* @return the type definition
* @throws CMISInvalidArgumentException
* if an argument is invalid
*/
public CMISTypeDefinition getTypeDefinition(Object object) throws CMISInvalidArgumentException;
/**
* Gets the CMIS base types.
*
* @return the base types
*/
public Collection getBaseTypes();
/**
* Checks out an object.
*
* @param objectId
* the object id
* @return the resulting private working copy node
* @throws CMISConstraintException
* if the object isn't of the right type
* @throws CMISVersioningException
* if the object's versioning state isn't as expected
* @throws CMISObjectNotFoundException
* if the object does not exist
* @throws CMISInvalidArgumentException
* if an argument is invalid
* @throws CMISPermissionDeniedException
* if access to the object is denied
*/
public NodeRef checkOut(String objectId) throws CMISConstraintException, CMISVersioningException,
CMISObjectNotFoundException, CMISInvalidArgumentException, CMISPermissionDeniedException;
/**
* Checks in a private working copy.
*
* @param objectId
* the object id of the private working copy
* @param checkinComment
* the checkin comment
* @param isMajor
* Is this a major version?
* @return the checked in node
* @throws CMISConstraintException
* if the object isn't of the right type
* @throws CMISVersioningException
* if the object's versioning state isn't as expected
* @throws CMISObjectNotFoundException
* if the object does not exist
* @throws CMISInvalidArgumentException
* if an argument is invalid
* @throws CMISPermissionDeniedException
* if access to the object is denied
*/
public NodeRef checkIn(String objectId, String checkinComment, boolean isMajor) throws CMISConstraintException,
CMISVersioningException, CMISObjectNotFoundException, CMISInvalidArgumentException,
CMISPermissionDeniedException;
/**
* Cancels check out of a private working copy.
*
* @param objectId
* the object id of the private working copy
* @throws CMISConstraintException
* if the object isn't of the right type
* @throws CMISVersioningException
* if the object's versioning state isn't as expected
* @throws CMISObjectNotFoundException
* if the object does not exist
* @throws CMISInvalidArgumentException
* if an argument is invalid
* @throws CMISPermissionDeniedException
* if access to the object is denied
*/
public void cancelCheckOut(String objectId) throws CMISConstraintException, CMISVersioningException,
CMISObjectNotFoundException, CMISInvalidArgumentException, CMISPermissionDeniedException;
/**
* Gets all versions of an object.
*
* @param objectId
* the object id
* @return the all versions
* @throws CMISConstraintException
* if the object isn't of the right type
* @throws CMISVersioningException
* if the object's versioning state isn't as expected
* @throws CMISObjectNotFoundException
* if the object does not exist
* @throws CMISInvalidArgumentException
* if an argument is invalid
* @throws CMISPermissionDeniedException
* if access to the object is denied
*/
public List getAllVersions(String objectId) throws CMISConstraintException, CMISVersioningException,
CMISObjectNotFoundException, CMISInvalidArgumentException, CMISPermissionDeniedException;
/**
* Gets the latest version of an object and optionally the latest major version.
*
* @param objectId
* the object id
* @param major
* Should we return the latest major version?
* @return the latest version
* @throws CMISConstraintException
* if the object isn't of the right type
* @throws CMISVersioningException
* if the object's versioning state isn't as expected
* @throws CMISObjectNotFoundException
* if the object does not exist
* @throws CMISInvalidArgumentException
* if an argument is invalid
* @throws CMISPermissionDeniedException
* if access to the object is denied
*/
public NodeRef getLatestVersion(String objectId, boolean major) throws CMISConstraintException,
CMISVersioningException, CMISObjectNotFoundException, CMISInvalidArgumentException,
CMISPermissionDeniedException;
/**
* Deletes a folder and its children, without raising any exceptions.
*
* @param objectId
* the folder's object id
* @param continueOnFailure
* should we continue if an error occurs with one of the children?
* @param unfile
* should we remove non-primary associations to nodes rather than delete them?
* @param deleteAllVersions
* should we delete all the versions of the documents we delete?
* @return list of object IDs of the children we failed to delete
* @throws CMISConstraintException
* if the object isn't of the right type
* @throws CMISVersioningException
* if the object's versioning state isn't as expected
* @throws CMISObjectNotFoundException
* if the object does not exist
* @throws CMISInvalidArgumentException
* if an argument is invalid
* @throws CMISPermissionDeniedException
* if access to the object is denied
*/
public List deleteTree(String objectId, boolean continueOnFailure, boolean unfile, boolean deleteAllVersions)
throws CMISConstraintException, CMISVersioningException, CMISObjectNotFoundException,
CMISInvalidArgumentException, CMISPermissionDeniedException;
/**
* Deletes a folder and its children, raising an exception for the last error encountered.
*
* @param objectId
* the folder's object id
* @param continueOnFailure
* should we continue if an error occurs with one of the children?
* @param unfile
* should we remove non-primary associations to nodes rather than delete them?
* @param deleteAllVersions
* should we delete all the versions of the nodes we delete?
* @return list of object IDs of the children we failed to delete
* @throws CMISServiceException
* the last error encountered
*/
public void deleteTreeReportLastError(String objectId, boolean continueOnFailure, boolean unfile,
boolean deleteAllVersions) throws CMISServiceException;
/**
* Deletes a document's content stream.
*
* @param objectId
* the object id of the document
* @throws CMISConstraintException
* if the object isn't of the right type
* @throws CMISVersioningException
* if the object's versioning state isn't as expected
* @throws CMISObjectNotFoundException
* if the object does not exist
* @throws CMISInvalidArgumentException
* if an argument is invalid
* @throws CMISPermissionDeniedException
* if access to the object is denied
*/
public void deleteContentStream(String objectId) throws CMISConstraintException, CMISVersioningException,
CMISObjectNotFoundException, CMISInvalidArgumentException, CMISPermissionDeniedException;
/**
* Deletes an object.
*
* @param objectId
* the object id
* @param allVersions
* if the object is a document, should we delete all versions?
* @throws CMISConstraintException
* if the object isn't of the right type
* @throws CMISVersioningException
* if the object's versioning state isn't as expected
* @throws CMISObjectNotFoundException
* if the object does not exist
* @throws CMISInvalidArgumentException
* if an argument is invalid
* @throws CMISPermissionDeniedException
* if access to the object is denied
* @throws CMISRuntimeException
* on other exceptions
*/
public void deleteObject(String objectId, boolean allVersions) throws CMISConstraintException,
CMISVersioningException, CMISObjectNotFoundException, CMISInvalidArgumentException,
CMISPermissionDeniedException, CMISRuntimeException, CMISServiceException;
/**
* Adds a secondary child association to an object from a folder.
*
* @param objectId
* the object id
* @param folderId
* the folder id
* @throws CMISConstraintException
* if an object isn't of the right type
* @throws CMISVersioningException
* if an object's versioning state isn't as expected
* @throws CMISObjectNotFoundException
* if an object does not exist
* @throws CMISInvalidArgumentException
* if an argument is invalid
* @throws CMISPermissionDeniedException
* if access to an object is denied
*/
public void addObjectToFolder(String objectId, String folderId) throws CMISConstraintException,
CMISVersioningException, CMISObjectNotFoundException, CMISInvalidArgumentException,
CMISPermissionDeniedException;
/**
* Removes a secondary child association to an object from a folder.
*
* @param objectId
* the object id
* @param folderId
* the folder id
* @throws CMISNotSupportedException
* if the child association is primary
* @throws CMISConstraintException
* if an object isn't of the right type
* @throws CMISVersioningException
* if an object's versioning state isn't as expected
* @throws CMISObjectNotFoundException
* if an object does not exist
* @throws CMISInvalidArgumentException
* if an argument is invalid
* @throws CMISPermissionDeniedException
* if access to an object is denied
*/
public void removeObjectFromFolder(String objectId, String folderId) throws CMISNotSupportedException,
CMISConstraintException, CMISVersioningException, CMISObjectNotFoundException,
CMISInvalidArgumentException, CMISPermissionDeniedException;
/**
* Moves an object from one folder to another.
*
* @param objectId
* the object id
* @param targetFolderId
* the target folder id
* @param sourceFolderId
* the source folder id
* @throws CMISConstraintException
* if an object isn't of the right type
* @throws CMISVersioningException
* if an object's versioning state isn't as expected
* @throws CMISObjectNotFoundException
* if an object does not exist
* @throws CMISInvalidArgumentException
* if an argument is invalid
* @throws CMISPermissionDeniedException
* if access to an object is denied
*/
public void moveObject(String objectId, String targetFolderId, String sourceFolderId)
throws CMISConstraintException, CMISVersioningException, CMISObjectNotFoundException,
CMISInvalidArgumentException, CMISPermissionDeniedException;
/**
* Sets the content stream on an object.
*
* @param objectId
* the object id
* @param propertyQName
* the property q name
* @param overwriteFlag
* the overwrite flag
* @param contentStream
* the content stream
* @param mimeType
* the mime type
* @return true
if content was overwritten
* @throws CMISContentAlreadyExistsException
* if overwrite was false
and content already existed
* @throws CMISStreamNotSupportedException
* if the object's type definition does not allow a content stream
* @throws CMISConstraintException
* if an object isn't of the right type
* @throws CMISVersioningException
* if an object's versioning state isn't as expected
* @throws CMISObjectNotFoundException
* if an object does not exist
* @throws CMISInvalidArgumentException
* if an argument is invalid
* @throws CMISPermissionDeniedException
* if access to an object is denied
*/
public boolean setContentStream(String objectId, QName propertyQName, boolean overwriteFlag,
InputStream contentStream, String mimeType) throws CMISConstraintException, CMISVersioningException,
CMISObjectNotFoundException, CMISContentAlreadyExistsException, CMISStreamNotSupportedException,
CMISInvalidArgumentException, CMISPermissionDeniedException;
/**
* Creates a policy object of the specified type, and optionally adds the policy to a folder. Currently no policy
* types can be created in Alfresco.
*
* @param properties
* CMIS properties
* @param folderId
* parent folder for this new policy
* @param policies
* the policies
* @return Id of the created policy object
* @throws CMISConstraintException
* if there is a problem with the supplied properties
* @throws CMISInvalidArgumentException
* if an argument is invalid
* @throws CMISRuntimeException
* on other exceptions
*/
public String createPolicy(Map properties, String folderId, List policies)
throws CMISConstraintException, CMISRuntimeException, CMISInvalidArgumentException;
/**
* Applies a policy object to a target object.
*
* @param policyId
* policy Id
* @param objectId
* target object Id
* @throws CMISConstraintException
* if an object isn't of the right type
* @throws CMISVersioningException
* if an object's versioning state isn't as expected
* @throws CMISObjectNotFoundException
* if an object does not exist
* @throws CMISInvalidArgumentException
* if an argument is invalid
* @throws CMISPermissionDeniedException
* if access to an object is denied
*/
public void applyPolicy(String policyId, String objectId) throws CMISConstraintException, CMISVersioningException,
CMISObjectNotFoundException, CMISInvalidArgumentException, CMISPermissionDeniedException;
/**
* Gets the list of policy objects currently applied to a target object.
*
* @param objectId
* the object id
* @param filter
* property filter
* @return the applied policies
* @throws CMISConstraintException
* if an object isn't of the right type
* @throws CMISVersioningException
* if an object's versioning state isn't as expected
* @throws CMISObjectNotFoundException
* if an object does not exist
* @throws CMISInvalidArgumentException
* if an argument is invalid
* @throws CMISPermissionDeniedException
* if access to an object is denied
* @throws CMISFilterNotValidException
* if the property filter is invalid
*/
public List getAppliedPolicies(String objectId, String filter) throws CMISConstraintException,
CMISVersioningException, CMISObjectNotFoundException, CMISInvalidArgumentException,
CMISPermissionDeniedException, CMISFilterNotValidException;
/**
* Removes a previously applied policy from a target object. The policy object is not deleted, and may still be
* applied to other objects.
*
* @param policyId
* policy Id
* @param objectId
* target object Id.
* @throws CMISConstraintException
* if an object isn't of the right type
* @throws CMISVersioningException
* if an object's versioning state isn't as expected
* @throws CMISObjectNotFoundException
* if an object does not exist
* @throws CMISInvalidArgumentException
* if an argument is invalid
* @throws CMISPermissionDeniedException
* if access to an object is denied
*/
public void removePolicy(String policyId, String objectId) throws CMISConstraintException, CMISVersioningException,
CMISObjectNotFoundException, CMISInvalidArgumentException, CMISPermissionDeniedException;
}