Class NodeFeature

    • Constructor Detail

      • NodeFeature

        public NodeFeature​(StateNode node)
        Creates a new feature for the given node.
        Parameters:
        node - the node which supports the feature
    • Method Detail

      • getNode

        public StateNode getNode()
        Gets the node that this feature belongs to.
        Returns:
        the node
      • collectChanges

        public abstract void collectChanges​(Consumer<NodeChange> collector)
        Collects all changes that are recorded for this feature.
        Parameters:
        collector - a consumer accepting node changes
      • generateChangesFromEmpty

        public abstract void generateChangesFromEmpty()
        Generates all changes that would be needed to take this node from its initial empty state to its current state.
      • attachPotentialChild

        protected void attachPotentialChild​(Object child)
        Attaches an object if it is a StateNode.
        Parameters:
        child - the instance to maybe attach
      • detatchPotentialChild

        protected void detatchPotentialChild​(Object child)
        Detaches an object if it is a StateNode.
        Parameters:
        child - the instance to maybe detach
      • forEachChild

        public abstract void forEachChild​(Consumer<StateNode> action)
        Passes each child node instance to the given consumer.
        Parameters:
        action - the consumer that accepts each child
      • onAttach

        public void onAttach​(boolean initialAttach)
        Called when the state node has been attached to the state tree.
        Parameters:
        initialAttach - true if this is the first time the node is attached to a StateTree, false otherwise
      • onDetach

        public void onDetach()
        Called when the state node has been detached from the state tree.
      • allowsChanges

        public boolean allowsChanges()
        Returns true if the underlying node may report its changes.

        If its return value is false then this node should be considered as "inactive" and should not send any changes to the client side at all or only changes for features that disallow the changes.

        Normally features don't control the node behavior so the default implementation returns true. The feature which wants to control the node behavior should override this method.

        Returns:
        true if the feature allows changes for the node, false otherwise
        See Also:
        StateNode.updateActiveState()