All Downloads are FREE. Search and download functionalities are using the official Maven repository.

ru.sbtqa.monte.media.gui.tree.TreeNodeImpl Maven / Gradle / Ivy

There is a newer version: 1.1.0-JAVA7
Show newest version
/* @(#)MutableTreeNodeEx.java
 * Copyright © 2001-2011 Werner Randelshofer, Switzerland.
 * You may only use this software in accordance with the license terms.
 */
package ru.sbtqa.monte.media.gui.tree;

import static java.util.Collections.EMPTY_LIST;
import static java.util.Collections.unmodifiableList;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.List;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.MutableTreeNode;
import javax.swing.tree.TreeNode;
import ru.sbtqa.monte.media.util.EnumerationIterator;

/**
 * Extends {@code DefaultMutableTreeNode} with type safe collections. This class
 * only allows nodes of type DefaultMutableTreeNodeEx.
 *
 * @author Werner Randelshofer
 * @version 1.0 2013-12-02 Created.
 * @param  TODO
 */
public class TreeNodeImpl> extends DefaultMutableTreeNode {

    private final static long serialVersionUID = 1L;

    public TreeNodeImpl(Object userObject, boolean allowsChildren) {
        super(userObject, allowsChildren);
    }

    public TreeNodeImpl(Object userObject) {
        super(userObject);
    }

    public TreeNodeImpl() {
    }

    @Override
    @SuppressWarnings("unchecked")
    public void add(MutableTreeNode newChild) {
        add((T) newChild);
    }

    public Iterable breadthFirstIterable() {
        return new Iterable() {

            @Override
            @SuppressWarnings("unchecked")
            public Iterator iterator() {
                return new EnumerationIterator<>((Enumeration) (Enumeration) breadthFirstEnumeration());
            }

        };
    }

    @SuppressWarnings("unchecked")
    public List getChildren() {
        if (children == null) {
            return EMPTY_LIST;
        } else {
            return unmodifiableList((List) (List) children);
        }
    }

    @Override
    @SuppressWarnings("unchecked")
    public T clone() {
        return (T) super.clone();
    }

    public Iterable depthFirstIterable() {
        return new Iterable() {

            @Override
            @SuppressWarnings("unchecked")
            public Iterator iterator() {
                return new EnumerationIterator<>((Enumeration) (Enumeration) depthFirstEnumeration());
            }

        };
    }

    @Override
    public boolean getAllowsChildren() {
        return super.getAllowsChildren();
    }

    @Override
    @SuppressWarnings("unchecked")
    public T getChildAfter(TreeNode aChild) {
        return (T) super.getChildAfter(aChild);
    }

    @Override
    @SuppressWarnings("unchecked")
    public T getChildAt(int index) {
        return (T) super.getChildAt(index);
    }

    @Override
    @SuppressWarnings("unchecked")
    public T getChildBefore(TreeNode aChild) {
        return (T) super.getChildBefore(aChild);
    }

    @Override
    @SuppressWarnings("unchecked")
    public T getFirstChild() {
        return (T) super.getFirstChild();
    }

    @Override
    @SuppressWarnings("unchecked")
    public T getFirstLeaf() {
        return (T) super.getFirstLeaf();
    }

    @Override
    public int getIndex(TreeNode aChild) {
        return super.getIndex(aChild);
    }

    @Override
    @SuppressWarnings("unchecked")
    public T getLastChild() {
        return (T) super.getLastChild();
    }

    @Override
    @SuppressWarnings("unchecked")
    public T getLastLeaf() {
        return (T) super.getLastLeaf();
    }

    @Override
    @SuppressWarnings("unchecked")
    public T getNextLeaf() {
        return (T) super.getNextLeaf();
    }

    @Override
    @SuppressWarnings("unchecked")
    public T getNextNode() {
        return (T) super.getNextNode();
    }

    @Override
    @SuppressWarnings("unchecked")
    public T getNextSibling() {
        return (T) super.getNextSibling();
    }

    @Override
    @SuppressWarnings("unchecked")
    public T getParent() {
        return (T) super.getParent();
    }

    @Override
    public TreeNode[] getPath() {
        return getPathToRootEx(this, 0);
    }

    protected TreeNode[] getPathToRootEx(TreeNodeImpl aNode, int depth) {
        TreeNode[] retNodes;

        /* Check for null, in case someone passed in a null node, or
	   they passed in an element that isn't rooted at root. */
        if (aNode == null) {
            if (depth == 0) {
                return null;
            } else {
                retNodes = new TreeNode[depth];
            }
        } else {
            depth++;
            retNodes = getPathToRootEx(aNode.getParent(), depth);
            retNodes[retNodes.length - depth] = aNode;
        }
        return retNodes;
    }

    @Override
    @SuppressWarnings("unchecked")
    public T getPreviousLeaf() {
        return (T) super.getPreviousLeaf();
    }

    @Override
    @SuppressWarnings("unchecked")
    public T getPreviousNode() {
        return (T) super.getPreviousNode();
    }

    @Override
    @SuppressWarnings("unchecked")
    public T getPreviousSibling() {
        return (T) super.getPreviousSibling();
    }

    @Override
    @SuppressWarnings("unchecked")
    public T getRoot() {
        return (T) super.getRoot();
    }

    @Override
    @SuppressWarnings("unchecked")
    public T getSharedAncestor(DefaultMutableTreeNode aNode) {
        return (T) super.getSharedAncestor(aNode);
    }

    @Override
    @SuppressWarnings("unchecked")
    public void insert(MutableTreeNode newChild, int childIndex) {
        super.insert((T) newChild, childIndex);
    }

    public Iterable pathFromAncestorIterable(final TreeNode ancestor) {
        return () -> new EnumerationIterator<>((Enumeration) (Enumeration) pathFromAncestorEnumeration(ancestor));
    }

    public Iterable postorderIterable() {
        return () -> new EnumerationIterator<>((Enumeration) (Enumeration) postorderEnumeration());
    }

    public Iterable preorderIterable() {
        return () -> new EnumerationIterator<>((Enumeration) (Enumeration) preorderEnumeration());
    }

    @Override
    @SuppressWarnings("unchecked")
    public void setParent(MutableTreeNode newParent) {
        super.setParent((T) newParent);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy