home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / esc.jar / com / extensibility / xa / OverTreeModel.class (.txt) < prev    next >
Encoding:
Java Class File  |  2000-06-30  |  4.0 KB  |  128 lines

  1. package com.extensibility.xa;
  2.  
  3. import com.extensibility.util.Debug;
  4. import com.extensibility.xml.BaseDeclaration;
  5. import com.extensibility.xml.ExternalSubset;
  6. import com.extensibility.xml.MarkedSectionClose;
  7. import com.extensibility.xml.MarkedSectionOpen;
  8. import java.util.Enumeration;
  9. import java.util.Hashtable;
  10. import java.util.Stack;
  11. import java.util.Vector;
  12. import javax.swing.tree.DefaultMutableTreeNode;
  13. import javax.swing.tree.DefaultTreeModel;
  14.  
  15. class OverTreeModel extends DefaultTreeModel {
  16.    Hashtable declNodes;
  17.    SchemaDoc doc;
  18.  
  19.    OverTreeModel(SchemaDoc var1) {
  20.       super(new DefaultMutableTreeNode());
  21.       this.doc = var1;
  22.       this.declNodes = new Hashtable();
  23.    }
  24.  
  25.    SchemaDoc getSchemaDoc() {
  26.       return this.doc;
  27.    }
  28.  
  29.    DefaultMutableTreeNode findNode(BaseDeclaration var1) {
  30.       return (DefaultMutableTreeNode)this.declNodes.get(var1);
  31.    }
  32.  
  33.    void updateTreeForMove(BaseDeclaration var1) {
  34.       DefaultMutableTreeNode var2 = this.findNode(var1);
  35.       if (var2 != null) {
  36.          ((DefaultTreeModel)this).removeNodeFromParent(var2);
  37.          this.updateTreeForInsert(var1, var2);
  38.       }
  39.    }
  40.  
  41.    void updateTreeForRemove(BaseDeclaration var1) {
  42.       DefaultMutableTreeNode var2 = this.findNode(var1);
  43.       ((DefaultTreeModel)this).removeNodeFromParent(var2);
  44.       this.declNodes.remove(var1);
  45.    }
  46.  
  47.    void updateTreeForInsert(BaseDeclaration var1) {
  48.       this.updateTreeForInsert(var1, new DefaultMutableTreeNode(var1));
  49.    }
  50.  
  51.    void updateTreeForInsert(BaseDeclaration var1, DefaultMutableTreeNode var2) {
  52.       this.declNodes.put(var1, var2);
  53.       DefaultMutableTreeNode var5 = null;
  54.  
  55.       BaseDeclaration var3;
  56.       DefaultMutableTreeNode var4;
  57.       do {
  58.          var3 = this.getSchemaDoc().getPrevDecl(var1);
  59.          if (var3 == null) {
  60.             var4 = (DefaultMutableTreeNode)((DefaultTreeModel)this).getRoot();
  61.          } else {
  62.             var4 = this.findNode(var3);
  63.          }
  64.  
  65.          while(var4 != null) {
  66.             BaseDeclaration var6 = (BaseDeclaration)var4.getUserObject();
  67.             if (var6.isSubordinate(var1)) {
  68.                break;
  69.             }
  70.  
  71.             if (var4 == (DefaultMutableTreeNode)((DefaultTreeModel)this).getRoot()) {
  72.                var5 = var4;
  73.                break;
  74.             }
  75.  
  76.             var5 = var4;
  77.             var4 = (DefaultMutableTreeNode)var4.getParent();
  78.          }
  79.  
  80.          if (var4 == null) {
  81.             var1 = var3;
  82.          }
  83.       } while(var4 == null && var3 != null);
  84.  
  85.       if (var4 == null) {
  86.          Debug.assert(var4 != null, "unable to find parent");
  87.       }
  88.  
  89.       int var7 = var5 == null ? 0 : var4.getIndex(var5) + 1;
  90.       ((DefaultTreeModel)this).insertNodeInto(var2, var4, var7);
  91.    }
  92.  
  93.    void updateTree(boolean var1) {
  94.       Stack var2 = new Stack();
  95.       this.declNodes.clear();
  96.       ExternalSubset var3 = this.getSchemaDoc().getStructure();
  97.       DefaultMutableTreeNode var4 = new DefaultMutableTreeNode(var3);
  98.       var2.push(var4);
  99.       var2.push(var3);
  100.       this.declNodes.put(var3, var4);
  101.       Enumeration var5 = var1 ? this.getSchemaDoc().getDeclarations() : this.getSchemaDoc().getDeclarations(Class.forName("com.extensibility.xml.ExternalSubset"));
  102.  
  103.       while(var5.hasMoreElements()) {
  104.          BaseDeclaration var6 = (BaseDeclaration)var5.nextElement();
  105.          if (this.getSchemaDoc().getSchema().getFlavor().isSupported(var6.getClass()) && !(var6 instanceof MarkedSectionOpen) && !(var6 instanceof MarkedSectionClose)) {
  106.             while(!((Vector)var2).isEmpty()) {
  107.                BaseDeclaration var7 = (BaseDeclaration)var2.pop();
  108.                DefaultMutableTreeNode var8 = (DefaultMutableTreeNode)var2.pop();
  109.                if (var7.isSubordinate(var6)) {
  110.                   DefaultMutableTreeNode var9 = new DefaultMutableTreeNode(var6);
  111.                   var2.push(var8);
  112.                   var2.push(var7);
  113.                   var2.push(var9);
  114.                   var2.push(var6);
  115.                   this.declNodes.put(var6, var9);
  116.                   var8.add(var9);
  117.                   break;
  118.                }
  119.  
  120.                Debug.assert(!((Vector)var2).isEmpty(), String.valueOf("no parent found for ").concat(String.valueOf(var6.getName())));
  121.             }
  122.          }
  123.       }
  124.  
  125.       ((DefaultTreeModel)this).setRoot(var4);
  126.    }
  127. }
  128.