All Downloads are FREE. Search and download functionalities are using the official Maven repository.

javax.jcr.version.VersionManager Maven / Gradle / Ivy

There is a newer version: 2024.11.18598.20241113T125352Z-241000
Show newest version
/*
 * Copyright 2008 Day Management AG, Switzerland. All rights reserved.
 */
package javax.jcr.version;

import javax.jcr.RepositoryException;
import javax.jcr.UnsupportedRepositoryOperationException;
import javax.jcr.ItemExistsException;
import javax.jcr.InvalidItemStateException;
import javax.jcr.PathNotFoundException;
import javax.jcr.MergeException;
import javax.jcr.NoSuchWorkspaceException;
import javax.jcr.AccessDeniedException;
import javax.jcr.NodeIterator;
import javax.jcr.Node;
import javax.jcr.nodetype.ConstraintViolationException;
import javax.jcr.lock.LockException;

/**
 * The VersionManager object is accessed via {@link
 * javax.jcr.Workspace#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 */ public interface VersionManager { /** * Creates for the versionable node at absPath a new version * with a system generated version name and returns that version (which will * be the new base version of this node). Sets the jcr: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 the {@link #restore} (all * signatures), {@link #restoreByLabel}, {@link #restore}, {@link #merge} * and {@link Node#update} operations; these do not respect read-only status * due to check-in. Note that remove 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 the * jcr:isCheckedOut property is dispatched immediately; * there is no need to call save. * * @param absPath an absolute path. * @return the created version. * @throws VersionException if jcr:predecessors does not * contain at least one value or if a child item of the node at * absPath has an OnParentVersion status of * ABORT. This includes the case where an unresolved merge * failure exists on the node, as indicated by the presence of a * jcr:mergeFailed property. * @throws UnsupportedRepositoryOperationException * If the node at * absPath node is not versionable. * @throws InvalidItemStateException If unsaved changes exist on the node at * absPath or the node at absPath is * a configuration proxy node and the configuration it represents * includes a versionabe node that has never been checked-in. * @throws LockException if a lock prevents the operation. * @throws RepositoryException If another error occurs. */ public Version checkin(String absPath) throws VersionException, UnsupportedRepositoryOperationException, InvalidItemStateException, LockException, RepositoryException; /** * Sets the versionable node at absPath to checked-out status * by setting its jcr:isCheckedOut property to * true. Under full versioning it also sets the * jcr:predecessors property to be a reference to the current * base version (the same value as held in jcr:baseVersion). *

This method puts the node into the checked-out state, making * it and its connected non-versionable subgraph no longer read-only (see * {@link #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. * * @param absPath an absolute path. * @throws UnsupportedRepositoryOperationException * If the node at * absPath is not versionable. * @throws LockException if a lock prevents the checkout. * @throws RepositoryException If another error occurs. */ public void checkout(String absPath) throws UnsupportedRepositoryOperationException, LockException, RepositoryException; /** * Performs a checkin() followed by a checkout() * on the versionable node at absPath. *

* If the node is already checked-in, this method is equivalent to * checkout(). * * @param absPath an absolute path. * @return the created version. * @throws VersionException if a child item of the node at * absPath has an OnParentVersion of * ABORT. This includes the case where an unresolved merge * failure exists on the node, as indicated by the presence of the * jcr:mergeFailed. * @throws UnsupportedRepositoryOperationException * if the node at * absPath is not versionable. * @throws InvalidItemStateException if there are unsaved changes pending on * the node at absPath. * @throws LockException if a lock prevents the operation. * @throws RepositoryException if another error occurs. * @since JCR 2.0 */ public Version checkpoint(String absPath) throws VersionException, UnsupportedRepositoryOperationException, InvalidItemStateException, LockException, RepositoryException; /** * Returns true if the node at absPath 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 at absPath is either *

  • versionable (full or simple) and currently checked-in or
  • *
  • non-versionable and its nearest versionable ancestor is * checked-in.
* * @param absPath an absolute path. * @return a boolean * @throws RepositoryException If another error occurs. */ public boolean isCheckedOut(String absPath) throws RepositoryException; /** * Returns the VersionHistory object of the node at * absPath. This object provides access to the * nt:versionHistory node holding the node's versions. * * @param absPath an absolute path. * @return a VersionHistory object * @throws UnsupportedRepositoryOperationException * if the node at * absPath is not versionable. * @throws RepositoryException If another error occurs. */ public VersionHistory getVersionHistory(String absPath) throws UnsupportedRepositoryOperationException, RepositoryException; /** * Returns the current base version of the versionable node at * absPath. * * @param absPath an absolute path. * @return a Version object. * @throws UnsupportedRepositoryOperationException * if the node at * absPath is not versionable. * @throws RepositoryException If another error occurs. */ public Version getBaseVersion(String absPath) throws UnsupportedRepositoryOperationException, RepositoryException; /** * Restores a set of versions at once. Used in cases where a "chicken and * egg" problem of mutually referring REFERENCE 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 in S 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 in S 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 the removeExisting flag. If removeExisting * is true then the incoming node takes precedence, and the * existing node (and its subgraph) is removed. If removeExisting * is false then a ItemExistsException 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 have * OnParentVersion settings of COPY or * VERSION are also governed by the removeExisting * flag. * * @param versions The set of versions to be restored. * @param removeExisting governs what happens on identifier collision. * @throws ItemExistsException if removeExisting is * false and an identifier collision occurs with a node being * restored. * @throws UnsupportedRepositoryOperationException * if one or more of the * nodes to be restored is not versionable. * @throws 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 the restore 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. * @throws LockException if a lock prevents the restore. * @throws InvalidItemStateException if this Session has * pending unsaved changes. * @throws RepositoryException if another error occurs. */ public void restore(Version[] versions, boolean removeExisting) throws ItemExistsException, UnsupportedRepositoryOperationException, VersionException, LockException, InvalidItemStateException, RepositoryException; /** * Restores the node at absPath to the state defined by the * version with the specified versionName. *

* If the node at absPath is not versionable, an * UnsupportedRepositoryOperationException 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 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 restore operation into the subgraph at * this node. The result in such a case is governed by the * removeExisting flag. If removeExisting is * true, then the incoming node takes precedence, and the * existing node (and its subgraph) is removed (if possible; otherwise a * RepositoryException is thrown). If removeExisting * is false, then a ItemExistsException 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 have * OnParentVersion settings of COPY or * VERSION are also governed by the removeExisting * flag. * * @param absPath an absolute path. * @param versionName a Version object * @param removeExisting a boolean flag that governs what happens in case of * an identifier collision. * @throws UnsupportedRepositoryOperationException * if the node at * absPath is not versionable. * @throws VersionException if the specified version 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 * at absPath. * @throws ItemExistsException if removeExisting is * false and an identifier collision occurs. * @throws LockException if a lock prevents the restore. * @throws InvalidItemStateException if this Session (not * necessarily the Node at absPath) has pending * unsaved changes. * @throws RepositoryException If another error occurs. */ public void restore(String absPath, String versionName, boolean removeExisting) throws VersionException, ItemExistsException, UnsupportedRepositoryOperationException, LockException, InvalidItemStateException, RepositoryException; /** * Restores the node in the current workspace that is the versionable node of the * specified version 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 the * removeExisting flag. If removeExisting is * true, then the incoming node takes precedence, and the * existing node (and its subgraph) is removed (if possible; otherwise a * RepositoryException is thrown). If removeExisting * is false, then a ItemExistsException 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 have * OnParentVersion settings of COPY or * VERSION are also governed by the removeExisting * flag. * * @param version a Version object * @param removeExisting a boolean flag that governs what happens in case of * an identifier collision. * @throws UnsupportedRepositoryOperationException * if versioning is not * supported. * @throws VersionException if the specified version does not * have a corresponding node in the workspace this * VersionManager has been created for or if an attempt is made to restore * the root version (jcr:rootVersion). * @throws ItemExistsException if removeExisting is * false and an identifier collision occurs. * @throws InvalidItemStateException if this Session (not * necessarily the Node at absPath) has pending * unsaved changes. * @throws LockException if a lock prevents the restore. * @throws RepositoryException if another error occurs. */ public void restore(Version version, boolean removeExisting) throws VersionException, ItemExistsException, InvalidItemStateException, UnsupportedRepositoryOperationException, LockException, RepositoryException; /** * Restores the specified version to absPath. *

* There must be no existing node at absPath. If one exists, * a VersionException is thrown. *

* There must be a parent node to the location at * absPath, otherwise a PathNotFoundException * 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 the restore operation into * the subgraph at absPath. The result in such a case is * governed by the removeExisting flag. If * removeExisting is true, then the incoming node * takes precedence, and the existing node (and its subgraph) is removed (if * possible; otherwise a RepositoryException is thrown). If * removeExisting is false, then a * ItemExistsException 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 have OnParentVersion settings of COPY * or VERSION are also governed by the removeExisting * flag. *

* If the would-be parent of the location absPath is actually a * property, or if a node type restriction would be violated, then a * ConstraintViolationException is thrown. *

* If the restore succeeds, the changes made to this node are * dispatched immediately; there is no need to call save. * * @param absPath an absolute the path to which the version is to be * restored. * @param version a version object * @param removeExisting covers what happens on identifier collision. * @throws PathNotFoundException if the parent of absPath does * not exist. * @throws ItemExistsException if removeExisting is false and an identifier * collision occurs * @throws ConstraintViolationException If the would-be parent of the * location absPath is actually a property, or if a node type * restriction would be violated * @throws VersionException if the parent node of absPath is * read-only due to a checked-in node or if a node exists at * absPath or if an attempt is made to restore * the root version. * @throws UnsupportedRepositoryOperationException * if versioning is not * supported. * @throws LockException if a lock prevents the restore. * @throws InvalidItemStateException if this Session (not * necessarily the Node at absPath) has pending * unsaved changes. * @throws RepositoryException if another error occurs */ public void restore(String absPath, Version version, boolean removeExisting) throws PathNotFoundException, ItemExistsException, VersionException, ConstraintViolationException, UnsupportedRepositoryOperationException, LockException, InvalidItemStateException, RepositoryException; /** * Restores the version of the node at absPath with the * specified version label. If successful, the change is dispatched * immediately; there is no need to call save. *

* 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 the * removeExisting flag. If removeExisting is * true, then the incoming node takes precedence, and the * existing node (and its subgraph) is removed (if possible; otherwise a * RepositoryException is thrown). If removeExisting * is false, then a ItemExistsException 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 have * OnParentVersion settings of COPY or * VERSION are also governed by the removeExisting * flag. * * @param absPath an absolute path. * @param versionLabel a String * @param removeExisting a boolean flag that governs what happens in case of * an identifier collision. * @throws UnsupportedRepositoryOperationException * if the node at * absPath is not versionable. * @throws VersionException if the specified versionLabel does * not exist in this node's version history or if no node exists * at absPath. * @throws ItemExistsException if removeExisting is * false and an identifier collision occurs. * @throws LockException if a lock prevents the restore. * @throws InvalidItemStateException if this Session (not * necessarily the Node at absPath) has pending * unsaved changes. * @throws RepositoryException If another error occurs. */ public void restoreByLabel(String absPath, String versionLabel, boolean removeExisting) throws VersionException, ItemExistsException, UnsupportedRepositoryOperationException, LockException, InvalidItemStateException, RepositoryException; /** * This method recursively tests each versionable node in the subgraph of * the node at absPath against its corresponding node in * srcWorkspace 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.
If bestEffort is * true then each failed node is marked and traversal * continues. If bestEffort is false then the * first failed node results in a MergeException. *

* 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. If * bestEffort is false, this iterator will be * empty (since if merge returns successfully, instead of * throwing an exception, it will be because no failures were encountered). * If bestEffort is true, this iterator will * contain all nodes that received a fail during the course of this * merge operation. *

* See the JCR specifications for more details on the behavior of this * method. * * @param absPath an absolute path. * @param srcWorkspace the name of the source workspace. * @param bestEffort a boolean * @return iterator over all nodes that received a merge result of "fail" in * the course of this operation. * @throws MergeException if bestEffort is false * and a failed merge result is encountered. * @throws InvalidItemStateException if this session (not necessarily the * node at absPath) has pending unsaved changes. * @throws NoSuchWorkspaceException if the specified * srcWorkspace does not exist. * @throws AccessDeniedException if the current session does not have * sufficient rights to perform the operation. * @throws LockException if a lock prevents the merge. * @throws RepositoryException if another error occurs. */ public NodeIterator merge(String absPath, String srcWorkspace, boolean bestEffort) throws NoSuchWorkspaceException, AccessDeniedException, MergeException, LockException, InvalidItemStateException, RepositoryException; /** * Same as {@link #merge(String absPath, String srcWorkspace, boolean * bestEffort)} except that an option exists to make the merge * shallow. *

* If isShallow is true, this method tests this * versionable node against its corresponding node in * srcWorkspace 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 is false, it recursively tests * each versionable node in the subgraph as mentioned above. See {@link * #merge(String absPath, String srcWorkspace, boolean bestEffort)}. *

* If isShallow is true 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. If * bestEffort is false, this iterator will be * empty (since if merge returns successfully, instead of * throwing an exception, it will be because no failures were encountered). * If bestEffort is true, this iterator will * contain all nodes that received a fail during the course of this * merge operation. * * @param absPath an absolute path. * @param srcWorkspace the name of the source workspace. * @param bestEffort a boolean * @param isShallow a boolean * @return iterator over all nodes that received a merge result of "fail" in * the course of this operation. * @throws MergeException if bestEffort is false * and a failed merge result is encountered. * @throws InvalidItemStateException if this session (not necessarily this * node) has pending unsaved changes. * @throws NoSuchWorkspaceException if srcWorkspace does not * exist. * @throws AccessDeniedException if the current session does not have * sufficient rights to perform the operation. * @throws LockException if a lock prevents the merge. * @throws RepositoryException if another error occurs. * @since JCR 2.0 */ public NodeIterator merge(String absPath, String srcWorkspace, boolean bestEffort, boolean isShallow) throws NoSuchWorkspaceException, AccessDeniedException, MergeException, LockException, InvalidItemStateException, RepositoryException; /** * Completes the merge process with respect to the node at * absPath and the specified version. *

* When the {@link #merge} 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: *

*

  1. 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)
  2. This node will be left alone (if this node's base * version is more recent in terms of version history).
  3. 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 {@link #merge} 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 a * merge, this property will contain one or more (if multiple * merges have been performed) REFERENCEs that point to the * "offending versions". *

* To complete the merge process, the client calls doneMerge(Version * v) passing the version object referred to be the * jcr:mergeFailed property that the client wishes to connect * to this node in the version graph. This has the effect of * moving the reference to the indicated version from the * jcr:mergeFailed property of this node to the * jcr:predecessors. *

* If the client chooses not to connect this node to a particular version * referenced in the jcr:mergeFailed property, he calls {@link * #cancelMerge(String, Version)}. This has the effect of removing the * reference to the specified version from * jcr:mergeFailed without adding it to * jcr:predecessors. *

* Once the last reference in jcr:mergeFailed has been either * moved to jcr:predecessors (with doneMerge) or * just removed from jcr:mergeFailed (with * cancelMerge) the jcr:mergeFailed property is * automatically removed, thus enabling this node to be * checked-in, creating a new version (note that before the * jcr:mergeFailed is removed, its OnParentVersion * setting of ABORT prevents checkin). This new version will * have a predecessor connection to each version for which * doneMerge was called, thus joining those branches of the * version graph. *

* If successful, these changes are dispatched immediately; there is no need * to call save. * * @param absPath an absolute path. * @param version a version referred to by the jcr:mergeFailed * property of the node at absPath. * @throws VersionException if the version specified is not among those * referenced in this node's jcr:mergeFailed or if the node is * currently checked-in. * @throws InvalidItemStateException if there are unsaved changes pending on * the node at absPath. * @throws UnsupportedRepositoryOperationException * if the node at * absPath is not versionable. * @throws RepositoryException if another error occurs. */ public void doneMerge(String absPath, Version version) throws VersionException, InvalidItemStateException, UnsupportedRepositoryOperationException, RepositoryException; /** * Cancels the merge process with respect to the node at * absPath and the specified version. *

* See {@link #doneMerge} for a full explanation. Also see {@link #merge} * for more details. *

* If successful, these changes are dispatched immediately; there is no need * to call save. * * @param absPath an absolute path. * @param version a version referred to by the jcr:mergeFailed * property of the node at absPath. * @throws VersionException if the version specified is not among those * referenced in the jcr:mergeFailed property of the node at * absPath or if the node is currently checked-in. * @throws InvalidItemStateException if there are unsaved changes pending on * the node at absPath. * @throws UnsupportedRepositoryOperationException * if the node at * absPath is not versionable. * @throws RepositoryException if another error occurs. */ public void cancelMerge(String absPath, Version version) throws VersionException, InvalidItemStateException, UnsupportedRepositoryOperationException, RepositoryException; /** * Calling createConfiguration on the node N at * absPath creates, in the configuration storage, a new * nt:configuration node whose root is N. A reference to * N is recorded in the jcr:root property of the new * configuration, and a reference to the new configuration is recorded in * the jcr: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. * * @param absPath an absolute path. * @return a new nt:configuration node * @throws UnsupportedRepositoryOperationException * if N is not * versionable. * @throws RepositoryException if no node exists at absPath or another error occurs . * @since JCR 2.0 */ public Node createConfiguration(String absPath) throws UnsupportedRepositoryOperationException, RepositoryException; /** * This method is called by the client to set the current activity on the * current session by specifying a previously created nt:activity * node (see {@link #createActivity}). Changing the * current activity is done by calling setActivity again. * Cancelling the current activity (so that the session has no current * activity) is done by calling setActivity(null). The previously * set nt:activity node is returned, or null if no activity * was previously set. * * @param activity an activity node * @return The previously set nt:activity node is returned, * or null if no activity was previously set. * @throws UnsupportedRepositoryOperationException * if the repository does * not support activities or if activity is not a * nt:activity node. * @throws RepositoryException if another error occurs. * @since JCR 2.0 */ public Node setActivity(Node activity) throws UnsupportedRepositoryOperationException, RepositoryException; /** * Returns the node representing the current activity or null * if there is no current activity. * * @return An nt:activity node or null. * @throws UnsupportedRepositoryOperationException * if the repository does * not support activities. * @throws RepositoryException if another error occurs. * @since JCR 2.0 */ public Node getActivity() throws UnsupportedRepositoryOperationException, RepositoryException; /** * This method creates a new nt: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 activity * Node is returned. *

* The new node addition is dispatched immediately and does not require a * save. *

* * @param title a String * @return the new activity Node. * @throws UnsupportedRepositoryOperationException * if the repository does * not support activities. * @throws RepositoryException if another error occurs. * @since JCR 2.0 */ public Node createActivity(String title) throws UnsupportedRepositoryOperationException, RepositoryException; /** * This method removes the given activityNode and all REFERENCE properties * within all workspaces that refer to the activityNode. * However, the existence of a REFERENCE to the activityNode * from within version storage will cause a VersionException to be thrown. *

* The change is dispatched immediately and does not require a save. * * @param activityNode an activity Node. * @throws UnsupportedRepositoryOperationException if the repository does not support activities. * @throws VersionException if a REFERENCE to the activityNode exists in * version storage. * @throws RepositoryException if another error occurs. * @since JCR 2.0 */ public void removeActivity(Node activityNode) throws UnsupportedRepositoryOperationException, VersionException, 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. * * @param activityNode an nt:activity node * @return a NodeIterator * @throws AccessDeniedException if the current session does not have * sufficient rights to perform the operation. * @throws VersionException if the specified node is not an * nt:activity node. * @throws MergeException in the same cases as in a regular shallow merge * (see {@link #merge(String, String, boolean, boolean)}. * @throws LockException if a lock prevents the merge. * @throws InvalidItemStateException if this Session has * pending unsaved changes. * @throws RepositoryException if another error occurs. * @since JCR 2.0 */ public NodeIterator merge(Node activityNode) throws VersionException, AccessDeniedException, MergeException, LockException, InvalidItemStateException, RepositoryException; }