Package org.apache.jackrabbit.core.state
Class NodeState
- java.lang.Object
-
- org.apache.jackrabbit.core.state.ItemState
-
- org.apache.jackrabbit.core.state.NodeState
-
- Direct Known Subclasses:
VirtualNodeState
public class NodeState extends ItemState
NodeStaterepresents the state of aNode.
-
-
Field Summary
-
Fields inherited from class org.apache.jackrabbit.core.state.ItemState
overlayedState, status, STATUS_EXISTING, STATUS_EXISTING_MODIFIED, STATUS_EXISTING_REMOVED, STATUS_NEW, STATUS_STALE_DESTROYED, STATUS_UNDEFINED
-
-
Constructor Summary
Constructors Constructor Description NodeState(NodeId id, Name nodeTypeName, NodeId parentId, int initialStatus, boolean isTransient)Constructs a new node state that is not connected.NodeState(NodeState overlayedState, int initialStatus, boolean isTransient)Constructs a new node state that is initially connected to an overlayed state.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description ChildNodeEntryaddChildNodeEntry(Name nodeName, NodeId id)Adds a newChildNodeEntry.voidaddPropertyName(Name propName)Adds a property name entry.booleanaddShare(NodeId parentId)Add a parent to the shared set.longcalculateMemoryFootprint()Returns an estimate of the memory size of this node state.booleancontainsShare(NodeId parentId)Return a flag whether the given parent id appears in the shared set.voidcopy(ItemState state, boolean syncModCount)Copy state information from another state into this stateList<ChildNodeEntry>getAddedChildNodeEntries()Returns a list of child node entries that do not exist in the overlayed node state but have been added to this node state.Set<Name>getAddedPropertyNames()Returns a set ofNames denoting those properties that do not exist in the overlayed node state but have been added to this node state.Set<NodeId>getAddedShares()Returns a set of shares that were added.List<ChildNodeEntry>getChildNodeEntries()Returns a list ofChildNodeEntryobjects denoting the child nodes of this node.List<ChildNodeEntry>getChildNodeEntries(Name nodeName)Returns a list ofChildNodeEntrys with the specified name.ChildNodeEntrygetChildNodeEntry(NodeId id)Returns theChildNodeEntrywith the specifiedNodeIdornullif there's no matching entry.ChildNodeEntrygetChildNodeEntry(Name nodeName, int index)Returns theChildNodeEntrywith the specified name and index ornullif there's no matching entry.ItemIdgetId()Returns the identifier of this item.Set<Name>getMixinTypeNames()Returns the names of this node's mixin types.NodeIdgetNodeId()Returns the identifier of this node.NamegetNodeTypeName()Returns the name of this node's node type.NodeIdgetParentId()Returns the NodeId of the parentNodeStateornullif either this item state represents the root node or this item state is 'free floating', i.e.Set<Name>getPropertyNames()Returns the names of this node's properties as a set ofQNamesobjects.List<ChildNodeEntry>getRemovedChildNodeEntries()Returns a list of child node entries, that exist in the overlayed node state but have been removed from this node state.Set<Name>getRemovedPropertyNames()Returns a set ofNames denoting those properties that exist in the overlayed node state but have been removed from this node state.Set<NodeId>getRemovedShares()Returns a set of shares that were removed.List<ChildNodeEntry>getRenamedChildNodeEntries()Returns a list of child node entries that exist both in this node state and in the overlayed node state but have been renamed.List<ChildNodeEntry>getReorderedChildNodeEntries()Returns a list of child node entries that exist both in this node state and in the overlayed node state but have been reordered.Set<NodeId>getSharedSet()Return the shared set as an unmodifiable collection.booleanhasChildNodeEntries()Determines if there are any child node entries.booleanhasChildNodeEntry(NodeId id)Determines if there is aChildNodeEntrywith the specifiedNodeId.booleanhasChildNodeEntry(Name name)Determines if there is aChildNodeEntrywith the specifiedname.booleanhasChildNodeEntry(Name name, int index)Determines if there is aChildNodeEntrywith the specifiednameandindex.booleanhasPropertyName(Name propName)Determines if there is a property entry with the specifiedName.booleanisNode()Determines if this item state represents a node.booleanisShareable()Return a flag indicating whether this state is shareable, i.e.protected voidnotifyNodeAdded(ChildNodeEntry added)Notify the listeners that a child node entry has been addedprotected voidnotifyNodeRemoved(ChildNodeEntry removed)Notify the listeners that a child node entry has been removedprotected voidnotifyNodesReplaced()Notify the listeners that the child node entries have been replacedvoidremoveAllChildNodeEntries()Removes allChildNodeEntrys.voidremoveAllPropertyNames()Removes all property name entries.booleanremoveChildNodeEntry(NodeId id)Removes aChildNodeEntry.booleanremoveChildNodeEntry(Name nodeName, int index)Removes aChildNodeEntry.booleanremovePropertyName(Name propName)Removes a property name entry.intremoveShare(NodeId parentId)Remove a parent from the shared set.booleanrenameChildNodeEntry(NodeId id, Name newName)Renames aChildNodeEntryby removing the old entry and appending the new entry to the end of the list.booleanrenameChildNodeEntry(Name oldName, int index, Name newName)Renames aChildNodeEntryby removing the old entry and appending the new entry to the end of the list.booleanreplaceChildNodeEntry(NodeId oldId, Name newName, NodeId newId)Replaces theChildNodeEntryidentified byoldIdwith a new entry.voidsetChildNodeEntries(List<ChildNodeEntry> nodeEntries)Sets the list ofChildNodeEntryobjects denoting the child nodes of this node.voidsetContainer(ItemStateListener listener)Set the parent container that will receive notifications about changes to this state.voidsetMixinTypeNames(Set<Name> names)Sets the names of this node's mixin types.voidsetNodeTypeName(Name nodeTypeName)Set the node type name.voidsetParentId(NodeId parentId)Sets the id of this node's parent.voidsetPropertyNames(Set<Name> propNames)Sets the set ofNameobjects denoting the properties of this node.voidsetSharedSet(Set<NodeId> set)Set the shared set of this state to the shared set of another state.-
Methods inherited from class org.apache.jackrabbit.core.state.ItemState
connect, discard, disconnect, getContainer, getModCount, getOverlayedState, getStatus, hasOverlayedState, isConnected, isStale, isTransient, notifyStateCreated, notifyStateDestroyed, notifyStateDiscarded, notifyStateUpdated, reconnect, setModCount, setStatus
-
-
-
-
Constructor Detail
-
NodeState
public NodeState(NodeState overlayedState, int initialStatus, boolean isTransient)
Constructs a new node state that is initially connected to an overlayed state.- Parameters:
overlayedState- the backing node state being overlayedinitialStatus- the initial status of the node state objectisTransient- flag indicating whether this state is transient or not
-
NodeState
public NodeState(NodeId id, Name nodeTypeName, NodeId parentId, int initialStatus, boolean isTransient)
Constructs a new node state that is not connected.- Parameters:
id- id of this nodenodeTypeName- node type of this nodeparentId- id of the parent nodeinitialStatus- the initial status of the node state objectisTransient- flag indicating whether this state is transient or not
-
-
Method Detail
-
copy
public void copy(ItemState state, boolean syncModCount)
Copy state information from another state into this state
-
isNode
public final boolean isNode()
Determines if this item state represents a node.
-
getParentId
public NodeId getParentId()
Returns the NodeId of the parentNodeStateornullif either this item state represents the root node or this item state is 'free floating', i.e. not attached to the repository's hierarchy.- Specified by:
getParentIdin classItemState- Returns:
- the parent
NodeState's Id
-
getId
public ItemId getId()
Returns the identifier of this item.
-
getNodeId
public NodeId getNodeId()
Returns the identifier of this node.- Returns:
- the id of this node.
-
setParentId
public void setParentId(NodeId parentId)
Sets the id of this node's parent.- Parameters:
parentId- the parent node's id ornullif either this node state should represent the root node or this node state should be 'free floating', i.e. detached from the workspace's hierarchy.
-
getNodeTypeName
public Name getNodeTypeName()
Returns the name of this node's node type.- Returns:
- the name of this node's node type.
-
getMixinTypeNames
public Set<Name> getMixinTypeNames()
Returns the names of this node's mixin types.- Returns:
- a set of the names of this node's mixin types.
-
setMixinTypeNames
public void setMixinTypeNames(Set<Name> names)
Sets the names of this node's mixin types.- Parameters:
names- set of names of mixin types
-
hasChildNodeEntries
public boolean hasChildNodeEntries()
Determines if there are any child node entries.- Returns:
trueif there are child node entries,falseotherwise.
-
hasChildNodeEntry
public boolean hasChildNodeEntry(Name name)
Determines if there is aChildNodeEntrywith the specifiedname.- Parameters:
name-Nameobject specifying a node name- Returns:
trueif there is aChildNodeEntrywith the specifiedname.
-
hasChildNodeEntry
public boolean hasChildNodeEntry(NodeId id)
Determines if there is aChildNodeEntrywith the specifiedNodeId.- Parameters:
id- the id of the child node- Returns:
trueif there is aChildNodeEntrywith the specifiedname.
-
hasChildNodeEntry
public boolean hasChildNodeEntry(Name name, int index)
Determines if there is aChildNodeEntrywith the specifiednameandindex.- Parameters:
name-Nameobject specifying a node nameindex- 1-based index if there are same-name child node entries- Returns:
trueif there is aChildNodeEntrywith the specifiednameandindex.
-
hasPropertyName
public boolean hasPropertyName(Name propName)
Determines if there is a property entry with the specifiedName.- Parameters:
propName-Nameobject specifying a property name- Returns:
trueif there is a property entry with the specifiedName.
-
getChildNodeEntry
public ChildNodeEntry getChildNodeEntry(Name nodeName, int index)
Returns theChildNodeEntrywith the specified name and index ornullif there's no matching entry.- Parameters:
nodeName-Nameobject specifying a node nameindex- 1-based index if there are same-name child node entries- Returns:
- the
ChildNodeEntrywith the specified name and index ornullif there's no matching entry.
-
getChildNodeEntry
public ChildNodeEntry getChildNodeEntry(NodeId id)
Returns theChildNodeEntrywith the specifiedNodeIdornullif there's no matching entry.- Parameters:
id- the id of the child node- Returns:
- the
ChildNodeEntrywith the specifiedNodeIdornullif there's no matching entry. - See Also:
addChildNodeEntry(org.apache.jackrabbit.spi.Name, org.apache.jackrabbit.core.id.NodeId),removeChildNodeEntry(org.apache.jackrabbit.spi.Name, int)
-
getChildNodeEntries
public List<ChildNodeEntry> getChildNodeEntries()
Returns a list ofChildNodeEntryobjects denoting the child nodes of this node.- Returns:
- list of
ChildNodeEntryobjects - See Also:
addChildNodeEntry(org.apache.jackrabbit.spi.Name, org.apache.jackrabbit.core.id.NodeId),removeChildNodeEntry(org.apache.jackrabbit.spi.Name, int)
-
getChildNodeEntries
public List<ChildNodeEntry> getChildNodeEntries(Name nodeName)
Returns a list ofChildNodeEntrys with the specified name.- Parameters:
nodeName- name of the child node entries that should be returned- Returns:
- list of
ChildNodeEntryobjects - See Also:
addChildNodeEntry(org.apache.jackrabbit.spi.Name, org.apache.jackrabbit.core.id.NodeId),removeChildNodeEntry(org.apache.jackrabbit.spi.Name, int)
-
addChildNodeEntry
public ChildNodeEntry addChildNodeEntry(Name nodeName, NodeId id)
Adds a newChildNodeEntry.- Parameters:
nodeName-Nameobject specifying the name of the new entry.id- the id the new entry is refering to.- Returns:
- the newly added
ChildNodeEntry
-
renameChildNodeEntry
public boolean renameChildNodeEntry(Name oldName, int index, Name newName)
Renames aChildNodeEntryby removing the old entry and appending the new entry to the end of the list.- Parameters:
oldName-Nameobject specifying the entry's old nameindex- 1-based index if there are same-name child node entriesnewName-Nameobject specifying the entry's new name- Returns:
trueif the entry was successfully renamed; otherwisefalse
-
renameChildNodeEntry
public boolean renameChildNodeEntry(NodeId id, Name newName)
Renames aChildNodeEntryby removing the old entry and appending the new entry to the end of the list.- Parameters:
id- id the entry to be renamed is refering to.newName-Nameobject specifying the entry's new name- Returns:
trueif the entry was successfully renamed; otherwisefalse
-
replaceChildNodeEntry
public boolean replaceChildNodeEntry(NodeId oldId, Name newName, NodeId newId)
Replaces theChildNodeEntryidentified byoldIdwith a new entry. Note that the entry will overwrite the old entry at the same relative position within the child node entries list.- Parameters:
oldId- id the entry to be replaced is referring to.newName-Nameobject specifying the entry's new namenewId- the id the new entry is referring to.- Returns:
trueif the entry was successfully replaced; otherwisefalse
-
removeChildNodeEntry
public boolean removeChildNodeEntry(Name nodeName, int index)
Removes aChildNodeEntry.- Parameters:
nodeName-ChildNodeEntryobject specifying a node nameindex- 1-based index if there are same-name child node entries- Returns:
trueif the specified child node entry was found in the list of child node entries and could be removed.
-
removeChildNodeEntry
public boolean removeChildNodeEntry(NodeId id)
Removes aChildNodeEntry.- Parameters:
id- the id of the entry to be removed- Returns:
trueif the specified child node entry was found in the list of child node entries and could be removed.
-
removeAllChildNodeEntries
public void removeAllChildNodeEntries()
Removes allChildNodeEntrys.
-
setChildNodeEntries
public void setChildNodeEntries(List<ChildNodeEntry> nodeEntries)
Sets the list ofChildNodeEntryobjects denoting the child nodes of this node.- Parameters:
nodeEntries- list ofChildNodeEntrys
-
getPropertyNames
public Set<Name> getPropertyNames()
Returns the names of this node's properties as a set ofQNamesobjects.- Returns:
- set of
QNamesobjects - See Also:
addPropertyName(org.apache.jackrabbit.spi.Name),removePropertyName(org.apache.jackrabbit.spi.Name)
-
addPropertyName
public void addPropertyName(Name propName)
Adds a property name entry.- Parameters:
propName-Nameobject specifying the property name
-
removePropertyName
public boolean removePropertyName(Name propName)
Removes a property name entry.- Parameters:
propName-Nameobject specifying the property name- Returns:
trueif the specified property name was found in the list of property name entries and could be removed.
-
removeAllPropertyNames
public void removeAllPropertyNames()
Removes all property name entries.
-
setPropertyNames
public void setPropertyNames(Set<Name> propNames)
Sets the set ofNameobjects denoting the properties of this node.- Parameters:
propNames- set ofNames.
-
setNodeTypeName
public void setNodeTypeName(Name nodeTypeName)
Set the node type name. Needed for deserialization and should therefore not change the internal status.- Parameters:
nodeTypeName- node type name
-
isShareable
public boolean isShareable()
Return a flag indicating whether this state is shareable, i.e. whether there is at least one member inside its shared set.- Returns:
trueif this state is shareable.
-
addShare
public boolean addShare(NodeId parentId)
Add a parent to the shared set.- Parameters:
parentId- parent id to add to the shared set- Returns:
trueif the parent was successfully added;falseotherwise
-
containsShare
public boolean containsShare(NodeId parentId)
Return a flag whether the given parent id appears in the shared set.- Parameters:
parentId- parent id- Returns:
trueif the parent id appears in the shared set;falseotherwise.
-
getSharedSet
public Set<NodeId> getSharedSet()
Return the shared set as an unmodifiable collection.- Returns:
- unmodifiable collection
-
setSharedSet
public void setSharedSet(Set<NodeId> set)
Set the shared set of this state to the shared set of another state. This state will get a deep copy of the shared set given.- Parameters:
set- shared set
-
removeShare
public int removeShare(NodeId parentId)
Remove a parent from the shared set. Returns the number of elements in the shared set. If this number is0, the shared set is empty, i.e. there are no more parent items referencing this item and the state is free floating.- Parameters:
parentId- parent id to remove from the shared set- Returns:
- the number of elements left in the shared set
-
getAddedPropertyNames
public Set<Name> getAddedPropertyNames()
Returns a set ofNames denoting those properties that do not exist in the overlayed node state but have been added to this node state.- Returns:
- set of
Names denoting the properties that have been added.
-
getAddedChildNodeEntries
public List<ChildNodeEntry> getAddedChildNodeEntries()
Returns a list of child node entries that do not exist in the overlayed node state but have been added to this node state.- Returns:
- list of added child node entries
-
getRemovedPropertyNames
public Set<Name> getRemovedPropertyNames()
Returns a set ofNames denoting those properties that exist in the overlayed node state but have been removed from this node state.- Returns:
- set of
Names denoting the properties that have been removed.
-
getRemovedChildNodeEntries
public List<ChildNodeEntry> getRemovedChildNodeEntries()
Returns a list of child node entries, that exist in the overlayed node state but have been removed from this node state.- Returns:
- list of removed child node entries
-
getRenamedChildNodeEntries
public List<ChildNodeEntry> getRenamedChildNodeEntries()
Returns a list of child node entries that exist both in this node state and in the overlayed node state but have been renamed.- Returns:
- list of renamed child node entries
-
getReorderedChildNodeEntries
public List<ChildNodeEntry> getReorderedChildNodeEntries()
Returns a list of child node entries that exist both in this node state and in the overlayed node state but have been reordered.The list may include only the minimal set of nodes that have been reordered. That is, even though a certain number of nodes have changed their absolute position the list may include less that this number of nodes.
Example:
Initial state:+ node1 + node2 + node3
After reorder:+ node2 + node3 + node1
All nodes have changed their absolute position. The returned list however may only return thatnode1has been reordered (from the first position to the end).- Returns:
- list of reordered child node enties.
-
getAddedShares
public Set<NodeId> getAddedShares()
Returns a set of shares that were added.- Returns:
- the set of shares that were added. Set of
NodeIds.
-
getRemovedShares
public Set<NodeId> getRemovedShares()
Returns a set of shares that were removed.- Returns:
- the set of shares that were removed. Set of
NodeIds.
-
setContainer
public void setContainer(ItemStateListener listener)
Set the parent container that will receive notifications about changes to this state.If the listener passed is at the same time a
NodeStateListenerwe remember it as well.- Overrides:
setContainerin classItemState- Parameters:
listener- container to be informed on modifications
-
calculateMemoryFootprint
public long calculateMemoryFootprint()
Returns an estimate of the memory size of this node state. The return value actually highly overestimates the amount of required memory, but changing the estimates would likely cause OOMs in many downstream deployments that have set their cache sizes based on experience with these erroneous size estimates. So we don't change the formula used by this method.- Specified by:
calculateMemoryFootprintin classItemState- Returns:
- the approximate memory consumption of this state.
-
notifyNodeAdded
protected void notifyNodeAdded(ChildNodeEntry added)
Notify the listeners that a child node entry has been added- Parameters:
added- the entry that was added
-
notifyNodesReplaced
protected void notifyNodesReplaced()
Notify the listeners that the child node entries have been replaced
-
notifyNodeRemoved
protected void notifyNodeRemoved(ChildNodeEntry removed)
Notify the listeners that a child node entry has been removed- Parameters:
removed- the entry that was removed
-
-