public interface DocumentModel extends Serializable
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.
The user may overwrite the default schemas by passing the schemas to be used at model creation via
CoreSession#getDocument(DocumentRef, String[])
How a lazy data model is loaded depends on the implementation.
Anyway the API already provides a mechanism to handle this as follow:
public DataModel getDataModel(String schema) {
DataModel dataModel = dataModels.get(schema);
if (dataModel != null && !dataModel.isLoaded()) {
CoreSession client = CoreInstance.getInstance().getClient(
getSessionId());
if (client != null) {
dataModel = client.getDataModel(getRef(), schema);
dataModels.put(schema, dataModel);
}
}
return dataModel;
}
CoreSession
,
DataModel
Modifier and Type | Interface and Description |
---|---|
static class |
DocumentModel.DocumentModelRefresh
Info fetched internally during a refresh.
|
Modifier and Type | Field and Description |
---|---|
static int |
REFRESH_ACP |
static int |
REFRESH_ACP_IF_LOADED |
static int |
REFRESH_ACP_LAZY |
static int |
REFRESH_ALL |
static int |
REFRESH_CONTENT |
static int |
REFRESH_CONTENT_IF_LOADED |
static int |
REFRESH_CONTENT_LAZY |
static int |
REFRESH_DEFAULT |
static int |
REFRESH_IF_LOADED |
static int |
REFRESH_LAZY |
static int |
REFRESH_PREFETCH |
static int |
REFRESH_STATE |
Modifier and Type | Method and Description |
---|---|
void |
accept(PropertyVisitor visitor,
Object arg)
Method that implement the visitor pattern.
|
boolean |
addFacet(String facet)
Adds a facet to the document instance.
|
void |
attach(String sid)
Reattaches a document impl to an existing session.
|
DocumentRef |
checkIn(VersioningOption option,
String checkinComment)
Checks in a document and returns the created version.
|
void |
checkOut()
Checks out a document.
|
DocumentModel |
clone()
Clone operation.
|
void |
copyContent(DocumentModel sourceDoc)
Copies all the data from a source document.
|
void |
copyContextData(DocumentModel otherDocument)
Copies the context data from given document to this document.
|
void |
detach(boolean loadAll)
Detaches the documentImpl from its existing session, so that it can survive beyond the session's closing.
|
boolean |
followTransition(String transition)
Follows a given life cycle transition.
|
ACP |
getACP()
Gets the access control policy (ACP) for this document.
|
<T> T |
getAdapter(Class<T> itf)
Adapts the document to the given interface.
|
<T> T |
getAdapter(Class<T> itf,
boolean refreshCache)
Adapts the document to the given interface.
|
Collection<String> |
getAllowedStateTransitions()
Gets the allowed state transitions for this document.
|
Map<String,String> |
getBinaryFulltext()
Gets the fulltext extracted from the binary fields.
|
String |
getCacheKey()
Returns a cache key.
|
String |
getChangeToken()
Opaque string that represents the last update state of the DocumentModel.
|
String |
getCheckinComment()
Returns the checkin comment if the document model is a version.
|
ScopedMap |
getContextData()
Gets the context data associated to this document.
|
Serializable |
getContextData(ScopeType scope,
String key)
Gets the context data associated to this document for given scope and given key.
|
Serializable |
getContextData(String key)
Gets the context data using the default scope.
|
CoreSession |
getCoreSession()
Gets the core session to which this document is tied.
|
String |
getCurrentLifeCycleState()
Returns the life cycle of the document.
|
DataModel |
getDataModel(String schema)
Gets the data model corresponding to the given schema.
|
DataModelMap |
getDataModels()
Gets the data models.
|
Collection<DataModel> |
getDataModelsCollection()
Gets a list with the currently fetched data models.
|
Set<String> |
getDeclaredFacets()
Deprecated.
use
getFacets() instead, or call getDocumentType() and look up the type facets |
String[] |
getDeclaredSchemas()
Deprecated.
use
getSchemas() instead, or call getDocumentType() and look up the type schemas |
DocumentType |
getDocumentType()
Gets the document type object.
|
Set<String> |
getFacets()
Gets the facets available on this document (from the type and the instance facets).
|
String |
getId()
Gets the document UUID.
|
String |
getLifeCyclePolicy()
Returns the life cycle policy of the document.
|
String |
getLock()
Deprecated.
since 5.4.2, use
getLockInfo() instead |
Lock |
getLockInfo()
Gets the lock info on the document.
|
String |
getName()
Gets the document name.
|
PropertyObjectResolver |
getObjectResolver(String xpath) |
DocumentRef |
getParentRef()
Retrieves the parent reference of the current document.
|
DocumentPart |
getPart(String schema)
Get a document part given its schema name
|
DocumentPart[] |
getParts()
Gets this document's parts.
|
Path |
getPath()
Gets the document path.
|
String |
getPathAsString()
Gets the document path as a string.
|
Long |
getPos()
Gets the document's position in its containing folder (if ordered).
|
Map<String,Object> |
getProperties(String schemaName)
Gets the values from the given data model as a map.
|
Property |
getProperty(String xpath)
Gets a property given a xpath.
|
Object |
getProperty(String schemaName,
String name)
Gets a property from the given schema.
|
Serializable |
getPropertyValue(String xpath)
Gets a property value given a xpath.
|
DocumentRef |
getRef()
Gets a reference to the core document that can be used either remotely or locally (opens the core JVM).
|
String |
getRepositoryName()
Returns the name of the repository in which the document is stored.
|
String[] |
getSchemas()
Gets the schemas available on this document (from the type and the facets).
|
String |
getSessionId()
Retrieves the session id corresponding to this object.
|
String |
getSourceId()
Returns the source document identifier.
|
<T extends Serializable> |
getSystemProp(String systemProperty,
Class<T> type)
Gets system property of the specified type.
|
String |
getTitle()
Get a text suitable to be shown in a UI for this document.
|
String |
getType()
Gets the document type name.
|
String |
getVersionLabel()
Returns the version label.
|
String |
getVersionSeriesId()
Gets the version series id for this document.
|
boolean |
hasFacet(String facet)
Checks if the document has a facet, either from its type or added on the instance.
|
boolean |
hasSchema(String schema)
Checks if the document has the given schema, either from its type or added on the instance through a facet.
|
boolean |
isCheckedOut()
Tests if the document is checked out.
|
boolean |
isDirty()
Checks if the document has actual data to write (dirty parts).
|
boolean |
isDownloadable()
Checks if this document can be downloaded.
|
boolean |
isFolder()
Checks if this document is a folder.
|
boolean |
isImmutable()
Checks if this document is immutable.
|
boolean |
isLatestMajorVersion()
Checks if a document is the latest major version in the version series.
|
boolean |
isLatestVersion()
Checks if a document is the latest version in the version series.
|
boolean |
isLifeCycleLoaded() |
boolean |
isLocked()
Tests if the document is locked.
|
boolean |
isMajorVersion()
Checks if a document is a major version.
|
boolean |
isPrefetched(String xpath)
Checks if a property is prefetched.
|
boolean |
isPrefetched(String schemaName,
String name)
Checks if a property is prefetched.
|
boolean |
isProxy()
Checks if this document is a proxy.
|
boolean |
isVersion()
Checks if this document is a version.
|
boolean |
isVersionable()
Checks if this document can have versions.
|
boolean |
isVersionSeriesCheckedOut()
Checks if there is a checked out working copy for the version series of this document.
|
void |
prefetchCurrentLifecycleState(String lifecycle)
Used to set lifecycle state along with prefetching other properties.
|
void |
prefetchLifeCyclePolicy(String lifeCyclePolicy)
Used to set lifecycle policy along with prefetching other properties.
|
void |
putContextData(ScopeType scope,
String key,
Serializable value)
Adds mapping to the context data for given scope.
|
void |
putContextData(String key,
Serializable value)
Sets a context data in the default scope.
|
void |
refresh()
Same as
DocumentModel.refresh(REFRESH_DEFAULT) . |
void |
refresh(int refreshFlags,
String[] schemas)
Refresh document data from server.
|
boolean |
removeFacet(String facet)
Removes a facet from the document instance.
|
Lock |
removeLock()
Removes the lock on the document.
|
void |
reset()
Clears any prefetched or cached document data.
|
void |
setACP(ACP acp,
boolean overwrite)
Sets the ACP for this document model.
|
Lock |
setLock()
Sets a lock on the document.
|
void |
setLock(String key)
Deprecated.
since 5.4.2, use
setLock(java.lang.String) instead |
void |
setPathInfo(String parentPath,
String name)
Sets path info.
|
void |
setProperties(String schemaName,
Map<String,Object> data)
Sets values for the given data model.
|
void |
setProperty(String schemaName,
String name,
Object value)
Sets the property value from the given schema.
|
void |
setPropertyValue(String xpath,
Serializable value)
Sets a property value given a xpath.
|
void |
unlock()
Deprecated.
since 5.4.2, use
removeLock() instead |
static final int REFRESH_STATE
static final int REFRESH_PREFETCH
static final int REFRESH_ACP_IF_LOADED
static final int REFRESH_ACP_LAZY
static final int REFRESH_ACP
static final int REFRESH_CONTENT_IF_LOADED
static final int REFRESH_CONTENT_LAZY
static final int REFRESH_CONTENT
static final int REFRESH_IF_LOADED
static final int REFRESH_LAZY
static final int REFRESH_ALL
static final int REFRESH_DEFAULT
DocumentType getDocumentType()
String getSessionId()
This method should rarely be used, use getCoreSession()
directly instead.
Using the session id you can retrieve the core session that created the object.
Document models created by the user on the client side are not bound to any session. They are simple DTO used to transport data.
CoreSession getCoreSession()
This may be null if the document has been detached from a session.
void detach(boolean loadAll) throws ClientException
loadAll
- if true
, load all data and ACP from the session before detachingClientException
void attach(String sid) throws ClientException
sid
- the session idClientException
DocumentRef getRef()
DocumentRef getParentRef()
String getId()
String getName()
Long getPos()
null
if the containing folder is not orderedString getTitle() throws ClientException
ClientException
String getPathAsString()
Path getPath()
String getType()
String[] getSchemas()
@Deprecated String[] getDeclaredSchemas()
boolean hasSchema(String schema)
schema
- the schema nametrue
if the document has the schemaSet<String> getFacets()
@Deprecated Set<String> getDeclaredFacets()
boolean hasFacet(String facet)
facet
- the facet nametrue
if the document has the facetboolean addFacet(String facet)
Does nothing if the facet was already present on the document.
facet
- the facet nametrue
if the facet was added, or false
if it is already presentDocumentException
- if the facet does not existboolean removeFacet(String facet)
It's not possible to remove a facet coming from the document type.
facet
- the facet nametrue
if the facet was removed, or false
if it isn't present or is present on the type or
does not exitCollection<DataModel> getDataModelsCollection()
DataModelMap getDataModels()
DataModel getDataModel(String schema) throws ClientException
Null is returned if the document type has no such schema.
schema
- the schema nameClientException
void setPathInfo(String parentPath, String name)
path and ref attributes will be set according to info
parentPath
- name
- @Deprecated String getLock()
getLockInfo()
instead
Lock info is cached on the document for performance. Use CoreSession.getLockInfo(org.nuxeo.ecm.core.api.DocumentRef)
to get the non-cached
status.
boolean isLocked()
Lock info is cached on the document for performance. Use CoreSession.getLockInfo(org.nuxeo.ecm.core.api.DocumentRef)
to get the non-cached
status.
@Deprecated void setLock(String key) throws ClientException
setLock(java.lang.String)
instead
This is a wrapper for CoreSession.setLock(DocumentRef, String)
.
key
- the key to use when lockingClientException
- if the document is already locked or other error occurs@Deprecated void unlock() throws ClientException
removeLock()
insteadClientException
- if the document is already locked or other error occursLock setLock() throws ClientException
ClientException
- if a lock was already setLock getLockInfo() throws ClientException
Lock info is cached on the document for performance. Use CoreSession.getLockInfo(org.nuxeo.ecm.core.api.DocumentRef)
to get the non-cached
status.
null
otherwiseClientException
Lock removeLock() throws ClientException
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.
null
if there was no lockClientException
boolean isCheckedOut() throws ClientException
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).
true
if the document is checked out, false
if it is checked inClientException
void checkOut() throws ClientException
A checked out document can be modified normally.
Only applicable to documents that are live (not versions and not proxies).
ClientException
DocumentRef checkIn(VersioningOption option, String checkinComment) throws ClientException
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).
option
- whether to do create a new VersioningOption.MINOR
or VersioningOption.MAJOR
version
during check incheckinComment
- the checkin commentClientException
String getVersionLabel()
The label returned is computed by the VersioningService.
null
String getCheckinComment() throws ClientException
null
ClientException
String getVersionSeriesId() throws ClientException
All documents and versions derived by a check in or checkout from the same original document share the same version series id.
ClientException
boolean isLatestVersion() throws ClientException
ClientException
boolean isMajorVersion() throws ClientException
ClientException
boolean isLatestMajorVersion() throws ClientException
ClientException
boolean isVersionSeriesCheckedOut() throws ClientException
ClientException
ACP getACP() throws ClientException
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.
ClientException
void setACP(ACP acp, boolean overwrite) throws ClientException
This is a wrapper for CoreSession.setACP(DocumentRef, ACP, boolean)
acp
- the ACP to setoverwrite
- whether to overwrite the old ACP or notClientException
CoreSession#setACP(DocumentRef, ACP, boolean)}
Object getProperty(String schemaName, String name) throws ClientException
The data model owning the property will be fetched from the server if not already fetched.
schemaName
- the schema namename
- the property nameClientException
void setProperty(String schemaName, String name, Object value) throws ClientException
This operation will not fetch the data model if not already fetched
schemaName
- the schema namename
- the property namevalue
- the property valueClientException
Map<String,Object> getProperties(String schemaName) throws ClientException
The operation will fetch the data model from the server if not already fetched.
schemaName
- the data model schema nameClientException
void setProperties(String schemaName, Map<String,Object> data) throws ClientException
This will not fetch the data model if not already fetched.
schemaName
- the schema namedata
- the values to setClientException
boolean isFolder()
boolean isVersionable()
boolean isDownloadable() throws ClientException
ClientException
boolean isVersion()
boolean isProxy()
boolean isImmutable()
true
if the document is a version or a proxy to a version, false
otherwiseboolean isDirty()
void accept(PropertyVisitor visitor, Object arg) throws ClientException
The visitor must return null to stop visiting children otherwise a context object that will be passed as the arg argument to children
visitor
- the visitor to acceptarg
- an argument passed to the visitor. This should be used by the visitor to carry on the visiting
context.ClientException
<T> T getAdapter(Class<T> itf)
Attention, the first computation will cache the adaptation result for later calls.
T
- the interface type to adapt toitf
- the interface class<T> T getAdapter(Class<T> itf, boolean refreshCache)
T
- the interface type to adapt toitf
- the interface classrefreshCache
- : readapt and stores in cache if already exists.String getCurrentLifeCycleState() throws ClientException
ClientException
org.nuxeo.ecm.core.lifecycle
String getLifeCyclePolicy() throws ClientException
ClientException
org.nuxeo.ecm.core.lifecycle
boolean followTransition(String transition) throws ClientException
This will update the current life cycle of the document.
transition
- the name of the transition to followClientException
Collection<String> getAllowedStateTransitions() throws ClientException
ClientException
ScopedMap getContextData()
Serializable getContextData(ScopeType scope, String key)
void putContextData(ScopeType scope, String key, Serializable value)
Context data is like a request map set on the document model to pass additional information to components interacting with the document model (events processing for instance).
Serializable getContextData(String key)
key
- the context data keyvoid putContextData(String key, Serializable value)
key
- the context data keyvalue
- the valuevoid copyContextData(DocumentModel otherDocument)
void copyContent(DocumentModel sourceDoc) throws ClientException
ClientException
String getRepositoryName()
String getCacheKey() throws ClientException
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.
ClientException
String getSourceId()
This is useful when not interested about the repository UUID itself. Technically, this is the current version UUID.
boolean isPrefetched(String xpath)
xpath
- the property xpathtrue
if it is prefetchedboolean isPrefetched(String schemaName, String name)
schemaName
- the schema namename
- the property nametrue
if it is prefetchedvoid prefetchCurrentLifecycleState(String lifecycle)
void prefetchLifeCyclePolicy(String lifeCyclePolicy)
boolean isLifeCycleLoaded()
<T extends Serializable> T getSystemProp(String systemProperty, Class<T> type) throws ClientException, DocumentException
ClientException
DocumentException
DocumentPart getPart(String schema) throws ClientException
schema
- the schemaClientException
DocumentPart[] getParts() throws ClientException
ClientException
Property getProperty(String xpath) throws PropertyException, ClientException
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:
foo/bar[i]/baz
as foo/i/baz
PropertyException
ClientException
Serializable getPropertyValue(String xpath) throws PropertyException, ClientException
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:
foo/bar[i]/baz
as foo/i/baz
PropertyException
ClientException
void setPropertyValue(String xpath, Serializable value) throws PropertyException, ClientException
PropertyException
ClientException
void reset()
This will force the document to lazily update its data when required.
void refresh(int refreshFlags, String[] schemas) throws ClientException
The data models will be removed and all prefetch and system data will be refreshed from the server
The refreshed data contains:
REFRESH_STATE
REFRESH_PREFETCH
REFRESH_ACP_IF_LOADED
REFRESH_ACP_LAZY
REFRESH_ACP
REFRESH_CONTENT_IF_LOADED
REFRESH_CONTENT_LAZY
REFRESH_CONTENT
REFRESH_DEFAULT
same as REFRESH_STATE | REFRESH_DEFAULT | REFRESH_ACP_IF_LOADED |
REFRESH_CONTENT_IF_LOADED
REFRESH_ALL
same as REFRESH_STATE | REFRESH_PREFTECH | REFRESH_ACP | REFRESH_CONTENT
refreshFlags
- the refresh flagsschemas
- the document parts (schemas) that should be refreshed nowClientException
void refresh() throws ClientException
DocumentModel.refresh(REFRESH_DEFAULT)
.ClientException
DocumentModel clone() throws CloneNotSupportedException
CloneNotSupportedException
String getChangeToken()
This token can be used for optimistic locking and avoid dirty updates. See CMIS spec : http://docs.oasis-open.org/cmis/CMIS/v1.0/os/cmis-spec-v1.0.html#_Toc243905432
Map<String,String> getBinaryFulltext() throws ClientException
ClientException
PropertyObjectResolver getObjectResolver(String xpath)
xpath
- the property xpathPropertyObjectResolver
to manage the property reference to external entities, null if this
property's type has no resolver.Copyright © 2015 Nuxeo SA. All rights reserved.