
package usda.weru.util.tree;

import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.MutableTreeNode;

/**
 *
 * @author Joseph Levin <joelevin@weru.ksu.edu>
 */
public abstract class AbstractLazyLoadingTreeNode extends DefaultMutableTreeNode implements LazyLoadingTreeNode{

    protected static final long serialVersionUID = -4298474751201349152L;
    protected boolean c_childrenLoaded;

    public AbstractLazyLoadingTreeNode() {
        c_childrenLoaded=false;
        setAllowsChildren(true);
    }

    @Override
    public boolean isLeaf() {
        return !getAllowsChildren();
    }

    @Override
    public MutableTreeNode[] loadChildren() {
        MutableTreeNode[] createdChildren = createChildren();
        if(createdChildren != null && createdChildren.length > 0){
            c_childrenLoaded = true;
        }
        return createdChildren;
    }

    protected abstract MutableTreeNode[] createChildren();

    @Override
    public boolean getChildrenLoaded() {
        return c_childrenLoaded;
    }
}
