import java.util.Vector;
import dataccesstool.application.Host;
/**
 * A specific implementation of a DefaultTreeModel.
 * @author Randy Curnutt, Solutions Plus, Inc.
 */
public class DirectoryTreeModel extends javax.swing.tree.DefaultTreeModel
{

public DirectoryTreeModel() 
{
	this(new DirectoryTreeNode(Host.GetHostForName("C:"), "name") );  //TODO shouldn't be hardcoded?
	
}
public DirectoryTreeModel(DirectoryTreeNode root)
{
	this(root, false);
}
public DirectoryTreeModel(DirectoryTreeNode root, boolean asksAllowsChildren)
{
	super(root, asksAllowsChildren);
}
/**
 * DirectoryTreeModel constructor comment.
 * @param root javax.swing.tree.TreeNode
 */
public DirectoryTreeModel(javax.swing.tree.TreeNode root)
{
	super(root);
}
/**
 * DirectoryTreeModel constructor comment.
 * @param root javax.swing.tree.TreeNode
 * @param asksAllowsChildren boolean
 */
public DirectoryTreeModel(javax.swing.tree.TreeNode root, boolean asksAllowsChildren)
{
	super(root, asksAllowsChildren);
}
final public Object getChild(Object parent, int index)
{
	DirectoryTreeNode node = (DirectoryTreeNode) parent;
	if (node.getChildCount() == 0)
	{ //then node has no child or hasn't retrieved them
		if (node.hasRetrievedChildren())
		{
			return null;
		}
		else
		{
			Vector kids = node.getChildren(); //returns Vector of nodes
			int i = 0;
			for (java.util.Enumeration e = kids.elements(); e.hasMoreElements();)
			{
				DirectoryTreeNode child = (DirectoryTreeNode) e.nextElement();
				super.insertNodeInto(child, node, i);
				i++;
			}
			return super.getChild(node, index);
		}
	}
	else
	{
		return super.getChild(parent, index);
	}
}
final public int getChildCount(Object parent)
{
	DirectoryTreeNode node = (DirectoryTreeNode) parent;
	int childCount = super.getChildCount(node);
	if (childCount > 0)
		
		//then this  node knows its children already
		return childCount;
	else
	{ //either it hasn't gotten its children or has none
		if (node.hasRetrievedChildren())
		{
			return 0;
		}
		else
		{
			Vector kids = node.getChildren(); //returns Vector of nodes
			int i = 0;
			for (java.util.Enumeration e = kids.elements(); e.hasMoreElements();)
			{
				DirectoryTreeNode child = (DirectoryTreeNode) e.nextElement();
				super.insertNodeInto(child, node, i);
				i++;
			}
			return super.getChildCount(node);
		}
	}
}
final public boolean isLeaf(Object nodeObject)
{
	DirectoryTreeNode node = (DirectoryTreeNode) nodeObject;
	if (node.getChildCount() == 0)
	{ //then node has no child or hasn't retrieved them
		if (node.hasRetrievedChildren())
		{
			return true;
		}
	}
	return false;
}
}
