This is an automated email from the git hooks/post-receive script.

ebourg-guest pushed a commit to branch master
in repository rhino.

commit 776f97e943f6ab1400ff9afc107c8c869cc987e1
Author: Emmanuel Bourg <[email protected]>
Date:   Thu Jan 19 16:58:43 2017 +0100

    Removed the out of tree debugger classes (merged upstream)
---
 debian/changelog                                   |   1 +
 debian/clean                                       |   1 -
 debian/rules                                       |  12 -
 .../AbstractCellEditor.java                        |  63 --
 .../AbstractTreeTableModel.java                    | 195 ------
 .../FileSystemModel2.java                          | 774 ---------------------
 .../JTreeTable.java                                | 356 ----------
 .../MergeSort.java                                 |  84 ---
 .../TreeTableExample2.java                         | 480 -------------
 .../TreeTableModel.java                            |  71 --
 .../TreeTableModelAdapter.java                     | 128 ----
 11 files changed, 1 insertion(+), 2164 deletions(-)

diff --git a/debian/changelog b/debian/changelog
index ef68801..9d3f0e2 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -10,6 +10,7 @@ rhino (1.7.7-1) UNRELEASED; urgency=medium
       and relocate the old coordinates rhino:js to org.mozilla:rhino
   * Removed the transitional package rhino-doc
   * Build with the DH sequencer instead of CDBS
+  * Removed the out of tree debugger classes (merged upstream)
   * Standards-Version updated to 3.9.8
   * Switch to debhelper level 10
   * Use secure Vcs-* URLs
diff --git a/debian/clean b/debian/clean
index c570052..567609b 100644
--- a/debian/clean
+++ b/debian/clean
@@ -1,2 +1 @@
-toolsrc/org/mozilla/javascript/tools/debugger/downloaded/*
 build/
diff --git a/debian/rules b/debian/rules
index fb00be3..191770d 100755
--- a/debian/rules
+++ b/debian/rules
@@ -7,18 +7,6 @@ BUILDDIR = build/rhino$(VERSION)
        dh $@ --with javahelper --with maven-repo-helper
 
 override_dh_auto_build:
-       # The upstream build file 
(toolsrc/org/mozilla/javascript/tools/debugger/build.xml)
-       # downloads a ZIP file containing some sample swing code, which is then 
modified
-       # and used as part of the debugger. This is obviously not permitted 
during a Debian build.
-       # Fortunately the sample code is DFSG-free, so it has been included in 
the debian
-       # directory (in its modified format).  Copying it to the "downloaded" 
directory
-       # prevents the upstream build.xml from attempting to download it.
-       mkdir -p toolsrc/org/mozilla/javascript/tools/debugger/downloaded
-       cp 
debian/src_from_treetable_article_see_bug409629/AbstractCellEditor.java    
toolsrc/org/mozilla/javascript/tools/debugger/downloaded/
-       cp debian/src_from_treetable_article_see_bug409629/JTreeTable.java      
      toolsrc/org/mozilla/javascript/tools/debugger/downloaded/
-       cp debian/src_from_treetable_article_see_bug409629/TreeTableModel.java  
      toolsrc/org/mozilla/javascript/tools/debugger/downloaded/
-       cp 
debian/src_from_treetable_article_see_bug409629/TreeTableModelAdapter.java 
toolsrc/org/mozilla/javascript/tools/debugger/downloaded/
-
        dh_auto_build -- jar javadoc
 
 override_mh_install:
diff --git 
a/debian/src_from_treetable_article_see_bug409629/AbstractCellEditor.java 
b/debian/src_from_treetable_article_see_bug409629/AbstractCellEditor.java
deleted file mode 100644
index 7acce07..0000000
--- a/debian/src_from_treetable_article_see_bug409629/AbstractCellEditor.java
+++ /dev/null
@@ -1,63 +0,0 @@
-
-         package org.mozilla.javascript.tools.debugger.downloaded;
-         import java.awt.Component;
-       
-import java.awt.event.*;
-import java.awt.AWTEvent;
-import javax.swing.*;
-import javax.swing.event.*;
-import java.util.EventObject;
-import java.io.Serializable;
-
-public class AbstractCellEditor implements CellEditor {
-
-    protected EventListenerList listenerList = new EventListenerList();
-
-    public Object getCellEditorValue() { return null; }
-    public boolean isCellEditable(EventObject e) { return true; }
-    public boolean shouldSelectCell(EventObject anEvent) { return false; }
-    public boolean stopCellEditing() { return true; }
-    public void cancelCellEditing() {}
-
-    public void addCellEditorListener(CellEditorListener l) {
-       listenerList.add(CellEditorListener.class, l);
-    }
-
-    public void removeCellEditorListener(CellEditorListener l) {
-       listenerList.remove(CellEditorListener.class, l);
-    }
-
-    /*
-     * Notify all listeners that have registered interest for
-     * notification on this event type.  
-     * @see EventListenerList
-     */
-    protected void fireEditingStopped() {
-       // Guaranteed to return a non-null array
-       Object[] listeners = listenerList.getListenerList();
-       // Process the listeners last to first, notifying
-       // those that are interested in this event
-       for (int i = listeners.length-2; i>=0; i-=2) {
-           if (listeners[i]==CellEditorListener.class) {
-               ((CellEditorListener)listeners[i+1]).editingStopped(new 
ChangeEvent(this));
-           }          
-       }
-    }
-
-    /*
-     * Notify all listeners that have registered interest for
-     * notification on this event type.  
-     * @see EventListenerList
-     */
-    protected void fireEditingCanceled() {
-       // Guaranteed to return a non-null array
-       Object[] listeners = listenerList.getListenerList();
-       // Process the listeners last to first, notifying
-       // those that are interested in this event
-       for (int i = listeners.length-2; i>=0; i-=2) {
-           if (listeners[i]==CellEditorListener.class) {
-               ((CellEditorListener)listeners[i+1]).editingCanceled(new 
ChangeEvent(this));
-           }          
-       }
-    }
-}
diff --git 
a/debian/src_from_treetable_article_see_bug409629/AbstractTreeTableModel.java 
b/debian/src_from_treetable_article_see_bug409629/AbstractTreeTableModel.java
deleted file mode 100644
index d120672..0000000
--- 
a/debian/src_from_treetable_article_see_bug409629/AbstractTreeTableModel.java
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
- * @(#)AbstractTreeTableModel.java     1.2 98/10/27
- *
- * Copyright 1997, 1998 by Sun Microsystems, Inc.,
- * 901 San Antonio Road, Palo Alto, California, 94303, U.S.A.
- * All rights reserved.
- *
- * This software is the confidential and proprietary information
- * of Sun Microsystems, Inc. ("Confidential Information").  You
- * shall not disclose such Confidential Information and shall use
- * it only in accordance with the terms of the license agreement
- * you entered into with Sun.
- */
-
-import javax.swing.tree.*;
-import javax.swing.event.*;
- 
-/**
- * @version 1.2 10/27/98
- * An abstract implementation of the TreeTableModel interface, handling the 
list 
- * of listeners. 
- * @author Philip Milne
- */
-
-public abstract class AbstractTreeTableModel implements TreeTableModel {
-    protected Object root;     
-    protected EventListenerList listenerList = new EventListenerList();
-  
-    public AbstractTreeTableModel(Object root) {
-        this.root = root; 
-    }
-
-    //
-    // Default implmentations for methods in the TreeModel interface. 
-    //
-
-    public Object getRoot() {
-        return root;
-    }
-
-    public boolean isLeaf(Object node) {
-        return getChildCount(node) == 0; 
-    }
-
-    public void valueForPathChanged(TreePath path, Object newValue) {}
-
-    // This is not called in the JTree's default mode: use a naive 
implementation. 
-    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; 
-    }
-
-    public void addTreeModelListener(TreeModelListener l) {
-        listenerList.add(TreeModelListener.class, l);
-    }
-
-    public void removeTreeModelListener(TreeModelListener l) {
-        listenerList.remove(TreeModelListener.class, l);
-    }
-
-    /*
-     * Notify all listeners that have registered interest for
-     * notification on this event type.  The event instance 
-     * is lazily created using the parameters passed into 
-     * the fire method.
-     * @see EventListenerList
-     */
-    protected void fireTreeNodesChanged(Object source, Object[] path, 
-                                        int[] childIndices, 
-                                        Object[] children) {
-        // Guaranteed to return a non-null array
-        Object[] listeners = listenerList.getListenerList();
-        TreeModelEvent e = null;
-        // Process the listeners last to first, notifying
-        // those that are interested in this event
-        for (int i = listeners.length-2; i>=0; i-=2) {
-            if (listeners[i]==TreeModelListener.class) {
-                // Lazily create the event:
-                if (e == null)
-                    e = new TreeModelEvent(source, path, 
-                                           childIndices, children);
-                ((TreeModelListener)listeners[i+1]).treeNodesChanged(e);
-            }          
-        }
-    }
-
-    /*
-     * Notify all listeners that have registered interest for
-     * notification on this event type.  The event instance 
-     * is lazily created using the parameters passed into 
-     * the fire method.
-     * @see EventListenerList
-     */
-    protected void fireTreeNodesInserted(Object source, Object[] path, 
-                                        int[] childIndices, 
-                                        Object[] children) {
-        // Guaranteed to return a non-null array
-        Object[] listeners = listenerList.getListenerList();
-        TreeModelEvent e = null;
-        // Process the listeners last to first, notifying
-        // those that are interested in this event
-        for (int i = listeners.length-2; i>=0; i-=2) {
-            if (listeners[i]==TreeModelListener.class) {
-                // Lazily create the event:
-                if (e == null)
-                    e = new TreeModelEvent(source, path, 
-                                           childIndices, children);
-                ((TreeModelListener)listeners[i+1]).treeNodesInserted(e);
-            }          
-        }
-    }
-
-    /*
-     * Notify all listeners that have registered interest for
-     * notification on this event type.  The event instance 
-     * is lazily created using the parameters passed into 
-     * the fire method.
-     * @see EventListenerList
-     */
-    protected void fireTreeNodesRemoved(Object source, Object[] path, 
-                                        int[] childIndices, 
-                                        Object[] children) {
-        // Guaranteed to return a non-null array
-        Object[] listeners = listenerList.getListenerList();
-        TreeModelEvent e = null;
-        // Process the listeners last to first, notifying
-        // those that are interested in this event
-        for (int i = listeners.length-2; i>=0; i-=2) {
-            if (listeners[i]==TreeModelListener.class) {
-                // Lazily create the event:
-                if (e == null)
-                    e = new TreeModelEvent(source, path, 
-                                           childIndices, children);
-                ((TreeModelListener)listeners[i+1]).treeNodesRemoved(e);
-            }          
-        }
-    }
-
-    /*
-     * Notify all listeners that have registered interest for
-     * notification on this event type.  The event instance 
-     * is lazily created using the parameters passed into 
-     * the fire method.
-     * @see EventListenerList
-     */
-    protected void fireTreeStructureChanged(Object source, Object[] path, 
-                                        int[] childIndices, 
-                                        Object[] children) {
-        // Guaranteed to return a non-null array
-        Object[] listeners = listenerList.getListenerList();
-        TreeModelEvent e = null;
-        // Process the listeners last to first, notifying
-        // those that are interested in this event
-        for (int i = listeners.length-2; i>=0; i-=2) {
-            if (listeners[i]==TreeModelListener.class) {
-                // Lazily create the event:
-                if (e == null)
-                    e = new TreeModelEvent(source, path, 
-                                           childIndices, children);
-                ((TreeModelListener)listeners[i+1]).treeStructureChanged(e);
-            }          
-        }
-    }
-
-    //
-    // Default impelmentations for methods in the TreeTableModel interface. 
-    //
-
-    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; 
-    }
-
-    public void setValueAt(Object aValue, Object node, int column) {}
-
-
-    // Left to be implemented in the subclass:
-
-    /* 
-     *   public Object getChild(Object parent, int index)
-     *   public int getChildCount(Object parent) 
-     *   public int getColumnCount() 
-     *   public String getColumnName(Object node, int column)  
-     *   public Object getValueAt(Object node, int column) 
-     */
-}
diff --git 
a/debian/src_from_treetable_article_see_bug409629/FileSystemModel2.java 
b/debian/src_from_treetable_article_see_bug409629/FileSystemModel2.java
deleted file mode 100644
index 5962f7a..0000000
--- a/debian/src_from_treetable_article_see_bug409629/FileSystemModel2.java
+++ /dev/null
@@ -1,774 +0,0 @@
-/*
- * FileSystemModel2.java
- *
- * Copyright (c) 1998 Sun Microsystems, Inc. All Rights Reserved.
- *
- * This software is the confidential and proprietary information of Sun
- * Microsystems, Inc. ("Confidential Information").  You shall not
- * disclose such Confidential Information and shall use it only in
- * accordance with the terms of the license agreement you entered into
- * with Sun.
- *
- * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE
- * SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
- * PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES
- * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING
- * THIS SOFTWARE OR ITS DERIVATIVES.
- *
- */
-
-import java.io.IOException;
-import java.io.File;
-import java.util.Date;
-import java.util.Stack;
-import javax.swing.SwingUtilities;
-import javax.swing.tree.TreePath;
-
-/**
- * FileSystemModel2 is a TreeTableModel representing a hierarchical file
- * system.<p>
- * This will recursively load all the children from the path it is
- * created with. The loading is done with the method reloadChildren, and
- * happens in another thread. The method isReloading can be invoked to check
- * if there are active threads. The total size of all the files are also
- * accumulated.
- * <p>
- * By default links are not descended. java.io.File does not have a way
- * to distinguish links, so a file is assumed to be a link if its canonical
- * path does not start with its parent path. This may not cover all cases,
- * but works for the time being.
- * <p>Reloading happens such that all the files of the directory are
- * loaded and immediately available. The background thread then recursively
- * loads all the files of each of those directories. When each directory has
- * finished loading all its sub files they are attached and an event is
- * generated in the event dispatching thread. A more ambitious approach
- * would be to attach each set of directories as they are loaded and generate
- * an event. Then, once all the direct descendants of the directory being
- * reloaded have finished loading, it is resorted based on total size.
- * <p>
- * While you can invoke reloadChildren as many times as you want, care
- * should be taken in doing this. You should not invoke reloadChildren
- * on a node that is already being reloaded, or going to be reloaded
- * (meaning its parent is reloading but it hasn't started reloading
- * that directory yet). If this is done odd results may
- * happen. FileSystemModel2 does not enforce any policy in this manner,
- * and it is up to the user of FileSystemModel2 to ensure it doesn't
- * happen.
- * 
- * @version 1.12 05/12/98
- * @author Philip Milne
- * @author Scott Violet
- */
-
-public class FileSystemModel2 extends AbstractTreeTableModel {
-
-    // Names of the columns.
-    static protected String[]  cNames = {"Name", "Size", "Type", "Modified"};
-
-    // Types of the columns.
-    static protected Class[]  cTypes = { TreeTableModel.class,
-                                        Integer.class, String.class,
-                                        Date.class};
-
-    // The the returned file length for directories. 
-    public static final Integer      ZERO = new Integer(0); 
-
-    /** An array of MergeSorter sorters, that will sort based on size. */
-    static Stack      sorters = new Stack();
-
-
-    /** True if the receiver is valid, once set to false all Threads
-     * loading files will stop. */
-    protected boolean                isValid;
-
-    /** Node currently being reloaded, this becomes somewhat muddy if
-     * reloading is happening in multiple threads. */
-    protected FileNode               reloadNode;
-
-    /** > 0 indicates reloading some nodes. */
-    int                              reloadCount;
-
-    /** Returns true if links are to be descended. */
-    protected boolean                descendLinks;
-
-
-    /**
-     * Returns a MergeSort that can sort on the totalSize of a FileNode.
-     */
-    protected static MergeSort getSizeSorter() {
-       synchronized(sorters) {
-           if (sorters.size() == 0) {
-               return new SizeSorter();
-           }
-           return (MergeSort)sorters.pop();
-       }
-    }
-
-    /**
-     * Should be invoked when a MergeSort is no longer needed.
-     */
-    protected static void recycleSorter(MergeSort sorter) {
-       synchronized(sorters) {
-           sorters.push(sorter);
-       }
-    }
-
-
-    /**
-     * Creates a FileSystemModel2 rooted at File.separator, which is usually
-     * the root of the file system. This does not load it, you should invoke
-     * <code>reloadChildren</code> with the root to start loading.
-     */
-    public FileSystemModel2() { 
-       this(File.separator);
-    }
-
-    /**
-     * Creates a FileSystemModel2 with the root being <code>rootPath</code>.
-     * This does not load it, you should invoke
-     * <code>reloadChildren</code> with the root to start loading.
-     */
-    public FileSystemModel2(String rootPath) { 
-       super(null);
-       isValid = true;
-       root = new FileNode(new File(rootPath));
-    }
-
-    //
-    // The TreeModel interface
-    //
-
-    /**
-     * Returns the number of children of <code>node</code>.
-     */
-    public int getChildCount(Object node) { 
-       Object[] children = getChildren(node); 
-       return (children == null) ? 0 : children.length;
-    }
-
-    /**
-     * Returns the child of <code>node</code> at index <code>i</code>.
-     */
-    public Object getChild(Object node, int i) { 
-       return getChildren(node)[i]; 
-    }
-
-    /**
-     * Returns true if the passed in object represents a leaf, false
-     * otherwise.
-     */
-    public boolean isLeaf(Object node) {
-       return ((FileNode)node).isLeaf();
-    }
-
-    //
-    //  The TreeTableNode interface. 
-    //
-
-    /**
-     * Returns the number of columns.
-     */
-    public int getColumnCount() {
-       return cNames.length;
-    }
-
-    /**
-     * Returns the name for a particular column.
-     */
-    public String getColumnName(int column) {
-       return cNames[column];
-    }
-
-    /**
-     * Returns the class for the particular column.
-     */
-    public Class getColumnClass(int column) {
-       return cTypes[column];
-    }
-
-    /**
-     * Returns the value of the particular column.
-     */
-    public Object getValueAt(Object node, int column) {
-       FileNode     fn = (FileNode)node;
-
-       try {
-           switch(column) {
-           case 0:
-               return fn.getFile().getName();
-           case 1:
-               if (fn.isTotalSizeValid()) {
-                   return new Integer((int)((FileNode)node).totalSize());
-               }
-               return null;
-           case 2:
-               return fn.isLeaf() ?  "File" : "Directory";
-           case 3:
-               return fn.lastModified();
-           }
-       }
-       catch  (SecurityException se) { }
-   
-       return null; 
-    }
-
-    //
-    // Some convenience methods. 
-    //
-
-    /**
-     * Reloads the children of the specified node.
-     */
-    public void reloadChildren(Object node) {
-       FileNode         fn = (FileNode)node;
-
-       synchronized(this) {
-           reloadCount++;
-       }
-       fn.resetSize();
-       new Thread(new FileNodeLoader((FileNode)node)).start();
-    }
-
-    /**
-     * Stops and waits for all threads to finish loading.
-     */
-    public void stopLoading() {
-       isValid = false;
-       synchronized(this) {
-           while (reloadCount > 0) {
-               try {
-                   wait();
-               } catch (InterruptedException ie) {}
-           }
-       }
-       isValid = true;
-    }
-
-    /**
-     * If <code>newValue</code> is true, links are descended. Odd results
-     * may happen if you set this while other threads are loading.
-     */
-    public void setDescendsLinks(boolean newValue) {
-       descendLinks = newValue;
-    }
-
-    /**
-     * Returns true if links are to be automatically descended.
-     */
-    public boolean getDescendsLinks() {
-       return descendLinks;
-    }
-
-    /**
-     * Returns the path <code>node</code> represents.
-     */
-    public String getPath(Object node) {
-       return ((FileNode)node).getFile().getPath();
-    }
-
-    /**
-     * Returns the total size of the receiver.
-     */
-    public long getTotalSize(Object node) {
-       return ((FileNode)node).totalSize();
-    }
-
-    /**
-     * Returns true if the receiver is loading any children.
-     */
-    public boolean isReloading() {
-       return (reloadCount > 0);
-    }
-
-    /**
-     * Returns the path to the node that is being loaded.
-     */
-    public TreePath getPathLoading() {
-       FileNode      rn = reloadNode;
-
-       if (rn != null) {
-           return new TreePath(rn.getPath());
-       }
-       return null;
-    }
-
-    /**
-     * Returns the node being loaded.
-     */
-    public Object getNodeLoading() {
-       return reloadNode;
-    }
-
-    protected File getFile(Object node) {
-       FileNode fileNode = ((FileNode)node); 
-       return fileNode.getFile();       
-    }
-
-    protected Object[] getChildren(Object node) {
-       FileNode fileNode = ((FileNode)node); 
-       return fileNode.getChildren(); 
-    }
-
-
-    protected static FileNode[] EMPTY_CHILDREN = new FileNode[0];
-
-    // Used to sort the file names.
-    static private MergeSort  fileMS = new MergeSort() {
-       public int compareElementsAt(int beginLoc, int endLoc) {
-           return ((String)toSort[beginLoc]).compareTo
-                           ((String)toSort[endLoc]);
-       }
-    };
-
-
-    /**
-     * A FileNode is a derivative of the File class - though we delegate to
-     * the File object rather than subclassing it. It is used to maintain a
-     * cache of a directory's children and therefore avoid repeated access
-     * to the underlying file system during rendering. 
-     */
-    class FileNode { 
-       /** java.io.File the receiver represents. */
-       protected File              file; 
-       /** Parent FileNode of the receiver. */
-       private FileNode            parent;
-       /** Children of the receiver. */
-       protected FileNode[]        children; 
-       /** Size of the receiver and all its children. */
-       protected long              totalSize;
-       /** Valid if the totalSize has finished being calced. */
-       protected boolean           totalSizeValid;
-       /** Path of the receiver. */
-       protected String            canonicalPath;
-       /** True if the canonicalPath of this instance does not start with
-        * the canonical path of the parent. */
-       protected boolean           isLink;
-       /** Date last modified. */
-       protected Date              lastModified;
-
-
-       protected FileNode(File file) { 
-           this(null, file);
-       }
-
-       protected FileNode(FileNode parent, File file) { 
-           this.parent = parent;
-           this.file = file;
-           try {
-               canonicalPath = file.getCanonicalPath();
-           }
-           catch (IOException ioe) {
-               canonicalPath = "";
-           }
-           if (parent != null) {
-               isLink = !canonicalPath.startsWith(parent.getCanonicalPath());
-           }
-           else {
-               isLink = false;
-           }
-           if (isLeaf()) {
-               totalSize = file.length();
-               totalSizeValid = true;
-           }
-       }
-
-       /**
-        * Returns the date the receiver was last modified.
-        */
-       public Date lastModified() {
-           if (lastModified == null && file != null) {
-               lastModified = new Date(file.lastModified());
-           }
-           return lastModified;
-       }
-
-       /**
-        * Returns the the string to be used to display this leaf in the JTree.
-        */
-       public String toString() { 
-           return file.getName();
-       }
-
-       /**
-        * Returns the java.io.File the receiver represents.
-        */
-       public File getFile() {
-           return file; 
-       }
-
-       /**
-        * Returns size of the receiver and all its children.
-        */
-       public long totalSize() {
-           return totalSize;
-       }
-
-       /**
-        * Returns the parent of the receiver.
-        */
-       public FileNode getParent() {
-           return parent;
-       }
-
-       /**
-        * Returns true if the receiver represents a leaf, that is it is
-        * isn't a directory.
-        */
-       public boolean isLeaf() {
-           return file.isFile();
-       }
-
-       /**
-        * Returns true if the total size is valid.
-        */
-       public boolean isTotalSizeValid() {
-           return totalSizeValid;
-       }
-
-       /**
-        * Clears the date.
-        */
-       protected void resetLastModified() {
-           lastModified = null;
-       }
-
-       /**
-        * Sets the size of the receiver to be 0.
-        */
-       protected void resetSize() {
-           alterTotalSize(-totalSize);
-       }
-
-       /**
-        * Loads the children, caching the results in the children
-        * instance variable.
-        */
-       protected FileNode[] getChildren() {
-           return children; 
-       }
-
-       /**
-        * Recursively loads all the children of the receiver.
-        */
-       protected void loadChildren(MergeSort sorter) {
-           totalSize = file.length();
-           children = createChildren(null);
-           for (int counter = children.length - 1; counter >= 0; counter--) {
-               Thread.yield(); // Give the GUI CPU time to draw itself.
-               if (!children[counter].isLeaf() &&
-                   (descendLinks || !children[counter].isLink())) {
-                   children[counter].loadChildren(sorter);
-               }
-               totalSize += children[counter].totalSize();
-               if (!isValid) {
-                   counter = 0;
-               }
-           }
-           if (isValid) {
-               if (sorter != null) {
-                   sorter.sort(children);
-               }
-               totalSizeValid = true;
-           }
-       }
-
-       /**
-        * Loads the children of of the receiver.
-        */
-       protected FileNode[] createChildren(MergeSort sorter) {
-           FileNode[]        retArray = null;
-
-           try {
-               String[] files = file.list();
-               if(files != null) {
-                   if (sorter != null) {
-                       sorter.sort(files); 
-                   }
-                   retArray = new FileNode[files.length]; 
-                   String path = file.getPath();
-                   for(int i = 0; i < files.length; i++) {
-                       File childFile = new File(path, files[i]); 
-                       retArray[i] = new FileNode(this, childFile);
-                   }
-               }
-           } catch (SecurityException se) {}
-           if (retArray == null) {
-               retArray = EMPTY_CHILDREN;
-           }
-           return retArray;
-       }
-
-       /**
-        * Returns true if the children have been loaded.
-        */
-       protected boolean loadedChildren() {
-           return (file.isFile() || (children != null));
-       }
-
-       /**
-        * Gets the path from the root to the receiver.
-        */
-       public FileNode[] getPath() {
-           return getPathToRoot(this, 0);
-       }
-
-       /**
-        * Returns the canonical path for the receiver.
-        */
-       public String getCanonicalPath() {
-           return canonicalPath;
-       }
-
-       /**
-        * Returns true if the receiver's path does not begin with the
-        * parent's canonical path.
-        */
-       public boolean isLink() {
-           return isLink;
-       }
-
-       protected FileNode[] getPathToRoot(FileNode aNode, int depth) {
-           FileNode[]              retNodes;
-
-           if(aNode == null) {
-               if(depth == 0)
-                   return null;
-               else
-                   retNodes = new FileNode[depth];
-           }
-           else {
-               depth++;
-               retNodes = getPathToRoot(aNode.getParent(), depth);
-               retNodes[retNodes.length - depth] = aNode;
-           }
-           return retNodes;
-       }
-
-       /**
-        * Sets the children of the receiver, updates the total size,
-        * and if generateEvent is true a tree structure changed event
-        * is created.
-        */
-       protected void setChildren(FileNode[] newChildren,
-                                  boolean generateEvent) {
-           long           oldSize = totalSize;
-
-           totalSize = file.length();
-           children = newChildren;
-           for (int counter = children.length - 1; counter >= 0;
-                counter--) {
-               totalSize += children[counter].totalSize();
-           }
-
-           if (generateEvent) {
-               FileNode[]   path = getPath();
-
-               fireTreeStructureChanged(FileSystemModel2.this, path, null,
-                                        null);
-
-               FileNode             parent = getParent();
-
-               if (parent != null) {
-                   parent.alterTotalSize(totalSize - oldSize);
-               }
-           }
-       }
-
-       protected synchronized void alterTotalSize(long sizeDelta) {
-           if (sizeDelta != 0 && (parent = getParent()) != null) {
-               totalSize += sizeDelta;
-               nodeChanged();
-               parent.alterTotalSize(sizeDelta);
-           }
-           else {
-               // Need a way to specify the root.
-               totalSize += sizeDelta;
-           }
-       }
-
-       /**
-        * This should only be invoked on the event dispatching thread.
-        */
-       protected synchronized void setTotalSizeValid(boolean newValue) {
-           if (totalSizeValid != newValue) {
-               nodeChanged();
-               totalSizeValid = newValue;
-
-               FileNode          parent = getParent();
-
-               if (parent != null) {
-                   parent.childTotalSizeChanged(this);
-               }
-           }
-       }
-
-       /**
-        * Marks the receivers total size as valid, but does not invoke
-        * node changed, nor message the parent.
-        */
-       protected synchronized void forceTotalSizeValid() {
-           totalSizeValid = true;
-       }
-
-       /**
-        * Invoked when a childs total size has changed.
-        */
-       protected synchronized void childTotalSizeChanged(FileNode child) {
-           if (totalSizeValid != child.isTotalSizeValid()) {
-               if (totalSizeValid) {
-                   setTotalSizeValid(false);
-               }
-               else {
-                   FileNode[]    children = getChildren();
-
-                   for (int counter = children.length - 1; counter >= 0;
-                        counter--) {
-                       if (!children[counter].isTotalSizeValid()) {
-                           return;
-                       }
-                   }
-                   setTotalSizeValid(true);
-               }
-           }
-           
-       }
-
-       /**
-        * Can be invoked when a node has changed, will create the
-        * appropriate event.
-        */
-       protected void nodeChanged() {
-           FileNode        parent = getParent();
-
-           if (parent != null) {
-               FileNode[]   path = parent.getPath();
-               int[]        index = { getIndexOfChild(parent, this) };
-               Object[]     children = { this };
-
-               fireTreeNodesChanged(FileSystemModel2.this, path,  index,
-                                    children);
-           }
-       }
-    }
-
-
-    /**
-     * FileNodeLoader can be used to reload all the children of a
-     * particular node. It first resets the children of the FileNode
-     * it is created with, and in its run method will reload all of
-     * that nodes children. FileNodeLoader may not be running in the event
-     * dispatching thread. As swing is not thread safe it is important
-     * that we don't generate events in this thread. SwingUtilities.invokeLater
-     * is used so that events are generated in the event dispatching thread.
-     */
-    class FileNodeLoader implements Runnable {
-       /** Node creating children for. */
-       FileNode          node;
-       /** Sorter. */
-       MergeSort         sizeMS;
-
-       FileNodeLoader(FileNode node) {
-           this.node = node;
-           node.resetLastModified();
-           node.setChildren(node.createChildren(fileMS), true);
-           node.setTotalSizeValid(false);
-       }
-
-       public void run() {
-           FileNode[]      children = node.getChildren();
-
-           sizeMS = getSizeSorter();
-           for (int counter = children.length - 1; counter >= 0; counter--) {
-               if (!children[counter].isLeaf()) {
-                   reloadNode = children[counter];
-                   loadChildren(children[counter]);
-                   reloadNode = null;
-               }
-               if (!isValid) {
-                   counter = 0;
-               }
-           }
-           recycleSorter(sizeMS);
-           if (isValid) {
-               SwingUtilities.invokeLater(new Runnable() {
-                   public void run() {
-                       MergeSort    sorter = getSizeSorter();
-
-                       sorter.sort(node.getChildren());
-                       recycleSorter(sorter);
-                       node.setChildren(node.getChildren(), true);
-                       synchronized(FileSystemModel2.this) {
-                           reloadCount--;
-                           FileSystemModel2.this.notifyAll();
-                       }
-                   }
-               });
-           }
-           else {
-               synchronized(FileSystemModel2.this) {
-                   reloadCount--;
-                   FileSystemModel2.this.notifyAll();
-               }
-           }
-       }
-
-       protected void loadChildren(FileNode node) {
-           if (!node.isLeaf() && (descendLinks || !node.isLink())) {
-               final FileNode[]      children = node.createChildren(null);
-
-               for (int counter = children.length - 1; counter >= 0;
-                    counter--) {
-                   if (!children[counter].isLeaf()) {
-                       if (descendLinks || !children[counter].isLink()) {
-                           children[counter].loadChildren(sizeMS);
-                       }
-                       else {
-                           children[counter].forceTotalSizeValid();
-                       }
-                   }
-                   if (!isValid) {
-                       counter = 0;
-                   }
-               }
-               if (isValid) {
-                   final FileNode       fn = node;
-
-                   // Reset the children 
-                   SwingUtilities.invokeLater(new Runnable() {
-                       public void run() {
-                           MergeSort    sorter = getSizeSorter();
-
-                           sorter.sort(children);
-                           recycleSorter(sorter);
-                           fn.setChildren(children, true);
-                           fn.setTotalSizeValid(true);
-                           fn.nodeChanged();
-                       }
-                   });
-               }
-           }
-           else {
-               node.forceTotalSizeValid();
-           }
-       }
-    }
-
-
-    /**
-     * Sorts the contents, which must be instances of FileNode based on
-     * totalSize.
-     */
-    static class SizeSorter extends MergeSort {
-       public int compareElementsAt(int beginLoc, int endLoc) {
-           long    firstSize = ((FileNode)toSort[beginLoc]).totalSize();
-           long    secondSize = ((FileNode)toSort[endLoc]).totalSize();
-
-           if (firstSize != secondSize) {
-               return (int)(secondSize - firstSize);
-           }
-           return ((FileNode)toSort[beginLoc]).toString().compareTo
-                   (((FileNode)toSort[endLoc]).toString());
-       }
-    }
-}
diff --git a/debian/src_from_treetable_article_see_bug409629/JTreeTable.java 
b/debian/src_from_treetable_article_see_bug409629/JTreeTable.java
deleted file mode 100644
index a74b873..0000000
--- a/debian/src_from_treetable_article_see_bug409629/JTreeTable.java
+++ /dev/null
@@ -1,356 +0,0 @@
-/*
- * @(#)JTreeTable.java 1.2 98/10/27
- *
- * Copyright 1997, 1998 by Sun Microsystems, Inc.,
- * 901 San Antonio Road, Palo Alto, California, 94303, U.S.A.
- * All rights reserved.
- *
- * This software is the confidential and proprietary information
- * of Sun Microsystems, Inc. ("Confidential Information").  You
- * shall not disclose such Confidential Information and shall use
- * it only in accordance with the terms of the license agreement
- * you entered into with Sun.
- */
-
-
-         package org.mozilla.javascript.tools.debugger.downloaded;
-         import javax.swing.*;
-       
-import javax.swing.event.*;
-import javax.swing.tree.*;
-import javax.swing.table.*;
-
-import java.awt.Dimension;
-import java.awt.Component;
-import java.awt.Graphics;
-import java.awt.Rectangle;
-
-import java.awt.event.MouseEvent;
-
-import java.util.EventObject;
-
-/**
- * This example shows how to create a simple JTreeTable component, 
- * by using a JTree as a renderer (and editor) for the cells in a 
- * particular column in the JTable.  
- *
- * @version 1.2 10/27/98
- *
- * @author Philip Milne
- * @author Scott Violet
- */
-public class JTreeTable extends JTable {
-    /** A subclass of JTree. */
-    protected TreeTableCellRenderer tree;
-
-    public JTreeTable(TreeTableModel treeTableModel) {
-       super();
-
-       // Create the tree. It will be used as a renderer and editor. 
-       tree = new TreeTableCellRenderer(treeTableModel);
-
-       // Install a tableModel representing the visible rows in the tree. 
-       super.setModel(new TreeTableModelAdapter(treeTableModel, tree));
-
-       // Force the JTable and JTree to share their row selection models. 
-       ListToTreeSelectionModelWrapper selectionWrapper = new 
-                               ListToTreeSelectionModelWrapper();
-       tree.setSelectionModel(selectionWrapper);
-       setSelectionModel(selectionWrapper.getListSelectionModel()); 
-
-       // Install the tree editor renderer and editor. 
-       setDefaultRenderer(TreeTableModel.class, tree); 
-       setDefaultEditor(TreeTableModel.class, new TreeTableCellEditor());
-
-       // No grid.
-       setShowGrid(false);
-
-       // No intercell spacing
-       setIntercellSpacing(new Dimension(0, 0));       
-
-       // And update the height of the trees row to match that of
-       // the table.
-       if (tree.getRowHeight() < 1) {
-           // Metal looks better like this.
-           setRowHeight(18);
-       }
-    }
-
-    /**
-     * Overridden to message super and forward the method to the tree.
-     * Since the tree is not actually in the component hieachy it will
-     * never receive this unless we forward it in this manner.
-     */
-    public void updateUI() {
-       super.updateUI();
-       if(tree != null) {
-           tree.updateUI();
-       }
-       // Use the tree's default foreground and background colors in the
-       // table. 
-        LookAndFeel.installColorsAndFont(this, "Tree.background",
-                                         "Tree.foreground", "Tree.font");
-    }
-
-    /* Workaround for BasicTableUI anomaly. Make sure the UI never tries to 
-     * paint the editor. The UI currently uses different techniques to 
-     * paint the renderers and editors and overriding setBounds() below 
-     * is not the right thing to do for an editor. Returning -1 for the 
-     * editing row in this case, ensures the editor is never painted. 
-     */
-    public int getEditingRow() {
-        return (getColumnClass(editingColumn) == TreeTableModel.class) ? -1 :
-               editingRow;  
-    }
-
-    /**
-     * Overridden to pass the new rowHeight to the tree.
-     */
-    public void setRowHeight(int rowHeight) { 
-        super.setRowHeight(rowHeight); 
-       if (tree != null && tree.getRowHeight() != rowHeight) {
-            tree.setRowHeight(getRowHeight()); 
-       }
-    }
-
-    /**
-     * Returns the tree that is being shared between the model.
-     */
-    public JTree getTree() {
-       return tree;
-    }
-
-    /**
-     * A TreeCellRenderer that displays a JTree.
-     */
-    public class TreeTableCellRenderer extends JTree implements
-                TableCellRenderer {
-       /** Last table/tree row asked to renderer. */
-       protected int visibleRow;
-
-       public TreeTableCellRenderer(TreeModel model) {
-           super(model); 
-       }
-
-       /**
-        * updateUI is overridden to set the colors of the Tree's renderer
-        * to match that of the table.
-        */
-       public void updateUI() {
-           super.updateUI();
-           // Make the tree's cell renderer use the table's cell selection
-           // colors. 
-           TreeCellRenderer tcr = getCellRenderer();
-           if (tcr instanceof DefaultTreeCellRenderer) {
-               DefaultTreeCellRenderer dtcr = ((DefaultTreeCellRenderer)tcr); 
-               // For 1.1 uncomment this, 1.2 has a bug that will cause an
-               // exception to be thrown if the border selection color is
-               // null.
-               // dtcr.setBorderSelectionColor(null);
-               dtcr.setTextSelectionColor(UIManager.getColor
-                                          ("Table.selectionForeground"));
-               dtcr.setBackgroundSelectionColor(UIManager.getColor
-                                               ("Table.selectionBackground"));
-           }
-       }
-
-       /**
-        * Sets the row height of the tree, and forwards the row height to
-        * the table.
-        */
-       public void setRowHeight(int rowHeight) { 
-           if (rowHeight > 0) {
-               super.setRowHeight(rowHeight); 
-               if (JTreeTable.this != null &&
-                   JTreeTable.this.getRowHeight() != rowHeight) {
-                   JTreeTable.this.setRowHeight(getRowHeight()); 
-               }
-           }
-       }
-
-       /**
-        * This is overridden to set the height to match that of the JTable.
-        */
-       public void setBounds(int x, int y, int w, int h) {
-           super.setBounds(x, 0, w, JTreeTable.this.getHeight());
-       }
-
-       /**
-        * Sublcassed to translate the graphics such that the last visible
-        * row will be drawn at 0,0.
-        */
-       public void paint(Graphics g) {
-           g.translate(0, -visibleRow * getRowHeight());
-           super.paint(g);
-       }
-
-       /**
-        * TreeCellRenderer method. Overridden to update the visible row.
-        */
-       public Component getTableCellRendererComponent(JTable table,
-                                                      Object value,
-                                                      boolean isSelected,
-                                                      boolean hasFocus,
-                                                      int row, int column) {
-           if(isSelected)
-               setBackground(table.getSelectionBackground());
-           else
-               setBackground(table.getBackground());
-
-           visibleRow = row;
-           return this;
-       }
-    }
-
-
-    /**
-     * TreeTableCellEditor implementation. Component returned is the
-     * JTree.
-     */
-    public class TreeTableCellEditor extends AbstractCellEditor implements
-                TableCellEditor {
-       public Component getTableCellEditorComponent(JTable table,
-                                                    Object value,
-                                                    boolean isSelected,
-                                                    int r, int c) {
-           return tree;
-       }
-
-       /**
-        * Overridden to return false, and if the event is a mouse event
-        * it is forwarded to the tree.<p>
-        * The behavior for this is debatable, and should really be offered
-        * as a property. By returning false, all keyboard actions are
-        * implemented in terms of the table. By returning true, the
-        * tree would get a chance to do something with the keyboard
-        * events. For the most part this is ok. But for certain keys,
-        * such as left/right, the tree will expand/collapse where as
-        * the table focus should really move to a different column. Page
-        * up/down should also be implemented in terms of the table.
-        * By returning false this also has the added benefit that clicking
-        * outside of the bounds of the tree node, but still in the tree
-        * column will select the row, whereas if this returned true
-        * that wouldn't be the case.
-        * <p>By returning false we are also enforcing the policy that
-        * the tree will never be editable (at least by a key sequence).
-        */
-       public boolean isCellEditable(EventObject e) {
-           if (e instanceof MouseEvent) {
-               for (int counter = getColumnCount() - 1; counter >= 0;
-                    counter--) {
-                   if (getColumnClass(counter) == TreeTableModel.class) {
-                       MouseEvent me = (MouseEvent)e;
-                       MouseEvent newME = new MouseEvent(tree, me.getID(),
-                                  me.getWhen(), me.getModifiers(),
-                                  me.getX() - getCellRect(0, counter, true).x,
-                                  me.getY(), me.getClickCount(),
-                                   me.isPopupTrigger());
-                       tree.dispatchEvent(newME);
-                       break;
-                   }
-               }
-           }
-           return false;
-       }
-    }
-
-
-    /**
-     * ListToTreeSelectionModelWrapper extends DefaultTreeSelectionModel
-     * to listen for changes in the ListSelectionModel it maintains. Once
-     * a change in the ListSelectionModel happens, the paths are updated
-     * in the DefaultTreeSelectionModel.
-     */
-    public class ListToTreeSelectionModelWrapper extends 
DefaultTreeSelectionModel { 
-       /** Set to true when we are updating the ListSelectionModel. */
-       protected boolean         updatingListSelectionModel;
-
-       public ListToTreeSelectionModelWrapper() {
-           super();
-           getListSelectionModel().addListSelectionListener
-                                   (createListSelectionListener());
-       }
-
-       /**
-        * Returns the list selection model. ListToTreeSelectionModelWrapper
-        * listens for changes to this model and updates the selected paths
-        * accordingly.
-        */
-       public ListSelectionModel getListSelectionModel() {
-           return listSelectionModel; 
-       }
-
-       /**
-        * This is overridden to set <code>updatingListSelectionModel</code>
-        * and message super. This is the only place DefaultTreeSelectionModel
-        * alters the ListSelectionModel.
-        */
-       public void resetRowSelection() {
-           if(!updatingListSelectionModel) {
-               updatingListSelectionModel = true;
-               try {
-                   super.resetRowSelection();
-               }
-               finally {
-                   updatingListSelectionModel = false;
-               }
-           }
-           // Notice how we don't message super if
-           // updatingListSelectionModel is true. If
-           // updatingListSelectionModel is true, it implies the
-           // ListSelectionModel has already been updated and the
-           // paths are the only thing that needs to be updated.
-       }
-
-       /**
-        * Creates and returns an instance of ListSelectionHandler.
-        */
-       protected ListSelectionListener createListSelectionListener() {
-           return new ListSelectionHandler();
-       }
-
-       /**
-        * If <code>updatingListSelectionModel</code> is false, this will
-        * reset the selected paths from the selected rows in the list
-        * selection model.
-        */
-       protected void updateSelectedPathsFromSelectedRows() {
-           if(!updatingListSelectionModel) {
-               updatingListSelectionModel = true;
-               try {
-                   // This is way expensive, ListSelectionModel needs an
-                   // enumerator for iterating.
-                   int        min = listSelectionModel.getMinSelectionIndex();
-                   int        max = listSelectionModel.getMaxSelectionIndex();
-
-                   clearSelection();
-                   if(min != -1 && max != -1) {
-                       for(int counter = min; counter <= max; counter++) {
-                           if(listSelectionModel.isSelectedIndex(counter)) {
-                               TreePath     selPath = tree.getPathForRow
-                                                           (counter);
-
-                               if(selPath != null) {
-                                   addSelectionPath(selPath);
-                               }
-                           }
-                       }
-                   }
-               }
-               finally {
-                   updatingListSelectionModel = false;
-               }
-           }
-       }
-
-       /**
-        * Class responsible for calling updateSelectedPathsFromSelectedRows
-        * when the selection of the list changse.
-        */
-       class ListSelectionHandler implements ListSelectionListener {
-           public void valueChanged(ListSelectionEvent e) {
-               updateSelectedPathsFromSelectedRows();
-           }
-       }
-    }
-}
diff --git a/debian/src_from_treetable_article_see_bug409629/MergeSort.java 
b/debian/src_from_treetable_article_see_bug409629/MergeSort.java
deleted file mode 100644
index 4a83bc8..0000000
--- a/debian/src_from_treetable_article_see_bug409629/MergeSort.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * MergeSort.java
- *
- * Copyright (c) 1998 Sun Microsystems, Inc. All Rights Reserved.
- *
- * This software is the confidential and proprietary information of Sun
- * Microsystems, Inc. ("Confidential Information").  You shall not
- * disclose such Confidential Information and shall use it only in
- * accordance with the terms of the license agreement you entered into
- * with Sun.
- *
- * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE
- * SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
- * PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES
- * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING
- * THIS SOFTWARE OR ITS DERIVATIVES.
- *
- */
-
-/**
- * An implementation of MergeSort, needs to be subclassed to
- * compare the terms.
- *
- * @author Scott Violet
- */
-public abstract class MergeSort extends Object {
-    protected Object           toSort[];
-    protected Object           swapSpace[];
-
-    public void sort(Object array[]) {
-       if(array != null && array.length > 1)
-       {
-           int             maxLength;
-  
-           maxLength = array.length;
-           swapSpace = new Object[maxLength];
-           toSort = array;
-           this.mergeSort(0, maxLength - 1);
-           swapSpace = null;
-           toSort = null;
-       }
-    }
-
-    public abstract int compareElementsAt(int beginLoc, int endLoc);
-
-    protected void mergeSort(int begin, int end) {
-       if(begin != end)
-       {
-           int           mid;
-
-           mid = (begin + end) / 2;
-           this.mergeSort(begin, mid);
-           this.mergeSort(mid + 1, end);
-           this.merge(begin, mid, end);
-       }
-    }
-
-    protected void merge(int begin, int middle, int end) {
-       int           firstHalf, secondHalf, count;
-
-       firstHalf = count = begin;
-       secondHalf = middle + 1;
-       while((firstHalf <= middle) && (secondHalf <= end))
-       {
-           if(this.compareElementsAt(secondHalf, firstHalf) < 0)
-               swapSpace[count++] = toSort[secondHalf++];
-           else
-               swapSpace[count++] = toSort[firstHalf++];
-       }
-       if(firstHalf <= middle)
-       {
-           while(firstHalf <= middle)
-               swapSpace[count++] = toSort[firstHalf++];
-       }
-       else
-       {
-           while(secondHalf <= end)
-               swapSpace[count++] = toSort[secondHalf++];
-       }
-       for(count = begin;count <= end;count++)
-           toSort[count] = swapSpace[count];
-    }
-}
diff --git 
a/debian/src_from_treetable_article_see_bug409629/TreeTableExample2.java 
b/debian/src_from_treetable_article_see_bug409629/TreeTableExample2.java
deleted file mode 100644
index a9e0c7a..0000000
--- a/debian/src_from_treetable_article_see_bug409629/TreeTableExample2.java
+++ /dev/null
@@ -1,480 +0,0 @@
-/*
- * TreeTableExample2.java
- *
- * Copyright (c) 1998 Sun Microsystems, Inc. All Rights Reserved.
- *
- * This software is the confidential and proprietary information of Sun
- * Microsystems, Inc. ("Confidential Information").  You shall not
- * disclose such Confidential Information and shall use it only in
- * accordance with the terms of the license agreement you entered into
- * with Sun.
- *
- * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE
- * SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
- * PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES
- * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING
- * THIS SOFTWARE OR ITS DERIVATIVES.
- *
- */
-
-import javax.swing.*;
-import javax.swing.border.*;
-import javax.swing.event.*;
-import javax.swing.table.*;
-import javax.swing.tree.*;
-import java.awt.*;
-import java.awt.event.*;
-import java.text.NumberFormat;
-
-/**
- * Assembles the UI. The UI consists of a JTreeTable and a status label.
- * As nodes are loaded by the FileSystemModel2, in a background thread,
- * the status label updates as well as the renderer to draw the node that
- * is being loaded differently.
- *
- * @author Scott Violet
- * @author Philip Milne
- */
-public class TreeTableExample2 {
-    /** Number of instances of TreeTableExample2. */
-    protected static int         ttCount;
-
-    /** Model for the JTreeTable. */
-    protected FileSystemModel2    model;
-    /** Used to represent the model. */
-    protected JTreeTable         treeTable;
-    /** Row the is being reloaded. */
-    protected int                reloadRow;
-    /** TreePath being reloaded. */
-    protected TreePath           reloadPath;
-    /** A counter increment as the Timer fies and the same path is
-     * being reloaded. */
-    protected int                reloadCounter;
-    /** Timer used to update reload state. */
-    protected Timer              timer;
-    /** Used to indicate status. */
-    protected JLabel             statusLabel;
-    /** Frame containing everything. */
-    protected JFrame             frame;
-    /** Path created with. */
-    protected String             path;
-
-
-    public TreeTableExample2(String path) {
-       this.path = path;
-       ttCount++;
-
-       frame = createFrame();
-
-       Container      cPane = frame.getContentPane();
-       JMenuBar       mb = createMenuBar();
-
-       model = createModel(path);
-       treeTable = createTreeTable();
-       statusLabel = createStatusLabel();
-       cPane.add(new JScrollPane(treeTable));
-       cPane.add(statusLabel, BorderLayout.SOUTH);
-
-       reloadRow = -1;
-       frame.setJMenuBar(mb);
-       frame.pack();
-       frame.show();
-       SwingUtilities.invokeLater(new Runnable() {
-           public void run() {
-               reload(model.getRoot());
-           }
-       });
-    }
-
-    /**
-     * Creates and return a JLabel that is used to indicate the status
-     * of loading.
-     */
-    protected JLabel createStatusLabel() {
-       JLabel         retLabel = new JLabel(" ");
-
-       retLabel.setHorizontalAlignment(JLabel.RIGHT);
-       retLabel.setBorder(new BevelBorder(BevelBorder.LOWERED));
-       return retLabel;
-    }
-
-    /**
-     * Creates and returns the instanceof JTreeTable that will be used.
-     * This also creates, but does not start, the Timer that is used to
-     * update the display as files are loaded.
-     */
-    protected JTreeTable createTreeTable() {
-       JTreeTable       treeTable = new JTreeTable(model);
-
-       treeTable.getColumnModel().getColumn(1).setCellRenderer
-                                  (new IndicatorRenderer());
-
-       Reloader rl = new Reloader();
-
-       timer = new Timer(700, rl);
-       timer.setRepeats(true);
-       treeTable.getTree().addTreeExpansionListener(rl);
-       return treeTable;
-    }
-
-    /**
-     * Creates the FileSystemModel2 that will be used.
-     */
-    protected FileSystemModel2 createModel(String path) {
-       return new FileSystemModel2(path);
-    }
-
-    /**
-     * Creates the JFrame that will contain everything.
-     */
-    protected JFrame createFrame() {
-       JFrame       retFrame = new JFrame("TreeTable II");
-
-       retFrame.addWindowListener(new WindowAdapter() {
-           public void windowClosing(WindowEvent we) {
-               if (--ttCount == 0) {
-                   System.exit(0);
-               }
-           }
-       });
-       return retFrame;
-    }
-
-    /**
-     * Creates a menu bar.
-     */
-    protected JMenuBar createMenuBar() {
-        JMenu            fileMenu = new JMenu("File"); 
-       JMenuItem        menuItem;
-
-       menuItem = new JMenuItem("Open");
-       menuItem.addActionListener(new ActionListener() {
-           public void actionPerformed(ActionEvent ae) {
-               JFileChooser      fc = new JFileChooser(path);
-
-               fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
-
-               int               result = fc.showOpenDialog(frame);
-
-               if (result == JFileChooser.APPROVE_OPTION) {
-                   String      newPath = fc.getSelectedFile().getPath();
-
-                   new TreeTableExample2(newPath);
-               }
-           }
-       });
-       fileMenu.add(menuItem);
-       fileMenu.addSeparator();
-       
-       menuItem = new JMenuItem("Reload");
-       menuItem.addActionListener(new ActionListener() {
-           public void actionPerformed(ActionEvent ae) {
-               TreePath         path = treeTable.getTree().getSelectionPath();
-
-               if (path != null) {
-                   model.stopLoading();
-                   reload(path.getLastPathComponent());
-               }
-           }
-       });
-       fileMenu.add(menuItem);
-
-       menuItem = new JMenuItem("Stop");
-       menuItem.addActionListener(new ActionListener() {
-           public void actionPerformed(ActionEvent ae) {
-               model.stopLoading();
-           }
-       });
-       fileMenu.add(menuItem);
-
-       fileMenu.addSeparator();
-
-       menuItem = new JMenuItem("Exit"); 
-       menuItem.addActionListener(new ActionListener() {
-           public void actionPerformed(ActionEvent ae) {
-               System.exit(0);
-           }
-       });
-       fileMenu.add(menuItem); 
-
-
-       // Create a menu bar
-       JMenuBar        menuBar = new JMenuBar();
-
-       menuBar.add(fileMenu);
-
-       // Menu for the look and feels (lafs).
-       UIManager.LookAndFeelInfo[]        lafs = UIManager.
-                                           getInstalledLookAndFeels();
-       ButtonGroup                        lafGroup = new ButtonGroup();
-
-       JMenu          optionsMenu = new JMenu("Options");
-
-       menuBar.add(optionsMenu);
-
-       for(int i = 0; i < lafs.length; i++) {
-           JRadioButtonMenuItem rb = new JRadioButtonMenuItem(lafs[i].
-                                                              getName()); 
-           optionsMenu.add(rb);
-           rb.setSelected(UIManager.getLookAndFeel().getName().equals
-                          (lafs[i].getName()));
-           rb.putClientProperty("UIKey", lafs[i]);
-           rb.addItemListener(new ItemListener() {
-               public void itemStateChanged(ItemEvent ae) {
-                   JRadioButtonMenuItem rb2 = (JRadioButtonMenuItem)ae.
-                                              getSource();
-                   if(rb2.isSelected()) {
-                       UIManager.LookAndFeelInfo       info =
-                                      (UIManager.LookAndFeelInfo)
-                                      rb2.getClientProperty("UIKey");
-                       try {
-                           UIManager.setLookAndFeel(info.getClassName());
-                           SwingUtilities.updateComponentTreeUI(frame);
-                       }
-                       catch (Exception e) {
-                            System.err.println("unable to set UI " +
-                                               e.getMessage());
-                       }
-                   }
-               }
-           });
-           lafGroup.add(rb);
-       }
-       return menuBar;
-    }
-
-    /**
-     * Invoked to reload the children of a particular node. This will
-     * also restart the timer.
-     */
-    protected void reload(Object node) {
-       model.reloadChildren(node);
-       if (!timer.isRunning()) {
-           timer.start();
-       }
-    }
-
-    /**
-     * Updates the status label based on reloadRow.
-     */
-    protected void updateStatusLabel() {
-       if (reloadPath != null) {
-           statusLabel.setText("Reloading: " + model.getPath
-                               (reloadPath.getLastPathComponent()));
-           if ((reloadCounter % 4) < 2) {
-               statusLabel.setForeground(Color.red);
-           }
-           else {
-               statusLabel.setForeground(Color.blue);
-           }
-       }
-       else if (!model.isReloading()) {
-           statusLabel.setText("Total Size: " + NumberFormat.getInstance().
-                               format(model.getTotalSize(model.getRoot())));
-           statusLabel.setForeground(Color.black);
-       }
-    }
-
-
-    /**
-     * Reloader is the ActionListener used in the Timer. In response to
-     * the timer updating it will reset the reloadRow/reloadPath and
-     * generate the necessary event so that the display will update. It
-     * also implements the TreeExpansionListener so that if the tree is
-     * altered while loading the reloadRow is updated accordingly.
-     */
-    class Reloader implements ActionListener, TreeExpansionListener {
-       public void actionPerformed(ActionEvent ae) {
-           if (!model.isReloading()) {
-               // No longer loading.
-               timer.stop();
-               if (reloadRow != -1) {
-                   generateChangeEvent(reloadRow);
-               }
-               reloadRow = -1;
-               reloadPath = null;
-           }
-           else {
-               // Still loading, see if paths changed.
-               TreePath       newPath = model.getPathLoading();
-
-               if (newPath == null) {
-                   // Hmm... Will usually indicate the reload thread
-                   // completed between time we asked if reloading.
-                   if (reloadRow != -1) {
-                       generateChangeEvent(reloadRow);
-                   }
-                   reloadRow = -1;
-                   reloadPath = null;
-               }
-               else {
-                   // Ok, valid path, see if matches last path.
-                   int        newRow = treeTable.getTree().getRowForPath
-                                                 (newPath);
-
-                   if (newPath.equals(reloadPath)) {
-                       reloadCounter = (reloadCounter + 1) % 8;
-                       if (newRow != reloadRow) {
-                           int             lastRow = reloadRow;
-
-                           reloadRow = newRow;
-                           generateChangeEvent(lastRow);
-                       }
-                       generateChangeEvent(reloadRow);
-                   }
-                   else {
-                       int          lastRow = reloadRow;
-
-                       reloadCounter = 0;
-                       reloadRow = newRow;
-                       reloadPath = newPath;
-                       if (lastRow != reloadRow) {
-                           generateChangeEvent(lastRow);
-                       }
-                       generateChangeEvent(reloadRow);
-                   }
-               }
-           }
-           updateStatusLabel();
-       }
-
-       /**
-        * Generates and update event for the specified row. FileSystemModel2
-        * could do this, but it would not know when the row has changed
-        * as a result of expanding/collapsing nodes in the tree.
-        */
-       protected void generateChangeEvent(int row) {
-           if (row != -1) {
-               AbstractTableModel     tModel = (AbstractTableModel)treeTable.
-                                                getModel();
-
-               tModel.fireTableChanged(new TableModelEvent
-                                      (tModel, row, row, 1));
-           }
-       }
-
-       //
-       // TreeExpansionListener
-       //
-
-       /**
-        * Invoked when the tree has expanded.
-        */
-       public void treeExpanded(TreeExpansionEvent te) {
-           updateRow();
-       }
-
-       /**
-        * Invoked when the tree has collapsed.
-        */
-       public void treeCollapsed(TreeExpansionEvent te) {
-           updateRow();
-       }
-
-       /**
-        * Updates the reloadRow and path, this does not genernate a
-        * change event.
-        */
-       protected void updateRow() {
-           reloadPath = model.getPathLoading();
-
-           if (reloadPath != null) {
-               reloadRow = treeTable.getTree().getRowForPath(reloadPath);
-           }
-       }
-    }
-
-
-    /**
-     * A renderer that will give an indicator when a cell is being reloaded.
-     */
-    class IndicatorRenderer extends DefaultTableCellRenderer {
-       /** Makes sure the number of displayed in an internationalized
-        * manner. */
-       protected NumberFormat       formatter;
-       /** Row that is currently being painted. */
-       protected int                lastRow;
-       
-
-       IndicatorRenderer() {
-           setHorizontalAlignment(JLabel.RIGHT);
-           formatter = NumberFormat.getInstance();
-       }
-
-       /**
-        * Invoked as part of DefaultTableCellRenderers implemention. Sets
-        * the text of the label.
-        */
-       public void setValue(Object value) { 
-           setText((value == null) ? "---" : formatter.format(value)); 
-       }
-
-       /**
-        * Returns this.
-        */
-       public Component getTableCellRendererComponent(JTable table,
-                           Object value, boolean isSelected, boolean hasFocus,
-                           int row, int column) {
-           super.getTableCellRendererComponent(table, value, isSelected,
-                                               hasFocus, row, column);
-           lastRow = row;
-           return this;
-       }
-
-       /**
-        * If the row being painted is also being reloaded this will draw
-        * a little indicator.
-        */
-       public void paint(Graphics g) {
-           if (lastRow == reloadRow) {
-               int       width = getWidth();
-               int       height = getHeight();
-
-               g.setColor(getBackground());
-               g.fillRect(0, 0, width, height);
-               g.setColor(getForeground());
-
-               int       diameter = Math.min(width, height);
-
-               if (reloadCounter < 5) {
-                   g.fillArc((width - diameter) / 2, (height - diameter) / 2,
-                             diameter, diameter, 90, -(reloadCounter * 90));
-               }
-               else {
-                   g.fillArc((width - diameter) / 2, (height - diameter) / 2,
-                             diameter, diameter, 90,
-                             (4 - reloadCounter % 4) * 90);
-               }
-           }
-           else {
-               super.paint(g);
-           }
-       }
-    }
-
-
-    public static void main(String[] args) {
-       if (args.length > 0) {
-           for (int counter = args.length - 1; counter >= 0; counter--) {
-               new TreeTableExample2(args[counter]);
-           }
-       }
-       else {
-           String            path;
-
-           try {
-               path = System.getProperty("user.home");
-               if (path != null) {
-                   new TreeTableExample2(path);
-               }
-           }
-           catch (SecurityException se) {
-               path = null;
-           }
-           if (path == null) {
-               System.out.println("Could not determine home directory");
-           }
-       }
-    }
-}
diff --git 
a/debian/src_from_treetable_article_see_bug409629/TreeTableModel.java 
b/debian/src_from_treetable_article_see_bug409629/TreeTableModel.java
deleted file mode 100644
index 31e33a1..0000000
--- a/debian/src_from_treetable_article_see_bug409629/TreeTableModel.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * TreeTableModel.java
- *
- * Copyright (c) 1998 Sun Microsystems, Inc. All Rights Reserved.
- *
- * This software is the confidential and proprietary information of Sun
- * Microsystems, Inc. ("Confidential Information").  You shall not
- * disclose such Confidential Information and shall use it only in
- * accordance with the terms of the license agreement you entered into
- * with Sun.
- *
- * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE
- * SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
- * PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES
- * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING
- * THIS SOFTWARE OR ITS DERIVATIVES.
- *
- */
-
-
-         package org.mozilla.javascript.tools.debugger.downloaded;
-         import javax.swing.tree.TreeModel;
-       
-
-/**
- * TreeTableModel is the model used by a JTreeTable. It extends TreeModel
- * to add methods for getting inforamtion 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. 
- *
- * @author Philip Milne 
- * @author Scott Violet
- */
-public interface TreeTableModel extends TreeModel
-{
-    /**
-     * Returns the number ofs availible column.
-     */
-    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);
-}
diff --git 
a/debian/src_from_treetable_article_see_bug409629/TreeTableModelAdapter.java 
b/debian/src_from_treetable_article_see_bug409629/TreeTableModelAdapter.java
deleted file mode 100644
index 6a2e496..0000000
--- a/debian/src_from_treetable_article_see_bug409629/TreeTableModelAdapter.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * @(#)TreeTableModelAdapter.java      1.2 98/10/27
- *
- * Copyright 1997, 1998 by Sun Microsystems, Inc.,
- * 901 San Antonio Road, Palo Alto, California, 94303, U.S.A.
- * All rights reserved.
- *
- * This software is the confidential and proprietary information
- * of Sun Microsystems, Inc. ("Confidential Information").  You
- * shall not disclose such Confidential Information and shall use
- * it only in accordance with the terms of the license agreement
- * you entered into with Sun.
- */
-
-
-         package org.mozilla.javascript.tools.debugger.downloaded;
-         import javax.swing.JTree;
-       
-import javax.swing.SwingUtilities;
-import javax.swing.table.AbstractTableModel;
-import javax.swing.tree.TreePath;
-import javax.swing.event.TreeExpansionEvent;
-import javax.swing.event.TreeExpansionListener;
-import javax.swing.event.TreeModelEvent;
-import javax.swing.event.TreeModelListener;
-
-/**
- * This is a wrapper class takes a TreeTableModel and implements 
- * the table model interface. The implementation is trivial, with 
- * all of the event dispatching support provided by the superclass: 
- * the AbstractTableModel. 
- *
- * @version 1.2 10/27/98
- *
- * @author Philip Milne
- * @author Scott Violet
- */
-public class TreeTableModelAdapter extends AbstractTableModel
-{
-    JTree tree;
-    TreeTableModel treeTableModel;
-
-    public TreeTableModelAdapter(TreeTableModel treeTableModel, JTree tree) {
-        this.tree = tree;
-        this.treeTableModel = treeTableModel;
-
-       tree.addTreeExpansionListener(new TreeExpansionListener() {
-           // Don't use fireTableRowsInserted() here; the selection model
-           // would get updated twice. 
-           public void treeExpanded(TreeExpansionEvent event) {  
-             fireTableDataChanged(); 
-           }
-            public void treeCollapsed(TreeExpansionEvent event) {  
-             fireTableDataChanged(); 
-           }
-       });
-
-       // Install a TreeModelListener that can update the table when
-       // tree changes. We use delayedFireTableDataChanged as we can
-       // not be guaranteed the tree will have finished processing
-       // the event before us.
-       treeTableModel.addTreeModelListener(new TreeModelListener() {
-           public void treeNodesChanged(TreeModelEvent e) {
-               delayedFireTableDataChanged();
-           }
-
-           public void treeNodesInserted(TreeModelEvent e) {
-               delayedFireTableDataChanged();
-           }
-
-           public void treeNodesRemoved(TreeModelEvent e) {
-               delayedFireTableDataChanged();
-           }
-
-           public void treeStructureChanged(TreeModelEvent e) {
-               delayedFireTableDataChanged();
-           }
-       });
-    }
-
-    // Wrappers, implementing TableModel interface. 
-
-    public int getColumnCount() {
-       return treeTableModel.getColumnCount();
-    }
-
-    public String getColumnName(int column) {
-       return treeTableModel.getColumnName(column);
-    }
-
-    public Class getColumnClass(int column) {
-       return treeTableModel.getColumnClass(column);
-    }
-
-    public int getRowCount() {
-       return tree.getRowCount();
-    }
-
-    protected Object nodeForRow(int row) {
-       TreePath treePath = tree.getPathForRow(row);
-       return treePath.getLastPathComponent();         
-    }
-
-    public Object getValueAt(int row, int column) {
-       return treeTableModel.getValueAt(nodeForRow(row), column);
-    }
-
-    public boolean isCellEditable(int row, int column) {
-         return treeTableModel.isCellEditable(nodeForRow(row), column); 
-    }
-
-    public void setValueAt(Object value, int row, int column) {
-       treeTableModel.setValueAt(value, nodeForRow(row), column);
-    }
-
-    /**
-     * Invokes fireTableDataChanged after all the pending events have been
-     * processed. SwingUtilities.invokeLater is used to handle this.
-     */
-    protected void delayedFireTableDataChanged() {
-       SwingUtilities.invokeLater(new Runnable() {
-           public void run() {
-               fireTableDataChanged();
-           }
-       });
-    }
-}
-

-- 
Alioth's /usr/local/bin/git-commit-notice on 
/srv/git.debian.org/git/pkg-java/rhino.git

_______________________________________________
pkg-java-commits mailing list
[email protected]
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-java-commits

Reply via email to