Interface DocumentModel

All Superinterfaces:
Serializable
All Known Implementing Classes:
DeletedDocumentModel, DocumentModelImpl, ShallowDocumentModel, SimpleDocumentModel

public interface DocumentModel extends Serializable
The document model is a serializable representation of a core document.

The document model is made from several data models, each data model is bound to a schema. All the information about a document (like security) is expressed using schemas (and implicitly data models).

Data models are lazily loaded as they are needed. At document model creation only data models corresponding to the default schemas are loaded. The default schemas are configured in the type manager through extension points.

See Also:
  • Field Details

  • Method Details

    • getDocumentType

      DocumentType getDocumentType()
      Gets the document type object.
      Returns:
      the document type object
    • getSessionId

      @Deprecated String getSessionId()
      Deprecated.
      since 11.1
      Returns the repository name and principal when the document is attached.
    • getPrincipal

      NuxeoPrincipal getPrincipal()
      Gets the principal attached to this document's session.
      Returns:
      the principal
      Since:
      11.1
    • getCoreSession

      CoreSession getCoreSession()
      Gets the core session to which this document is tied.

      This may be null if the document has been detached from a session.

      Returns:
      the core session
      Since:
      5.2.GA
    • detach

      void detach(boolean loadAll)
      Detaches the documentImpl from its existing session, so that it can survive beyond the session's closing.
      Parameters:
      loadAll - if true, load all data and ACP from the session before detaching
      Since:
      5.6
    • attach

      void attach(CoreSession coreSession)
      Reattaches a document to an existing session.
      Parameters:
      coreSession - the session to attach to
      Since:
      11.1
    • isAttached

      boolean isAttached()
      Checks whether this document is attached to a session.
      Returns:
      true if the document is attached to a session
      Since:
      11.1
    • getRef

      DocumentRef getRef()
      Gets a reference to the core document that can be used either remotely or locally (opens the core JVM).
      Returns:
      the document reference
    • getParentRef

      DocumentRef getParentRef()
      Retrieves the parent reference of the current document.
      Returns:
      the parent reference or null if no parent
    • getId

      String getId()
      Gets the document UUID.
      Returns:
      the document UUID
    • getName

      String getName()
      Gets the document name.
      Returns:
      the document name
    • getPos

      Long getPos()
      Gets the document's position in its containing folder (if ordered).
      Returns:
      the position, or null if the containing folder is not ordered
      Since:
      6.0
    • getTitle

      String getTitle()
      Get a text suitable to be shown in a UI for this document.
      Returns:
      the title or the internal name if no title could be found
    • getPathAsString

      String getPathAsString()
      Gets the document path as a string.
      Returns:
      the document path as string
    • getPath

      Path getPath()
      Gets the document path.
      Returns:
      the document path as string
    • getType

      String getType()
      Gets the document type name.
      Returns:
      the document type name
    • getSchemas

      String[] getSchemas()
      Gets the schemas available on this document (from the type and the facets).
      Returns:
      the schemas
      Since:
      5.4.2
    • hasSchema

      boolean hasSchema(String schema)
      Checks if the document has the given schema, either from its type or added on the instance through a facet.
      Parameters:
      schema - the schema name
      Returns:
      true if the document has the schema
    • getFacets

      Set<String> getFacets()
      Gets the facets available on this document (from the type and the instance facets).
      Returns:
      the facets
      Since:
      5.4.2
    • hasFacet

      boolean hasFacet(String facet)
      Checks if the document has a facet, either from its type or added on the instance.
      Parameters:
      facet - the facet name
      Returns:
      true if the document has the facet
    • addFacet

      boolean addFacet(String facet)
      Adds a facet to the document instance.

      Does nothing if the facet was already present on the document.

      Parameters:
      facet - the facet name
      Returns:
      true if the facet was added, or false if it is already present
      Throws:
      IllegalArgumentException - if the facet does not exist
      Since:
      5.4.2
    • removeFacet

      boolean removeFacet(String facet)
      Removes a facet from the document instance.

      It's not possible to remove a facet coming from the document type.

      Parameters:
      facet - the facet name
      Returns:
      true if the facet was removed, or false if it isn't present or is present on the type or does not exit
      Since:
      5.4.2
    • getDataModelsCollection

      @Deprecated Collection<DataModel> getDataModelsCollection()
      Deprecated.
      since 8.4, internal method
      INTERNAL, not for public use.

      Gets a list with the currently fetched data models.

      Returns:
      the data models that are already fetched as a collection
      See Also:
    • getDataModels

      @Deprecated Map<String,DataModel> getDataModels()
      Deprecated.
      since 8.4, use direct Property getters instead
      Gets the data models.
      Returns:
      the data models that are already fetched.
      See Also:
    • getDataModel

      @Deprecated DataModel getDataModel(String schema)
      Deprecated.
      since 8.4, use direct Property getters instead
      Gets the data model corresponding to the given schema.

      Null is returned if the document type has no such schema.

      Parameters:
      schema - the schema name
      Returns:
      the data model or null if no such schema is supported
      See Also:
    • setPathInfo

      void setPathInfo(String parentPath, String name)
      Sets path info.

      path and ref attributes will be set according to info

    • isLocked

      boolean isLocked()
      Tests if the document is locked.

      Lock info is cached on the document for performance. Use CoreSession.getLockInfo(org.nuxeo.ecm.core.api.DocumentRef) to get the non-cached status.

      Returns:
      the lock key if the document is locked or null otherwise
    • setLock

      Lock setLock() throws LockException
      Sets a lock on the document.
      Returns:
      the lock info that was set
      Throws:
      LockException - if the document is already locked
      Since:
      5.4.2
    • getLockInfo

      Lock getLockInfo()
      Gets the lock info on the document.

      Lock info is cached on the document for performance. Use CoreSession.getLockInfo(org.nuxeo.ecm.core.api.DocumentRef) to get the non-cached status.

      Returns:
      the lock info if the document is locked, or null otherwise
      Since:
      5.4.2
    • removeLock

      Lock removeLock() throws LockException
      Removes the lock on the 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.

      Returns:
      the removed lock info, or null if there was no lock
      Throws:
      LockException - if the document is locked by someone else
      Since:
      5.4.2
    • isCheckedOut

      boolean isCheckedOut()
      Tests if the document is checked out.

      A checked out document can be modified normally. A checked in document is identical to the last version that it created, and not modifiable.

      Only applicable to documents that are live (not versions and not proxies).

      Returns:
      true if the document is checked out, false if it is checked in
      Since:
      5.4
    • checkOut

      void checkOut()
      Checks out a document.

      A checked out document can be modified normally.

      Only applicable to documents that are live (not versions and not proxies).

      Since:
      5.4
    • checkIn

      DocumentRef checkIn(VersioningOption option, String checkinComment)
      Checks in a document and returns the created version.

      A checked in document is identical to the last version that it created, and not modifiable.

      Only applicable to documents that are live (not versions and not proxies).

      Parameters:
      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
      Since:
      5.4
    • getVersionLabel

      String getVersionLabel()
      Returns the version label.

      The label returned is computed by the VersioningService.

      Returns:
      the version label, or null
    • getCheckinComment

      String getCheckinComment()
      Returns the checkin comment if the document model is a version.
      Returns:
      the checkin comment, or null
      Since:
      5.4
    • getCheckinDate

      Calendar getCheckinDate()
      Returns the checkin date (the date the version was created) if the document model is a version.
      Returns:
      the checkin date, or null
      Since:
      2023
    • getVersionSeriesId

      String getVersionSeriesId()
      Gets the version series id for this document.

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

      Returns:
      the version series id
      Since:
      5.4
    • isLatestVersion

      boolean isLatestVersion()
      Checks if a document is the latest version in the version series.
      Since:
      5.4
    • isMajorVersion

      boolean isMajorVersion()
      Checks if a document is a major version.
      Since:
      5.4
    • isLatestMajorVersion

      boolean isLatestMajorVersion()
      Checks if a document is the latest major version in the version series.
      Since:
      5.4
    • isVersionSeriesCheckedOut

      boolean isVersionSeriesCheckedOut()
      Checks if there is a checked out working copy for the version series of this document.
      Since:
      5.4
    • isRecord

      default boolean isRecord()
      Checks if the document is a record.
      Returns:
      true if the document is a record, false otherwise
      Since:
      11.1
    • isEnforcedRecord

      default boolean isEnforcedRecord()
      Checks if the document is an enforced record.
      Returns:
      true if the document is an enforced record, false otherwise
      Since:
      2023.1
    • isFlexibleRecord

      default boolean isFlexibleRecord()
      Checks if the document is a flexible record.
      Returns:
      true if the document is a flexible record, false otherwise
      Since:
      2023.1
    • getRetainedProperties

      default List<String> getRetainedProperties()
      Gets the retained properties of this document at the time it became a record.
      Returns:
      the retained properties
      Since:
      2021.32
    • getRetainUntil

      default Calendar getRetainUntil()
      Gets the retention date for the document.
      Returns:
      the retention date, or "SetRetention" for a retention in the indeterminate future, or null if there is no retention date
      Since:
      11.1
      See Also:
    • hasLegalHold

      default boolean hasLegalHold()
      Checks if the document has a legal hold set.
      Returns:
      true if a legal hold has been set on the document, false otherwise
      Since:
      11.1
      See Also:
    • isUnderRetentionOrLegalHold

      default boolean isUnderRetentionOrLegalHold()
      Checks if the document has a retention date in the future or has a legal hold.
      Returns:
      true if the document has a retention date in the future or if it has a legal hold, false otherwise
      Since:
      11.1
      See Also:
    • getACP

      ACP getACP()
      Gets the access control policy (ACP) for this document.

      Returns null if no security was defined on this document.

      The ACP can be used to introspect or to evaluate user privileges on this document.

      This is a wrapper for CoreSession.getACP(DocumentRef) but it is recommended since it caches the ACP for later usage.

      Returns:
      the security data model or null if none
    • setACP

      void setACP(ACP acp, boolean overwrite)
      Sets the ACP for this document model.

      This is a wrapper for CoreSession.setACP(DocumentRef, ACP, boolean)

      Parameters:
      acp - the ACP to set
      overwrite - whether to overwrite the old ACP or not
      See Also:
    • getProperty

      Object getProperty(String schemaName, String name)
      Gets a property from the given schema.

      The data model owning the property will be fetched from the server if not already fetched.

      Parameters:
      schemaName - the schema name
      name - the property name
      Returns:
      the property value or null if no such property exists
    • getPropertyObject

      Property getPropertyObject(String schema, String name)
      Gets a property object from the given schema.
      Parameters:
      schema - the schema name
      name - the property name
      Returns:
      the property, or null if no such property exists
      Since:
      8.4
    • setPropertyObject

      void setPropertyObject(Property property)
      Sets a property object.
      Parameters:
      property - the property object
      Since:
      2023.0
    • setProperty

      void setProperty(String schemaName, String name, Object value)
      Sets the property value from the given schema.

      This operation will not fetch the data model if not already fetched

      Parameters:
      schemaName - the schema name
      name - the property name
      value - the property value
    • getProperties

      Map<String,Object> getProperties(String schemaName)
      Gets the values from the given data model as a map.

      The operation will fetch the data model from the server if not already fetched.

      Parameters:
      schemaName - the data model schema name
      Returns:
      the values map
    • setProperties

      void setProperties(String schemaName, Map<String,Object> data)
      Sets values for the given data model.

      This will not fetch the data model if not already fetched.

      Parameters:
      schemaName - the schema name
      data - the values to set
    • isTrashed

      boolean isTrashed()
      Checks if this document is in the trash.
      Returns:
      true if the document is in the trash, false otherwise.
      Since:
      10.1
    • isFolder

      boolean isFolder()
      Checks if this document is a folder.
      Returns:
      true if the document is a folder, false otherwise
    • isVersionable

      boolean isVersionable()
      Checks if this document can have versions.
      Returns:
      true if the document can have versions, false otherwise
    • isDownloadable

      boolean isDownloadable()
      Checks if this document can be downloaded.
      Returns:
      true if the document has downloadable content, false otherwise
    • isVersion

      boolean isVersion()
      Checks if this document is a version.
      Returns:
      true if the document is an older version of another document, false otherwise
    • isProxy

      boolean isProxy()
      Checks if this document is a proxy.
      Returns:
      true if the document is a proxy false otherwise
    • isImmutable

      boolean isImmutable()
      Checks if this document is immutable.
      Returns:
      true if the document is a version or a proxy to a version, false otherwise
      Since:
      1.6.1 (5.3.1)
    • isDirty

      boolean isDirty()
      Checks if the document has actual data to write (dirty parts).
      Since:
      5.5
    • accept

      void accept(PropertyVisitor visitor, Object arg)
      Method that implement the visitor pattern.

      The visitor must return null to stop visiting children otherwise a context object that will be passed as the arg argument to children

      Parameters:
      visitor - the visitor to accept
      arg - an argument passed to the visitor. This should be used by the visitor to carry on the visiting context.
      Since:
      5.5
    • getAdapter

      <T> T getAdapter(Class<T> itf)
      Adapts the document to the given interface.

      Attention, the first computation will cache the adaptation result for later calls.

      Type Parameters:
      T - the interface type to adapt to
      Parameters:
      itf - the interface class
      Returns:
      the adapted document
    • getAdapter

      <T> T getAdapter(Class<T> itf, boolean refreshCache)
      Adapts the document to the given interface.
      Type Parameters:
      T - the interface type to adapt to
      Parameters:
      itf - the interface class
      refreshCache - : readapt and stores in cache if already exists.
      Returns:
      the adapted document
    • getCurrentLifeCycleState

      String getCurrentLifeCycleState()
      Returns the life cycle of the document.
      Returns:
      the life cycle as a string
      Implementation Note:
      See org.nuxeo.ecm.core.lifecycle package
    • getLifeCyclePolicy

      String getLifeCyclePolicy()
      Returns the life cycle policy of the document.
      Returns:
      the life cycle policy
      Implementation Note:
      See org.nuxeo.ecm.core.lifecycle package
    • followTransition

      boolean followTransition(String transition)
      Follows a given life cycle transition.

      This will update the current life cycle of the document.

      Parameters:
      transition - the name of the transition to follow
      Returns:
      a boolean representing the status if the operation
    • getAllowedStateTransitions

      Collection<String> getAllowedStateTransitions()
      Gets the allowed state transitions for this document.
      Returns:
      a collection of state transitions as string
    • getContextData

      Map<String,Serializable> getContextData()
      Gets the context data associated to this document.
      Returns:
      a map of context data
    • getContextData

      Serializable getContextData(String key)
      Gets the context data using the default scope.
      Parameters:
      key - the context data key
      Returns:
      the value
    • putContextData

      void putContextData(String key, Serializable value)
      Sets a context data in the default scope.
      Parameters:
      key - the context data key
      value - the value
    • copyContextData

      void copyContextData(DocumentModel otherDocument)
      Copies the context data from given document to this document.
    • copyContent

      void copyContent(DocumentModel sourceDoc)
      Copies all the data from a source document.
    • getRepositoryName

      String getRepositoryName()
      Returns the name of the repository in which the document is stored.
      Returns:
      the repository name as a string.
    • getCacheKey

      String getCacheKey()
      Returns a cache key.

      Cache key will be computed like this : docUUID + "-" + sessionId + "-" + timestamp

      We will use the last modification time if present for the timestamp.

      Since 5.6, the timestamp does not hold milliseconds anymore as some databases do not store them, which could interfere with cache key comparisons.

      Returns:
      the cache key as a string
    • getSourceId

      String getSourceId()
      Returns the source document identifier.

      This is useful when not interested about the repository UUID itself. Technically, this is the current version UUID.

      Returns:
      the source id as a string.
    • isPrefetched

      @Deprecated boolean isPrefetched(String xpath)
      Deprecated.
      since 10.1, will always return false
      Checks if a property is prefetched.
      Parameters:
      xpath - the property xpath
      Returns:
      true if it is prefetched
      Since:
      5.5
    • isPrefetched

      @Deprecated boolean isPrefetched(String schemaName, String name)
      Deprecated.
      since 10.1, will always return false
      Checks if a property is prefetched.
      Parameters:
      schemaName - the schema name
      name - the property name
      Returns:
      true if it is prefetched
      Since:
      5.5
    • prefetchCurrentLifecycleState

      void prefetchCurrentLifecycleState(String lifecycle)
      Used to set lifecycle state along with prefetching other properties.
    • prefetchLifeCyclePolicy

      void prefetchLifeCyclePolicy(String lifeCyclePolicy)
      Used to set lifecycle policy along with prefetching other properties.
    • isLifeCycleLoaded

      boolean isLifeCycleLoaded()
    • getSystemProp

      <T extends Serializable> T getSystemProp(String systemProperty, Class<T> type)
      Gets system property of the specified type. This is not a lazy loaded property, thus the request is made directly to the server. This is needed as some critical system properties might be changed directly in the core.
    • getPropertyObjects

      Collection<Property> getPropertyObjects(String schema)
      Gets the Property objects for the given schema.

      An empty list is returned if the document doesn't have the schema.

      Parameters:
      schema - the schema
      Returns:
      the properties
      Since:
      8.4
    • getProperty

      Property getProperty(String xpath) throws PropertyException
      Gets a property given a xpath.

      Note that what's called xpath in this context is not an actual XPath as specified by the w3c. Main differences are that in our xpath:

      • Indexes start at 0 instead of 1
      • You can express foo/bar[i]/baz as foo/i/baz
      The latter is possible because in Nuxeo lists of complex elements are homogenous, so the name of the second-level element is implied.
      Throws:
      PropertyException
    • getPropertyValue

      Serializable getPropertyValue(String xpath) throws PropertyException
      Gets a property value given a xpath.

      Note that what's called xpath in this context is not an actual XPath as specified by the w3c. Main differences are that in our xpath:

      • Indexes start at 0 instead of 1
      • You can express foo/bar[i]/baz as foo/i/baz
      The latter is possible because in Nuxeo lists of complex elements are homogenous, so the name of the second-level element is implied.
      Throws:
      PropertyException
    • setPropertyValue

      void setPropertyValue(String xpath, Serializable value) throws PropertyException
      Sets a property value given a xpath.
      Throws:
      PropertyException
    • reset

      void reset()
      Clears any prefetched or cached document data.

      This will force the document to lazily update its data when required.

    • refresh

      void refresh(int refreshFlags, String[] schemas)
      Refresh document data from server.

      The data models will be removed and all prefetch and system data will be refreshed from the server

      The refreshed data contains:

      • document life cycle
      • document lock state, acp if required
      • acp if required - otherwise acp info will be cleared so that it will be refetched in lazy way
      • document parts if required - otherwise parts data will be removed to be refreshed lazy
      The refresh flags are: If XX_IF_LOADED is used then XX will be refreshed only if already loaded in the document - otherwise a lazy refresh will be done
      Parameters:
      refreshFlags - the refresh flags
      schemas - the document parts (schemas) that should be refreshed now
    • refresh

      void refresh()
      Same as DocumentModel.refresh(REFRESH_DEFAULT).
    • clone

      Clone operation. Must be made public instead of just protected as in Object.
      Throws:
      CloneNotSupportedException
    • getChangeToken

      String getChangeToken()
      Gets the current change token for this 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.

      Returns:
      the change token
      Since:
      5.5
      See Also:
    • getBinaryFulltext

      Map<String,String> getBinaryFulltext()
      Gets the fulltext extracted from the binary fields.
      Since:
      5.9.3
    • getObjectResolver

      PropertyObjectResolver getObjectResolver(String xpath)
      Parameters:
      xpath - the property xpath
      Returns:
      A PropertyObjectResolver to manage the property reference to external entities, null if this property's type has no resolver.
      Since:
      7.1