Class AbstractSession

java.lang.Object
org.nuxeo.ecm.core.api.AbstractSession
All Implemented Interfaces:
Serializable, CoreSession
Direct Known Subclasses:
LocalSession

public abstract class AbstractSession extends Object implements CoreSession, Serializable
Abstract implementation of the client interface.

This handles all the aspects that are independent on the final implementation (like running inside a J2EE platform or not).

The only aspect not implemented is the session management that should be handled by subclasses.

Author:
Bogdan Stefanescu, Florent Guillaume
See Also:
  • Field Details

    • DEFAULT_MAX_RESULTS

      public static final String DEFAULT_MAX_RESULTS
      See Also:
    • MAX_RESULTS_PROPERTY

      public static final String MAX_RESULTS_PROPERTY
      See Also:
    • LIMIT_RESULTS_PROPERTY

      public static final String LIMIT_RESULTS_PROPERTY
      See Also:
    • TRASH_KEEP_CHECKED_IN_PROPERTY

      @Deprecated public static final String TRASH_KEEP_CHECKED_IN_PROPERTY
      Deprecated.
      since 10.1, new trash behavior is: always keep checkedIn state
      See Also:
    • DISABLED_ISLATESTVERSION_PROPERTY

      public static final String DISABLED_ISLATESTVERSION_PROPERTY
      See Also:
    • BINARY_TEXT_SYS_PROP

      public static final String BINARY_TEXT_SYS_PROP
      See Also:
    • RESTRICT_PROXY_CREATION_PROPERTY

      public static final String RESTRICT_PROXY_CREATION_PROPERTY
      See Also:
    • BLOCKED_PERMISSION_QUERY

      public static final String BLOCKED_PERMISSION_QUERY
      Since:
      2023
      See Also:
    • RETENTION_QUERY

      public static final String RETENTION_QUERY
      Since:
      2023
      See Also:
    • FIND_VERSIONS_QUERY

      public static final String FIND_VERSIONS_QUERY
      See Also:
    • FIND_PROXIES_QUERY

      public static final String FIND_PROXIES_QUERY
      See Also:
    • registry

      protected static final io.dropwizard.metrics5.MetricRegistry registry
    • CREATE_DOC_COUNT

      protected static final Map<String,io.dropwizard.metrics5.Counter> CREATE_DOC_COUNT
    • DELETE_DOC_COUNT

      protected static final Map<String,io.dropwizard.metrics5.Counter> DELETE_DOC_COUNT
    • UPDATE_DOC_COUNT

      protected static final Map<String,io.dropwizard.metrics5.Counter> UPDATE_DOC_COUNT
    • createDocumentCount

      protected io.dropwizard.metrics5.Counter createDocumentCount
    • deleteDocumentCount

      protected io.dropwizard.metrics5.Counter deleteDocumentCount
    • updateDocumentCount

      protected io.dropwizard.metrics5.Counter updateDocumentCount
    • EMPTY_PATH

      protected static final PathRef EMPTY_PATH
  • Constructor Details

    • AbstractSession

      public AbstractSession()
  • Method Details

    • createDocumentCountInc

      protected void createDocumentCountInc()
    • deleteDocumentCountInc

      protected void deleteDocumentCountInc()
    • updateDocumentCountInc

      protected void updateDocumentCountInc()
    • getSecurityService

      protected SecurityService getSecurityService()
    • getVersioningService

      protected VersioningService getVersioningService()
    • getValidationService

      protected DocumentValidationService getValidationService()
    • getSession

      public abstract Session getSession()
      Internal method: Gets the current session based on the client session id.
      Returns:
      the repository session
    • getDocumentType

      public DocumentType getDocumentType(String type)
      Description copied from interface: CoreSession
      Gets the document type object given its type name.
      Specified by:
      getDocumentType in interface CoreSession
      Parameters:
      type - the document type name
      Returns:
      the type the doc type object
    • checkPermission

      protected final void checkPermission(Document doc, String permission) throws DocumentSecurityException
      Throws:
      DocumentSecurityException
    • getContextMapEventInfo

      protected Map<String,Serializable> getContextMapEventInfo(DocumentModel doc)
    • newEventContext

      public DocumentEventContext newEventContext(DocumentModel source)
    • notifyEvent

      protected void notifyEvent(String eventId, DocumentModel source, Map<String,Serializable> options, String category, String comment, boolean withLifeCycle, boolean inline)
    • notifyVersionChange

      protected void notifyVersionChange(DocumentModel oldDocument, DocumentModel newDocument, Map<String,Serializable> options)
      Copied from obsolete VersionChangeNotifier.

      Sends change notifications to core event listeners. The event contains info with older document (before version change) and newer doc (current document).

      Parameters:
      options - additional info to pass to the event
    • hasPermission

      public boolean hasPermission(NuxeoPrincipal principal, DocumentRef docRef, String permission)
      Description copied from interface: CoreSession
      Checks if a given principal has the given privilege on the referred document.
      Specified by:
      hasPermission in interface CoreSession
    • hasPermission

      protected final boolean hasPermission(NuxeoPrincipal principal, Document doc, String permission)
    • hasPermission

      public boolean hasPermission(DocumentRef docRef, String permission)
      Description copied from interface: CoreSession
      Checks if the principal that created the client session has the given privilege on the referred document.
      Specified by:
      hasPermission in interface CoreSession
    • filterGrantedPermissions

      public Collection<String> filterGrantedPermissions(NuxeoPrincipal principal, DocumentRef docRef, Collection<String> permissions)
      Description copied from interface: CoreSession
      Filters the supplied permissions based on whether they are granted to a given principal for a given document.
      Specified by:
      filterGrantedPermissions in interface CoreSession
    • hasPermission

      protected final boolean hasPermission(Document doc, String permission)
    • resolveReference

      protected Document resolveReference(DocumentRef docRef)
    • resolveParentReference

      protected Document resolveParentReference(DocumentRef docRef)
    • readModel

      protected DocumentModel readModel(Document doc)
      Gets the document model for the given core document.
      Parameters:
      doc - the document
      Returns:
      the document model
    • readModel

      protected DocumentModel readModel(Document doc, DocumentModel docModel)
      Gets the document model for the given core document, preserving the contextData.
      Parameters:
      doc - the document
      Returns:
      the document model
    • writeModel

      protected DocumentModel writeModel(Document doc, DocumentModel docModel)
    • writeModel

      protected DocumentModel writeModel(Document doc, DocumentModel docModel, boolean create)
    • copy

      public DocumentModel copy(DocumentRef src, DocumentRef dst, String name, CoreSession.CopyOption... copyOptions)
      Description copied from interface: CoreSession
      Copies the source document to the destination folder under the given name. If the name is null the original name is preserved.

      If the destination document is not a folder or it doesn't exists then throws an exception.

      If the source is a proxy the destination will be a copy of the proxy.

      Specified by:
      copy in interface CoreSession
      Parameters:
      src - the source document reference
      dst - the destination folder reference
      name - the new name of the file or null if the original name must be preserved
      copyOptions - the options for copy
    • copy

      Description copied from interface: CoreSession
      Bulk copy. Destination must be a folder document.
      Specified by:
      copy in interface CoreSession
      Parameters:
      src - the documents to copy
      dst - the destination folder
      opts - the options for copy
    • copyProxyAsDocument

      public DocumentModel copyProxyAsDocument(DocumentRef src, DocumentRef dst, String name, CoreSession.CopyOption... copyOptions)
      Description copied from interface: CoreSession
      Work like copy but in the case of a source proxy the destination will be a new document instead of a proxy.
      Specified by:
      copyProxyAsDocument in interface CoreSession
      Parameters:
      src - the source document reference
      dst - the destination folder reference
      name - the new name of the file or null if the original name must be preserved
      copyOptions - the options for copy
      See Also:
    • copyProxyAsDocument

      public List<DocumentModel> copyProxyAsDocument(List<DocumentRef> src, DocumentRef dst, CoreSession.CopyOption... opts)
      Description copied from interface: CoreSession
      Bulk copyProxyAsDocument. Destination must be a folder document.
      Specified by:
      copyProxyAsDocument in interface CoreSession
      Parameters:
      src - the documents to copy
      dst - the destination folder
      opts - the options of copy
    • move

      public DocumentModel move(DocumentRef src, DocumentRef dst, String name)
      Description copied from interface: CoreSession
      Moves the source document to the destination folder under the given name. If the name is null or if there is a collision, a suitable new name is found.
      Specified by:
      move in interface CoreSession
      Parameters:
      src - the source document reference
      dst - the destination folder reference
      name - the new name of the file, or null
    • move

      public void move(List<DocumentRef> src, DocumentRef dst)
      Description copied from interface: CoreSession
      Bulk move. Destination must be a folder document.
      Specified by:
      move in interface CoreSession
      Parameters:
      src - the documents to move
      dst - the destination folder
    • getACP

      public ACP getACP(DocumentRef docRef)
      Description copied from interface: CoreSession
      Gets the document access control policy.

      The returned ACP is the ACP defined on that document if any + the inherited ACL if any. If neither a local ACP nor inherited ACL exists null is returned.

      Note that modifying the returned ACP will not affect in any way the stored document ACP. To modify the ACP you must explicitely set it by calling CoreSession.setACP(DocumentRef, ACP, boolean)

      This method will always fetch a fresh ACP from the storage. The recommended way to get the ACP is to use DocumentModel.getACP() this way the ACP will be cached at the document model level and so you can use it for multiple permission checks without fetching it each time.

      Specified by:
      getACP in interface CoreSession
      Parameters:
      docRef - the doc ref to retrieve ACP or null if none
      Returns:
      the ACP
    • setACP

      public void setACP(DocumentRef docRef, ACP newAcp, boolean overwrite)
      Description copied from interface: CoreSession
      Sets the ACP for this document.

      If the ACP contains an INHERITED ACL it will be discarded. Only ACLs relative to the current document may be changed.

      If the overwrite argument is false, the ACP is merged with the existing one if any. The merge is done as follow:

      • If any ACL is that already exists on the document ACp is redefined by the new ACO then it will be replaced by the new one. So if you want to remove an ACl in this mode you need to specify an empty ACL.
      • If the new ACP contains an ACl that is not defined by the old one the it will be added to the merged ACP.
      • If the owners are specified then they will replace the existing ones if any. Otherwise the old owners are preserved if any. As for the ACL if you want to remove existing owners you need to specify an empty owner array (and not a null one)
      If the overwrite argument is true, the old ACP will be replaced by the new one.

      This way if you can remove the existing ACP by specifying a null ACP and overwrite argument set to true.

      Setting a null ACP when overwrite is false will do nothing.

      Specified by:
      setACP in interface CoreSession
    • setACP

      protected void setACP(Document doc, ACP newAcp, boolean overwrite, Map<String,Serializable> options)
    • replaceACE

      public void replaceACE(DocumentRef docRef, String aclName, ACE oldACE, ACE newACE)
      Description copied from interface: CoreSession
      Replace the oldACE with the newACE on the given aclName.

      Specified by:
      replaceACE in interface CoreSession
    • updateReadACLs

      public void updateReadACLs(Collection<String> docIds)
      Description copied from interface: CoreSession
      Updates the Read ACLs for some documents.

      For INTERNAL use by the core.

      Specified by:
      updateReadACLs in interface CoreSession
      Parameters:
      docIds - the document ids
    • updateVersionsReadACLs

      protected void updateVersionsReadACLs(Collection<String> docIds)
    • isNegativeAclAllowed

      public boolean isNegativeAclAllowed()
      Description copied from interface: CoreSession
      Returns true if negative ACLs are allowed.

      Negative ACLs are ACLs that include an ACE with a deny (isGranted=false). This does not include the full-blocking ACE for Everyone/Everything, which is always allowed.

      Specified by:
      isNegativeAclAllowed in interface CoreSession
      Returns:
      true if negative ACLs are allowed
    • cancel

      public void cancel()
      Description copied from interface: CoreSession
      Cancels any pending change made through this session.
      Specified by:
      cancel in interface CoreSession
    • createDocumentModel

      public DocumentModel createDocumentModel(String typeName)
      Description copied from interface: CoreSession
      Creates a document model using type name.

      Used to fetch initial datamodels from the type definition.

      DocumentModel creation notifies a DocumentEventTypes.EMPTY_DOCUMENTMODEL_CREATED so that core event listener can initialize its content with computed properties.

      Specified by:
      createDocumentModel in interface CoreSession
      Returns:
      the initial document model
    • createDocumentModel

      public DocumentModel createDocumentModel(String parentPath, String name, String typeName)
      Description copied from interface: CoreSession
      Creates a document model using required information.

      Used to fetch initial datamodels from the type definition.

      DocumentModel creation notifies a DocumentEventTypes.EMPTY_DOCUMENTMODEL_CREATED so that core event listener can initialize its content with computed properties.

      Specified by:
      createDocumentModel in interface CoreSession
      Parameters:
      parentPath - the parent path
      name - The destination name
      typeName - the type name
      Returns:
      the initial document model
    • createDocumentModel

      public DocumentModel createDocumentModel(String typeName, Map<String,Object> options)
      Description copied from interface: CoreSession
      Creates a document model using required information.

      Used to fetch initial datamodels from the type definition.

      DocumentModel creation notifies a DocumentEventTypes.EMPTY_DOCUMENTMODEL_CREATED so that core event listener can initialize its content with computed properties.

      Specified by:
      createDocumentModel in interface CoreSession
      Parameters:
      typeName - the type name
      options - additional contextual data provided to core event listeners
      Returns:
      the initial document model
    • createDocument

      public DocumentModel createDocument(DocumentModel docModel)
      Description copied from interface: CoreSession
      Creates a document using given document model for initialization.

      The model contains path of the new document, its type and optionally the initial data models of the document.

      Specified by:
      createDocument in interface CoreSession
      Parameters:
      docModel - the document model to use for initialization
      Returns:
      the created document
    • fillCreateOptions

      protected Document fillCreateOptions(DocumentRef parentRef, String childName, Map<String,Serializable> options) throws DocumentSecurityException
      Throws:
      DocumentSecurityException
    • importDocuments

      public void importDocuments(List<DocumentModel> docModels)
      Description copied from interface: CoreSession
      Low-level import of documents, reserved for the administrator.

      This method is used to import documents with given ids, or directly import versions and proxies.

      The id, parent, name and typeName must be present in each docModel.

      The context data needs to be filled with values depending on the type of the document:

      For a proxy (type = "ecm:proxyType"): CoreSession.IMPORT_PROXY_TARGET_ID and CoreSession.IMPORT_PROXY_VERSIONABLE_ID.

      For a version (no parent): CoreSession.IMPORT_VERSION_VERSIONABLE_ID, CoreSession.IMPORT_VERSION_CREATED, CoreSession.IMPORT_VERSION_LABEL and CoreSession.IMPORT_VERSION_DESCRIPTION.

      For a live document: CoreSession.IMPORT_BASE_VERSION_ID and CoreSession.IMPORT_CHECKED_IN (Boolean).

      For a live document or a version: CoreSession.IMPORT_LIFECYCLE_POLICY , CoreSession.IMPORT_LIFECYCLE_STATE, CoreSession.IMPORT_VERSION_MAJOR (Long) and CoreSession.IMPORT_VERSION_MINOR (Long).

      Specified by:
      importDocuments in interface CoreSession
      Parameters:
      docModels - the documents to create
    • importDocument

      protected void importDocument(DocumentModel docModel)
    • createDocument

      public DocumentModel[] createDocument(DocumentModel[] docModels)
      Description copied from interface: CoreSession
      Bulk creation of documents.
      Specified by:
      createDocument in interface CoreSession
      Parameters:
      docModels - the document models to use for intialization
      Returns:
      the created documents
    • exists

      public boolean exists(DocumentRef docRef)
      Description copied from interface: CoreSession
      Tests if the document pointed by the given reference exists and is accessible.

      This operation makes no difference between non-existence and permission problems.

      If the parent is null or its path is null, then root is considered.

      Specified by:
      exists in interface CoreSession
      Parameters:
      docRef - the reference to the document to test for existence
      Returns:
      true if the referenced document exists, false otherwise
    • getChild

      public DocumentModel getChild(DocumentRef parent, String name)
      Description copied from interface: CoreSession
      Gets a child document given its name and the parent reference.

      Throws an exception if the document could not be found.

      If the supplied id is null, returns the default child of the document if any, otherwise raises an exception.

      If the parent is null or its path is null, then root is considered.

      Specified by:
      getChild in interface CoreSession
      Parameters:
      parent - the reference to the parent document
      name - the name of the child document to retrieve
      Returns:
      the named child if exists
    • hasChild

      public boolean hasChild(DocumentRef parent, String name)
      Description copied from interface: CoreSession
      Tests if the document has a child with the given name.

      This operation silently ignores non-folder documents: If the document is not a folder then returns false.

      Specified by:
      hasChild in interface CoreSession
      Parameters:
      parent - the document
      name - the child name
      Returns:
      true if the document has a child with the given name
    • getChildren

      public DocumentModelList getChildren(DocumentRef parent)
      Description copied from interface: CoreSession
      Gets the children of the given parent.
      Specified by:
      getChildren in interface CoreSession
      Parameters:
      parent - the parent reference
      Returns:
      the children if any, an empty list if no children or null if the specified parent document is not a folder
    • getChildren

      public DocumentModelList getChildren(DocumentRef parent, String type)
      Description copied from interface: CoreSession
      Gets the children of the given parent filtered according to the given document type.
      Specified by:
      getChildren in interface CoreSession
      Parameters:
      parent - the parent reference
      type - the wanted document type
      Returns:
      the documents if any, an empty list if none were found or null if the parent document is not a folder
    • getChildren

      public DocumentModelList getChildren(DocumentRef parent, String type, String perm)
      Description copied from interface: CoreSession
      Gets the children of the given parent filtered according to the given document type and permission.
      Specified by:
      getChildren in interface CoreSession
      Parameters:
      parent - the parent reference
      type - the wanted document type
      perm - the permission the user must have
      Returns:
      the documents if any, an empty list if none were found or null if the parent document is not a folder
    • getChildren

      public DocumentModelList getChildren(DocumentRef parent, String type, Filter filter, Sorter sorter)
      Description copied from interface: CoreSession
      Same as CoreSession.getChildren(DocumentRef, String, String, Filter, Sorter) without specific permission filtering.
      Specified by:
      getChildren in interface CoreSession
      Parameters:
      parent - the parent reference
      type - the wanted type
      filter - the filter to use if any, null otherwise
      sorter - the sorter to use if any, null otherwise
      Returns:
      the list of the children or an empty list if no children were found or null if the given parent is not a folder
    • getChildren

      public DocumentModelList getChildren(DocumentRef parent, String type, String perm, Filter filter, Sorter sorter)
      Description copied from interface: CoreSession
      Same as CoreSession.getChildren(DocumentRef, String, String) but the result is filtered and then sorted using the specified filter and sorter.
      Specified by:
      getChildren in interface CoreSession
      Parameters:
      parent - the parent reference
      type - the wanted type
      perm - permission to check for. If null, defaults to READ
      filter - the filter to use if any, null otherwise
      sorter - the sorter to use if any, null otherwise
      Returns:
      the list of the children or an empty list if no children were found or null if the given parent is not a folder
    • getChildrenRefs

      public List<DocumentRef> getChildrenRefs(DocumentRef parentRef, String perm)
      Description copied from interface: CoreSession
      Gets the references of the children. No permission is checked if perm is null.
      Specified by:
      getChildrenRefs in interface CoreSession
      Parameters:
      parentRef - the parent reference
      perm - the permission to check on the children (usually READ); if null, no permission is checked
      Returns:
      a list of children references
    • getChildrenIterator

      public DocumentModelIterator getChildrenIterator(DocumentRef parent)
      Description copied from interface: CoreSession
      Gets an iterator to the children of the given parent.
      Specified by:
      getChildrenIterator in interface CoreSession
      Parameters:
      parent - the parent reference
      Returns:
      iterator over the children collection or null if the specified parent document is not a folder
    • getChildrenIterator

      public DocumentModelIterator getChildrenIterator(DocumentRef parent, String type)
      Description copied from interface: CoreSession
      Gets an iterator to the children of the given parent filtered according to the given document type.
      Specified by:
      getChildrenIterator in interface CoreSession
    • getChildrenIterator

      public DocumentModelIterator getChildrenIterator(DocumentRef parent, String type, String perm, Filter filter)
      Description copied from interface: CoreSession
      Gets the children of the given parent filtered according to the given document type and permission. Long result sets are loaded frame by frame transparently by the DocumentModelIterator.
      Specified by:
      getChildrenIterator in interface CoreSession
    • getDocument

      public DocumentModel getDocument(DocumentRef docRef)
      Description copied from interface: CoreSession
      Gets a document model given its reference.

      The default schemas are used to populate the returned document model. Default schemas are configured via the document type manager.

      Any other data model not part of the default schemas will be lazily loaded as needed.

      Specified by:
      getDocument in interface CoreSession
      Parameters:
      docRef - the document reference
      Returns:
      the document
    • getDocuments

      public DocumentModelList getDocuments(DocumentRef[] docRefs)
      Description copied from interface: CoreSession
      Gets a list of documents given their references.

      Documents that are not accessible are skipped.

      Specified by:
      getDocuments in interface CoreSession
    • getFiles

      public DocumentModelList getFiles(DocumentRef parent)
      Description copied from interface: CoreSession
      Same as CoreSession.getChildren(DocumentRef) but returns only non-folder documents.
      Specified by:
      getFiles in interface CoreSession
      Parameters:
      parent - the parent reference
      Returns:
      a list of children if any, an empty one if none or null if the given parent is not a folder
    • getFiles

      public DocumentModelList getFiles(DocumentRef parent, Filter filter, Sorter sorter)
      Description copied from interface: CoreSession
      Same as CoreSession.getFiles(org.nuxeo.ecm.core.api.DocumentRef) but uses an optional filter and sorter on the result.
      Specified by:
      getFiles in interface CoreSession
      Parameters:
      parent - the parent reference
      filter - the filter to use or null if none
      sorter - the sorter to use or null if none
      Returns:
      a list of children if any, an empty one if none or null if the given parent is not a folder
    • getFolders

      public DocumentModelList getFolders(DocumentRef parent)
      Description copied from interface: CoreSession
      Same as CoreSession.getChildren(DocumentRef) but returns only folder documents.
      Specified by:
      getFolders in interface CoreSession
      Parameters:
      parent - the parent ref
      Returns:
      a list of children if any, an empty one if none or null if the given parent is not a folder
    • getFolders

      public DocumentModelList getFolders(DocumentRef parent, Filter filter, Sorter sorter)
      Description copied from interface: CoreSession
      Same as CoreSession.getFolders(DocumentRef) but uses an optional filter and sorter on the result.
      Specified by:
      getFolders in interface CoreSession
      Parameters:
      parent - the parent reference
      filter - the filter to use or null if none
      sorter - the sorter to use or null if none
      Returns:
      a list of children if any, an empty one if none or null if the given parent is not a folder
    • getParentDocumentRef

      public DocumentRef getParentDocumentRef(DocumentRef docRef)
      Description copied from interface: CoreSession
      Returns the parent ref of the document referenced by docRef or null if this is the root document.

      This method does not check the permissions on the parent document of this CoreSession's Principal .

      Specified by:
      getParentDocumentRef in interface CoreSession
    • getParentDocument

      public DocumentModel getParentDocument(DocumentRef docRef)
      Description copied from interface: CoreSession
      Gets the parent document or null if this is the root document.
      Specified by:
      getParentDocument in interface CoreSession
      Returns:
      the parent document or null if this is the root document
    • getParentDocuments

      public List<DocumentModel> getParentDocuments(DocumentRef docRef)
      Description copied from interface: CoreSession
      Gets the parent documents in path from the root to the given document or empty list if this is the root document.

      Documents the principal is is not allowed to browse are filtered out the parents list.

      Specified by:
      getParentDocuments in interface CoreSession
      Returns:
      the list with parent documents or empty list if this is the root document
    • getRootDocument

      public DocumentModel getRootDocument()
      Description copied from interface: CoreSession
      Gets the root document of this repository.
      Specified by:
      getRootDocument in interface CoreSession
      Returns:
      the root document. cannot be null
    • hasChildren

      public boolean hasChildren(DocumentRef docRef)
      Description copied from interface: CoreSession
      Tests if the document has any children.

      This operation silently ignores non-folder documents: If the document is not a folder then returns false.

      If the parent is null or its path is null, then root is considered.

      Specified by:
      hasChildren in interface CoreSession
      Parameters:
      docRef - the reference to the document to test
      Returns:
      true if document has children, false otherwise
    • query

      public DocumentModelList query(String query)
      Description copied from interface: CoreSession
      Executes the given NXQL query an returns the result.
      Specified by:
      query in interface CoreSession
      Parameters:
      query - the query to execute
      Returns:
      the query result
    • query

      public DocumentModelList query(String query, int max)
      Description copied from interface: CoreSession
      Executes the given NXQL query an returns the result.
      Specified by:
      query in interface CoreSession
      Parameters:
      query - the query to execute
      max - number of document to retrieve
      Returns:
      the query result
    • query

      public DocumentModelList query(String query, Filter filter)
      Description copied from interface: CoreSession
      Executes the given NXQL query and returns the result that matches the filter.
      Specified by:
      query in interface CoreSession
      Parameters:
      query - the query to execute
      filter - the filter to apply to result
      Returns:
      the query result
    • query

      public DocumentModelList query(String query, Filter filter, int max)
      Description copied from interface: CoreSession
      Executes the given NXQL query and returns the result that matches the filter.
      Specified by:
      query in interface CoreSession
      Parameters:
      query - the query to execute
      filter - the filter to apply to result
      max - number of document to retrieve
      Returns:
      the query result
    • query

      public DocumentModelList query(String query, Filter filter, long limit, long offset, boolean countTotal)
      Description copied from interface: CoreSession
      Executes the given NXQL query and returns the result that matches the filter.
      Specified by:
      query in interface CoreSession
      Parameters:
      query - the query to execute
      filter - the filter to apply to result
      limit - the maximum number of documents to retrieve, or 0 for all of them
      offset - the offset (starting at 0) into the list of documents
      countTotal - if true, return a DocumentModelList that includes a total size of the underlying list (size if there was no limit or offset)
      Returns:
      the query result
    • query

      public DocumentModelList query(String query, String queryType, Filter filter, long limit, long offset, boolean countTotal)
      Description copied from interface: CoreSession
      Executes the given query and returns the result that matches the filter.
      Specified by:
      query in interface CoreSession
      Parameters:
      query - the query to execute
      queryType - the query type, like "NXQL"
      filter - the filter to apply to result
      limit - the maximum number of documents to retrieve, or 0 for all of them
      offset - the offset (starting at 0) into the list of documents
      countTotal - if true, return a DocumentModelList that includes a total size of the underlying list (size if there was no limit or offset)
      Returns:
      the query result
    • computeCountUpTo

      protected long computeCountUpTo(boolean countTotal)
      Returns:
      the appropriate countUpTo value depending on input countTotal and configuration.
    • getMaxResults

      protected long getMaxResults()
    • isLimitedResults

      protected boolean isLimitedResults()
    • setMaxResults

      protected void setMaxResults(long maxResults)
    • setLimitedResults

      protected void setLimitedResults(boolean limitedResults)
    • query

      public DocumentModelList query(String query, Filter filter, long limit, long offset, long countUpTo)
      Description copied from interface: CoreSession
      Executes the given NXQL query and returns the result that matches the filter.
      Specified by:
      query in interface CoreSession
      Parameters:
      query - the query to execute
      filter - the filter to apply to result
      limit - the maximum number of documents to retrieve, or 0 for all of them
      offset - the offset (starting at 0) into the list of documents
      countUpTo - if -1, count the total size without offset/limit.
      If 0, don't count the total size.
      If n, count the total number if there are less than n documents otherwise set the size to -1.
      Returns:
      the query result
    • query

      public DocumentModelList query(String query, String queryType, Filter filter, long limit, long offset, long countUpTo)
      Description copied from interface: CoreSession
      Executes the given query and returns the result that matches the filter.
      Specified by:
      query in interface CoreSession
      Parameters:
      query - the query to execute
      queryType - the query type, like "NXQL"
      filter - the filter to apply to result
      limit - the maximum number of documents to retrieve, or 0 for all of them
      offset - the offset (starting at 0) into the list of documents
      countUpTo - if -1, return a DocumentModelList that includes a total size of the underlying list (size if there was no limit or offset).
      If 0, don't return the total size of the underlying list.
      If n, return the total size of the underlying list when the size is smaller than n else return a total size of -1.
      Returns:
      the query result
    • tracedQuery

      protected DocumentModelList tracedQuery(String query, String queryType, Filter filter, long limit, long offset, long countUpTo)
    • queryAndFetch

      public IterableQueryResult queryAndFetch(String query, String queryType, Object... params)
      Description copied from interface: CoreSession
      Executes the given query and returns an iterable of maps containing the requested properties (which must be closed when done).
      Specified by:
      queryAndFetch in interface CoreSession
      Parameters:
      query - the query to execute
      queryType - the query type, usually "NXQL"
      params - optional query-type-dependent parameters
      Returns:
      an IterableQueryResult, which must be closed after use
    • queryAndFetch

      public IterableQueryResult queryAndFetch(String query, String queryType, boolean distinctDocuments, Object... params)
      Description copied from interface: CoreSession
      Executes the given query and returns an iterable of maps containing the requested properties (which must be closed when done).

      It's possible to specify distinctDocuments = true to get a maximum of one row of results per document, this will behave differently only when the WHERE clause contains wildcards.

      Specified by:
      queryAndFetch in interface CoreSession
      Parameters:
      query - the query to execute
      queryType - the query type, usually "NXQL"
      distinctDocuments - if true then a maximum of one row per document will be returned
      params - optional query-type-dependent parameters
      Returns:
      an IterableQueryResult, which must be closed after use
    • queryProjection

      public PartialList<Map<String,Serializable>> queryProjection(String query, long limit, long offset)
      Description copied from interface: CoreSession
      Executes the given NXQL query and returns the result that matches the filter.
      Specified by:
      queryProjection in interface CoreSession
      Parameters:
      query - the query to execute
      limit - the maximum number of documents to retrieve, or 0 for all of them
      offset - the offset (starting at 0) into the list of documents
      Returns:
      the query result
    • queryProjection

      public PartialList<Map<String,Serializable>> queryProjection(String query, long limit, long offset, boolean countTotal)
      Description copied from interface: CoreSession
      Executes the given NXQL query and returns the result that matches the filter.
      Specified by:
      queryProjection in interface CoreSession
      Parameters:
      query - the query to execute
      limit - the maximum number of documents to retrieve, or 0 for all of them
      offset - the offset (starting at 0) into the list of documents
      countTotal - if true, return a PartialList that includes a total size of the underlying list (size if there was no limit or offset)
      Returns:
      the query result
    • queryProjection

      public PartialList<Map<String,Serializable>> queryProjection(String query, String queryType, boolean distinctDocuments, long limit, long offset, long countUpTo, Object... params)
      Description copied from interface: CoreSession
      Executes the given NXQL query and returns the result that matches the filter.
      Specified by:
      queryProjection in interface CoreSession
      Parameters:
      query - the query to execute
      queryType - the query type, like "NXQL"
      distinctDocuments - if true then a maximum of one row per document will be returned
      limit - the maximum number of documents to retrieve, or 0 for all of them
      offset - the offset (starting at 0) into the list of documents
      countUpTo - if -1, return a PartialList that includes a total size of the underlying list (size if there was no limit or offset).
      If 0, don't return the total size of the underlying list.
      If n, return the total size of the underlying list when the size is smaller than n else return a total size of -1.
      params - optional query-type-dependent parameters
      Returns:
      the query result
    • getPrincipalsToCheck

      protected String[] getPrincipalsToCheck()
    • getPoliciesQueryTransformers

      protected Collection<SQLQuery.Transformer> getPoliciesQueryTransformers(String queryType)
    • scroll

      public ScrollResult<String> scroll(String query, int batchSize, int keepAliveSeconds)
      Description copied from interface: CoreSession
      Executes the given query and returns the first batch of results containing id of documents, next batch must be requested within the keepAliveSeconds delay.
      Specified by:
      scroll in interface CoreSession
      Parameters:
      query - The NXQL query to execute
      batchSize - The expected result batch size, note that more results can be returned when the backend don't implement properly this feature
      keepAliveSeconds - The scroll context lifetime in seconds
      Returns:
      A ScrollResult including the search results and a scroll id, to be passed to the subsequent calls to CoreSession.scroll(String)
    • scroll

      public ScrollResult<String> scroll(String scrollId)
      Description copied from interface: CoreSession
      Get the next batch of results containing id of documents, the scrollId is part of the previous ScrollResult response.
      Specified by:
      scroll in interface CoreSession
    • removeChildren

      public void removeChildren(DocumentRef docRef)
      Description copied from interface: CoreSession
      Removes all children from the given document.
      Specified by:
      removeChildren in interface CoreSession
      Parameters:
      docRef - the reference to the document to remove
    • canRemoveDocument

      public boolean canRemoveDocument(DocumentRef docRef)
      Description copied from interface: CoreSession
      Check if a document can be removed. This needs the SecurityConstants.REMOVE permission on the document and the SecurityConstants.REMOVE_CHILDREN permission on the parent.

      For an archived version to be removeable, it must not be referenced from any proxy or be the base of a working document, and the REMOVE permission must be available on the working document (or the user must be an administrator if no working document exists).

      If the SecurityConstants.REMOVE permissions is blocked on a descendant of the document for the current principal, then the document cannot be removed.

      If a descendant of the document is retained or under legal hold, then the document cannot be removed.

      Specified by:
      canRemoveDocument in interface CoreSession
      Parameters:
      docRef - the document
      Returns:
      true if the document can be removed
    • canRemoveDocument

      @Deprecated protected String canRemoveDocument(Document doc)
      Deprecated.
      since 2023, better use checkCanRemoveDocument(Document)
      Checks if a document can be removed, and returns a failure reason if not.
    • checkCanRemoveDocument

      protected void checkCanRemoveDocument(Document doc)
    • checkBlockedDescendants

      protected void checkBlockedDescendants(Document doc)
      Throws:
      DocumentSecurityException - if a descendant has blocked permission for current user
      Since:
      2023
    • checkRetainedDescendants

      protected void checkRetainedDescendants(Document doc)
      Throws:
      DocumentExistsException - if a descendant is retained
      Since:
      2023
    • removeDocument

      public void removeDocument(DocumentRef docRef)
      Description copied from interface: CoreSession
      Removes this document and all its children, if any.
      Specified by:
      removeDocument in interface CoreSession
      Parameters:
      docRef - the reference to the document to remove
    • removeDocument

      protected void removeDocument(Document doc)
    • removeNotifyOneDoc

      protected void removeNotifyOneDoc(Document doc)
    • removeDocuments

      public void removeDocuments(DocumentRef[] docRefs)
      Implementation uses the fact that the lexicographic ordering of paths is a refinement of the "contains" partial ordering.
      Specified by:
      removeDocuments in interface CoreSession
      Parameters:
      docRefs - the refs to the document to remove
    • save

      public void save()
      Description copied from interface: CoreSession
      Saves any pending changes done until now through this session.
      Specified by:
      save in interface CoreSession
    • saveDocument

      public DocumentModel saveDocument(DocumentModel docModel)
      Description copied from interface: CoreSession
      Saves changes done on the given document model.
      Specified by:
      saveDocument in interface CoreSession
      Parameters:
      docModel - the document model that needs modified
    • saveDocuments

      public void saveDocuments(DocumentModel[] docModels)
      Description copied from interface: CoreSession
      Bulk document saving.
      Specified by:
      saveDocuments in interface CoreSession
      Parameters:
      docModels - the document models that needs to be saved
    • getSourceDocument

      public DocumentModel getSourceDocument(DocumentRef docRef)
      Description copied from interface: CoreSession
      Gets the head (live) document for this document.
      Specified by:
      getSourceDocument in interface CoreSession
      Parameters:
      docRef - the reference to the document
      Returns:
      the version
    • getVersionModel

      protected VersionModel getVersionModel(Document version)
    • getLastDocumentVersion

      public DocumentModel getLastDocumentVersion(DocumentRef docRef)
      Description copied from interface: CoreSession
      Gets the document corresponding to the last version for the given document.
      Specified by:
      getLastDocumentVersion in interface CoreSession
      Parameters:
      docRef - the reference to the document
      Returns:
      the document model corresponding to the version
    • getLastDocumentVersionRef

      public DocumentRef getLastDocumentVersionRef(DocumentRef docRef)
      Description copied from interface: CoreSession
      Gets the document reference corresponding to the last version for the given document.
      Specified by:
      getLastDocumentVersionRef in interface CoreSession
      Parameters:
      docRef - the reference to the document
      Returns:
      the document reference corresponding to the last version
    • getVersionsRefs

      public List<DocumentRef> getVersionsRefs(DocumentRef docRef)
      Description copied from interface: CoreSession
      Gets the references of the versions of the document.
      Specified by:
      getVersionsRefs in interface CoreSession
      Parameters:
      docRef - the reference to the document
      Returns:
      a list of version references
    • getVersions

      public List<DocumentModel> getVersions(DocumentRef docRef)
      Description copied from interface: CoreSession
      Retrieves all the versions for a specified document.
      Specified by:
      getVersions in interface CoreSession
      Parameters:
      docRef - the reference to the document
      Returns:
      the list of DocumentModel representing versions, empty list if none is found.
    • getVersionsForDocument

      public List<VersionModel> getVersionsForDocument(DocumentRef docRef)
      Description copied from interface: CoreSession
      Retrieves all the versions for a specified document.
      Specified by:
      getVersionsForDocument in interface CoreSession
      Parameters:
      docRef - the reference to the document
      Returns:
      the list of VersionModel representing versions, empty list if none is found.
    • restoreToVersion

      public DocumentModel restoreToVersion(DocumentRef docRef, DocumentRef versionRef)
      Description copied from interface: CoreSession
      Restores the given document to the specified version.
      Specified by:
      restoreToVersion in interface CoreSession
      Parameters:
      docRef - the reference to the document
      versionRef - the reference to the version
    • restoreToVersion

      public DocumentModel restoreToVersion(DocumentRef docRef, DocumentRef versionRef, boolean skipSnapshotCreation, boolean skipCheckout)
      Description copied from interface: CoreSession
      Restores the given document to the specified version.
      Specified by:
      restoreToVersion in interface CoreSession
      Parameters:
      docRef - the reference to the document
      versionRef - the reference to the version
      skipSnapshotCreation - true if the document should not be snapshotted before being restored
      skipCheckout - true if the restored document should be kept in a checked-in state
    • restoreToVersion

      protected DocumentModel restoreToVersion(Document doc, Document version, boolean skipSnapshotCreation, boolean skipCheckout)
    • getBaseVersion

      public DocumentRef getBaseVersion(DocumentRef docRef)
      Description copied from interface: CoreSession
      Gets the version to which a checked in document is linked.

      Returns null for a checked out document or a version or a proxy.

      Specified by:
      getBaseVersion in interface CoreSession
      Returns:
      the version, or null
    • checkIn

      public DocumentRef checkIn(DocumentRef docRef, VersioningOption option, String checkinComment)
      Description copied from interface: CoreSession
      Checks in a modified document, creating a new version.
      Specified by:
      checkIn in interface CoreSession
      Parameters:
      docRef - the reference to the document
      option - whether to do create a new VersioningOption.MINOR or VersioningOption.MAJOR version during check in
      checkinComment - the checkin comment
      Returns:
      the version just created
    • notifyCheckedInVersion

      protected void notifyCheckedInVersion(DocumentModel docModel, DocumentRef checkedInVersionRef, Map<String,Serializable> options, String checkinComment)
      Send a core event for the creation of a new check in version. The source document is the live document model used as the source for the checkin, not the archived version it-self.
      Parameters:
      docModel - work document that has been checked-in as a version
      checkedInVersionRef - document ref of the new checked-in version
      options - initial option map, or null
    • checkOut

      public void checkOut(DocumentRef docRef)
      Description copied from interface: CoreSession
      Checks out a versioned document.
      Specified by:
      checkOut in interface CoreSession
      Parameters:
      docRef - the reference to the document
    • isCheckedOut

      public boolean isCheckedOut(DocumentRef docRef)
      Description copied from interface: CoreSession
      Returns whether the current document is checked-out or not.
      Specified by:
      isCheckedOut in interface CoreSession
      Parameters:
      docRef - the reference to the document
    • getVersionSeriesId

      public String getVersionSeriesId(DocumentRef docRef)
      Description copied from interface: CoreSession
      Gets the version series id for a document.

      All documents and versions derived by a check in or checkout from the same original document share the same version series id.

      Specified by:
      getVersionSeriesId in interface CoreSession
      Parameters:
      docRef - the document reference
      Returns:
      the version series id
    • getWorkingCopy

      public DocumentModel getWorkingCopy(DocumentRef docRef)
      Description copied from interface: CoreSession
      Gets the working copy (live document) for a proxy or a version.
      Specified by:
      getWorkingCopy in interface CoreSession
      Parameters:
      docRef - the document reference
      Returns:
      the working copy, or null if not found
    • getVersion

      public DocumentModel getVersion(String versionableId, VersionModel versionModel)
      Description copied from interface: CoreSession
      Gets a document version, given the versionable id and label.

      The version model contains the label of the version to look for. On return, it is filled with the version's description and creation date.

      Specified by:
      getVersion in interface CoreSession
      Parameters:
      versionableId - the versionable id
      versionModel - the version model holding the label
      Returns:
      the version, or null if not found
    • removeOrphanVersions

      public List<DocumentRef> removeOrphanVersions(DocumentRef docRef)
      Description copied from interface: CoreSession
      Removes orphan versions when the live document doesn't exist and there is no proxy pointing to this document. A version stays referenced, and therefore is not removed, if any proxy points to a version in the version history of any live document, or in the case of tree snapshot if there is a snapshot containing a version in the version history of any live document.
      Specified by:
      removeOrphanVersions in interface CoreSession
      Parameters:
      docRef - of the live document
      Returns:
      the list of orphan version deleted.
    • getVersionLabel

      public String getVersionLabel(DocumentModel docModel)
      Description copied from interface: CoreSession
      Gets the version label for a document, according to the versioning service.
      Specified by:
      getVersionLabel in interface CoreSession
      Parameters:
      docModel - the document
      Returns:
      the version label
    • getDocumentWithVersion

      public DocumentModel getDocumentWithVersion(DocumentRef docRef, VersionModel version)
      Description copied from interface: CoreSession
      Returns a document that represents the specified version of the document.
      Specified by:
      getDocumentWithVersion in interface CoreSession
      Parameters:
      docRef - the reference to the document
      version - the version for which we want the corresponding document
    • createProxy

      public DocumentModel createProxy(DocumentRef docRef, DocumentRef folderRef)
      Description copied from interface: CoreSession
      Creates a generic proxy to the given document inside the given folder.

      The document may be a version, or a working copy (live document) in which case the proxy will be a "shortcut".

      Specified by:
      createProxy in interface CoreSession
    • createProxyInternal

      protected DocumentModel createProxyInternal(Document doc, Document folder, Map<String,Serializable> options)
    • removeExistingProxies

      protected List<String> removeExistingProxies(Document doc, Document folder)
      Remove proxies for the same base document in the folder. doc may be a normal document or a proxy.
    • updateExistingProxies

      protected DocumentModel updateExistingProxies(Document doc, Document folder, Document target)
      Update the proxy for doc in the given section to point to the new target. Do nothing if there are several proxies.
      Returns:
      the proxy if it was updated, or null if none or several were found
    • getProxies

      public DocumentModelList getProxies(DocumentRef docRef, DocumentRef folderRef)
      Description copied from interface: CoreSession
      Finds the proxies for a document. If the parent is not null, the search will be limited to its direct children.

      If the document is a version, then only proxies to that version will be looked up.

      If the document is a proxy, then all similar proxies (pointing to any version of the same versionable) are retrieved.

      Specified by:
      getProxies in interface CoreSession
      Parameters:
      docRef - the target document for the proxies
      folderRef - the folder where proxies are located or null
      Returns:
      the list of the proxies. An empty list is returned if no proxy are found
    • getAvailableSecurityPermissions

      public List<String> getAvailableSecurityPermissions()
      Description copied from interface: CoreSession
      Retrieves the available security permissions existing in the system.

      Specified by:
      getAvailableSecurityPermissions in interface CoreSession
      Returns:
      a raw list of permission names, either basic or group names
    • getDataModel

      public DataModel getDataModel(DocumentRef docRef, Schema schema)
      Description copied from interface: CoreSession
      Retrieves a data model given a document reference and a schema.

      For INTERNAL use by the core.

      Specified by:
      getDataModel in interface CoreSession
    • getDataModelField

      protected Object getDataModelField(DocumentRef docRef, String schema, String field)
    • makeRecord

      public void makeRecord(DocumentRef docRef)
      Description copied from interface: CoreSession
      Turns the document into an enforced record.

      A record is a document with specific capabilities related to mandatory retention until a given date, and legal holds. In addition, its main blob receives special treatment from the document blob manager to make sure it's never shared with another blob at the storage level, and is deleted as soon as the record is deleted.

      If the document is already a record, this method has no effect.

      The permission "MakeRecord" is required.

      Specified by:
      makeRecord in interface CoreSession
      Parameters:
      docRef - the document
      See Also:
    • makeFlexibleRecord

      public void makeFlexibleRecord(DocumentRef docRef)
      Description copied from interface: CoreSession
      Turns the document into a flexible record.

      A record is a document with specific capabilities related to mandatory retention until a given date. Unlike the enforced record, the flexible record blob has no special treatment.

      Setting a legal hold (CoreSession.setLegalHold(DocumentRef, boolean, String) on a flexible record will turn it into an enforced record.

      If the document is already a flexible record, this method has no effect. It is not allowed to turn an enforced record into a flexible record and an IllegalStateException will be raised.

      The permission "MakeRecord" is required.

      Specified by:
      makeFlexibleRecord in interface CoreSession
      Parameters:
      docRef - the document
      See Also:
    • makeRecord

      protected void makeRecord(DocumentRef docRef, boolean flexible)
    • isRecord

      public boolean isRecord(DocumentRef docRef)
      Description copied from interface: CoreSession
      Checks if the document is a record.
      Specified by:
      isRecord in interface CoreSession
      Parameters:
      docRef - the document
      Returns:
      true if the document is a record, false otherwise
      See Also:
    • isEnforcedRecord

      public boolean isEnforcedRecord(DocumentRef docRef)
      Description copied from interface: CoreSession
      Checks if the document is an enforced record.
      Specified by:
      isEnforcedRecord in interface CoreSession
      Parameters:
      docRef - the document
      Returns:
      true if the document is an enforced record, false otherwise
      See Also:
    • isFlexibleRecord

      public boolean isFlexibleRecord(DocumentRef docRef)
      Description copied from interface: CoreSession
      Checks if the document is a flexible record.
      Specified by:
      isFlexibleRecord in interface CoreSession
      Parameters:
      docRef - the document
      Returns:
      true if the document is a flexible record, false otherwise
      See Also:
    • getRetainedProperties

      public List<String> getRetainedProperties(DocumentRef docRef)
      Description copied from interface: CoreSession
      Gets the retained property xpaths of this document at the time it became a record.
      Specified by:
      getRetainedProperties in interface CoreSession
      Returns:
      the retained properties
    • setRetainUntil

      public void setRetainUntil(DocumentRef docRef, Calendar retainUntil, String comment) throws PropertyException
      Description copied from interface: CoreSession
      Sets the retention date on the document (a record).

      If no previous retention date was set, or if the previous retention date was indeterminate, or if the previous retention date was before the given value, then the retention date is set to the given value.

      If the previous retention date was after the given value (that is, if trying to reduce the retention time), an exception is thrown.

      If the given value is null and the previous retention date is in the past (it has already expired), then the retention date is set to null.

      The permission "SetRetention" is required.

      Specified by:
      setRetainUntil in interface CoreSession
      Parameters:
      docRef - the document (a record)
      retainUntil - the new retention date
      comment - an optional comment passed to the associated events
      Throws:
      PropertyException - if trying to reduce the retention time, or if the document is not a record
      See Also:
    • unsetRetainUntil

      public void unsetRetainUntil(DocumentRef docRef) throws PropertyException
      Description copied from interface: CoreSession
      Removes the retainUntil date, this operation is allowed only for a flexible record.
      Specified by:
      unsetRetainUntil in interface CoreSession
      Parameters:
      docRef - the document (a flexible record)
      Throws:
      PropertyException - if the document is not a flexible record
    • getRetainUntil

      public Calendar getRetainUntil(DocumentRef docRef)
      Description copied from interface: CoreSession
      Gets the retention date for the document.
      Specified by:
      getRetainUntil in interface CoreSession
      Parameters:
      docRef - the document
      Returns:
      the retention date, or "SetRetention" for a retention in the indeterminate future, or null if there is no retention date
      See Also:
    • setLegalHold

      public void setLegalHold(DocumentRef docRef, boolean hold, String comment)
      Description copied from interface: CoreSession
      Sets or removes the legal hold on the document (a record).

      Setting a legal hold on a flexible record will turn it into an enforced record. It will remain enforced even after unsetting the legal hold.

      The permission "ManageLegalHold" is required.

      Specified by:
      setLegalHold in interface CoreSession
      Parameters:
      docRef - the document (a record)
      hold - true to set a legal hold, false to remove it
      comment - an optional comment passed to the associated events
      See Also:
    • hasLegalHold

      public boolean hasLegalHold(DocumentRef docRef)
      Description copied from interface: CoreSession
      Checks if the document has a legal hold set.
      Specified by:
      hasLegalHold in interface CoreSession
      Parameters:
      docRef - the document
      Returns:
      true if a legal hold has been set on the document, false otherwise
      See Also:
    • isUnderRetentionOrLegalHold

      public boolean isUnderRetentionOrLegalHold(DocumentRef docRef)
      Description copied from interface: CoreSession
      Checks if the document has a retention date in the future or has a legal hold.
      Specified by:
      isUnderRetentionOrLegalHold in interface CoreSession
      Parameters:
      docRef - the document
      Returns:
      true if the document has a retention date in the future or if it has a legal hold, false otherwise
      See Also:
    • isRetentionActive

      public boolean isRetentionActive(DocumentRef docRef)
      Description copied from interface: CoreSession
      Checks whether a document is under active retention.
      Specified by:
      isRetentionActive in interface CoreSession
      Parameters:
      docRef - the document reference
      Returns:
      true if the document is under active retention
    • setRetentionActive

      public void setRetentionActive(DocumentRef docRef, boolean retentionActive)
      Description copied from interface: CoreSession
      Sets or unsets a document as under active retention.
      Specified by:
      setRetentionActive in interface CoreSession
      Parameters:
      docRef - the document reference
      retentionActive - whether the retention should be set or unset as active
    • isTrashed

      public boolean isTrashed(DocumentRef docRef)
      Description copied from interface: CoreSession
      Checks if this document is in the trash.
      Specified by:
      isTrashed in interface CoreSession
      Parameters:
      docRef - the document reference
      Returns:
      true if the document is in the trash, false otherwise.
    • getCurrentLifeCycleState

      public String getCurrentLifeCycleState(DocumentRef docRef)
      Description copied from interface: CoreSession
      Returns the life cycle of the document.
      Specified by:
      getCurrentLifeCycleState in interface CoreSession
      Parameters:
      docRef - the document reference
      Returns:
      the life cycle as a string
    • getLifeCyclePolicy

      public String getLifeCyclePolicy(DocumentRef docRef)
      Description copied from interface: CoreSession
      Returns the life cycle policy of the document.
      Specified by:
      getLifeCyclePolicy in interface CoreSession
      Parameters:
      docRef - the document reference
      Returns:
      the life cycle policy
    • followTransition

      public boolean followTransition(DocumentModel docModel, String transition) throws LifeCycleException
      Description copied from interface: CoreSession
      Follows a given life cycle transition.

      This will update the current life cycle of the document.

      Specified by:
      followTransition in interface CoreSession
      Parameters:
      docModel - the document model
      transition - the name of the transition to follow
      Returns:
      a boolean representing the status if the operation
      Throws:
      LifeCycleException - if the transition cannot be followed
    • followTransition

      public boolean followTransition(DocumentRef docRef, String transition) throws LifeCycleException
      Description copied from interface: CoreSession
      Follows a given life cycle transition.

      This will update the current life cycle of the document.

      Specified by:
      followTransition in interface CoreSession
      Parameters:
      docRef - the document reference
      transition - the name of the transition to follow
      Returns:
      a boolean representing the status if the operation
      Throws:
      LifeCycleException - if the transition cannot be followed
    • getAllowedStateTransitions

      public Collection<String> getAllowedStateTransitions(DocumentRef docRef)
      Description copied from interface: CoreSession
      Gets the allowed state transitions for this document.
      Specified by:
      getAllowedStateTransitions in interface CoreSession
      Parameters:
      docRef - the document reference
      Returns:
      a collection of state transitions as string
    • reinitLifeCycleState

      public void reinitLifeCycleState(DocumentRef docRef)
      Description copied from interface: CoreSession
      Reinitializes the life cycle state of the document to its default state.
      Specified by:
      reinitLifeCycleState in interface CoreSession
      Parameters:
      docRef - the document
    • getDataModelsField

      public Object[] getDataModelsField(DocumentRef[] docRefs, String schema, String field)
      Description copied from interface: CoreSession
      Retrieves the given field value from the given schema for all the given documents.
      Specified by:
      getDataModelsField in interface CoreSession
      Parameters:
      docRefs - the document references
      schema - the schema
      field - the field name
      Returns:
      the field values in the same order as the given docRefs
    • getParentDocumentRefs

      public DocumentRef[] getParentDocumentRefs(DocumentRef docRef)
      Description copied from interface: CoreSession
      Creates an array with all parent refs starting from the given document up to the root. So the return value will have [0] = parent ref; [1] = parent parent ref... etc.
      Specified by:
      getParentDocumentRefs in interface CoreSession
      Returns:
      an array with ancestor documents ref
    • getDataModelsFieldUp

      public Object[] getDataModelsFieldUp(DocumentRef docRef, String schema, String field)
      Description copied from interface: CoreSession
      Retrieves the given field value from the given schema for the given document along with all its parent documents.
      Specified by:
      getDataModelsFieldUp in interface CoreSession
      Parameters:
      docRef - the document reference
      schema - the schema
      field - the field name
      Returns:
      an array with field values of all documents on the path from the given document to the root
    • setLock

      public Lock setLock(DocumentRef docRef) throws LockException
      Description copied from interface: CoreSession
      Sets a lock on the given document.
      Specified by:
      setLock in interface CoreSession
      Parameters:
      docRef - the document reference
      Returns:
      the lock info that was set
      Throws:
      LockException - if the document is already locked by another user
    • getLockInfo

      public Lock getLockInfo(DocumentRef docRef)
      Description copied from interface: CoreSession
      Gets the lock info on the given document.

      Lock info is never cached, and needs to use a separate transaction in a separate thread, so care should be taken to not call this method needlessly.

      Specified by:
      getLockInfo in interface CoreSession
      Parameters:
      docRef - the document reference
      Returns:
      the lock info if the document is locked, or null otherwise
    • removeLock

      public Lock removeLock(DocumentRef docRef) throws LockException
      Description copied from interface: CoreSession
      Removes the lock on the given document.

      The caller principal should be the same as the one who set the lock or to belongs to the administrator group, otherwise an exception will be throw.

      If the document was not locked, does nothing.

      Returns the previous lock info.

      Specified by:
      removeLock in interface CoreSession
      Parameters:
      docRef - the document to unlock
      Returns:
      the removed lock info, or null if there was no lock
      Throws:
      LockException - if the document is locked by someone else
    • isAdministrator

      protected boolean isAdministrator()
    • applyDefaultPermissions

      public void applyDefaultPermissions(String userOrGroupName)
      Description copied from interface: CoreSession
      Applies default Read permissions on root JCR Document for the given user or group name. It can only be called by Administrators.

      Usage: As an administrator, you may want to add new users or groups. This method needs to be called to grand default reading permissions on the root document of the repository for the newly created users/groups.

      Specified by:
      applyDefaultPermissions in interface CoreSession
    • publishDocument

      public DocumentModel publishDocument(DocumentModel docToPublish, DocumentModel section)
      Description copied from interface: CoreSession
      Publishes the document in a section overwriting any existing proxy to the same document. This is simmilar to publishDocument(docToPublish, section, true);
      Specified by:
      publishDocument in interface CoreSession
      Returns:
      The proxy document that was created
    • publishDocument

      public DocumentModel publishDocument(DocumentModel docModel, DocumentModel section, boolean overwriteExistingProxy)
      Description copied from interface: CoreSession
      Publishes the document in a section.
      Specified by:
      publishDocument in interface CoreSession
      Returns:
      The proxy document that was created
    • getSuperParentType

      public String getSuperParentType(DocumentModel doc)
      Description copied from interface: CoreSession
      Returns the type of his parent SuperSpace (workspace, section, etc.). SuperSpace is qualified by the SuperSpace facet.
      Specified by:
      getSuperParentType in interface CoreSession
    • getSuperSpace

      public DocumentModel getSuperSpace(DocumentModel doc)
      Description copied from interface: CoreSession
      Returns the parent SuperSpace (workspace, section, etc.). SuperSpace is qualified by the SuperSpace facet.
      Specified by:
      getSuperSpace in interface CoreSession
      Returns:
      DocumentModel of SuperSpace
    • getDocumentSystemProp

      public <T extends Serializable> T getDocumentSystemProp(DocumentRef ref, String systemProperty, Class<T> type)
      Description copied from interface: CoreSession
      Gets system property of the specified type for the document ref.
      Specified by:
      getDocumentSystemProp in interface CoreSession
    • setDocumentSystemProp

      public <T extends Serializable> void setDocumentSystemProp(DocumentRef ref, String systemProperty, T value)
      Description copied from interface: CoreSession
      Sets given value as a system property.
      Specified by:
      setDocumentSystemProp in interface CoreSession
    • getChangeToken

      public String getChangeToken(DocumentRef ref)
      Description copied from interface: CoreSession
      Gets the current change token for the document.

      The change token is an opaque string which is modified every time the document is changed.

      Before saving a document through CoreSession.saveDocument(org.nuxeo.ecm.core.api.DocumentModel) it's possible to pass an expected change token in the document context data through doc.putContextData(CoreSession.CHANGE_TOKEN, expectedChangeToken). If the change token does not match the stored one, it means that a concurrent update happened, and a ConcurrentUpdateException will be thrown.

      Specified by:
      getChangeToken in interface CoreSession
      Parameters:
      ref - the document reference
      Returns:
      the change token
      See Also:
    • orderBefore

      public void orderBefore(DocumentRef parent, String src, String dest)
      Description copied from interface: CoreSession
      Given a parent document, order the source child before the destination child. The source and destination must be name of child documents of the given parent document. (a document name can be retrieved using docModel.getName()) To place the source document at the end of the children list use a null destination node.
      Specified by:
      orderBefore in interface CoreSession
      Parameters:
      parent - the parent document
      src - the document to be moved (ordered)
      dest - the document before which the reordered document will be placed If null the source document will be placed at the end of the children list
    • refreshDocument

      public DocumentModel.DocumentModelRefresh refreshDocument(DocumentRef ref, int refreshFlags, String[] schemas)
      Description copied from interface: CoreSession
      Internal method - it is used internally by DocumentModel.refresh()

      Get fresh data from a document given a description of what kind of data should be refetched.

      The refresh information is specified using a bit mask. See DocumentModel for all accepted flags.

      When the flag DocumentModel.REFRESH_CONTENT_IF_LOADED is specified a third argument must be passed representing the schema names for document parts to refresh. This argument is ignored if the flag is not specified or no schema names are provided

      Specified by:
      refreshDocument in interface CoreSession
      Parameters:
      ref - the document reference
      refreshFlags - refresh flags as defined in DocumentModel
      schemas - the schema names if a partial content refresh is required
      Returns:
      a DocumentModelRefresh object
    • getPermissionsToCheck

      public String[] getPermissionsToCheck(String permission)
      Description copied from interface: CoreSession
      Provides the full list of all permissions or groups of permissions that contain the given one (inclusive). It makes the method org.nuxeo.ecm.core.security.SecurityService#getPermissionsToCheck(String) available remotely.
      Specified by:
      getPermissionsToCheck in interface CoreSession
      Returns:
      the list, as an array of strings.
    • adaptFirstMatchingDocumentWithFacet

      public <T extends DetachedAdapter> T adaptFirstMatchingDocumentWithFacet(DocumentRef docRef, String facet, Class<T> adapterClass)
      Description copied from interface: CoreSession
      Find the first parent with the given facet and adapt it on the adapterClass.

      This method does not check the permissions on the document to be adapted of this CoreSession's Principal, and so the adapter must not need other schemas from the DocumentModel except the schemas related to the given facet.

      Specified by:
      adaptFirstMatchingDocumentWithFacet in interface CoreSession
      Returns:
      the first parent with the given facet adapted, or null if no parent found or the document does not support the given adapterClass.
    • loadDataModelsForFacet

      protected void loadDataModelsForFacet(DocumentModel docModel, Document doc, String facetName)
    • getFirstParentDocumentWithFacet

      protected Document getFirstParentDocumentWithFacet(DocumentRef docRef, String facet)
      Returns the first Document with the given facet, recursively going up the parent hierarchy. Returns null if there is no more parent.

      This method does not check security rights.

    • getBinaryFulltext

      public Map<String,String> getBinaryFulltext(DocumentRef ref)
      Description copied from interface: CoreSession
      Gets the fulltext extracted from the binary fields. We defined a new API for that to avoid to store in the cache the fulltext properties which could be huge. This method handle if document is a proxy or not. Historically, VCS doesn't store fulltext properties for proxies (note that DBS does).
      Specified by:
      getBinaryFulltext in interface CoreSession
      Parameters:
      ref - the document reference
      Returns:
      the fulltext map or null if not supported.
    • getOrCreateDocument

      public DocumentModel getOrCreateDocument(DocumentModel docModel)
      Description copied from interface: CoreSession
      Gets a document if it exists, otherwise creates it. This is done atomically to prevent different threads from trying to create the same document. If the document did not exist and is therefore created, the current transaction is committed and the newly-created document is also committed in its own transaction.

      WARNING: As the current transaction is impacted, using this method instead of CoreSession.createDocument(DocumentModel) could lead to inconsistent behaviour in case of rollback.

      Specified by:
      getOrCreateDocument in interface CoreSession
      Parameters:
      docModel - the document model
      Returns:
      the existing or created document
    • getOrCreateDocument

      public DocumentModel getOrCreateDocument(DocumentModel docModel, Function<DocumentModel,DocumentModel> postCreate)
      Description copied from interface: CoreSession
      Gets a document if it exists, otherwise creates it. This is done atomically to prevent different threads from trying to create the same document. If the document did not exist and is therefore created, the current transaction is committed and the newly-created document is also committed in its own transaction.

      WARNING: As the current transaction is impacted, using this method instead of CoreSession.createDocument(DocumentModel) could lead to inconsistent behaviour in case of rollback.

      Specified by:
      getOrCreateDocument in interface CoreSession
      Parameters:
      docModel - the document model
      postCreate - the function to apply after creating the document
      Returns:
      the existing or created document
    • newDocumentModel

      public DocumentModel newDocumentModel(DocumentRef parentRef, String name, String typeName)
      Description copied from interface: CoreSession
      Creates a new document model using required information.

      Used to fetch initial datamodels from the type definition.

      DocumentModel creation notifies a DocumentEventTypes.EMPTY_DOCUMENTMODEL_CREATED so that core event listener can initialize its content with computed properties.

      Specified by:
      newDocumentModel in interface CoreSession
      Parameters:
      parentRef - the parent document ref DocumentRef
      name - The destination name
      typeName - the type name
      Returns:
      the initial document model
    • computeKeyForAtomicCreation

      protected String computeKeyForAtomicCreation(DocumentModel docModel)
    • replaceBlobDigest

      public String replaceBlobDigest(DocumentRef docRef, String key, String newKey, String newDigest)
      Description copied from interface: CoreSession
      Visits the blobs of a document and, for those with a matching key, replace their key and digest with new ones.
      Specified by:
      replaceBlobDigest in interface CoreSession
      Parameters:
      docRef - the document reference
      key - the bob key to look for
      newKey - the new key
      newDigest - the new digest
      Returns:
      the old digest if at least one replacement was done, null otherwise