Class ContentEntityObject
- All Implemented Interfaces:
Searchable
,Content
,Addressable
,ContentTypeAware
,Versioned
,RelatableEntity
,EditableLabelable
,Labelable
,Serializable
,Cloneable
,Comparable<ContentEntityObject>
- Direct Known Subclasses:
Comment
,Draft
,GlobalDescription
,PersonalInformation
,SpaceContentEntityObject
- See Also:
-
Field Summary
Modifier and TypeFieldDescriptionstatic final String
Contains the global UUID at the time Confluence was last restarted.static final String
static final String
static final String
static final String
static final String
static final String
static final String
static final String
static final String
Constant used incontentStatus
to indicate that this object is a draft.static final String
static final String
Deprecated.since 7.5.0.static final String
static final String
Constant used to store a ContentProperty that allows shared access.static final String
Constant used to store the Synchrony revision as a ContentProperty.static final String
Constant used to store the status of the Synchrony revision as a ContentProperty.static final String
static final String
static final String
static final String
Fields inherited from class com.atlassian.confluence.core.AbstractVersionedEntityObject
INITIAL_VERSION
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionvoid
addAttachment
(Attachment attachment) void
addComment
(Comment comment) void
addCustomContent
(CustomContentEntityObject customContentEntityObject) void
addOutgoingLink
(OutgoingLink link) void
addPermission
(ContentPermission permission) Adds a ContentPermission.void
applyChildVersioningPolicy
(@Nullable Versioned versionToPromote, Consumer<ContentEntityObject> dao) IfVersioned.getVersionChildPolicy(com.atlassian.confluence.api.model.content.ContentType)
specifies so, moves content from versionToPromote to this Versioned instance or makes no change.clone()
final int
compareTo
(ContentEntityObject otherEntity) Content entities are naturally ordered alphabetically by "comparison name", which depends on the entity (it's the title for pages, the parent page title for comments, etc.).void
Remove all data from the object that does not need to be saved by historical versions.protected void
ensureAttachmentBelongsToContent
(Attachment attachment) boolean
protected AttachmentManager
getAttachmentNamed
(String fileName) Don't use it directly, use AttachmentManager.getAttachments(page) instead.getAttachmentUrlPath
(Attachment attachment) Gets the path relative to Confluence's base URL to view the given attachment in the context of this content (for example, highlighted in the content's list of attachments).Convenience method that returns the String representation of the content.Gets theBodyContent
object for this ContentEntityObject.getBodyContent
(BodyType expectedBodyType) Gets theBodyContent
object for this ContentEntityObject or throws an UnsupportedOperationException if its body type is not the same as the suppliedexpectedBodyType
.protected @Nullable ContentEntityObject
Implementing classes wanting to beContained
in another CEO should implement the Contained interface and delegate to this methodReturns theContentId
for this entity object, if it implementsContentConvertible
.getContentPermission
(String permissionType) Deprecated.since 2.6 - use getContentPermissionSetNote, this method does not return ContentPermissions inherited from the Content's ancestry.Get the hibernate field for content status, distinguishing only draft/deleted/current status.Get the api layer enum for content status, distinguishing CURRENT/HISTORICAL/DRAFT/TRASHED.Returns the display title.Gets the ContentEntityObject that backs this piece of content.long
Deprecated.Since 6.13.abstract String
Subclasses should implement this method, giving a String back so that the content can be alphabetically sorted in a mixed-type list of content-entities.An outgoing link is a link on this page to another confluence page.
It could also link to a website URL
These links are contained in the page content
They are refreshed each time the page is updated (LinkManager.updateOutgoingLinks())Deprecated.since 2.6 - usegetContentPermissionSet(String)
When we un-index something (say, a page), we also need to un-index everything contained within that page (comments, attachments), because presumably they're all about to go away.getTitle()
Get trash date if this CEO has been added to the trash since Confluence 7.14.abstract String
getType()
An easy name for the type of this content: makes it easy for things like the #contentLink macro to work out what to draw.abstract String
boolean
int
hashCode()
boolean
hasPermissions
(String type) boolean
Does this content have "current" status? (non-trashed and non-draft)boolean
boolean
isDraft()
boolean
Content entity objects that are historical versions should not be indexed.boolean
boolean
void
removeAttachment
(Attachment attachment) void
removeComment
(Comment comment) void
This method removes the given ContentPermissionSet from this CEO and disconnects the set from its owner.void
removeCustomContent
(CustomContentEntityObject customContentEntityObject) void
protected void
replaceContentProperties
(ContentProperties propertiesToClone) Clones the supplied properties and sets these as the properties of the current ContentEntityObject.void
restore()
restores content from the trashprotected void
void
setAttachments
(List<Attachment> attachments) void
setBodyAsString
(String content) Convenience method that sets the content of this ContentEntityObject.void
setBodyContent
(BodyContent bodyContent) Sets theBodyContent
object for this ContentEntityObject.void
setBodyContents
(List<BodyContent> bodyContents) void
void
setComments
(List<Comment> comments) protected void
setContainerContent
(@Nullable ContentEntityObject container) void
Initialises theContentProperties
of this ContentEntityObject by performing a deep clone of theContentEntityObject
object's properties.void
setContentStatus
(String contentStatus) Set the hibernate field for content status, distinguishing only draft/deleted/current status.void
setOriginalVersion
(Versioned originalVersion) Set the current version of this object.protected void
setOriginalVersionId
(@Nullable Long originalVersionId) For Hibernatevoid
setOutgoingLinks
(List<OutgoingLink> outgoingLinks) void
setShareId
(String shareId) void
setSynchronyRevision
(String synchronyRevision) void
setSynchronyRevisionSource
(String synchronyRevisionSource) void
void
setVersionComment
(String versionComment) boolean
sharedAccessAllowed
(com.atlassian.user.User user) Checks if this draft can be accessed by users other than the creator (shared access)boolean
sharedAccessAllowed
(String shareId) Deprecated.since 5.10final PageContext
When the content is rendered, what context is it being rendered in?toString()
void
trash()
places content in trash canprotected void
trash
(long trashTimestamp) protected void
boolean
wasCreatedBy
(com.atlassian.user.User user) Methods inherited from class com.atlassian.confluence.core.AbstractLabelableEntityObject
addLabelling, getGlobalLabels, getLabelCount, getLabellings, getLabels, getLabelsForDisplay, getPersonalLabels, getTeamLabels, getVisibleLabels, isFavourite, removeLabelling, setLabellings
Methods inherited from class com.atlassian.confluence.core.AbstractVersionedEntityObject
getConfluenceRevision, getLatestVersion, getVersion, getVersionChildPolicy, isLatestVersion, isNew, setVersion
Methods inherited from class com.atlassian.confluence.core.ConfluenceEntityObject
getCreator, getCreatorName, getLastModifier, getLastModifierName, getRealClass, isPersistent, setCreator, setCreatorName, setLastModifier, setLastModifierName
Methods inherited from class com.atlassian.core.bean.EntityObject
getCreationDate, getCurrentDate, getId, getLastModificationDate, setClock, setCreationDate, setId, setLastModificationDate
Methods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait
Methods inherited from interface com.atlassian.confluence.core.Addressable
getId
Methods inherited from interface com.atlassian.confluence.labels.EditableLabelable
getId, isPersistent
Methods inherited from interface com.atlassian.bonnie.Searchable
getId
-
Field Details
-
CURRENT
- See Also:
-
DELETED
- See Also:
-
CREATED
- See Also:
-
MODIFIED
- See Also:
-
DRAFT
Constant used incontentStatus
to indicate that this object is a draft.Drafts for existing objects use
AbstractVersionedEntityObject.getLatestVersion()
to point to the object they are drafts of and, unless stated otherwise, there should be only one draft per object, which is shared between all users.Drafts for existing objects are considered automatically shared according to the permissions set, but drafts for new objects are considered private, so if a user is trying to access one of them it should be verified that is doing so with the proper share id in addition to permissions.
-
SHARE_ID
Constant used to store a ContentProperty that allows shared access.Used for sharing drafts.
- See Also:
-
SYNC_REV
Constant used to store the Synchrony revision as a ContentProperty.- See Also:
-
DUMMY_SYNC_REV
- See Also:
-
SYNC_REV_SOURCE
Constant used to store the status of the Synchrony revision as a ContentProperty.- See Also:
-
COLLABORATIVE_EDITING_UUID
Contains the global UUID at the time Confluence was last restarted.- See Also:
-
DELETED_BY
- See Also:
-
DELETED_BY_ANON_VALUE
- See Also:
-
LIMITED_MODE_SYNC_REV_SOURCE
Deprecated.since 7.5.0. Limited mode is no longer supported since 7.5.0- See Also:
-
SYNCHRONY_SYNC_REV_SOURCE
- See Also:
-
SYNCHRONY_ACK_SYNC_REV_SOURCE
- See Also:
-
CONTENT_RESTORED_SYNC_REV_SOURCE
- See Also:
-
CONFLUENCE_RECOVERY
- See Also:
-
CONFLUENCE_RECOVERY_WITH_EXTERNAL_CHANGE
- See Also:
-
SYNCHRONY_RECOVERY
- See Also:
-
SYNCHRONY_RECOVERY_WITH_EXTERNAL_CHANGE
- See Also:
-
-
Constructor Details
-
ContentEntityObject
protected ContentEntityObject()
-
-
Method Details
-
getType
An easy name for the type of this content: makes it easy for things like the #contentLink macro to work out what to draw.This is a bit of a hack, but it saves heaps of code elsewhere, especially since we tend to get back these objects wrapped in all sorts of Hibernate CGLIB stuff.
- Specified by:
getType
in interfaceContentTypeAware
- Returns:
- the content type
-
getTypeEnum
-
getIdAsString
-
getDisplayTitle
Returns the display title. Some entities don't have titles for identification. For example, personal information objects use the user's fullname. Override this method to provide a custom title.- Specified by:
getDisplayTitle
in interfaceAddressable
- Returns:
- the display title
-
getUrlPath
- Specified by:
getUrlPath
in interfaceAddressable
-
getAttachmentUrlPath
Gets the path relative to Confluence's base URL to view the given attachment in the context of this content (for example, highlighted in the content's list of attachments). Generally you will want to callAttachment.getUrlPath()
instead of this method: if we ever implement view pages for individual attachments, that's the method that will be changed to point to them.The default implementation just returns the view page for this content.
- Parameters:
attachment
- one of this content's attachments- Returns:
- the path relative to the base url to view the attachment in the context of this content.
- Throws:
IllegalArgumentException
- if the attachment is not attached to this content
-
getTitle
- Specified by:
getTitle
in interfaceEditableLabelable
-
setTitle
-
getLowerTitle
-
getDefaultBodyType
-
getBodyContent
Gets theBodyContent
object for this ContentEntityObject. Although it appears that there may be a number of BodyContent objects attached to a ContentEntityObject, only one is ever used. If there are none currently attached, a new BodyContent object is created and returned. Any values set on the returned BodyContent will not be saved unless a call is made tosetBodyContent(com.atlassian.confluence.core.BodyContent)
. Null is never returned.This method should not normally be called directly unless, you need to be able to handle different body types. Use
getBodyAsString()
as you should normally be expecting only one type.- Returns:
- the BodyContent.
- See Also:
-
getBodyContent
Gets theBodyContent
object for this ContentEntityObject or throws an UnsupportedOperationException if its body type is not the same as the suppliedexpectedBodyType
.This method should not normally be called directly unless, you need to be able to handle different body types. Use
getBodyAsString()
andgetBodyAsString()
as you should normally be expecting only one type.- Parameters:
expectedBodyType
- that can be handled by the caller.- Returns:
- the BodyContent.
- Throws:
UnsupportedOperationException
- if the BodyType of the content is not theexpectedBodyType
.- See Also:
-
setBodyContent
Sets theBodyContent
object for this ContentEntityObject.This method should not normally be called directly unless, you need to be able to handle different body types. Use
setBodyAsString(java.lang.String)
as you should normally be expecting only one type.- Parameters:
bodyContent
- to be set. If the supplied bodyContent or its body arenull
, the list of body contents are cleared.
-
getBodyAsString
Convenience method that returns the String representation of the content.- Returns:
- the content.
- Throws:
UnsupportedOperationException
- if the BodyType of the content is not the normal type (by defaultBodyType#XHTML
) used by this ContentEntityObject.
-
setBodyAsString
Convenience method that sets the content of this ContentEntityObject.- Parameters:
content
- the String representation of the content.- Throws:
UnsupportedOperationException
- if the BodyType of the content is not the normal type (by defaultBodyType#XHTML
) used by this ContentEntityObject.
-
getBodyContents
-
setBodyContents
-
getOutgoingLinks
An outgoing link is a link on this page to another confluence page.
It could also link to a website URL
These links are contained in the page content
They are refreshed each time the page is updated (LinkManager.updateOutgoingLinks())- Returns:
- List of OutgoingLinks
-
setOutgoingLinks
-
addOutgoingLink
-
removeOutgoingLink
-
setOriginalVersion
Description copied from interface:Versioned
Set the current version of this object. After this method is called, this object will become an historical version of the object passed in.- Specified by:
setOriginalVersion
in interfaceVersioned
- Overrides:
setOriginalVersion
in classAbstractVersionedEntityObject
- Parameters:
originalVersion
- the current version of this object.
-
convertToHistoricalVersion
public void convertToHistoricalVersion()Description copied from interface:Versioned
Remove all data from the object that does not need to be saved by historical versions. For versioned objects that are persisted, this includes removing associations with other persisted objects that may otherwise cause us to break the expected arity of the database relations.When using Hibernate to persist versioned objects, take special care to null any field that might contain a Hibernate-persisted collection, as Hibernate does not allow two different persistent objects to refer to the same persisted collection at the same time.
- Specified by:
convertToHistoricalVersion
in interfaceVersioned
- Overrides:
convertToHistoricalVersion
in classAbstractVersionedEntityObject
-
applyChildVersioningPolicy
public void applyChildVersioningPolicy(@Nullable Versioned versionToPromote, Consumer<ContentEntityObject> dao) Description copied from interface:Versioned
IfVersioned.getVersionChildPolicy(com.atlassian.confluence.api.model.content.ContentType)
specifies so, moves content from versionToPromote to this Versioned instance or makes no change.- Specified by:
applyChildVersioningPolicy
in interfaceVersioned
- Parameters:
versionToPromote
- the new version of the current instance that we're getting the children fromdao
- onRemove used to delete dangling contained content
-
equals
- Overrides:
equals
in classcom.atlassian.core.bean.EntityObject
-
hashCode
public int hashCode()- Overrides:
hashCode
in classcom.atlassian.core.bean.EntityObject
-
toString
-
getNameForComparison
Subclasses should implement this method, giving a String back so that the content can be alphabetically sorted in a mixed-type list of content-entities. -
compareTo
Content entities are naturally ordered alphabetically by "comparison name", which depends on the entity (it's the title for pages, the parent page title for comments, etc.).If the comparison names are identical, we fall back on creation dates. This ensures, for example, that comments are always listed after the pages they are contained in, and in posting order.
Note also: comparison does NOT agree with equals(). This makes using content entities within sets a little dangerous, but the chances of two things with the exact same name being created on exactly the same millisecond is probably pretty low.
- Specified by:
compareTo
in interfaceComparable<ContentEntityObject>
-
getSearchableDependants
Description copied from interface:Searchable
When we un-index something (say, a page), we also need to un-index everything contained within that page (comments, attachments), because presumably they're all about to go away.- Specified by:
getSearchableDependants
in interfaceSearchable
-
toPageContext
When the content is rendered, what context is it being rendered in? -
isIndexable
public boolean isIndexable()Content entity objects that are historical versions should not be indexed.- Specified by:
isIndexable
in interfaceSearchable
-
getPermissions
Deprecated.since 2.6 - usegetContentPermissionSet(String)
Get all the permissions that apply to this content. Please do not modify the contents of this list!
- Returns:
- a list of all the permissions that apply to this content.
-
getContentPermission
Deprecated.since 2.6 - use getContentPermissionSetGives back the first content permission of a specific type. Returns only the permission if it is set on this object and not inherited. Returns null if no permission can't be found.Synchronized, as otherwise it was creating timing issues during the multi-threaded re-indexing.
- Returns:
- ContentPermission
-
getContentStatusObject
Get the api layer enum for content status, distinguishing CURRENT/HISTORICAL/DRAFT/TRASHED.Important: this has different semantics from the hibernate field
getContentStatus()
, because it takes into account historical status, and uses different strings for some values.- Returns:
- the API ContentStatus for this content, distinguishing CURRENT/HISTORICAL/DRAFT/TRASHED
- See Also:
-
getContentStatus
Get the hibernate field for content status, distinguishing only draft/deleted/current status.Important: this is not the same as the string value of the api
getContentStatusObject()
, because that one takes into account historical status, and uses different strings for some values.This method does NOT distinguish current and historical versions. Both will return "current". See
AbstractVersionedEntityObject.isLatestVersion()
to distinguish them. -
setContentStatus
Set the hibernate field for content status, distinguishing only draft/deleted/current status.Important: this is not the same as the string value of the api
getContentStatusObject()
, because that one takes into account historical status, and uses different strings for some values.This method does NOT distinguish current and historical versions. Both use "current". See
AbstractVersionedEntityObject.isLatestVersion()
to distinguish them. -
isCurrent
public boolean isCurrent()Does this content have "current" status? (non-trashed and non-draft)This method does NOT distinguish current and historical versions. Both will return true. See
AbstractVersionedEntityObject.isLatestVersion()
to distinguish them.- Returns:
- true if the content is live, i.e. not trashed and not a draft
- See Also:
-
isDeleted
public boolean isDeleted() -
isDraft
public boolean isDraft() -
getSynchronyRevision
- See Also:
-
setSynchronyRevision
- See Also:
-
getSynchronyRevisionSource
- See Also:
-
getTrashDate
Get trash date if this CEO has been added to the trash since Confluence 7.14. For generic cases, useTrashManagerInternal#findTrashDate
- Returns:
- when this content entity was added to the trash or
Optional.empty()
if it was trashed before 7.14 - Since:
- 7.14
-
setSynchronyRevisionSource
- See Also:
-
getCollaborativeEditingUuid
- See Also:
-
setCollaborativeEditingUuid
- See Also:
-
isUnpublished
public boolean isUnpublished() -
wasCreatedBy
public boolean wasCreatedBy(com.atlassian.user.User user) -
trash
public void trash()places content in trash can -
trash
protected void trash(long trashTimestamp) -
trashDependents
protected void trashDependents() -
restore
public void restore()restores content from the trash -
restoreDependents
protected void restoreDependents() -
getAttachments
Don't use it directly, use AttachmentManager.getAttachments(page) instead.
This also includes trashed items.
-
getLatestVersionsOfAttachments
Deprecated.Since 6.13. use AttachmentManager.getLatestVersionsOfAttachments(page) instead. -
setAttachments
-
addAttachment
-
removeAttachment
-
getBodyAsStringWithoutMarkup
-
getExcerpt
-
getAttachmentsUrlPath
-
getAttachmentNamed
-
getVersionComment
-
setVersionComment
-
isVersionCommentAvailable
public boolean isVersionCommentAvailable() -
clone
- Overrides:
clone
in classAbstractLabelableEntityObject
-
getRenderedVersionComment
-
getContentPermissionSet
Note, this method does not return ContentPermissions inherited from the Content's ancestry.- Returns:
- a set containing
ContentPermission
s of this type, or null if there are no content permissions explicitly set on this ContentEntityObject for the type.
-
hasPermissions
- Returns:
- true if this content entity object contains any
ContentPermission
s of the type specified
-
hasContentPermissions
public boolean hasContentPermissions() -
addPermission
Adds a ContentPermission. Do not add them manually viaContentPermissionSet.addContentPermission(ContentPermission)
. If possible useContentPermissionManager.addContentPermission(com.atlassian.confluence.security.ContentPermission, ContentEntityObject)
instead. Also note that as of Confluence 2.4 although methods have been added to facilitate having multiple ContentPermissions per page, Confluence does not yet properly support them (eg users permitted by them will not see the data in their searches) -
removeContentPermissionSet
This method removes the given ContentPermissionSet from this CEO and disconnects the set from its owner. This method should only be called by the DefaultContentPermissionManager. Note that as of Confluence 2.4 although methods have been added to facilitate having multiple ContentPermissions per page, Confluence does not yet properly support them (eg users permitted by them will not see the data in their searches) -
getComments
-
setComments
-
addComment
-
removeComment
-
getCustomContent
- Returns:
- all custom content that is a child of this CEO.
- Since:
- 7.16.3
-
addCustomContent
-
removeCustomContent
-
getEntity
Description copied from interface:Content
Gets the ContentEntityObject that backs this piece of content. -
ensureAttachmentBelongsToContent
@EnsuresNonNullIf(expression="attachment.getContainer()", result=true) protected void ensureAttachmentBelongsToContent(Attachment attachment) -
getContentId
Returns theContentId
for this entity object, if it implementsContentConvertible
.Subclasses implementing ContentConvertible must override this method.
- Returns:
- the ContentId representation of this object's id
- Throws:
UnsupportedOperationException
- if the instance doesn't implement ContentConvertible
-
getSelector
- Returns:
- the ContentSelector for this entity, which will always include the id of the latest version, and the version number for this version of the entity.
-
getProperties
- Returns:
- the content properties associated with this entity
-
getContainerContent
Implementing classes wanting to beContained
in another CEO should implement the Contained interface and delegate to this method- Returns:
- the CEO that contains this one
-
setContainerContent
-
replaceContentProperties
Clones the supplied properties and sets these as the properties of the current ContentEntityObject.This method should be used instead of directly modifying the contentProperties field, to avoid swapping collections that have Hibernate associations. Doing so would result in the following error: You may not dereference a collection with cascade="all-delete-orphan".
-
setContentPropertiesFrom
Initialises theContentProperties
of this ContentEntityObject by performing a deep clone of theContentEntityObject
object's properties. -
getOriginalVersionId
-
setOriginalVersionId
For Hibernate -
getLatestVersionId
public long getLatestVersionId() -
getAttachmentManager
-