All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.barrybecker4.ui.xmlviewer.DomToTreeModelAdapter Maven / Gradle / Ivy

There is a newer version: 1.7
Show newest version
package com.barrybecker4.ui.xmlviewer;

import org.w3c.dom.Document;

import javax.swing.event.TreeModelEvent;
import javax.swing.event.TreeModelListener;
import javax.swing.tree.TreeModel;
import javax.swing.tree.TreePath;
import java.util.LinkedList;
import java.util.List;

/**
 * This adapter converts the current Document (a DOM) into
 * a JTree model.
 */
public class DomToTreeModelAdapter implements TreeModel {

    private Document document_;

    private List listenerList_ = new LinkedList();


    public DomToTreeModelAdapter(Document document) {
        document_ = document;
    }

    // Basic TreeModel operations
    @Override
    public Object getRoot() {
        return new AdapterNode(document_);
    }

    /**
     * Determines whether the icon shows up to the left.
     * @param node node to check to see if leaf
     * @return  true for any node with no children
     */
    @Override
    public boolean isLeaf(Object node) {
        AdapterNode n = (AdapterNode) node;
        return n.childCount() <= 0;
    }

    @Override
    public int getChildCount(Object parent) {
        AdapterNode node = (AdapterNode) parent;
        return node.childCount();
    }

    @Override
    public Object getChild(Object parent, int index) {
        AdapterNode node = (AdapterNode) parent;
        return node.child(index);
    }

    @Override
    public int getIndexOfChild(Object parent, Object child) {
        AdapterNode node = (AdapterNode) parent;
        return node.index((AdapterNode) child);
    }

    /**
     * No changes in the GUI.
     * @param path tre path
     * @param newValue new path value
     */
    @Override
    public void valueForPathChanged(TreePath path, Object newValue) {}

    /*
     * Use these methods to add and remove event listeners.
     * (Needed to satisfy TreeModel interface, but not used.)
     */
    @Override
    public void addTreeModelListener(TreeModelListener listener) {
        if ( listener != null  && ! listenerList_.contains( listener ) ) {
           listenerList_.add( listener );
        }
    }

    @Override
    public void removeTreeModelListener(TreeModelListener listener) {
        if ( listener != null ) {
           listenerList_.remove( listener );
        }
    }

    /**
     * Invoke these methods to inform listeners of changes.
     * (Not needed for this example.)
     * Methods taken from TreeModelSupport class described at
     *   http://java.sun.com/products/jfc/tsc/articles/jtree/index.html
     * That architecture (produced by Tom Santos and Steve Wilson)
     * is more elegant.
     */
    public void fireTreeNodesChanged( TreeModelEvent e ) {
        for ( TreeModelListener listener : listenerList_ ) {
          listener.treeNodesChanged( e );
        }
    }

    public void fireTreeNodesInserted( TreeModelEvent e ) {
        for ( TreeModelListener listener : listenerList_ ) {
          listener.treeNodesInserted( e );
        }
    }

    public void fireTreeNodesRemoved( TreeModelEvent e ) {
        for ( TreeModelListener listener : listenerList_ ) {
          listener.treeNodesRemoved( e );
        }
    }

    public void fireTreeStructureChanged( TreeModelEvent e ) {
        for ( TreeModelListener listener : listenerList_ ) {
          listener.treeStructureChanged( e );
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy