Class NodeState

  • Direct Known Subclasses:
    VirtualNodeState

    public class NodeState
    extends ItemState
    NodeState represents the state of a Node.
    • 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 overlayed
        initialStatus - the initial status of the node state object
        isTransient - 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 node
        nodeTypeName - node type of this node
        parentId - id of the parent node
        initialStatus - the initial status of the node state object
        isTransient - 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
        Specified by:
        copy in class ItemState
        Parameters:
        state - source state information
        syncModCount - if the modCount should be synchronized.
      • isNode

        public final boolean isNode()
        Determines if this item state represents a node.
        Specified by:
        isNode in class ItemState
        Returns:
        always true
      • getParentId

        public NodeId getParentId()
        Returns the NodeId of the parent NodeState or null if 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:
        getParentId in class ItemState
        Returns:
        the parent NodeState's Id
      • getId

        public ItemId getId()
        Returns the identifier of this item.
        Specified by:
        getId in class ItemState
        Returns:
        the id 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 or null if 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:
        true if there are child node entries, false otherwise.
      • hasChildNodeEntry

        public boolean hasChildNodeEntry​(Name name)
        Determines if there is a ChildNodeEntry with the specified name.
        Parameters:
        name - Name object specifying a node name
        Returns:
        true if there is a ChildNodeEntry with the specified name.
      • hasChildNodeEntry

        public boolean hasChildNodeEntry​(NodeId id)
        Determines if there is a ChildNodeEntry with the specified NodeId.
        Parameters:
        id - the id of the child node
        Returns:
        true if there is a ChildNodeEntry with the specified name.
      • hasChildNodeEntry

        public boolean hasChildNodeEntry​(Name name,
                                         int index)
        Determines if there is a ChildNodeEntry with the specified name and index.
        Parameters:
        name - Name object specifying a node name
        index - 1-based index if there are same-name child node entries
        Returns:
        true if there is a ChildNodeEntry with the specified name and index.
      • hasPropertyName

        public boolean hasPropertyName​(Name propName)
        Determines if there is a property entry with the specified Name.
        Parameters:
        propName - Name object specifying a property name
        Returns:
        true if there is a property entry with the specified Name.
      • getChildNodeEntry

        public ChildNodeEntry getChildNodeEntry​(Name nodeName,
                                                int index)
        Returns the ChildNodeEntry with the specified name and index or null if there's no matching entry.
        Parameters:
        nodeName - Name object specifying a node name
        index - 1-based index if there are same-name child node entries
        Returns:
        the ChildNodeEntry with the specified name and index or null if there's no matching entry.
      • addChildNodeEntry

        public ChildNodeEntry addChildNodeEntry​(Name nodeName,
                                                NodeId id)
        Adds a new ChildNodeEntry.
        Parameters:
        nodeName - Name object 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 a ChildNodeEntry by removing the old entry and appending the new entry to the end of the list.
        Parameters:
        oldName - Name object specifying the entry's old name
        index - 1-based index if there are same-name child node entries
        newName - Name object specifying the entry's new name
        Returns:
        true if the entry was successfully renamed; otherwise false
      • renameChildNodeEntry

        public boolean renameChildNodeEntry​(NodeId id,
                                            Name newName)
        Renames a ChildNodeEntry by 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 - Name object specifying the entry's new name
        Returns:
        true if the entry was successfully renamed; otherwise false
      • replaceChildNodeEntry

        public boolean replaceChildNodeEntry​(NodeId oldId,
                                             Name newName,
                                             NodeId newId)
        Replaces the ChildNodeEntry identified by oldId with 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 - Name object specifying the entry's new name
        newId - the id the new entry is referring to.
        Returns:
        true if the entry was successfully replaced; otherwise false
      • removeChildNodeEntry

        public boolean removeChildNodeEntry​(Name nodeName,
                                            int index)
        Removes a ChildNodeEntry.
        Parameters:
        nodeName - ChildNodeEntry object specifying a node name
        index - 1-based index if there are same-name child node entries
        Returns:
        true if 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 a ChildNodeEntry.
        Parameters:
        id - the id of the entry to be removed
        Returns:
        true if the specified child node entry was found in the list of child node entries and could be removed.
      • removeAllChildNodeEntries

        public void removeAllChildNodeEntries()
        Removes all ChildNodeEntrys.
      • setChildNodeEntries

        public void setChildNodeEntries​(List<ChildNodeEntry> nodeEntries)
        Sets the list of ChildNodeEntry objects denoting the child nodes of this node.
        Parameters:
        nodeEntries - list of ChildNodeEntrys
      • addPropertyName

        public void addPropertyName​(Name propName)
        Adds a property name entry.
        Parameters:
        propName - Name object specifying the property name
      • removePropertyName

        public boolean removePropertyName​(Name propName)
        Removes a property name entry.
        Parameters:
        propName - Name object specifying the property name
        Returns:
        true if 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 of Name objects denoting the properties of this node.
        Parameters:
        propNames - set of Names.
      • 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:
        true if 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:
        true if the parent was successfully added; false otherwise
      • containsShare

        public boolean containsShare​(NodeId parentId)
        Return a flag whether the given parent id appears in the shared set.
        Parameters:
        parentId - parent id
        Returns:
        true if the parent id appears in the shared set; false otherwise.
      • 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 is 0, 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 of Names 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 of Names 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 that node1 has 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 NodeStateListener we remember it as well.

        Overrides:
        setContainer in class ItemState
        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:
        calculateMemoryFootprint in class ItemState
        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