Package com.salas.bb.utils.uif.treetable

Source Code of com.salas.bb.utils.uif.treetable.AbstractTreeTableModel

// BlogBridge -- RSS feed reader, manager, and web based service
// Copyright (C) 2002-2006 by R. Pito Salas
//
// This program is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free Software Foundation;
// either version 2 of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
// without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License along with this program;
// if not, write to the Free Software Foundation, Inc., 59 Temple Place,
// Suite 330, Boston, MA 02111-1307 USA
//
// Contact: R. Pito Salas
// mailto:pitosalas@users.sourceforge.net
// More information: about BlogBridge
// http://www.blogbridge.com
// http://sourceforge.net/projects/blogbridge
//
// $Id: AbstractTreeTableModel.java,v 1.4 2006/01/08 05:05:23 kyank Exp $
//

package com.salas.bb.utils.uif.treetable;

import EDU.oswego.cs.dl.util.concurrent.CopyOnWriteArrayList;

import javax.swing.event.TreeModelEvent;
import javax.swing.event.TreeModelListener;
import javax.swing.tree.TreePath;
import java.util.ArrayList;
import java.util.List;
import java.util.Collections;
import java.util.Iterator;

/**
* Abstract model for tree-table.
*/
public abstract class AbstractTreeTableModel implements TreeTableModel
{
    protected final List listeners = new CopyOnWriteArrayList();
    protected final Object root;

    /**
     * Creates model with given root.
     *
     * @param root root of tree.
     */
    public AbstractTreeTableModel(Object root)
    {
        this.root = root;
    }

    /**
     * Returns root of tree.
     *
     * @return root.
     */
    public Object getRoot()
    {
        return root;
    }

    /**
     * Returns TRUE if nonde is leaf.
     *
     * @param node node to check.
     *
     * @return TRUE if node is leaf.
     */
    public boolean isLeaf(Object node)
    {
        return getChildCount(node) == 0;
    }

    /**
     * Messaged when the user has altered the value for the item identified
     * by <code>path</code> to <code>newValue</code>.
     * If <code>newValue</code> signifies a truly new value
     * the model should post a <code>treeNodesChanged</code> event.
     *
     * @param path     path to the node that the user has altered
     * @param newValue the new value from the TreeCellEditor
     */
    public void valueForPathChanged(TreePath path, Object newValue)
    {
    }

    /**
     * Returns the index of child in parent.  If <code>parent</code>
     * is <code>null</code> or <code>child</code> is <code>null</code>,
     * returns -1.
     *
     * @param parent a note in the tree, obtained from this data source
     * @param child  the node we are interested in
     * @return the index of the child in the parent, or -1 if either
     *         <code>child</code> or <code>parent</code> are <code>null</code>
     */
    public int getIndexOfChild(Object parent, Object child)
    {
        for (int i = 0; i < getChildCount(parent); i++)
        {
            if (getChild(parent, i).equals(child))
            {
                return i;
            }
        }
        return -1;
    }

    /**
     * Adds a listener for the <code>TreeModelEvent</code> posted after the tree changes.
     *
     * @param l the listener to add
     * @see #removeTreeModelListener
     */
    public void addTreeModelListener(TreeModelListener l)
    {
        listeners.add(l);
    }

    /**
     * Removes a listener previously added with <code>addTreeModelListener</code>.
     *
     * @param l the listener to remove
     * @see #addTreeModelListener
     */
    public void removeTreeModelListener(TreeModelListener l)
    {
        listeners.remove(l);
    }

    /**
     * Notifies listeners when nodes change.
     *
     * @param source        source of event.
     * @param path          path from root to the containing node.
     * @param childIndices  indicies of changed children.
     * @param children      changed children.
     */
    protected void fireTreeNodesChanged(Object source, Object[] path, int[] childIndices,
                                        Object[] children)
    {
        TreeModelEvent e = new TreeModelEvent(source, path, childIndices, children);
        Iterator iterator = listeners.iterator();
        while (iterator.hasNext())
        {
            TreeModelListener listener = (TreeModelListener)iterator.next();
            listener.treeNodesChanged(e);
        }
    }

    /**
     * Notifies listeners when nodes are inserted.
     *
     * @param source        source of event.
     * @param path          path from root to the containing node.
     * @param childIndices  indicies of inserted children.
     * @param children      inserted children.
     */
    protected void fireTreeNodesInserted(Object source, Object[] path, int[] childIndices,
                                         Object[] children)
    {
        TreeModelEvent e = new TreeModelEvent(source, path, childIndices, children);;
        Iterator iterator = listeners.iterator();
        while (iterator.hasNext())
        {
            TreeModelListener listener = (TreeModelListener)iterator.next();
            listener.treeNodesInserted(e);
        }
    }

    /**
     * Notifies listeners when nodes are removed.
     *
     * @param source        source of event.
     * @param path          path from root to the containing node.
     * @param childIndices  indicies of removed children.
     * @param children      removed children.
     */
    protected void fireTreeNodesRemoved(Object source, Object[] path, int[] childIndices,
                                        Object[] children)
    {
        TreeModelEvent e = new TreeModelEvent(source, path, childIndices, children);;
        Iterator iterator = listeners.iterator();
        while (iterator.hasNext())
        {
            TreeModelListener listener = (TreeModelListener)iterator.next();
            listener.treeNodesRemoved(e);
        }
    }

    /**
     * Notifies listeners when the structure changes..
     *
     * @param source        source of event.
     * @param path          path from root to the containing node.
     * @param childIndices  indicies of changed children.
     * @param children      changed children.
     */
    protected void fireTreeStructureChanged(Object source, Object[] path, int[] childIndices,
                                            Object[] children)
    {
        TreeModelEvent e = new TreeModelEvent(source, path, childIndices, children);;
        Iterator iterator = listeners.iterator();
        while (iterator.hasNext())
        {
            TreeModelListener listener = (TreeModelListener)iterator.next();
            listener.treeStructureChanged(e);
        }
    }

    /**
     * Returns the type for column number <code>column</code>.
     *
     * @return class.
     */
    public Class getColumnClass(int column)
    {
        return Object.class;
    }

    /**
     * By default, make the column with the Tree in it the only editable one.
     * Making this column editable causes the JTable to forward mouse
     * and keyboard events in the Tree column to the underlying JTree.
     */
    public boolean isCellEditable(Object node, int column)
    {
        return getColumnClass(column) == TreeTableModel.class;
    }

    /**
     * Sets the value for node <code>node</code>, at column number <code>column</code>.
     *
     * @param aValue        new value.
     * @param node          node to assign value to.
     * @param column        column to assign value at.
     */
    public void setValueAt(Object aValue, Object node, int column)
    {
    }
}

TOP

Related Classes of com.salas.bb.utils.uif.treetable.AbstractTreeTableModel

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.