xy.reflect.ui.util.component.AbstractLazyTreeNode Maven / Gradle / Ivy
/*******************************************************************************
* Copyright (C) 2018 OTK Software
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* The GNU General Public License allows you also to freely redistribute
* the libraries under the same license, if you provide the terms of the
* GNU General Public License with them and add the following
* copyright notice at the appropriate place (with a link to
* http://javacollection.net/reflectionui/ web site when possible).
******************************************************************************/
package xy.reflect.ui.util.component;
import java.util.Enumeration;
import java.util.List;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.MutableTreeNode;
import javax.swing.tree.TreeNode;
public abstract class AbstractLazyTreeNode extends DefaultMutableTreeNode {
protected static final long serialVersionUID = 1L;
protected boolean childrenLoaded = false;;
protected abstract List createChildrenNodes();
protected void ensureChildrenAreLoaded() {
if (childrenLoaded) {
return;
}
childrenLoaded = true;
int i = 0;
for (AbstractLazyTreeNode node: createChildrenNodes()) {
super.insert(node, i);
i++;
}
}
@Override
public int getIndex(TreeNode aChild) {
ensureChildrenAreLoaded();
return super.getIndex(aChild);
}
@Override
public TreeNode getChildAt(int index) {
ensureChildrenAreLoaded();
return super.getChildAt(index);
}
@Override
public int getChildCount() {
ensureChildrenAreLoaded();
return super.getChildCount();
}
@Override
public void insert(MutableTreeNode newChild, int childIndex) {
ensureChildrenAreLoaded();
super.insert(newChild, childIndex);
}
@Override
public void remove(int childIndex) {
ensureChildrenAreLoaded();
super.remove(childIndex);
}
@Override
public Enumeration children() {
ensureChildrenAreLoaded();
return super.children();
}
@Override
public void remove(MutableTreeNode aChild) {
ensureChildrenAreLoaded();
super.remove(aChild);
}
@Override
public void add(MutableTreeNode newChild) {
ensureChildrenAreLoaded();
super.add(newChild);
}
@Override
public boolean isNodeDescendant(DefaultMutableTreeNode anotherNode) {
ensureChildrenAreLoaded();
return super.isNodeDescendant(anotherNode);
}
@Override
public boolean isNodeRelated(DefaultMutableTreeNode aNode) {
ensureChildrenAreLoaded();
return super.isNodeRelated(aNode);
}
@Override
public int getDepth() {
ensureChildrenAreLoaded();
return super.getDepth();
}
@Override
public DefaultMutableTreeNode getNextNode() {
ensureChildrenAreLoaded();
return super.getNextNode();
}
@Override
public DefaultMutableTreeNode getPreviousNode() {
ensureChildrenAreLoaded();
return super.getPreviousNode();
}
@Override
public Enumeration preorderEnumeration() {
ensureChildrenAreLoaded();
return super.preorderEnumeration();
}
@Override
public Enumeration postorderEnumeration() {
ensureChildrenAreLoaded();
return super.postorderEnumeration();
}
@Override
public Enumeration breadthFirstEnumeration() {
ensureChildrenAreLoaded();
return super.breadthFirstEnumeration();
}
@Override
public Enumeration depthFirstEnumeration() {
ensureChildrenAreLoaded();
return super.depthFirstEnumeration();
}
@Override
public boolean isNodeChild(TreeNode aNode) {
ensureChildrenAreLoaded();
return super.isNodeChild(aNode);
}
@Override
public TreeNode getFirstChild() {
ensureChildrenAreLoaded();
return super.getFirstChild();
}
@Override
public TreeNode getLastChild() {
ensureChildrenAreLoaded();
return super.getLastChild();
}
@Override
public TreeNode getChildAfter(TreeNode aChild) {
ensureChildrenAreLoaded();
return super.getChildAfter(aChild);
}
@Override
public TreeNode getChildBefore(TreeNode aChild) {
ensureChildrenAreLoaded();
return super.getChildBefore(aChild);
}
@Override
public boolean isLeaf() {
ensureChildrenAreLoaded();
return super.isLeaf();
}
@Override
public DefaultMutableTreeNode getFirstLeaf() {
ensureChildrenAreLoaded();
return super.getFirstLeaf();
}
@Override
public DefaultMutableTreeNode getLastLeaf() {
ensureChildrenAreLoaded();
return super.getLastLeaf();
}
@Override
public DefaultMutableTreeNode getNextLeaf() {
ensureChildrenAreLoaded();
return super.getNextLeaf();
}
@Override
public DefaultMutableTreeNode getPreviousLeaf() {
ensureChildrenAreLoaded();
return super.getPreviousLeaf();
}
@Override
public int getLeafCount() {
ensureChildrenAreLoaded();
return super.getLeafCount();
}
@Override
public String toString() {
ensureChildrenAreLoaded();
return super.toString();
}
@Override
public Object clone() {
ensureChildrenAreLoaded();
return super.clone();
}
@Override
public int hashCode() {
ensureChildrenAreLoaded();
return super.hashCode();
}
@Override
public boolean equals(Object obj) {
ensureChildrenAreLoaded();
return super.equals(obj);
}
}