Class DelegatingDocumentNodeState

All Implemented Interfaces:
NodeState

public class DelegatingDocumentNodeState extends AbstractDocumentNodeState
NodeState wrapper which wraps another NodeState (mostly SegmentNodeState) so as to expose it as an AbstractDocumentNodeState by extracting the meta properties which are stored as hidden properties
  • Field Details

  • Method Details

    • wrapIfPossible

      public static NodeState wrapIfPossible(NodeState delegate, NodeStateDiffer differ)
      Wraps a given root NodeState as a DelegatingDocumentNodeState if it has required meta properties otherwise just returns the passed NodeState
      Parameters:
      delegate - nodeState to wrap
      Returns:
      wrapped state or original state
    • hasMetaProps

      public static boolean hasMetaProps(NodeState delegate)
    • wrap

      public static AbstractDocumentNodeState wrap(NodeState delegate, NodeStateDiffer differ)
    • getPath

      public Path getPath()
      Specified by:
      getPath in class AbstractDocumentNodeState
    • getLastRevision

      public RevisionVector getLastRevision()
      Specified by:
      getLastRevision in class AbstractDocumentNodeState
    • getRootRevision

      public RevisionVector getRootRevision()
      Specified by:
      getRootRevision in class AbstractDocumentNodeState
    • isFromExternalChange

      public boolean isFromExternalChange()
      Specified by:
      isFromExternalChange in class AbstractDocumentNodeState
    • withRootRevision

      public AbstractDocumentNodeState withRootRevision(@NotNull @NotNull RevisionVector root, boolean externalChange)
      Description copied from class: AbstractDocumentNodeState
      Creates a copy of this DocumentNodeState with the AbstractDocumentNodeState.getRootRevision() set to the given root revision. This method returns this instance if the given root revision is the same as the one in this instance and the AbstractDocumentNodeState.isFromExternalChange() flags are equal.
      Specified by:
      withRootRevision in class AbstractDocumentNodeState
      Parameters:
      root - the root revision for the copy of this node state.
      externalChange - if the AbstractDocumentNodeState.isFromExternalChange() flag must be set on the returned node state.
      Returns:
      a copy of this node state with the given root revision and external change flag.
    • hasNoChildren

      public boolean hasNoChildren()
      Specified by:
      hasNoChildren in class AbstractDocumentNodeState
    • getNodeStateDiffer

      protected NodeStateDiffer getNodeStateDiffer()
      Specified by:
      getNodeStateDiffer in class AbstractDocumentNodeState
    • exists

      public boolean exists()
      Description copied from interface: NodeState
      Checks whether this node exists. See the above discussion about the existence of node states.
      Returns:
      true if this node exists, false if not
    • getProperties

      @NotNull public @NotNull Iterable<? extends PropertyState> getProperties()
      Description copied from interface: NodeState
      Returns an iterable of the properties of this node. Multiple iterations are guaranteed to return the properties in the same order, but the specific order used is implementation-dependent and may change across different states of the same node.
      Returns:
      properties in some stable order
    • hasChildNode

      public boolean hasChildNode(@NotNull @NotNull String name)
      Description copied from interface: NodeState
      Checks whether the named child node exists. The implementation is equivalent to getChildNode(name).exists(), except that passing an invalid name as argument will result in a false return value instead of an IllegalArgumentException.
      Parameters:
      name - name of the child node
      Returns:
      true if the named child node exists, false otherwise
    • getChildNode

      @NotNull public @NotNull NodeState getChildNode(@NotNull @NotNull String name) throws IllegalArgumentException
      Description copied from interface: NodeState
      Returns the named, possibly non-existent, child node. Use the NodeState.exists() method on the returned child node to determine whether the node exists or not.
      Parameters:
      name - name of the child node to return
      Returns:
      named child node
      Throws:
      IllegalArgumentException - if the given name string is is empty or contains a forward slash character
    • getChildNodeEntries

      @NotNull public @NotNull Iterable<? extends ChildNodeEntry> getChildNodeEntries()
      Description copied from interface: NodeState
      Returns the iterable child node entries of this instance. Multiple iterations are guaranteed to return the child nodes in the same order, but the specific order used is implementation dependent and may change across different states of the same node.

      Note on cost and performance: while it is possible to iterate over all child NodeStates with the two methods NodeState.getChildNodeNames() and NodeState.getChildNode(String), this method is considered more efficient because an implementation can potentially perform the retrieval of the name and NodeState in one call. This results in O(n) vs. O(n log n) when iterating over the child node names and then look up the NodeState by name.

      Returns:
      child node entries in some stable order
    • builder

      @NotNull public @NotNull NodeBuilder builder()
      Description copied from interface: NodeState
      Returns a builder for constructing a new node state based on this state, i.e. starting with all the properties and child nodes of this state.
      Returns:
      node builder based on this state
    • getProperty

      public PropertyState getProperty(@NotNull @NotNull String name)
      Description copied from interface: NodeState
      Returns the named property, or null if no such property exists.
      Specified by:
      getProperty in interface NodeState
      Overrides:
      getProperty in class AbstractNodeState
      Parameters:
      name - name of the property to return
      Returns:
      named property, or null if not found
    • getPropertyCount

      public long getPropertyCount()
      Description copied from interface: NodeState
      Returns the number of properties of this node.
      Specified by:
      getPropertyCount in interface NodeState
      Overrides:
      getPropertyCount in class AbstractNodeState
      Returns:
      number of properties
    • hasProperty

      public boolean hasProperty(@NotNull @NotNull String name)
      Description copied from interface: NodeState
      Checks whether the named property exists. The implementation is equivalent to getProperty(name) != null, but may be optimized to avoid having to load the property value.
      Specified by:
      hasProperty in interface NodeState
      Overrides:
      hasProperty in class AbstractNodeState
      Parameters:
      name - property name
      Returns:
      true if the named property exists, false otherwise
    • getBoolean

      public boolean getBoolean(@NotNull @NotNull String name)
      Description copied from interface: NodeState
      Returns the boolean value of the named property. The implementation is equivalent to the following code, but may be optimized.
       
       PropertyState property = state.getProperty(name);
       return property != null
           && property.getType() == Type.BOOLEAN
           && property.getValue(Type.BOOLEAN);
       
       
      Specified by:
      getBoolean in interface NodeState
      Overrides:
      getBoolean in class AbstractNodeState
      Parameters:
      name - property name
      Returns:
      boolean value of the named property, or false
    • getLong

      public long getLong(String name)
      Description copied from interface: NodeState
      Returns the long value of the named property. The implementation is equivalent to the following code, but may be optimized.
       
       PropertyState property = state.getProperty(name);
       if (property != null && property.getType() == Type.LONG) {
           return property.getValue(Type.LONG);
       } else {
           return 0;
       }
       
       
      Specified by:
      getLong in interface NodeState
      Overrides:
      getLong in class AbstractNodeState
      Parameters:
      name - property name
      Returns:
      long value of the named property, or zero
    • getString

      public String getString(String name)
      Description copied from interface: NodeState
      Returns the string value of the named property. The implementation is equivalent to the following code, but may be optimized.
       
       PropertyState property = state.getProperty(name);
       if (property != null && property.getType() == Type.STRING) {
           return property.getValue(Type.STRING);
       } else {
           return null;
       }
       
       
      Specified by:
      getString in interface NodeState
      Overrides:
      getString in class AbstractNodeState
      Parameters:
      name - property name
      Returns:
      string value of the named property, or null
    • getStrings

      @NotNull public @NotNull Iterable<String> getStrings(@NotNull @NotNull String name)
      Description copied from interface: NodeState
      Returns the string values of the named property. The implementation is equivalent to the following code, but may be optimized.
       
       PropertyState property = state.getProperty(name);
       if (property != null && property.getType() == Type.STRINGS) {
           return property.getValue(Type.STRINGS);
       } else {
           return Collections.emptyList();
       }
       
       
      Specified by:
      getStrings in interface NodeState
      Overrides:
      getStrings in class AbstractNodeState
      Parameters:
      name - property name
      Returns:
      string values of the named property, or an empty collection
    • getName

      public String getName(@NotNull @NotNull String name)
      Description copied from interface: NodeState
      Returns the name value of the named property. The implementation is equivalent to the following code, but may be optimized.
       
       PropertyState property = state.getProperty(name);
       if (property != null && property.getType() == Type.NAME) {
           return property.getValue(Type.NAME);
       } else {
           return null;
       }
       
       
      Specified by:
      getName in interface NodeState
      Overrides:
      getName in class AbstractNodeState
      Parameters:
      name - property name
      Returns:
      name value of the named property, or null
    • getNames

      @NotNull public @NotNull Iterable<String> getNames(@NotNull @NotNull String name)
      Description copied from interface: NodeState
      Returns the name values of the named property. The implementation is equivalent to the following code, but may be optimized.
       
       PropertyState property = state.getProperty(name);
       if (property != null && property.getType() == Type.NAMES) {
           return property.getValue(Type.NAMES);
       } else {
           return Collections.emptyList();
       }
       
       
      Specified by:
      getNames in interface NodeState
      Overrides:
      getNames in class AbstractNodeState
      Parameters:
      name - property name
      Returns:
      name values of the named property, or an empty collection
    • getChildNodeCount

      public long getChildNodeCount(long max)
      Description copied from interface: NodeState
      Returns the number of iterable child nodes of this node.

      If an implementation knows the exact value, it returns it (even if the value is higher than max). If the implementation does not know the exact value, and the child node count is higher than max, it may return Long.MAX_VALUE. The cost of the operation is at most O(max).

      Specified by:
      getChildNodeCount in interface NodeState
      Overrides:
      getChildNodeCount in class AbstractNodeState
      Parameters:
      max - the maximum number of entries to traverse
      Returns:
      number of iterable child nodes
    • getChildNodeNames

      public Iterable<String> getChildNodeNames()
      Description copied from interface: NodeState
      Returns the names of all iterable child nodes.
      Specified by:
      getChildNodeNames in interface NodeState
      Overrides:
      getChildNodeNames in class AbstractNodeState
      Returns:
      child node names in some stable order