package Darts;

import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;

/**
 * DartTree DartTreeModel
 * 
 * This "model" ties the database (DartDBNode) to the GUI (DartTree).
 * @author Anthony Mack
 *
 */

public class DartTreeModel extends DefaultTreeModel {


	//
	// Membor Data
	//
	private static final long serialVersionUID = 18345L;
	
	//
	// Methods
	//
	/**
	 * Constructor:
	 */
	public DartTreeModel(DartDBNode rootNode) {
		super( rootNode );
	}

	public void DBNodeWasInsered( DartDBNode newNode ) {
		System.out.println( " DBNodeWasInsered(" + newNode + ") and parent is: " + newNode.getParent() );
		super.fireTreeNodesInserted(
			newNode.getParent(), 					    // Parent of new node
			((DartDBNode)newNode.getParent()).getPath(), 			// Path to parent node
			new int[]{newNode.getParent().getIndex(newNode)},// Indice of new child
			new Object[] {newNode} );					// The new node
	}
	
	public void DBNodeWillBeRemoved( DartDBNode doomedNode ) {
		System.out.println( " DBNodeWillBeRemoved(" + doomedNode + ") and parent is: " + doomedNode.getParent() );
		super.fireTreeNodesRemoved(
			doomedNode.getParent(), 					    // Parent of removed node
			((DartDBNode)doomedNode.getParent()).getPath(), 			// Path to parent node
			new int[]{doomedNode.getParent().getIndex(doomedNode)},// Indice of doomed child
			new Object[] {doomedNode} );					// The doomed node
	}
	
	//
	// TreeModel Methods
	//

	@Override
	public void valueForPathChanged( TreePath path, Object newValue ) {
		super.valueForPathChanged( path, newValue );
		DartDBNode node = (DartDBNode)path.getLastPathComponent();
		node.setName( (String)newValue );
	    super.nodeChanged( node );
	}

}
