// TreeTableModel.java
//
// Created: December 2005
//
// This file is a component of the BioMoby project.
// Copyright Martin Senger (martin.senger@gmail.com).
//

package org.biomoby.service.dashboard.treetable;

import javax.swing.tree.TreeModel;

/**
 * TreeTableModel is the model used by a JTreeTable. It extends
 * TreeModel to add methods for getting information about the set of
 * columns each node in the TreeTableModel may have. Each column, like
 * a column in a TableModel, has a name and a type associated with
 * it. Each node in the TreeTableModel can return a value for each of
 * the columns and set that value if isCellEditable() returns
 * true. <p>
 *
 * Inspired by <a
 * href="http://java.sun.com/products/jfc/tsc/articles/treetable1/index.html">http://java.sun.com/products/jfc/tsc/articles/treetable1/index.html</a>. <p>
 *
 * @author Philip Milne 
 * @author Scott Violet
 * @author <A HREF="mailto:martin.senger@gmail.com">Martin Senger</A>
 * @version $Id: TreeTableModel.java,v 1.1 2005/12/13 15:01:30 senger Exp $
 */
public interface TreeTableModel extends TreeModel {
    /**
     * Returns the number of available columns.
     */
    public int getColumnCount();

    /**
     * Returns the name for column number <code>column</code>.
     */
    public String getColumnName (int column);

    /**
     * Returns the type for column number <code>column</code>.
     */
    public Class getColumnClass (int column);

    /**
     * Returns the value to be displayed for node <code>node</code>, 
     * at column number <code>column</code>.
     */
    public Object getValueAt (Object node, int column);

    /**
     * Indicates whether the the value for node <code>node</code>, 
     * at column number <code>column</code> is editable.
     */
    public boolean isCellEditable (Object node, int column);

    /**
     * Sets the value for node <code>node</code>, 
     * at column number <code>column</code>.
     */
    public void setValueAt (Object aValue, Object node, int column);
}
