package baum;

import javax.swing.event.TreeModelListener;
import javax.swing.tree.TreeModel;
import javax.swing.tree.TreePath;

abstract public class BetterTreeModel<T> implements TreeModel{
	T root;
	
	public BetterTreeModel(T root) {
		super();
		this.root = root;
	}

	@Override
	public Object getRoot() {
		return root;
	}

	@Override
	public Object getChild(Object parent, int index) {
		return getChildNode((T)parent, index);
	}
	abstract public T getChildNode(T parent, int index);

	@Override
	public int getChildCount(Object parent) {
		return getChildrenSize((T)parent);
	}

	public abstract int getChildrenSize(T parent);

	@Override
	public boolean isLeaf(Object node) {
		return getChildCount(node)==0;
	}

	@Override
	public void valueForPathChanged(TreePath path, Object newValue) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public int getIndexOfChild(Object parent, Object child) {
		var p = (T)parent;
		for (var i = 0;i<getChildrenSize(p);i++) {
			if (getChildNode(p, i) == child) return i;
			i++;
		}
		return -1;
	}

	@Override
	public void addTreeModelListener(TreeModelListener l) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void removeTreeModelListener(TreeModelListener l) {
		// TODO Auto-generated method stub
		
	}
	
}
