1 21 package org.jacorb.ir.gui.typesystem; 22 23 import javax.swing.tree.*; 24 import javax.swing.table.*; 25 import javax.swing.event.*; 26 import java.util.*; 27 28 31 32 public class ModelBuilder 33 implements Runnable , TreeExpansionListener, TreeModelListener 34 { 35 private Hashtable threadArguments = new Hashtable(); 36 39 protected Hashtable expandedModParts = new Hashtable(); 40 44 protected Hashtable treeViewsToUpdate = new Hashtable(); 45 47 protected Hashtable treeNodesAndTableModels = new Hashtable(); 48 51 private Hashtable treeModelsListenedTo = new Hashtable(); 52 57 private static ModelBuilder singleton = new ModelBuilder(); 58 59 63 67 public DefaultTreeModel buildTreeModel(ModelParticipant rootModPart) 68 { 69 DefaultMutableTreeNode root = new DefaultMutableTreeNode(rootModPart); 70 DefaultTreeModel treeModel = new DefaultTreeModel(root); 71 treeModel.setAsksAllowsChildren(true); 72 rootModPart.buildTree(treeModel,null); 73 return treeModel; 74 } 75 79 public DefaultTreeModel buildTreeModelAsync(ModelParticipant rootModPart) 80 { 81 DefaultMutableTreeNode root = new DefaultMutableTreeNode(rootModPart); 82 DefaultTreeModel treeModel = new DefaultTreeModel(root); 83 treeModel.setAsksAllowsChildren(true); 84 Thread thread = new Thread (this); 85 threadArguments.put(thread.getName(),treeModel); 86 thread.start(); return treeModel; 89 } 90 97 public DefaultTreeModel createTreeModelRoot(ModelParticipant rootModPart) { 98 DefaultMutableTreeNode root = new DefaultMutableTreeNode(rootModPart); 99 DefaultTreeModel treeModel = new DefaultTreeModel(root); 100 rootModPart.addToParent(treeModel,null); 101 treeModel.setAsksAllowsChildren(true); 102 return treeModel; 103 } 104 108 private synchronized void expandModPart(ModelParticipant modPart, 109 DefaultTreeModel treeModel) 110 { 111 modPart.expand(treeModel); 112 return; 113 } 114 115 public static ModelBuilder getSingleton() 116 { 117 return singleton; 118 } 119 120 124 public synchronized DefaultTableModel getTableModel(DefaultTreeModel treeModel, 125 DefaultMutableTreeNode treeNode) 126 { 127 DefaultTableModel tableModel = new DefaultTableModel(); 128 java.lang.Object [] colIdentifiers = {"Item","Type","Name"}; 129 tableModel.setColumnIdentifiers(colIdentifiers); 130 132 if (treeNode!=null && 133 (treeNode.getUserObject() instanceof AbstractContainer)) 134 { 135 if (!treeModelsListenedTo.containsKey(treeModel)) { 136 treeModel.addTreeModelListener(this); 137 treeModelsListenedTo.put(treeModel,treeModel); 138 } 139 if (treeNodesAndTableModels.containsKey(treeNode)) { 140 Vector tableModels = (Vector)treeNodesAndTableModels.get(treeNode); 141 tableModels.addElement(tableModel); 142 } 143 else { 144 Vector tableModels = new Vector(); 145 tableModels.addElement(tableModel); 146 treeNodesAndTableModels.put(treeNode,tableModels); 147 } 148 if (!expandedModParts.containsKey(treeNode)) { 149 startExpandNode(treeModel,treeNode); 151 } 156 else 157 { 158 for (int i=0; i<treeModel.getChildCount(treeNode); i++) { 160 insertTableRow(tableModel,(DefaultMutableTreeNode)treeNode.getChildAt(i),i); 161 } 162 } } return tableModel; 165 } 166 167 171 172 public TreeExpansionListener getTreeExpansionListener(TreeModel treeModel) 173 { 174 return this; } 176 177 181 private void insertTableRow(DefaultTableModel tableModel, 182 DefaultMutableTreeNode treeNode, 183 int index) 184 { 185 TypeSystemNode typeSystemNode = (TypeSystemNode)treeNode.getUserObject(); 186 String type = ""; 187 if (typeSystemNode instanceof TypeAssociator) { 188 type = ((TypeAssociator)typeSystemNode).getAssociatedType(); 189 } 190 java.lang.Object [] row = 191 {new NodeMapper(typeSystemNode,typeSystemNode.getInstanceNodeTypeName()), 192 new NodeMapper(typeSystemNode,type), 193 new NodeMapper(typeSystemNode,typeSystemNode.getName())}; 194 tableModel.insertRow(index,row); 195 } 196 197 199 public void run ( ) 200 { 201 Object argument = threadArguments.get(Thread.currentThread().getName()); 202 if (argument instanceof DefaultTreeModel) 203 { 204 DefaultTreeModel treeModel = (DefaultTreeModel)argument; 205 ModelParticipant root = 206 (ModelParticipant)((DefaultMutableTreeNode)treeModel.getRoot()).getUserObject(); 207 root.buildTree(treeModel,null); 208 } 209 if (argument instanceof Object []) { 210 Object [] args = (Object [])argument; 211 DefaultTreeModel treeModel = (DefaultTreeModel)args[0]; 212 ModelParticipant modPart = (ModelParticipant)args[1]; 213 expandModPart(modPart,treeModel); 214 } 215 } 216 217 222 private void startExpandNode(DefaultTreeModel treeModel, 223 DefaultMutableTreeNode treeNode) 224 { 225 ModelParticipant modPart = (ModelParticipant)treeNode.getUserObject(); 226 227 if (!expandedModParts.containsKey(treeNode)) { 228 System.out.println("expanding node: "+treeNode); 229 Thread thread = new Thread (this); 230 Object [] args = new Object [2]; 231 args[0] = treeModel; 232 args[1] = modPart; 233 threadArguments.put(thread.getName(),args); 234 thread.start(); } 238 } 239 240 243 public void treeCollapsed(TreeExpansionEvent e) 244 { 245 return; 246 } 247 248 251 252 public synchronized void treeExpanded(TreeExpansionEvent e) 253 { 254 javax.swing.JTree jTree = (javax.swing.JTree )e.getSource(); 255 DefaultTreeModel treeModel = (DefaultTreeModel)jTree.getModel(); 256 TreePath path = e.getPath(); 257 DefaultMutableTreeNode treeNode = 258 (DefaultMutableTreeNode)path.getPathComponent(path.getPathCount()-1); 259 treeViewsToUpdate.put(treeNode,jTree); startExpandNode(treeModel,treeNode); 261 } 262 263 public void treeNodesChanged(TreeModelEvent te) {} 264 265 public void treeNodesInserted(TreeModelEvent te) 266 { 267 DefaultTreeModel treeModel = (DefaultTreeModel)te.getSource(); 269 DefaultMutableTreeNode treeNode = 270 (DefaultMutableTreeNode)te.getTreePath().getLastPathComponent(); 271 Vector tableModels = (Vector)treeNodesAndTableModels.get(treeNode); 272 DefaultTableModel tableModel; 273 Object [] children = te.getChildren(); 274 int[] indices = te.getChildIndices(); 275 276 if (tableModels!=null) 277 { 278 for (int i=0; i<indices.length; i++) { 280 for (Enumeration e = tableModels.elements(); e.hasMoreElements(); ) { 281 tableModel = (DefaultTableModel)e.nextElement(); 282 insertTableRow(tableModel,(DefaultMutableTreeNode)treeNode.getChildAt(indices[i]),indices[i]); 283 } 284 } 285 } 286 } 287 288 public void treeNodesRemoved(TreeModelEvent te) {} 289 290 public void treeStructureChanged(TreeModelEvent te) {} 291 } 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 | Popular Tags |