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

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

/*
 * Copyright 2009 Day Management AG, Switzerland. All rights reserved.
 */
package javax.jcr.version;

import javax.jcr.AccessDeniedException;
import javax.jcr.Node;
import javax.jcr.NodeIterator;
import javax.jcr.ReferentialIntegrityException;
import javax.jcr.RepositoryException;
import javax.jcr.UnsupportedRepositoryOperationException;

/**
 * A VersionHistory object wraps an nt:versionHistory
 * node. It provides convenient access to version history information.
 */
public interface VersionHistory extends Node {

    /**
     * Returns the identifier of the versionable node for which this is the
     * version history.
     *
     * @return the identifier of the versionable node for which this is the
     *         version history.
     * @throws RepositoryException if an error occurs.
     * @deprecated As of JCR 2.0, {@link #getVersionableIdentifier} should be
     *             used instead.
     */
    public String getVersionableUUID() throws RepositoryException;

    /**
     * Returns the identifier of the versionable node for which this is the
     * version history.
     *
     * @return the identifier of the versionable node for which this is the
     *         version history.
     * @throws RepositoryException if an error occurs.
     * @since JCR 2.0
     */
    public String getVersionableIdentifier() throws RepositoryException;

    /**
     * Returns the root version of this version history.
     *
     * @return a Version object.
     * @throws RepositoryException if an error occurs.
     */
    public Version getRootVersion() throws RepositoryException;

    /**
     * This method returns an iterator over all the versions in the line of
     * descent from the root version to that base version within this
     * history that is bound to the workspace through which this
     * VersionHistory was accessed.
     * 

* Within a version history H, B is the base * version bound to workspace W if and only if there exists a * versionable node N in W whose version history * is H and B is the base version of * N. *

* The line of descent from version V1 to * V2, where V2 is a successor of V1, * is the ordered list of versions starting with V1 and * proceeding through each direct successor to V2. *

* The versions are returned in order of creation date, from oldest to * newest. *

* Note that in a simple versioning repository the behavior of this method * is equivalent to returning all versions in the version history in order * from oldest to newest. * * @return a VersionIterator object. * @throws RepositoryException if an error occurs. */ public VersionIterator getAllLinearVersions() throws RepositoryException; /** * Returns an iterator over all the versions within this version history. If * the version graph of this history is linear then the versions are * returned in order of creation date, from oldest to newest. Otherwise the * order of the returned versions is implementation-dependent. * * @return a VersionIterator object. * @throws RepositoryException if an error occurs. */ public VersionIterator getAllVersions() throws RepositoryException; /** * This method returns all the frozen nodes of all the versions in this * version history in the same order as {@link #getAllLinearVersions}. * * @return a NodeIterator object. * @throws RepositoryException if an error occurs. * @since JCR 2.0 */ public NodeIterator getAllLinearFrozenNodes() throws RepositoryException; /** * Returns an iterator over all the frozen nodes of all the versions of this * version history. Under simple versioning the order of the returned nodes * will be the order of their creation. Under full versioning the order is * implementation-dependent. * * @return a NodeIterator object. * @throws RepositoryException if an error occurs. * @since JCR 2.0 */ public NodeIterator getAllFrozenNodes() throws RepositoryException; /** * Retrieves a particular version from this version history by version * name. * * @param versionName a version name * @return a Version object. * @throws VersionException if the specified version is not in this version * history. * @throws RepositoryException if an error occurs. */ public Version getVersion(String versionName) throws VersionException, RepositoryException; /** * Retrieves a particular version from this version history by version * label. * * @param label a version label * @return a Version object. * @throws VersionException if the specified label is not in * this version history. * @throws RepositoryException if an error occurs. */ public Version getVersionByLabel(String label) throws VersionException, RepositoryException; /** * Adds the specified label to the specified version. *

* The label must be a JCR name in either qualified or expanded form and * therefore must conform to the syntax restriction that apply to such * names. In particular a colon (":") should not be used unless it is * intended as a prefix delimiter in a qualified name. *

* Adding a version label to a version corresponds to adding a reference * property with a name specified by the label parameter to the * jcr:versionLabels sub node of the nt:versionHistory * node. The reference property points to the nt:version node * that represents the specified version. *

* This is a workspace-write method and therefore the change is made * immediately. *

* Within a particular version history, a given label may appear a maximum * of once. If the specified label is already assigned to a version in this * history and moveLabel is true then the label is * removed from its current location and added to the version with the * specified versionName. If moveLabel is * false, then an attempt to add a label that already exists * will fail. * * @param versionName the name of the version to which the label is to be * added. * @param label the label to be added, A JCR name in either expanded or * qualified form. * @param moveLabel if true, then if label is * already assigned to a version in this version history, it is moved to the * new version specified; if false, then attempting to assign * an already used label will throw a LabelExistsVersionException. * @throws LabelExistsVersionException if moveLabel is * false, and an attempt is made to add a label that already * exists in this version history. * @throws VersionException if the specified version does not exist in this * version history or if the specified version is the root version * (jcr:rootVersion). * @throws RepositoryException if another error occurs. */ public void addVersionLabel(String versionName, String label, boolean moveLabel) throws LabelExistsVersionException, VersionException, RepositoryException; /** * Removes the specified label from among the labels of this version * history. The label must be a JCR name in either qualified or expanded * form. This corresponds to removing a property from the * jcr:versionLabels child node of the nt:versionHistory * node that represents this version history. *

* This is workspace-write method and therefore the change is made * immediately. * * @param label a version label. A JCR name in either expanded or qualified * form. * @throws VersionException if the name label does not exist in this version * history. * @throws RepositoryException if another error occurs. */ public void removeVersionLabel(String label) throws VersionException, RepositoryException; /** * Returns true if any version in the history has the given * label. The label must be a JCR name in either qualified or * expanded form. * * @param label a version label. A JCR name in either expanded or qualified * form. * @return a boolean. * @throws RepositoryException if an error occurs. */ public boolean hasVersionLabel(String label) throws RepositoryException; /** * Returns true if the given version has the given label. The * label must be a JCR name in either qualified or expanded form. * * @param version a Version object * @param label a version label. A JCR name in either expanded or qualified * form. * @return a boolean. * @throws VersionException if the specified version is not of * this version history. * @throws RepositoryException if another error occurs. */ public boolean hasVersionLabel(Version version, String label) throws VersionException, RepositoryException; /** * Returns all version labels of the history or an empty array if there are * none. * * @return a String array containing all the labels of the * version history. * @throws RepositoryException if an error occurs. */ public String[] getVersionLabels() throws RepositoryException; /** * Returns all version labels of the given version - empty * array if none. Throws a VersionException if the specified * version is not in this version history. * * @param version a Version object * @return a String array containing all the labels of the * given version * @throws VersionException if the specified version is not in * this version history. * @throws RepositoryException if another error occurs. */ public String[] getVersionLabels(Version version) throws VersionException, RepositoryException; /** * Removes the named version from this version history and automatically * repairs the version graph. If the version to be removed is * V, V's predecessor set is P and * V's successor set is S, then the version graph * is repaired s follows:

  • For each member of P, remove * the reference to V from its successor list and add * references to each member of S.
  • For each member of * S, remove the reference to V from its * predecessor list and add references to each member of P. *
Note that this change is made immediately; there is no need to call * save. In fact, since the the version storage is read-only * with respect to normal repository methods, save does not * even function in this context. * * @param versionName the name of a version in this version history. * @throws ReferentialIntegrityException if the specified version is * currently the target of a REFERENCE property elsewhere in * the repository (not necessarily in this workspace) and the current * Session has read access to that REFERENCE * property. * @throws AccessDeniedException if the current Session does not have * permission to remove the specified version or if the specified version is * currently the target of a REFERENCE property elsewhere in * the repository (not just in this workspace) and the current * Session does not have read access to that * REFERENCE property. * @throws UnsupportedRepositoryOperationException * if this operation is not * supported by the implementation. * @throws VersionException if the named version is not in this version * history. * @throws RepositoryException if another error occurs. */ public void removeVersion(String versionName) throws ReferentialIntegrityException, AccessDeniedException, UnsupportedRepositoryOperationException, VersionException, RepositoryException; }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy