Interface StringTree<T>

  • Type Parameters:
    T - The leaf type
    All Known Implementing Classes:
    XmlTree

    public interface StringTree<T>
    An interface defining a structure with nodes, subnodes and leaves. This is a recursively defined datastructure, so each instance can be a tree or a leaf. Each is node is named with a String, and each leaf can contain a value of type T. Each non-leaf tree can have any number of subnodes, each identified by a String.
    • Method Detail

      • isLeaf

        boolean isLeaf()
        Returns true if this object is a leaf, and thus if getValue is legal.
        Returns:
        True if the implementing object is a leaf, false otherwise.
      • getValue

        T getValue​(String name)
        Get the value of a named sub-leaf.
        Parameters:
        name - Name of the sub-leaf to get the value of. These are strings, and as a shorthand may specify subtrees of subtrees by separating each level with '.', i.e. getSubtrees("subtree.subsubtree").
        Returns:
        The value of the named leaf of this Tree, if it exists.
        Throws:
        IllegalState - if this StringTree does not have exactly one leaf sub-node with the given name.
        ArgumentNotValid - if argument is null or empty.
      • getValue

        T getValue()
        Get the value of a leaf.
        Returns:
        The value of this Tree, if it is a leaf.
        Throws:
        IllegalState - if this StringTree is a node.
      • getSubTree

        StringTree<T> getSubTree​(String name)
        Get the only subtree with the given name.
        Parameters:
        name - The name of the subtree. These are strings, and as a shorthand may specify subtrees of subtrees by separating each level with '.', i.e. getSubtrees("subtree.subsubtree").
        Returns:
        The single subtree with the given name.
        Throws:
        IllegalState - if this object is a leaf or if there is not exactly one subtree with the given name.
        ArgumentNotValid - if argument is null or empty.
      • getSubTrees

        List<StringTree<T>> getSubTrees​(String name)
        Get the named subtrees.
        Parameters:
        name - The name of the subtrees. These are strings, and as a shorthand may specify subtrees of subtrees by separating each level with '.', i.e. getSubtrees("subtree.subsubtree").
        Returns:
        All subtrees with the given name, or an empty list for none.
        Throws:
        IllegalState - if this object is a leaf.
        ArgumentNotValid - if argument is null or empty.
      • getChildMultimap

        Map<String,​List<StringTree<T>>> getChildMultimap()
        Get a map of all direct children of this node.
        Returns:
        Map of children of this node, or an empty map for none.
        Throws:
        IllegalState - if this object is a leaf.
      • getChildMap

        Map<String,​StringTree<T>> getChildMap()
        Get a map of all direct subtrees, assuming that all subtrees are uniquely named.
        Returns:
        Map of all subtrees.
        Throws:
        IllegalState - if this object is a leaf or if there is more than one subtree with the same name.
      • getLeafMultimap

        Map<String,​List<T>> getLeafMultimap()
        Get a multimap of the names and values of all direct subtrees, assuming that all subtrees are leafs.
        Returns:
        Multimap from subtree names to values of their leaves.
        Throws:
        IllegalState - if this object is a leaf or if any of its children are not leaves.
      • getLeafMap

        Map<String,​T> getLeafMap()
        Get a map of the names and values of all subtrees, assuming that all subtrees are leafs and are uniquely named.
        Returns:
        Map from subtree names to values of their leaves.
        Throws:
        IllegalState - if this object is a leaf or if the subtrees are not uniquely named, or if any of its children are not leaves.