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

javax.jcr.Item Maven / Gradle / Ivy

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


package javax.jcr;

//~--- JDK imports ------------------------------------------------------------

import javax.jcr.lock.LockException;
import javax.jcr.nodetype.ConstraintViolationException;
import javax.jcr.nodetype.NoSuchNodeTypeException;
import javax.jcr.version.VersionException;

/**
 * The Item is the base interface of {@link Node} and
 * {@link Property}.
 */
public interface Item {

    /**
     * Returns the normalized absolute path to this item.
     *
     * @return the normalized absolute path of this Item.
     * @throws RepositoryException if an error occurs.
     */
    public String getPath() throws RepositoryException;

    /**
     * Returns the name of this Item in qualified form. If this
     * Item is the root node of the workspace, an empty string is
     * returned.
     *
     * @return the name of this Item in qualified form or an empty
     *         string if this Item is the root node of a
     *         workspace.
     * @throws RepositoryException if an error occurs.
     */
    public String getName() throws RepositoryException;

    /**
     * Returns the ancestor of this Item at the specified depth. An
     * ancestor of depth x is the Item that is x
     * levels down along the path from the root node to this
     * Item. 
  • depth = 0 returns the root node of a * workspace.
  • depth = 1 returns the child of the root node along * the path to this Item.
  • depth = 2 returns * the grandchild of the root node along the path to this * Item.
  • And so on to depth = n, where * n is the depth of this Item, which returns * this Item itself.
*

* If this node has more than one path (i.e., if it is a descendant of a * shared node) then the path used to define the ancestor is * implementaion-dependent. * * @param depth An integer, 0 <= depth <= n where * n is the depth of this Item. * @return The ancestor of this Item at the specified * depth. * @throws ItemNotFoundException if depth < 0 or depth > * n where n is the is the depth of this item. * @throws AccessDeniedException if the current session does not have * sufficent access to retrieve the specified node. * @throws RepositoryException if another error occurs. */ public Item getAncestor(int depth) throws ItemNotFoundException, AccessDeniedException, RepositoryException; /** * Returns the parent of this Item. * * @return The parent of this Item. * @throws ItemNotFoundException if this Item is the root node * of a workspace. * @throws AccessDeniedException if the current session does not have * sufficent access to retrieve the parent of this item. * @throws RepositoryException if another error occurs. */ public Node getParent() throws ItemNotFoundException, AccessDeniedException, RepositoryException; /** * Returns the depth of this Item in the workspace item graph. *

  • The root node returns 0.
  • A property or child node of the * root node returns 1.
  • A property or child node of a child node of the * root returns 2.
  • And so on to this Item.
* * @return The depth of this Item in the workspace item graph. * @throws RepositoryException if an error occurs. */ public int getDepth() throws RepositoryException; /** * Returns the Session through which this Item was * acquired. * * @return the Session through which this Item was * acquired. * @throws RepositoryException if an error occurs. */ public Session getSession() throws RepositoryException; /** * Indicates whether this Item is a Node or a * Property. Returns true if this * Item is a Node; Returns false if * this Item is a Property. * * @return true if this Item is a * Node, false if it is a * Property. */ public boolean isNode(); /** * Returns true if this is a new item, meaning that it exists * only in transient storage on the Session and has not yet * been saved. Within a transaction, isNew on an * Item may return false (because the item has * been saved) even if that Item is not in persistent storage * (because the transaction has not yet been committed). *

* Note that if an item returns true on isNew, * then by definition is parent will return true on * isModified. *

* Note that in read-only implementations, this method will always return * false. * * @return true if this item is new; false * otherwise. */ public boolean isNew(); /** * Returns true if this Item has been saved but * has subsequently been modified through the current session and therefore * the state of this item as recorded in the session differs from the state * of this item as saved. Within a transaction, isModified on * an Item may return false (because the * Item has been saved since the modification) even if the * modification in question is not in persistent storage (because the * transaction has not yet been committed). *

* Note that in read-only implementations, this method will always return * false. * * @return true if this item is modified; false * otherwise. */ public boolean isModified(); /** * Returns true if this Item object (the Java * object instance) represents the same actual workspace item as the object * otherItem. *

* Two Item objects represent the same workspace item if and * only if all the following are true:

  • Both objects were acquired * through Session objects that were created by the same * Repository object.
  • Both objects were acquired * through Session objects bound to the same repository * workspace.
  • The objects are either both Node objects * or both Property objects.
  • If they are * Node objects, they have the same identifier.
  • If * they are Property objects they have identical names and * isSame is true of their parent nodes.
This method * does not compare the states of the two items. For example, if two * Item objects representing the same actual workspace item * have been retrieved through two different sessions and one has been * modified, then this method will still return true when * comparing these two objects. Note that if two Item objects * representing the same workspace item are retrieved through the * same session they will always reflect the same state. * * @param otherItem the Item object to be tested for identity * with this Item. * @return true if this Item object and * otherItem represent the same actual repository item; * false otherwise. * @throws RepositoryException if an error occurs. */ public boolean isSame(Item otherItem) throws RepositoryException; /** * Accepts an ItemVisitor. Calls the appropriate * ItemVisitor visit method of the according to * whether this Item is a Node or a * Property. * * @param visitor The ItemVisitor to be accepted. * @throws RepositoryException if an error occurs. */ public void accept(ItemVisitor visitor) throws RepositoryException; /** * Validates all pending changes currently recorded in this * Session that apply to this Item or any of its * descendants (that is, the subgraph rooted at this Item). If validation of * all pending changes succeeds, then this change information is * cleared from the Session. If the save occurs * outside a transaction, the changes are persisted and thus made visible to * other Sessions. If the save occurs within a * transaction, the changes are not persisted until the transaction is * committed. *

* If validation fails, then no pending changes are saved and they remain * recorded on the Session. There is no best-effort or partial * save. *

* The item in persistent storage to which a transient item is saved is * * @throws AccessDeniedException if any of the changes to be persisted would * exceed the access capabilities of the the current session. Also thrown if * any of the changes to be persisted would cause the removal of a node that * is currently referenced by a REFERENCE property that the * current session does not have read access to. * @throws ItemExistsException if any of the changes to be persisted would * be prevented by the presence of an already existing item in the * workspace. * @throws ConstraintViolationException if any of the changes to be * persisted would violate a node type or restriction. Additionally, a * repository may use this exception to enforce implementation- or * configuration-dependent restrictions. * @throws InvalidItemStateException if any of the changes to be persisted * conflicts with a change already persisted through another session and the * implementation is such that this conflict can only be detected at * save-time and therefore was not detected earlier, at * change-time. * @throws ReferentialIntegrityException if any of the changes to be * persisted would cause the removal of a node that is currently referenced * by a REFERENCE property that this Session has * read access to. * @throws VersionException if the save would make a result in * a change to persistent storage that would violate the read-only status of * a checked-in node. * @throws LockException if the save would result in a change * to persistent storage that would violate a lock. * @throws NoSuchNodeTypeException if the save would result in * the addition of a node with an unrecognized node type. * @throws RepositoryException if another error occurs. * @deprecated As of JCR 2.0, {@link Session#save()} should be used * instead. */ public void save() throws AccessDeniedException, ItemExistsException, ConstraintViolationException, InvalidItemStateException, ReferentialIntegrityException, VersionException, LockException, NoSuchNodeTypeException, RepositoryException; /** * If keepChanges is false, this method discards * all pending changes currently recorded in this Session that * apply to this Item or any of its descendants (that is, the subgraph * rooted at this Item)and returns all items to reflect the current saved * state. Outside a transaction this state is simple the current state of * persistent storage. Within a transaction, this state will reflect * persistent storage as modified by changes that have been saved but not * yet committed. *

* If keepChanges is true then pending change are not discarded * but items that do not have changes pending have their state refreshed to * reflect the current saved state, thus revealing changes made by other * sessions. * * @param keepChanges a boolean * @throws InvalidItemStateException if this Item object * represents a workspace item that has been removed (either by this session * or another). * @throws RepositoryException if another error occurs. */ public void refresh(boolean keepChanges) throws InvalidItemStateException, RepositoryException; /** * Removes this item (and its subgraph). *

* To persist a removal, a save must be performed that includes * the (former) parent of the removed item within its scope. *

* If a node with same-name siblings is removed, this decrements by one the * indices of all the siblings with indices greater than that of the removed * node. In other words, a removal compacts the array of same-name siblings * and causes the minimal re-numbering required to maintain the original * order but leave no gaps in the numbering. * * @throws VersionException if the parent node of this item is versionable * and checked-in or is non-versionable but its nearest versionable ancestor * is checked-in and this implementation performs this validation * immediately instead of waiting until save. * @throws LockException if a lock prevents the removal of this item and * this implementation performs this validation immediately instead of * waiting until save. * @throws ConstraintViolationException if removing the specified item would * violate a node type or implementation-specific constraint and this * implementation performs this validation immediately instead of waiting * until save. * @throws AccessDeniedException if this item or an item in its subgraph is * currently the target of a REFERENCE property located in this * workspace but outside this item's subgraph and the current * Session does not have read access to that * REFERENCE property or if the current Session * does not have sufficent privileges to remove the item. * @throws RepositoryException if another error occurs. * @see javax.jcr.Session#removeItem(String) */ public void remove() throws VersionException, LockException, ConstraintViolationException, AccessDeniedException, RepositoryException; }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy