Class AbstractMutableTree

  • All Implemented Interfaces:
    Tree
    Direct Known Subclasses:
    NodeBuilderTree

    public abstract class AbstractMutableTree
    extends AbstractTree
    AbstractMutableTree extends AbstractTree with implementations for most write methods of Tree. Furthermore it handles the ordering of siblings.
    • Constructor Detail

      • AbstractMutableTree

        public AbstractMutableTree()
    • Method Detail

      • remove

        public boolean remove()
        Description copied from interface: Tree
        Remove this tree instance. This operation never succeeds for the root tree.
        Returns:
        true if the node was removed; false otherwise.
      • addChild

        @NotNull
        public @NotNull Tree addChild​(@NotNull
                                      @NotNull java.lang.String name)
                               throws java.lang.IllegalArgumentException
        Description copied from interface: Tree
        Add a child with the given name. Does nothing if such a child already exists.
        Parameters:
        name - name of the child. A valid name does not start with a colon, is not empty and does not contain a forward slash.
        Returns:
        the Tree instance of the child with the given name.
        Throws:
        java.lang.IllegalArgumentException - if name is not valid.
      • setOrderableChildren

        public void setOrderableChildren​(boolean enable)
        Description copied from interface: Tree
        Changes the nature of this tree such that the order of the children is kept stable. The expected behavior is as follows:

        1. Calling setOrderableChildren(true) on a tree the first time will stabilize the order of existing children. Any subsequent Tree.addChild(String) call is guaranteed to insert the new tree and the end of the child list.
        2. Calling setOrderableChildren(true) on a tree that already has its children ordered has no effect.
        3. Calling setOrderableChildren(false) on a tree that doesn't have ordered children has not effect
        4. Calling setOrderableChildren(false) on a tree with ordered children will remove the necessity to keep the child list stable. The order of children upon Tree.getChildren() is subsequently undefined.

        Calling Tree.orderBefore(String) on a tree, implicitly enables orderable children on the parent tree.

        Parameters:
        enable - Enable (or disable) orderable children for this tree.
      • updateChildOrder

        protected void updateChildOrder​(boolean force)
        Updates the child order to match any added or removed child nodes that are not yet reflected in the TreeConstants.OAK_CHILD_ORDER property. If the force flag is set, the child order is set in any case, otherwise only if the node already is orderable.
        Parameters:
        force - whether to add child order information if it doesn't exist
      • orderBefore

        public boolean orderBefore​(@Nullable
                                   @Nullable java.lang.String name)
        Description copied from interface: Tree
        Orders this Tree before the sibling tree with the given name. Calling this method for the first time on this Tree or any of its siblings will persist the current order of siblings and maintain it from this point on.
        Parameters:
        name - the name of the sibling node where this tree is ordered before. This tree will become the last sibling if name is null.
        Returns:
        false if there is no sibling with the given name or no reordering was performed; true otherwise.
      • setProperty

        public void setProperty​(@NotNull
                                @NotNull PropertyState property)
        Description copied from interface: Tree
        Set a property state
        Parameters:
        property - The property state to set
      • setProperty

        public <T> void setProperty​(@NotNull
                                    @NotNull java.lang.String name,
                                    @NotNull
                                    T value)
                             throws java.lang.IllegalArgumentException
        Description copied from interface: Tree
        Set a property state
        Type Parameters:
        T - The type of this property. Must be one of String, Blob, byte[], Long, Integer, Double, Boolean, BigDecimal
        Parameters:
        name - The name of this property. A valid name does not start with a colon, is not empty and does not contain a forward slash.
        value - The value of this property
        Throws:
        java.lang.IllegalArgumentException - if T is not one of the above types or if name is not valid.
      • setProperty

        public <T> void setProperty​(@NotNull
                                    @NotNull java.lang.String name,
                                    @NotNull
                                    T value,
                                    @NotNull
                                    @NotNull Type<T> type)
                             throws java.lang.IllegalArgumentException
        Description copied from interface: Tree
        Set a property state
        Type Parameters:
        T - The type of this property.
        Parameters:
        name - The name of this property. A valid name does not start with a colon, is not empty and does not contain a forward slash.
        value - The value of this property
        type - The type of this property.
        Throws:
        java.lang.IllegalArgumentException - if name is not valid.
      • removeProperty

        public void removeProperty​(@NotNull
                                   @NotNull java.lang.String name)
        Description copied from interface: Tree
        Remove the property with the given name. This method has no effect if a property of the given name does not exist.
        Parameters:
        name - The name of the property