org.apache.jackrabbit.core
Class HierarchyManagerImpl

java.lang.Object
  extended by org.apache.jackrabbit.core.HierarchyManagerImpl
All Implemented Interfaces:
HierarchyManager
Direct Known Subclasses:
CachingHierarchyManager, ZombieHierarchyManager

public class HierarchyManagerImpl
extends Object
implements HierarchyManager

HierarchyManagerImpl ...


Field Summary
protected  ItemStateManager provider
           
protected  NodeId rootNodeId
           
 
Constructor Summary
HierarchyManagerImpl(NodeId rootNodeId, ItemStateManager provider)
           
 
Method Summary
protected  void buildPath(PathBuilder builder, ItemState state)
          Adds the path element of an item id to the path currently being built.
protected  ChildNodeEntry getChildNodeEntry(NodeState parent, Name name, int index)
          Returns the ChildNodeEntry of parent with the specified name and index or null if there's no such entry.
protected  ChildNodeEntry getChildNodeEntry(NodeState parent, NodeId id)
          Returns the ChildNodeEntry of parent with the specified uuid or null if there's no such entry.
 int getDepth(ItemId id)
          Returns the depth of the specified item which is equivalent to getPath(id).getAncestorCount().
protected  ItemState getItemState(ItemId id)
          Return an item state, given its item id.
 Name getName(ItemId itemId)
          Returns the name of the specified item.
 Name getName(NodeId id, NodeId parentId)
          Returns the name of the specified item, with the given parent id.
protected  NodeId getParentId(ItemState state)
          Returns the parentUUID of the given item.
protected  Set<NodeId> getParentIds(ItemState state, boolean useOverlayed)
          Return all parents of a node.
 Path getPath(ItemId id)
          Returns the path to the given item.
 int getRelativeDepth(NodeId ancestorId, ItemId descendantId)
          Returns the depth of the specified descendant relative to the given ancestor.
 NodeId getRootNodeId()
           
 int getShareRelativeDepth(NodeId ancestor, ItemId descendant)
          Returns the depth of the specified share-descendant relative to the given share-ancestor.
protected  boolean hasItemState(ItemId id)
          Determines whether an item state for a given item id exists.
 boolean isAncestor(NodeId nodeId, ItemId itemId)
          Determines whether the node with the specified nodeId is an ancestor of the item denoted by the given itemId.
 boolean isShareAncestor(NodeId ancestor, NodeId descendant)
          Determines whether the node with the specified ancestor is a share ancestor of the item denoted by the given descendant.
protected  void pathResolved(ItemId id, PathBuilder builder)
          Called by resolvePath(org.apache.jackrabbit.spi.Path.Element[], int, ItemId, int).
 NodeId resolveNodePath(Path path)
          Resolves a path into a node id.
protected  ItemId resolvePath(Path.Element[] elements, int next, ItemId id, int typesAllowed)
          Internal implementation that iteratively resolves a path into an item.
 ItemId resolvePath(Path path)
          Resolves a path into an item id.
protected  ItemId resolvePath(Path path, int typesAllowed)
          Internal implementation of resolvePath(Path) that will either resolve to a node or a property.
 PropertyId resolvePropertyPath(Path path)
          Resolves a path into a property id.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

rootNodeId

protected final NodeId rootNodeId

provider

protected final ItemStateManager provider
Constructor Detail

HierarchyManagerImpl

public HierarchyManagerImpl(NodeId rootNodeId,
                            ItemStateManager provider)
Method Detail

getRootNodeId

public NodeId getRootNodeId()

resolvePath

protected ItemId resolvePath(Path.Element[] elements,
                             int next,
                             ItemId id,
                             int typesAllowed)
                      throws ItemStateException,
                             MalformedPathException
Internal implementation that iteratively resolves a path into an item.

Parameters:
elements - path elements
next - index of next item in elements to inspect
id - id of item at path elements[0]..elements[next - 1]
typesAllowed - one of RETURN_ANY, RETURN_NODE or RETURN_PROPERTY
Returns:
id or null
Throws:
ItemStateException - if an intermediate item state is not found
MalformedPathException - if building an intermediate path fails

getItemState

protected ItemState getItemState(ItemId id)
                          throws NoSuchItemStateException,
                                 ItemStateException
Return an item state, given its item id.

Low-level hook provided for specialized derived classes.

Parameters:
id - item id
Returns:
item state
Throws:
NoSuchItemStateException - if the item does not exist
ItemStateException - if an error occurs
See Also:
ZombieHierarchyManager.getItemState(ItemId)

hasItemState

protected boolean hasItemState(ItemId id)
Determines whether an item state for a given item id exists.

Low-level hook provided for specialized derived classes.

Parameters:
id - item id
Returns:
true if an item state exists, otherwise false
See Also:
ZombieHierarchyManager.hasItemState(ItemId)

getParentId

protected NodeId getParentId(ItemState state)
Returns the parentUUID of the given item.

Low-level hook provided for specialized derived classes.

Parameters:
state - item state
Returns:
parentUUID of the given item
See Also:
ZombieHierarchyManager.getParentId(ItemState)

getParentIds

protected Set<NodeId> getParentIds(ItemState state,
                                   boolean useOverlayed)
Return all parents of a node. A shareable node has possibly more than one parent.

Parameters:
state - item state
useOverlayed - whether to use overlayed state for shareable nodes
Returns:
set of parent NodeIds. If state has no parent, array has length 0.

getChildNodeEntry

protected ChildNodeEntry getChildNodeEntry(NodeState parent,
                                           NodeId id)
Returns the ChildNodeEntry of parent with the specified uuid or null if there's no such entry.

Low-level hook provided for specialized derived classes.

Parameters:
parent - node state
id - id of child node entry
Returns:
the ChildNodeEntry of parent with the specified uuid or null if there's no such entry.
See Also:
ZombieHierarchyManager.getChildNodeEntry(NodeState, NodeId)

getChildNodeEntry

protected ChildNodeEntry getChildNodeEntry(NodeState parent,
                                           Name name,
                                           int index)
Returns the ChildNodeEntry of parent with the specified name and index or null if there's no such entry.

Low-level hook provided for specialized derived classes.

Parameters:
parent - node state
name - name of child node entry
index - index of child node entry
Returns:
the ChildNodeEntry of parent with the specified name and index or null if there's no such entry.
See Also:
ZombieHierarchyManager.getChildNodeEntry(NodeState, Name, int)

buildPath

protected void buildPath(PathBuilder builder,
                         ItemState state)
                  throws ItemStateException,
                         RepositoryException
Adds the path element of an item id to the path currently being built. Recursively invoked method that may be overridden by some subclass to either return cached responses or add response to cache. On exit, builder contains the path of state.

Parameters:
builder - builder currently being used
state - item to find path of
Throws:
ItemStateException
RepositoryException

resolvePath

protected ItemId resolvePath(Path path,
                             int typesAllowed)
                      throws RepositoryException
Internal implementation of resolvePath(Path) that will either resolve to a node or a property. Should be overridden by a subclass that can resolve an intermediate path into an ItemId. This subclass can then invoke resolvePath(org.apache.jackrabbit.spi.Path.Element[], int, ItemId, int) with a value of next greater than 1.

Parameters:
path - path to resolve
typesAllowed - one of RETURN_ANY, RETURN_NODE or RETURN_PROPERTY
Returns:
id or null
Throws:
RepositoryException - if an error occurs

pathResolved

protected void pathResolved(ItemId id,
                            PathBuilder builder)
                     throws MalformedPathException
Called by resolvePath(org.apache.jackrabbit.spi.Path.Element[], int, ItemId, int). May be overridden by some subclass to process/cache intermediate state.

Parameters:
id - id of resolved item
builder - path builder containing path resolved
Throws:
MalformedPathException - if the path contained in builder is malformed

resolvePath

public final ItemId resolvePath(Path path)
                         throws RepositoryException
Resolves a path into an item id.

If there is both a node and a property at the specified path, this method will return the id of the node.

Note that, for performance reasons, this method returns null rather than throwing a PathNotFoundException if there's no item to be found at path.

Specified by:
resolvePath in interface HierarchyManager
Parameters:
path - path to resolve
Returns:
item id referred to by path or null if there's no item at path.
Throws:
RepositoryException - if an error occurs

resolveNodePath

public NodeId resolveNodePath(Path path)
                       throws RepositoryException
Resolves a path into a node id.

Note that, for performance reasons, this method returns null rather than throwing a PathNotFoundException if there's no node to be found at path.

Specified by:
resolveNodePath in interface HierarchyManager
Parameters:
path - path to resolve
Returns:
node id referred to by path or null if there's no node at path.
Throws:
RepositoryException - if an error occurs

resolvePropertyPath

public PropertyId resolvePropertyPath(Path path)
                               throws RepositoryException
Resolves a path into a property id.

Note that, for performance reasons, this method returns null rather than throwing a PathNotFoundException if there's no property to be found at path.

Specified by:
resolvePropertyPath in interface HierarchyManager
Parameters:
path - path to resolve
Returns:
property id referred to by path or null if there's no property at path.
Throws:
RepositoryException - if an error occurs

getPath

public Path getPath(ItemId id)
             throws ItemNotFoundException,
                    RepositoryException
Returns the path to the given item.

Specified by:
getPath in interface HierarchyManager
Returns:
Throws:
ItemNotFoundException
RepositoryException

getName

public Name getName(ItemId itemId)
             throws ItemNotFoundException,
                    RepositoryException
Returns the name of the specified item.

Specified by:
getName in interface HierarchyManager
Parameters:
itemId - id of item whose name should be returned
Returns:
Throws:
ItemNotFoundException
RepositoryException

getName

public Name getName(NodeId id,
                    NodeId parentId)
             throws ItemNotFoundException,
                    RepositoryException
Returns the name of the specified item, with the given parent id. If the given item is not shareable, this is identical to HierarchyManager.getName(ItemId).

Specified by:
getName in interface HierarchyManager
Parameters:
id - node id
parentId - parent node id
Returns:
name
Throws:
ItemNotFoundException
RepositoryException

getDepth

public int getDepth(ItemId id)
             throws ItemNotFoundException,
                    RepositoryException
Returns the depth of the specified item which is equivalent to getPath(id).getAncestorCount(). The depth reflects the absolute hierarchy level.

Specified by:
getDepth in interface HierarchyManager
Parameters:
id - item id
Returns:
the depth of the specified item
Throws:
ItemNotFoundException - if the specified id does not denote an existing item.
RepositoryException - if another error occurs

getRelativeDepth

public int getRelativeDepth(NodeId ancestorId,
                            ItemId descendantId)
                     throws ItemNotFoundException,
                            RepositoryException
Returns the depth of the specified descendant relative to the given ancestor. If ancestorId and descendantId denote the same item 0 is returned. If ancestorId does not denote an ancestor -1 is returned.

Specified by:
getRelativeDepth in interface HierarchyManager
Parameters:
ancestorId - ancestor id
descendantId - descendant id
Returns:
the relative depth; -1 if ancestorId does not denote an ancestor of the item denoted by descendantId (or itself).
Throws:
ItemNotFoundException - if either of the specified id's does not denote an existing item.
RepositoryException - if another error occurs

isAncestor

public boolean isAncestor(NodeId nodeId,
                          ItemId itemId)
                   throws ItemNotFoundException,
                          RepositoryException
Determines whether the node with the specified nodeId is an ancestor of the item denoted by the given itemId. This is equivalent to getPath(nodeId).isAncestorOf(getPath(itemId)).

Specified by:
isAncestor in interface HierarchyManager
Parameters:
nodeId - node id
itemId - item id
Returns:
true if the node with the specified nodeId is an ancestor of the item denoted by the given itemIdfalse otherwise
Throws:
ItemNotFoundException - if any of the specified id's does not denote an existing item.
RepositoryException - if another error occurs

isShareAncestor

public boolean isShareAncestor(NodeId ancestor,
                               NodeId descendant)
                        throws ItemNotFoundException,
                               RepositoryException
Determines whether the node with the specified ancestor is a share ancestor of the item denoted by the given descendant. This is true for two nodes A, B if either:

Specified by:
isShareAncestor in interface HierarchyManager
Parameters:
ancestor - node id
descendant - item id
Returns:
true if the node denoted by ancestor is a share ancestor of the item denoted by descendant, false otherwise
Throws:
ItemNotFoundException - if any of the specified id's does not denote an existing item.
RepositoryException - if another error occurs

getShareRelativeDepth

public int getShareRelativeDepth(NodeId ancestor,
                                 ItemId descendant)
                          throws ItemNotFoundException,
                                 RepositoryException
Returns the depth of the specified share-descendant relative to the given share-ancestor. If ancestor and descendant denote the same item, 0 is returned. If ancestor does not denote an share-ancestor -1 is returned.

Specified by:
getShareRelativeDepth in interface HierarchyManager
Parameters:
ancestor - ancestor id
descendant - descendant id
Returns:
the relative depth; -1 if ancestor does not denote a share-ancestor of the item denoted by descendant (or itself).
Throws:
ItemNotFoundException - if either of the specified id's does not denote an existing item.
RepositoryException - if another error occurs


Copyright © 2004-2010 The Apache Software Foundation. All Rights Reserved.