Interface VersionManager
-
public interface VersionManager
TheVersionManager
object is accessed viaWorkspace.getVersionManager()
. It provides methods for:- Version graph functionality (version history, base version, successors predecessors)
- Basic version operations (checkin, checkout, checkpoint)
- Restore feature
- Label feature
- Merge feature
- Configuration feature
- Activity feature
- Since:
- JCR 2.0
-
-
Method Summary
All Methods Instance Methods Abstract Methods Modifier and Type Method Description void
cancelMerge(java.lang.String absPath, Version version)
Cancels the merge process with respect to the node atabsPath
and the specifiedversion
.Version
checkin(java.lang.String absPath)
Creates for the versionable node atabsPath
a new version with a system generated version name and returns that version (which will be the new base version of this node).void
checkout(java.lang.String absPath)
Sets the versionable node atabsPath
to checked-out status by setting itsjcr:isCheckedOut
property totrue
.Version
checkpoint(java.lang.String absPath)
Performs acheckin()
followed by acheckout()
on the versionable node atabsPath
.Node
createActivity(java.lang.String title)
This method creates a newnt:activity
at an implementation-determined location in the/jcr:system/jcr:activities
subgraph.Node
createConfiguration(java.lang.String absPath)
CallingcreateConfiguration
on the node N atabsPath
creates, in the configuration storage, a newnt:configuration
node whose root is N.void
doneMerge(java.lang.String absPath, Version version)
Completes the merge process with respect to the node atabsPath
and the specifiedversion
.Node
getActivity()
Returns the node representing the current activity ornull
if there is no current activity.Version
getBaseVersion(java.lang.String absPath)
Returns the current base version of the versionable node atabsPath
.VersionHistory
getVersionHistory(java.lang.String absPath)
Returns theVersionHistory
object of the node atabsPath
.boolean
isCheckedOut(java.lang.String absPath)
Returnstrue
if the node atabsPath
is either versionable (full or simple) and currently checked-out, non-versionable and its nearest versionable ancestor is checked-out or non-versionable and it has no versionable ancestor.NodeIterator
merge(java.lang.String absPath, java.lang.String srcWorkspace, boolean bestEffort)
This method recursively tests each versionable node in the subgraph of the node atabsPath
against its corresponding node insrcWorkspace
with respect to the relation between their respective base versions and either updates the node in question or not, depending on the outcome of the test.NodeIterator
merge(java.lang.String absPath, java.lang.String srcWorkspace, boolean bestEffort, boolean isShallow)
Same asmerge(String absPath, String srcWorkspace, boolean bestEffort)
except that an option exists to make the merge shallow.NodeIterator
merge(Node activityNode)
This method merges the changes that were made under the specified activity into the current workspace.void
removeActivity(Node activityNode)
This method removes the givenactivityNode
and allREFERENCE
properties within all workspaces that refer to theactivityNode
.void
restore(java.lang.String absPath, java.lang.String versionName, boolean removeExisting)
Restores the node atabsPath
to the state defined by the version with the specifiedversionName
.void
restore(java.lang.String absPath, Version version, boolean removeExisting)
Restores the specified version toabsPath
.void
restore(Version[] versions, boolean removeExisting)
Restores a set of versions at once.void
restore(Version version, boolean removeExisting)
Restores the node in the current workspace that is the versionable node of the specifiedversion
to the state reflected in that version.void
restoreByLabel(java.lang.String absPath, java.lang.String versionLabel, boolean removeExisting)
Restores the version of the node atabsPath
with the specified version label.Node
setActivity(Node activity)
This method is called by the client to set the current activity on the current session by specifying a previously creatednt:activity
node (seecreateActivity(java.lang.String)
).
-
-
-
Method Detail
-
checkin
Version checkin(java.lang.String absPath) throws VersionException, UnsupportedRepositoryOperationException, InvalidItemStateException, LockException, RepositoryException
Creates for the versionable node atabsPath
a new version with a system generated version name and returns that version (which will be the new base version of this node). Sets thejcr:checkedOut
property to false thus putting the node into the checked-in state. This means that the node and its connected non-versionable subgraph become read-only. A node's connected non-versionable subgraph is the set of non-versionable descendant nodes reachable from that node through child links without encountering any versionable nodes. In other words, the read-only status flows down from the checked-in node along every child link until either a versionable node is encountered or an item with no children is encountered. In a system that supports only simple versioning the connected non-versionable subgraph will be equivalent to the whole subgraph, since simple-versionable nodes cannot have simple-versionable descendants.Read-only status means that an item cannot be altered by the client using standard API methods (
addNode
,setProperty
, etc.). The only exceptions to this rule are therestore(javax.jcr.version.Version[], boolean)
(all signatures),restoreByLabel(java.lang.String, java.lang.String, boolean)
,restore(javax.jcr.version.Version[], boolean)
,merge(java.lang.String, java.lang.String, boolean)
andNode.update(java.lang.String)
operations; these do not respect read-only status due to check-in. Note thatremove
of a read-only node is possible, as long as its parent is not read-only (since removal is an alteration of the parent node).If the node is already checked-in, this method has no effect but returns the current base version of the node at
absPath
.If a repository supports configurations and baselines and the node at
absPath
is a configuration proxy node in configuration storage then checkin of that node has the additional side effect of storing in the created version, the state of the configuration that this proxy node represents. In particular, the current bs version of each versionable node within the configuration is recorded in some implementation-specific way within the version created by the checkin. For checkin to succeed on a configuration proxy node, every versionable node within the configuration in question must have been checked-in at least once (i.e., each must have a current base version which is not the root version of its version history).If
checkin
succeeds, the change to thejcr:isCheckedOut
property is dispatched immediately; there is no need to callsave
.- Parameters:
absPath
- an absolute path.- Returns:
- the created version.
- Throws:
VersionException
- ifjcr:predecessors
does not contain at least one value or if a child item of the node atabsPath
has anOnParentVersion
status ofABORT
. This includes the case where an unresolved merge failure exists on the node, as indicated by the presence of ajcr:mergeFailed
property.UnsupportedRepositoryOperationException
- If the node atabsPath
node is not versionable.InvalidItemStateException
- If unsaved changes exist on the node atabsPath
or the node atabsPath
is a configuration proxy node and the configuration it represents includes a versionabe node that has never been checked-in.LockException
- if a lock prevents the operation.RepositoryException
- If another error occurs.
-
checkout
void checkout(java.lang.String absPath) throws UnsupportedRepositoryOperationException, LockException, RepositoryException
Sets the versionable node atabsPath
to checked-out status by setting itsjcr:isCheckedOut
property totrue
. Under full versioning it also sets thejcr:predecessors
property to be a reference to the current base version (the same value as held injcr:baseVersion
).This method puts the node into the checked-out state, making it and its connected non-versionable subgraph no longer read-only (see
checkin(String)
for an explanation of the term "connected non-versionable subgraph". Under simple versioning this will simply be the whole subgraph).If successful, these changes are dispatched immediately; there is no need to call
save
.If the node at
absPath
is already checked-out, this method has no effect.- Parameters:
absPath
- an absolute path.- Throws:
UnsupportedRepositoryOperationException
- If the node atabsPath
is not versionable.LockException
- if a lock prevents the checkout.RepositoryException
- If another error occurs.
-
checkpoint
Version checkpoint(java.lang.String absPath) throws VersionException, UnsupportedRepositoryOperationException, InvalidItemStateException, LockException, RepositoryException
Performs acheckin()
followed by acheckout()
on the versionable node atabsPath
.If the node is already checked-in, this method is equivalent to
checkout()
.- Parameters:
absPath
- an absolute path.- Returns:
- the created version.
- Throws:
VersionException
- if a child item of the node atabsPath
has anOnParentVersion
ofABORT
. This includes the case where an unresolved merge failure exists on the node, as indicated by the presence of thejcr:mergeFailed
.UnsupportedRepositoryOperationException
- if the node atabsPath
is not versionable.InvalidItemStateException
- if there are unsaved changes pending on the node atabsPath
.LockException
- if a lock prevents the operation.RepositoryException
- if another error occurs.- Since:
- JCR 2.0
-
isCheckedOut
boolean isCheckedOut(java.lang.String absPath) throws RepositoryException
Returnstrue
if the node atabsPath
is either- versionable (full or simple) and currently checked-out,
- non-versionable and its nearest versionable ancestor is checked-out or
- non-versionable and it has no versionable ancestor.
Returns
false
if the node atabsPath
is either- versionable (full or simple) and currently checked-in or
- non-versionable and its nearest versionable ancestor is checked-in.
- Parameters:
absPath
- an absolute path.- Returns:
- a boolean
- Throws:
RepositoryException
- If another error occurs.
-
getVersionHistory
VersionHistory getVersionHistory(java.lang.String absPath) throws UnsupportedRepositoryOperationException, RepositoryException
Returns theVersionHistory
object of the node atabsPath
. This object provides access to thent:versionHistory
node holding the node's versions.- Parameters:
absPath
- an absolute path.- Returns:
- a
VersionHistory
object - Throws:
UnsupportedRepositoryOperationException
- if the node atabsPath
is not versionable.RepositoryException
- If another error occurs.
-
getBaseVersion
Version getBaseVersion(java.lang.String absPath) throws UnsupportedRepositoryOperationException, RepositoryException
Returns the current base version of the versionable node atabsPath
.- Parameters:
absPath
- an absolute path.- Returns:
- a
Version
object. - Throws:
UnsupportedRepositoryOperationException
- if the node atabsPath
is not versionable.RepositoryException
- If another error occurs.
-
restore
void restore(Version[] versions, boolean removeExisting) throws ItemExistsException, UnsupportedRepositoryOperationException, VersionException, LockException, InvalidItemStateException, RepositoryException
Restores a set of versions at once. Used in cases where a "chicken and egg" problem of mutually referringREFERENCE
properties would prevent the restore in any serial order.If the restore succeeds the changes made are dispatched immediately; there is no need to call
save
.The following restrictions apply to the set of versions specified:
If
S
is the set of versions being restored simultaneously,- For every version
V
inS
that corresponds to a missing node, there must also be a parent of V in S. S
must contain at least one version that corresponds to an existing node in the workspace.- No
V
inS
can be a root version (jcr:rootVersion
).
If any of these restrictions does not hold, the restore will fail because the system will be unable to determine the path locations to which one or more versions are to be restored. In this case a
VersionException
is thrown.The versionable nodes in the current workspace that correspond to the versions being restored define a set of (one or more) subgraphs. An identifier collision occurs when the current workspace contains a node outside these subgraphs that has the same identifier as one of the nodes that would be introduced by the
restore
operation into one of these subgraphs. The result in such a case is governed by theremoveExisting
flag. IfremoveExisting
istrue
then the incoming node takes precedence, and the existing node (and its subgraph) is removed. IfremoveExisting
isfalse
then aItemExistsException
is thrown and no changes are made. Note that this applies not only to cases where the restored node itself conflicts with an existing node but also to cases where a conflict occurs with any node that would be introduced into the workspace by the restore operation. In particular, conflicts involving subnodes of the restored node that haveOnParentVersion
settings ofCOPY
orVERSION
are also governed by theremoveExisting
flag.- Parameters:
versions
- The set of versions to be restored.removeExisting
- governs what happens on identifier collision.- Throws:
ItemExistsException
- ifremoveExisting
isfalse
and an identifier collision occurs with a node being restored.UnsupportedRepositoryOperationException
- if one or more of the nodes to be restored is not versionable.VersionException
- if the set of versions to be restored is such that the original path location of one or more of the versions cannot be determined or if therestore
would change the state of a existing versionable node that is currently checked-in or if a root version (jcr:rootVersion
) is among those being restored.LockException
- if a lock prevents the restore.InvalidItemStateException
- if thisSession
has pending unsaved changes.RepositoryException
- if another error occurs.
- For every version
-
restore
void restore(java.lang.String absPath, java.lang.String versionName, boolean removeExisting) throws VersionException, ItemExistsException, UnsupportedRepositoryOperationException, LockException, InvalidItemStateException, RepositoryException
Restores the node atabsPath
to the state defined by the version with the specifiedversionName
.If the node at
absPath
is not versionable, anUnsupportedRepositoryOperationException
is thrown.If successful, the change is dispatched immediately; there is no need to call
save
. This method will work regardless of whether the node atabsPath
is checked-in or not.An identifier collision occurs when a node exists outside the subgraph rooted at this node with the same identifier as a node that would be introduced by the
restore
operation into the subgraph at this node. The result in such a case is governed by theremoveExisting
flag. IfremoveExisting
istrue
, then the incoming node takes precedence, and the existing node (and its subgraph) is removed (if possible; otherwise aRepositoryException
is thrown). IfremoveExisting
isfalse
, then aItemExistsException
is thrown and no changes are made. Note that this applies not only to cases where the restored node itself conflicts with an existing node but also to cases where a conflict occurs with any node that would be introduced into the workspace by the restore operation. In particular, conflicts involving subnodes of the restored node that haveOnParentVersion
settings ofCOPY
orVERSION
are also governed by theremoveExisting
flag.- Parameters:
absPath
- an absolute path.versionName
- aVersion
objectremoveExisting
- a boolean flag that governs what happens in case of an identifier collision.- Throws:
UnsupportedRepositoryOperationException
- if the node atabsPath
is not versionable.VersionException
- if the specifiedversion
is not part of this node's version history or if an attempt is made to restore the root version (jcr:rootVersion
) or if no node exists atabsPath
.ItemExistsException
- ifremoveExisting
isfalse
and an identifier collision occurs.LockException
- if a lock prevents the restore.InvalidItemStateException
- if thisSession
(not necessarily theNode
atabsPath
) has pending unsaved changes.RepositoryException
- If another error occurs.
-
restore
void restore(Version version, boolean removeExisting) throws VersionException, ItemExistsException, InvalidItemStateException, UnsupportedRepositoryOperationException, LockException, RepositoryException
Restores the node in the current workspace that is the versionable node of the specifiedversion
to the state reflected in that version.If successful, the change is dispatched immediately; there is no need to call
save
. This method ignores checked-in status.An identifier collision occurs when a node exists outside the subgraph rooted at this node with the same identifier as a node that would be introduced by the
restore
operation into the subgraph at this node. The result in such a case is governed by theremoveExisting
flag. IfremoveExisting
istrue
, then the incoming node takes precedence, and the existing node (and its subgraph) is removed (if possible; otherwise aRepositoryException
is thrown). IfremoveExisting
isfalse
, then aItemExistsException
is thrown and no changes are made. Note that this applies not only to cases where the restored node itself conflicts with an existing node but also to cases where a conflict occurs with any node that would be introduced into the workspace by the restore operation. In particular, conflicts involving subnodes of the restored node that haveOnParentVersion
settings ofCOPY
orVERSION
are also governed by theremoveExisting
flag.- Parameters:
version
- aVersion
objectremoveExisting
- a boolean flag that governs what happens in case of an identifier collision.- Throws:
UnsupportedRepositoryOperationException
- if versioning is not supported.VersionException
- if the specifiedversion
does not have a corresponding node in the workspacethis
VersionManager has been created for or if an attempt is made to restore the root version (jcr:rootVersion
).ItemExistsException
- ifremoveExisting
isfalse
and an identifier collision occurs.InvalidItemStateException
- if thisSession
(not necessarily theNode
atabsPath
) has pending unsaved changes.LockException
- if a lock prevents the restore.RepositoryException
- if another error occurs.
-
restore
void restore(java.lang.String absPath, Version version, boolean removeExisting) throws PathNotFoundException, ItemExistsException, VersionException, ConstraintViolationException, UnsupportedRepositoryOperationException, LockException, InvalidItemStateException, RepositoryException
Restores the specified version toabsPath
.There must be no existing node at
absPath
. If one exists, aVersionException
is thrown.There must be a parent node to the location at
absPath
, otherwise aPathNotFoundException
is thrown.An identifier collision occurs when a node exists outside the subgraph rooted at
absPath
with the same identifier as a node that would be introduced by therestore
operation into the subgraph atabsPath
. The result in such a case is governed by theremoveExisting
flag. IfremoveExisting
istrue
, then the incoming node takes precedence, and the existing node (and its subgraph) is removed (if possible; otherwise aRepositoryException
is thrown). IfremoveExisting
isfalse
, then aItemExistsException
is thrown and no changes are made. Note that this applies not only to cases where the restored node itself conflicts with an existing node but also to cases where a conflict occurs with any node that would be introduced into the workspace by the restore operation. In particular, conflicts involving subnodes of the restored node that haveOnParentVersion
settings ofCOPY
orVERSION
are also governed by theremoveExisting
flag.If the would-be parent of the location
absPath
is actually a property, or if a node type restriction would be violated, then aConstraintViolationException
is thrown.If the
restore
succeeds, the changes made to this node are dispatched immediately; there is no need to callsave
.- Parameters:
absPath
- an absolute the path to which the version is to be restored.version
- a version objectremoveExisting
- covers what happens on identifier collision.- Throws:
PathNotFoundException
- if the parent ofabsPath
does not exist.ItemExistsException
- if removeExisting is false and an identifier collision occursConstraintViolationException
- If the would-be parent of the locationabsPath
is actually a property, or if a node type restriction would be violatedVersionException
- if the parent node ofabsPath
is read-only due to a checked-in node or if a node exists atabsPath
or if an attempt is made to restore the root version.
UnsupportedRepositoryOperationException
- if versioning is not supported.LockException
- if a lock prevents the restore.InvalidItemStateException
- if thisSession
(not necessarily theNode
atabsPath
) has pending unsaved changes.RepositoryException
- if another error occurs
-
restoreByLabel
void restoreByLabel(java.lang.String absPath, java.lang.String versionLabel, boolean removeExisting) throws VersionException, ItemExistsException, UnsupportedRepositoryOperationException, LockException, InvalidItemStateException, RepositoryException
Restores the version of the node atabsPath
with the specified version label. If successful, the change is dispatched immediately; there is no need to callsave
.This method will work regardless of whether the node at
absPath
is checked-in or not.An identifier collision occurs when a node exists outside the subgraph rooted at this node with the same identifier as a node that would be introduced by the
restoreByLabel
operation into the subgraph at this node. The result in such a case is governed by theremoveExisting
flag. IfremoveExisting
istrue
, then the incoming node takes precedence, and the existing node (and its subgraph) is removed (if possible; otherwise aRepositoryException
is thrown). IfremoveExisting
isfalse
, then aItemExistsException
is thrown and no changes are made. Note that this applies not only to cases where the restored node itself conflicts with an existing node but also to cases where a conflict occurs with any node that would be introduced into the workspace by the restore operation. In particular, conflicts involving subnodes of the restored node that haveOnParentVersion
settings ofCOPY
orVERSION
are also governed by theremoveExisting
flag.- Parameters:
absPath
- an absolute path.versionLabel
- a StringremoveExisting
- a boolean flag that governs what happens in case of an identifier collision.- Throws:
UnsupportedRepositoryOperationException
- if the node atabsPath
is not versionable.VersionException
- if the specifiedversionLabel
does not exist in this node's version history or if no node exists atabsPath
.ItemExistsException
- ifremoveExisting
isfalse
and an identifier collision occurs.LockException
- if a lock prevents the restore.InvalidItemStateException
- if thisSession
(not necessarily theNode
atabsPath
) has pending unsaved changes.RepositoryException
- If another error occurs.
-
merge
NodeIterator merge(java.lang.String absPath, java.lang.String srcWorkspace, boolean bestEffort) throws NoSuchWorkspaceException, AccessDeniedException, MergeException, LockException, InvalidItemStateException, RepositoryException
This method recursively tests each versionable node in the subgraph of the node atabsPath
against its corresponding node insrcWorkspace
with respect to the relation between their respective base versions and either updates the node in question or not, depending on the outcome of the test.When a versionable node V with base version B is encountered whose corresponding node V' has a base version B':
- If B' is an eventual predecessor of B then V is left unchanged.
- If B' is an eventual successor of B then V is updated to the state of V'.
- If B' and B are ob divergent branches of the version history then V fails the merge.
bestEffort
istrue
then each failed node is marked and traversal continues. IfbestEffort
isfalse
then the first failed node results in aMergeException
.This is a workspace-write method and therefore any changes are dispatched immediately; there is no need to call
save
.This method returns a
NodeIterator
over all versionable nodes in the subgraph that received a merge result of fail. IfbestEffort
isfalse
, this iterator will be empty (since ifmerge
returns successfully, instead of throwing an exception, it will be because no failures were encountered). IfbestEffort
istrue
, this iterator will contain all nodes that received a fail during the course of thismerge
operation.See the JCR specifications for more details on the behavior of this method.
- Parameters:
absPath
- an absolute path.srcWorkspace
- the name of the source workspace.bestEffort
- a boolean- Returns:
- iterator over all nodes that received a merge result of "fail" in the course of this operation.
- Throws:
MergeException
- ifbestEffort
isfalse
and a failed merge result is encountered.InvalidItemStateException
- if this session (not necessarily the node atabsPath
) has pending unsaved changes.NoSuchWorkspaceException
- if the specifiedsrcWorkspace
does not exist.AccessDeniedException
- if the current session does not have sufficient rights to perform the operation.LockException
- if a lock prevents the merge.RepositoryException
- if another error occurs.
-
merge
NodeIterator merge(java.lang.String absPath, java.lang.String srcWorkspace, boolean bestEffort, boolean isShallow) throws NoSuchWorkspaceException, AccessDeniedException, MergeException, LockException, InvalidItemStateException, RepositoryException
Same asmerge(String absPath, String srcWorkspace, boolean bestEffort)
except that an option exists to make the merge shallow.If
isShallow
istrue
, this method tests this versionable node against its corresponding node insrcWorkspace
with respect to the relation between their respective base versions and either updates the node in question or not, depending on the outcome of the test.If
isShallow
isfalse
, it recursively tests each versionable node in the subgraph as mentioned above. Seemerge(String absPath, String srcWorkspace, boolean bestEffort)
.If
isShallow
istrue
and this node is not versionable, then this method returns and no changes are made.If successful, the changes are dispatched immediately; there is no need to call
save
.This method returns a
NodeIterator
over all versionable nodes in the subgraph that received a merge result of fail. IfbestEffort
isfalse
, this iterator will be empty (since ifmerge
returns successfully, instead of throwing an exception, it will be because no failures were encountered). IfbestEffort
istrue
, this iterator will contain all nodes that received a fail during the course of thismerge
operation.- Parameters:
absPath
- an absolute path.srcWorkspace
- the name of the source workspace.bestEffort
- a booleanisShallow
- a boolean- Returns:
- iterator over all nodes that received a merge result of "fail" in the course of this operation.
- Throws:
MergeException
- ifbestEffort
isfalse
and a failed merge result is encountered.InvalidItemStateException
- if this session (not necessarily this node) has pending unsaved changes.NoSuchWorkspaceException
- ifsrcWorkspace
does not exist.AccessDeniedException
- if the current session does not have sufficient rights to perform the operation.LockException
- if a lock prevents the merge.RepositoryException
- if another error occurs.- Since:
- JCR 2.0
-
doneMerge
void doneMerge(java.lang.String absPath, Version version) throws VersionException, InvalidItemStateException, UnsupportedRepositoryOperationException, RepositoryException
Completes the merge process with respect to the node atabsPath
and the specifiedversion
.When the
merge(java.lang.String, java.lang.String, boolean)
method is called on a node, every versionable node in that subgraph is compared with its corresponding node in the indicated other workspace and a "merge test result" is determined indicating one of the following:- This node will be updated to the state of its correspondee (if the base version of the correspondee is more recent in terms of version history)
- This node will be left alone (if this node's base version is more recent in terms of version history).
- This node will be marked as having failed the merge test (if this node's base version is on a different branch of the version history from the base version of its corresponding node in the other workspace, thus preventing an automatic determination of which is more recent).
(See
merge(java.lang.String, java.lang.String, boolean)
for more details)In the last case the merge of the non-versionable subgraph (the "content") of this node must be done by the application (for example, by providing a merge tool for the user).
Additionally, once the content of the nodes has been merged, their version graph branches must also be merged. The JCR versioning system provides for this by keeping a record, for each versionable node that fails the merge test, of the base version of the corresponding node that caused the merge failure. This record is kept in the
jcr:mergeFailed
property of this node. After amerge
, this property will contain one or more (if multiple merges have been performed)REFERENCE
s that point to the "offending versions".To complete the merge process, the client calls
doneMerge(Version v)
passing the version object referred to be thejcr:mergeFailed
property that the client wishes to connect tothis
node in the version graph. This has the effect of moving the reference to the indicated version from thejcr:mergeFailed
property ofthis
node to thejcr:predecessors
.If the client chooses not to connect this node to a particular version referenced in the
jcr:mergeFailed
property, he callscancelMerge(String, Version)
. This has the effect of removing the reference to the specifiedversion
fromjcr:mergeFailed
without adding it tojcr:predecessors
.Once the last reference in
jcr:mergeFailed
has been either moved tojcr:predecessors
(withdoneMerge
) or just removed fromjcr:mergeFailed
(withcancelMerge
) thejcr:mergeFailed
property is automatically removed, thus enablingthis
node to be checked-in, creating a new version (note that before thejcr:mergeFailed
is removed, itsOnParentVersion
setting ofABORT
prevents checkin). This new version will have a predecessor connection to each version for whichdoneMerge
was called, thus joining those branches of the version graph.If successful, these changes are dispatched immediately; there is no need to call
save
.- Parameters:
absPath
- an absolute path.version
- a version referred to by thejcr:mergeFailed
property of the node atabsPath
.- Throws:
VersionException
- if the version specified is not among those referenced in this node'sjcr:mergeFailed
or if the node is currently checked-in.InvalidItemStateException
- if there are unsaved changes pending on the node atabsPath
.UnsupportedRepositoryOperationException
- if the node atabsPath
is not versionable.RepositoryException
- if another error occurs.
-
cancelMerge
void cancelMerge(java.lang.String absPath, Version version) throws VersionException, InvalidItemStateException, UnsupportedRepositoryOperationException, RepositoryException
Cancels the merge process with respect to the node atabsPath
and the specifiedversion
.See
doneMerge(java.lang.String, javax.jcr.version.Version)
for a full explanation. Also seemerge(java.lang.String, java.lang.String, boolean)
for more details.If successful, these changes are dispatched immediately; there is no need to call
save
.- Parameters:
absPath
- an absolute path.version
- a version referred to by thejcr:mergeFailed
property of the node atabsPath
.- Throws:
VersionException
- if the version specified is not among those referenced in thejcr:mergeFailed
property of the node atabsPath
or if the node is currently checked-in.InvalidItemStateException
- if there are unsaved changes pending on the node atabsPath
.UnsupportedRepositoryOperationException
- if the node atabsPath
is not versionable.RepositoryException
- if another error occurs.
-
createConfiguration
Node createConfiguration(java.lang.String absPath) throws UnsupportedRepositoryOperationException, RepositoryException
CallingcreateConfiguration
on the node N atabsPath
creates, in the configuration storage, a newnt:configuration
node whose root is N. A reference to N is recorded in thejcr:root
property of the new configuration, and a reference to the new configuration is recorded in thejcr:configuration
property of N.A new version history is created to store baselines of the new configuration, and the
jcr:baseVersion
of the new configuration references the root version of the new version history.The changes are dispatched immediately; a
save
is not required.- Parameters:
absPath
- an absolute path.- Returns:
- a new
nt:configuration
node - Throws:
UnsupportedRepositoryOperationException
- if N is not versionable.RepositoryException
- if no node exists atabsPath
or another error occurs .- Since:
- JCR 2.0
-
setActivity
Node setActivity(Node activity) throws UnsupportedRepositoryOperationException, RepositoryException
This method is called by the client to set the current activity on the current session by specifying a previously creatednt:activity
node (seecreateActivity(java.lang.String)
). Changing the current activity is done by callingsetActivity
again. Cancelling the current activity (so that the session has no current activity) is done by callingsetActivity(null)
. The previously setnt:activity
node is returned, ornull
if no activity was previously set.- Parameters:
activity
- an activity node- Returns:
- The previously set
nt:activity
node is returned, ornull
if no activity was previously set. - Throws:
UnsupportedRepositoryOperationException
- if the repository does not support activities or ifactivity
is not ant:activity
node.RepositoryException
- if another error occurs.- Since:
- JCR 2.0
-
getActivity
Node getActivity() throws UnsupportedRepositoryOperationException, RepositoryException
Returns the node representing the current activity ornull
if there is no current activity.- Returns:
- An
nt:activity
node ornull
. - Throws:
UnsupportedRepositoryOperationException
- if the repository does not support activities.RepositoryException
- if another error occurs.- Since:
- JCR 2.0
-
createActivity
Node createActivity(java.lang.String title) throws UnsupportedRepositoryOperationException, RepositoryException
This method creates a newnt:activity
at an implementation-determined location in the/jcr:system/jcr:activities
subgraph.The repository may, but is not required to, use the
title
as a hint for what to name the new activity node. The new activityNode
is returned.The new node addition is dispatched immediately and does not require a
save
.- Parameters:
title
- a String- Returns:
- the new activity
Node
. - Throws:
UnsupportedRepositoryOperationException
- if the repository does not support activities.RepositoryException
- if another error occurs.- Since:
- JCR 2.0
-
removeActivity
void removeActivity(Node activityNode) throws UnsupportedRepositoryOperationException, VersionException, RepositoryException
This method removes the givenactivityNode
and allREFERENCE
properties within all workspaces that refer to theactivityNode
. However, the existence of aREFERENCE
to theactivityNode
from within version storage will cause aVersionException
to be thrown.The change is dispatched immediately and does not require a
save
.- Parameters:
activityNode
- an activity Node.- Throws:
UnsupportedRepositoryOperationException
- if the repository does not support activities.VersionException
- if aREFERENCE
to theactivityNode
exists in version storage.RepositoryException
- if another error occurs.- Since:
- JCR 2.0
-
merge
NodeIterator merge(Node activityNode) throws VersionException, AccessDeniedException, MergeException, LockException, InvalidItemStateException, RepositoryException
This method merges the changes that were made under the specified activity into the current workspace.An activity A will be associated with a set of versions through the
jcr:activity
reference of each version node in the set. We call each such associated version a member of A.For each version history H that contains one or more members of A, one such member will be the latest member of A in H. The latest member of A in H is the version in H that is a member of A and that has no successor versions (to any degree) that are also members of A.
The set of versions that are the latest members of A in their respective version histories is called the change set of A. It fully describes the changes made under the activity A.
This method performs a shallow merge into the current workspace of each version in the change set of the activity specified by
activityNode
. If there is no corresponding node in this workspace for a given member of the change set, that member is ignored.This method returns a
NodeIterator
over all versionable nodes in the subgraph that received a merge result of fail.The changes are dispatched immediately and do not require a
save
.- Parameters:
activityNode
- annt:activity
node- Returns:
- a
NodeIterator
- Throws:
AccessDeniedException
- if the current session does not have sufficient rights to perform the operation.VersionException
- if the specified node is not annt:activity
node.MergeException
- in the same cases as in a regular shallow merge (seemerge(String, String, boolean, boolean)
.LockException
- if a lock prevents the merge.InvalidItemStateException
- if thisSession
has pending unsaved changes.RepositoryException
- if another error occurs.- Since:
- JCR 2.0
-
-