home *** CD-ROM | disk | FTP | other *** search
/ CD Actual Thematic 7: Programming / CDAT7.iso / demos / VisualAge for Java 2.0 Entry / setup / data1.cab / ide-e / IDE / cache / KXI7I0 (.txt) < prev    next >
Encoding:
Java Class File  |  1998-09-16  |  8.5 KB  |  356 lines

  1. package com.sun.java.swing.tree;
  2.  
  3. import com.sun.java.swing.event.EventListenerList;
  4. import com.sun.java.swing.event.TreeModelEvent;
  5. import com.sun.java.swing.event.TreeModelListener;
  6. import java.io.IOException;
  7. import java.io.ObjectInputStream;
  8. import java.io.ObjectOutputStream;
  9. import java.io.Serializable;
  10. import java.util.Vector;
  11.  
  12. public class DefaultTreeModel implements Serializable, TreeModel {
  13.    protected TreeNode root;
  14.    protected EventListenerList listenerList;
  15.    protected boolean asksAllowsChildren;
  16.    static Class class$com$sun$java$swing$event$TreeModelListener;
  17.  
  18.    public DefaultTreeModel(TreeNode root) {
  19.       this(root, false);
  20.    }
  21.  
  22.    public DefaultTreeModel(TreeNode root, boolean asksAllowsChildren) {
  23.       this.listenerList = new EventListenerList();
  24.       if (root == null) {
  25.          throw new IllegalArgumentException("root is null");
  26.       } else {
  27.          this.root = root;
  28.          this.asksAllowsChildren = asksAllowsChildren;
  29.       }
  30.    }
  31.  
  32.    public void addTreeModelListener(TreeModelListener l) {
  33.       EventListenerList var10000 = this.listenerList;
  34.       Class var10001 = class$com$sun$java$swing$event$TreeModelListener;
  35.       if (var10001 == null) {
  36.          try {
  37.             var10001 = Class.forName("com.sun.java.swing.event.TreeModelListener");
  38.          } catch (ClassNotFoundException var2) {
  39.             throw new NoClassDefFoundError(((Throwable)var2).getMessage());
  40.          }
  41.  
  42.          class$com$sun$java$swing$event$TreeModelListener = var10001;
  43.       }
  44.  
  45.       var10000.add(var10001, l);
  46.    }
  47.  
  48.    public boolean asksAllowsChildren() {
  49.       return this.asksAllowsChildren;
  50.    }
  51.  
  52.    protected void fireTreeNodesChanged(Object source, Object[] path, int[] childIndices, Object[] children) {
  53.       Object[] listeners = this.listenerList.getListenerList();
  54.       TreeModelEvent e = null;
  55.  
  56.       for(int i = listeners.length - 2; i >= 0; i -= 2) {
  57.          Object var10000 = listeners[i];
  58.          Class var10001 = class$com$sun$java$swing$event$TreeModelListener;
  59.          if (var10001 == null) {
  60.             try {
  61.                var10001 = Class.forName("com.sun.java.swing.event.TreeModelListener");
  62.             } catch (ClassNotFoundException var8) {
  63.                throw new NoClassDefFoundError(((Throwable)var8).getMessage());
  64.             }
  65.  
  66.             class$com$sun$java$swing$event$TreeModelListener = var10001;
  67.          }
  68.  
  69.          if (var10000 == var10001) {
  70.             if (e == null) {
  71.                e = new TreeModelEvent(source, path, childIndices, children);
  72.             }
  73.  
  74.             ((TreeModelListener)listeners[i + 1]).treeNodesChanged(e);
  75.          }
  76.       }
  77.  
  78.    }
  79.  
  80.    protected void fireTreeNodesInserted(Object source, Object[] path, int[] childIndices, Object[] children) {
  81.       Object[] listeners = this.listenerList.getListenerList();
  82.       TreeModelEvent e = null;
  83.  
  84.       for(int i = listeners.length - 2; i >= 0; i -= 2) {
  85.          Object var10000 = listeners[i];
  86.          Class var10001 = class$com$sun$java$swing$event$TreeModelListener;
  87.          if (var10001 == null) {
  88.             try {
  89.                var10001 = Class.forName("com.sun.java.swing.event.TreeModelListener");
  90.             } catch (ClassNotFoundException var8) {
  91.                throw new NoClassDefFoundError(((Throwable)var8).getMessage());
  92.             }
  93.  
  94.             class$com$sun$java$swing$event$TreeModelListener = var10001;
  95.          }
  96.  
  97.          if (var10000 == var10001) {
  98.             if (e == null) {
  99.                e = new TreeModelEvent(source, path, childIndices, children);
  100.             }
  101.  
  102.             ((TreeModelListener)listeners[i + 1]).treeNodesInserted(e);
  103.          }
  104.       }
  105.  
  106.    }
  107.  
  108.    protected void fireTreeNodesRemoved(Object source, Object[] path, int[] childIndices, Object[] children) {
  109.       Object[] listeners = this.listenerList.getListenerList();
  110.       TreeModelEvent e = null;
  111.  
  112.       for(int i = listeners.length - 2; i >= 0; i -= 2) {
  113.          Object var10000 = listeners[i];
  114.          Class var10001 = class$com$sun$java$swing$event$TreeModelListener;
  115.          if (var10001 == null) {
  116.             try {
  117.                var10001 = Class.forName("com.sun.java.swing.event.TreeModelListener");
  118.             } catch (ClassNotFoundException var8) {
  119.                throw new NoClassDefFoundError(((Throwable)var8).getMessage());
  120.             }
  121.  
  122.             class$com$sun$java$swing$event$TreeModelListener = var10001;
  123.          }
  124.  
  125.          if (var10000 == var10001) {
  126.             if (e == null) {
  127.                e = new TreeModelEvent(source, path, childIndices, children);
  128.             }
  129.  
  130.             ((TreeModelListener)listeners[i + 1]).treeNodesRemoved(e);
  131.          }
  132.       }
  133.  
  134.    }
  135.  
  136.    protected void fireTreeStructureChanged(Object source, Object[] path, int[] childIndices, Object[] children) {
  137.       Object[] listeners = this.listenerList.getListenerList();
  138.       TreeModelEvent e = null;
  139.  
  140.       for(int i = listeners.length - 2; i >= 0; i -= 2) {
  141.          Object var10000 = listeners[i];
  142.          Class var10001 = class$com$sun$java$swing$event$TreeModelListener;
  143.          if (var10001 == null) {
  144.             try {
  145.                var10001 = Class.forName("com.sun.java.swing.event.TreeModelListener");
  146.             } catch (ClassNotFoundException var8) {
  147.                throw new NoClassDefFoundError(((Throwable)var8).getMessage());
  148.             }
  149.  
  150.             class$com$sun$java$swing$event$TreeModelListener = var10001;
  151.          }
  152.  
  153.          if (var10000 == var10001) {
  154.             if (e == null) {
  155.                e = new TreeModelEvent(source, path, childIndices, children);
  156.             }
  157.  
  158.             ((TreeModelListener)listeners[i + 1]).treeStructureChanged(e);
  159.          }
  160.       }
  161.  
  162.    }
  163.  
  164.    public Object getChild(Object parent, int index) {
  165.       return ((TreeNode)parent).getChildAt(index);
  166.    }
  167.  
  168.    public int getChildCount(Object parent) {
  169.       return ((TreeNode)parent).getChildCount();
  170.    }
  171.  
  172.    public int getIndexOfChild(Object parent, Object child) {
  173.       return parent != null && child != null ? ((TreeNode)parent).getIndex((TreeNode)child) : 0;
  174.    }
  175.  
  176.    public TreeNode[] getPathToRoot(TreeNode aNode) {
  177.       return this.getPathToRoot(aNode, 0);
  178.    }
  179.  
  180.    protected TreeNode[] getPathToRoot(TreeNode aNode, int depth) {
  181.       TreeNode[] retNodes;
  182.       if (aNode == null) {
  183.          if (depth == 0) {
  184.             return null;
  185.          }
  186.  
  187.          retNodes = new TreeNode[depth];
  188.       } else {
  189.          ++depth;
  190.          if (aNode == this.root) {
  191.             retNodes = new TreeNode[depth];
  192.          } else {
  193.             retNodes = this.getPathToRoot(aNode.getParent(), depth);
  194.          }
  195.  
  196.          retNodes[retNodes.length - depth] = aNode;
  197.       }
  198.  
  199.       return retNodes;
  200.    }
  201.  
  202.    public Object getRoot() {
  203.       return this.root;
  204.    }
  205.  
  206.    public void insertNodeInto(MutableTreeNode newChild, MutableTreeNode parent, int index) {
  207.       parent.insert(newChild, index);
  208.       int[] newIndexs = new int[1];
  209.       newIndexs[0] = index;
  210.       this.nodesWereInserted(parent, newIndexs);
  211.    }
  212.  
  213.    public boolean isLeaf(Object node) {
  214.       if (this.asksAllowsChildren) {
  215.          return !((TreeNode)node).getAllowsChildren();
  216.       } else {
  217.          return ((TreeNode)node).isLeaf();
  218.       }
  219.    }
  220.  
  221.    public void nodeChanged(TreeNode node) {
  222.       if (this.listenerList != null && node != null) {
  223.          TreeNode parent = node.getParent();
  224.          if (parent != null) {
  225.             int anIndex = parent.getIndex(node);
  226.             if (anIndex != -1) {
  227.                int[] cIndexs = new int[1];
  228.                cIndexs[0] = anIndex;
  229.                this.nodesChanged(parent, cIndexs);
  230.             }
  231.          }
  232.       }
  233.  
  234.    }
  235.  
  236.    public void nodesChanged(TreeNode node, int[] childIndices) {
  237.       if (node != null && childIndices != null) {
  238.          int cCount = childIndices.length;
  239.          if (cCount > 0) {
  240.             Object[] cChildren = new Object[cCount];
  241.  
  242.             for(int counter = 0; counter < cCount; ++counter) {
  243.                cChildren[counter] = node.getChildAt(childIndices[counter]);
  244.             }
  245.  
  246.             this.fireTreeNodesChanged(this, this.getPathToRoot(node), childIndices, cChildren);
  247.          }
  248.       }
  249.  
  250.    }
  251.  
  252.    public void nodeStructureChanged(TreeNode node) {
  253.       if (node != null) {
  254.          this.fireTreeStructureChanged(this, this.getPathToRoot(node), (int[])null, (Object[])null);
  255.       }
  256.  
  257.    }
  258.  
  259.    public void nodesWereInserted(TreeNode node, int[] childIndices) {
  260.       if (this.listenerList != null && node != null && childIndices != null && childIndices.length > 0) {
  261.          int cCount = childIndices.length;
  262.          Object[] newChildren = new Object[cCount];
  263.  
  264.          for(int counter = 0; counter < cCount; ++counter) {
  265.             newChildren[counter] = node.getChildAt(childIndices[counter]);
  266.          }
  267.  
  268.          this.fireTreeNodesInserted(this, this.getPathToRoot(node), childIndices, newChildren);
  269.       }
  270.  
  271.    }
  272.  
  273.    public void nodesWereRemoved(TreeNode node, int[] childIndices, Object[] removedChildren) {
  274.       if (node != null && childIndices != null) {
  275.          this.fireTreeNodesRemoved(this, this.getPathToRoot(node), childIndices, removedChildren);
  276.       }
  277.  
  278.    }
  279.  
  280.    private void readObject(ObjectInputStream s) throws IOException, ClassNotFoundException {
  281.       s.defaultReadObject();
  282.       Vector values = (Vector)s.readObject();
  283.       int indexCounter = 0;
  284.       int maxCounter = values.size();
  285.       if (indexCounter < maxCounter && values.elementAt(indexCounter).equals("root")) {
  286.          ++indexCounter;
  287.          this.root = (TreeNode)values.elementAt(indexCounter);
  288.          ++indexCounter;
  289.       }
  290.  
  291.    }
  292.  
  293.    public void reload() {
  294.       this.reload(this.root);
  295.    }
  296.  
  297.    public void reload(TreeNode node) {
  298.       if (node != null) {
  299.          this.fireTreeStructureChanged(this, this.getPathToRoot(node), (int[])null, (Object[])null);
  300.       }
  301.  
  302.    }
  303.  
  304.    public void removeNodeFromParent(MutableTreeNode node) {
  305.       MutableTreeNode parent = (MutableTreeNode)node.getParent();
  306.       if (parent == null) {
  307.          throw new IllegalArgumentException("node does not have a parent.");
  308.       } else {
  309.          int[] childIndex = new int[1];
  310.          Object[] removedArray = new Object[1];
  311.          childIndex[0] = parent.getIndex(node);
  312.          parent.remove(childIndex[0]);
  313.          removedArray[0] = node;
  314.          this.nodesWereRemoved(parent, childIndex, removedArray);
  315.       }
  316.    }
  317.  
  318.    public void removeTreeModelListener(TreeModelListener l) {
  319.       EventListenerList var10000 = this.listenerList;
  320.       Class var10001 = class$com$sun$java$swing$event$TreeModelListener;
  321.       if (var10001 == null) {
  322.          try {
  323.             var10001 = Class.forName("com.sun.java.swing.event.TreeModelListener");
  324.          } catch (ClassNotFoundException var2) {
  325.             throw new NoClassDefFoundError(((Throwable)var2).getMessage());
  326.          }
  327.  
  328.          class$com$sun$java$swing$event$TreeModelListener = var10001;
  329.       }
  330.  
  331.       var10000.remove(var10001, l);
  332.    }
  333.  
  334.    public void setAsksAllowsChildren(boolean newValue) {
  335.       this.asksAllowsChildren = newValue;
  336.    }
  337.  
  338.    public void valueForPathChanged(TreePath path, Object newValue) {
  339.       Object[] aPath = path.getPath();
  340.       MutableTreeNode aNode = (MutableTreeNode)aPath[aPath.length - 1];
  341.       aNode.setUserObject(newValue);
  342.       this.nodeChanged(aNode);
  343.    }
  344.  
  345.    private void writeObject(ObjectOutputStream s) throws IOException {
  346.       Vector values = new Vector();
  347.       s.defaultWriteObject();
  348.       if (this.root != null && this.root instanceof Serializable) {
  349.          values.addElement("root");
  350.          values.addElement(this.root);
  351.       }
  352.  
  353.       s.writeObject(values);
  354.    }
  355. }
  356.