1 19 20 package org.netbeans.modules.xml.schema.refactoring.query.views; 21 22 import java.awt.BorderLayout ; 23 import java.awt.Dimension ; 24 import java.awt.event.ComponentAdapter ; 25 import java.awt.event.ComponentEvent ; 26 import java.beans.PropertyChangeListener ; 27 import java.beans.PropertyVetoException ; 28 import java.util.ArrayList ; 29 import java.util.List ; 30 import javax.swing.Action ; 31 import javax.swing.JComponent ; 32 import javax.swing.JPanel ; 33 import javax.swing.JScrollPane ; 34 import javax.swing.KeyStroke ; 35 import javax.swing.ListSelectionModel ; 36 import javax.swing.tree.TreeSelectionModel ; 37 import org.netbeans.modules.xml.nbprefuse.AnalysisConstants; 38 import org.netbeans.modules.xml.schema.model.GlobalAttribute; 39 import org.netbeans.modules.xml.schema.model.GlobalAttributeGroup; 40 import org.netbeans.modules.xml.schema.model.GlobalComplexType; 41 import org.netbeans.modules.xml.schema.model.GlobalElement; 42 import org.netbeans.modules.xml.schema.model.GlobalGroup; 43 import org.netbeans.modules.xml.schema.model.GlobalSimpleType; 44 import org.netbeans.modules.xml.schema.model.Schema; 45 import org.netbeans.modules.xml.schema.model.SchemaComponent; 46 import org.netbeans.modules.xml.schema.model.SchemaComponentReference; 47 import org.netbeans.modules.xml.schema.model.SchemaModel; 48 import org.netbeans.modules.xml.schema.model.SchemaModelFactory; 49 import org.netbeans.modules.xml.schema.refactoring.ui.DisplayInfoVisitor; 50 import org.netbeans.modules.xml.schema.refactoring.ui.DisplayInfoVisitor.DisplayInfo; 51 import org.netbeans.modules.xml.schema.refactoring.ui.QueryUtilities; 52 import org.netbeans.modules.xml.xam.Named; 53 import org.openide.ErrorManager; 54 import org.openide.explorer.ExplorerManager; 55 import org.openide.explorer.view.BeanTreeView; 56 import org.openide.nodes.AbstractNode; 57 import org.openide.nodes.Children; 58 import org.openide.nodes.Node; 59 import org.openide.nodes.PropertySupport; 60 import org.openide.nodes.Sheet; 61 import org.openide.util.NbBundle; 62 63 public class WhereUsedExplorer extends JPanel implements ExplorerManager.Provider { 64 65 static final long serialVersionUID = 1L; 66 protected SchemaModel model; 67 protected ExplorerManager explorerManager; 68 protected CustomizerTreeView treeView; 69 protected int count; protected Action nodePreferredAction; 71 72 public static final String ICON_BASE = 73 "org/netbeans/modules/xml/schema/ui/nodes/resources/"; 74 public static final String COMPLEX_TYPE_IMAGE = "complextype.png"; 75 public static final String ELEMENT_IMAGE = "element.png"; 76 public static final String SIMPLE_TYPE_IMAGE = "simpletype.png"; 77 public static final String PRIMITIVE_TYPE_IMAGE = SIMPLE_TYPE_IMAGE; 78 public static final String GROUP_IMAGE = "complextype.png"; 79 public static final String ATTRIBUTE_IMAGE = "attribute.png"; 80 public static final String ATTRIBUTE_GROUP_IMAGE = "attribute.png"; 81 82 public static final String SELECTION_CHANGED = "selection-changed"; 84 85 89 public WhereUsedExplorer(SchemaModel model) { 90 this.model = model; 91 initialize(); 92 } 93 94 98 private void initialize() { 99 removeAll(); 100 setLayout(new BorderLayout ()); 102 explorerManager = new ExplorerManager(); 103 Node root = createTree(); 104 105 treeView=new CustomizerTreeView(); 107 treeView.setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION); 108 treeView.setRootVisible(root.getChildren().getNodesCount()>0?false:true); 109 treeView.setDefaultActionAllowed(true); 110 Object key = "org.openide.actions.PopupAction"; 111 KeyStroke ks = KeyStroke.getKeyStroke("shift F10"); 112 treeView.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(ks, key); 113 114 add(treeView,BorderLayout.CENTER); 115 explorerManager.setRootContext(root); 116 117 addComponentListener(new ComponentAdapter (){ 118 public void componentResized(ComponentEvent e) { 119 removeComponentListener(this); Dimension d = getSize(); 124 int rh = treeView.getRowHeight(); 125 int totalH = rh * count; 126 if (d.height > totalH){ 127 Node[] catNodes = explorerManager.getRootContext().getChildren().getNodes(); 129 for (int i = 0; i < catNodes.length;i++) { 130 if (!catNodes[i].getName().equals( 131 NbBundle.getMessage(WhereUsedExplorer.class,"LBL_Primitives"))){ 132 treeView.expandNode(catNodes[i]); 133 } 134 } 135 } 136 } 137 }); 138 } 139 144 public void setNodePreferredAction(Action action){ 145 this.nodePreferredAction = action; 146 } 147 148 public SchemaComponent getSelectedSchemaComponent() { 149 QueryCustomizerNode node = null; 150 Node[] selNodes = explorerManager.getSelectedNodes(); 151 if (selNodes != null && selNodes.length > 0){ 152 if (!(selNodes[0] instanceof QueryCustomizerNode)){ 153 return null; 154 } 155 node = (QueryCustomizerNode)selNodes[0]; 156 return node.getSchemaComponent(); 157 158 } else { 159 return null; 160 } 161 } 162 163 protected Node findNodeForRef(SchemaComponentReference ref){ 164 Node node = null; 165 Node root = explorerManager.getRootContext(); 166 SchemaComponent sc = ref.get(); 167 Named named = null; 168 if (sc instanceof Named){ 169 named = (Named)sc; 170 } else{ 171 return null; 172 } 173 if (root == null){ 174 return null; 175 } 176 Node[] cats = root.getChildren().getNodes(); 177 if (cats != null){ 178 for (Node n:cats){ 179 Children ch = n.getChildren(); 180 node = ch.findChild(named.getName()); 181 if (node != null){ 182 return node; 183 } 184 } 185 } 186 return null; 187 188 } 189 190 protected Node createTree() { 191 count = 0; 192 Children.Array categories = new Children.Array(); 193 AbstractNode root = new AbstractNode(categories); 194 root.setName(NbBundle.getMessage(WhereUsedExplorer.class, 196 "LBL_Global_Comps")); 197 198 ArrayList <AbstractNode> catItems = new ArrayList <AbstractNode>(); 199 200 Schema schema = model.getSchema(); 201 202 211 212 213 AbstractNode catNode = QueryUtilities.createCategoryNode(AnalysisConstants.GlobalTypes.COMPLEX_TYPE); 214 count++; 215 String icon_str = ICON_BASE + COMPLEX_TYPE_IMAGE; 216 catItems.add(catNode); 217 for(GlobalComplexType g : schema.getComplexTypes()) { 218 ArrayList <QueryCustomizerNode> items = new ArrayList <QueryCustomizerNode>(); 219 createCustomizerNode(items, g, icon_str); 220 catNode.getChildren().add((QueryCustomizerNode[]) items.toArray(new QueryCustomizerNode[items.size()])); 221 } 222 223 catNode = QueryUtilities.createCategoryNode(AnalysisConstants.GlobalTypes.ELEMENT); 224 count++; 225 icon_str = ICON_BASE + ELEMENT_IMAGE; 226 catItems.add(catNode); 227 for(GlobalElement g : schema.getElements()) { 228 ArrayList <QueryCustomizerNode> items = new ArrayList <QueryCustomizerNode>(); 229 createCustomizerNode(items, g, icon_str); 230 catNode.getChildren().add((QueryCustomizerNode[]) items.toArray(new QueryCustomizerNode[items.size()])); 231 } 232 233 234 catNode = QueryUtilities.createCategoryNode(AnalysisConstants.GlobalTypes.SIMPLE_TYPE); 235 count++; 236 icon_str = ICON_BASE + SIMPLE_TYPE_IMAGE; 237 catItems.add(catNode); 238 for(GlobalSimpleType g : schema.getSimpleTypes()) { 239 ArrayList <QueryCustomizerNode> items = new ArrayList <QueryCustomizerNode>(); 240 createCustomizerNode(items, g, icon_str); 241 catNode.getChildren().add((QueryCustomizerNode[]) items.toArray(new QueryCustomizerNode[items.size()])); 242 243 } 244 245 246 catNode = QueryUtilities.createCategoryNode(AnalysisConstants.GlobalTypes.PRIMITIVE); 248 count++; 249 icon_str = ICON_BASE + PRIMITIVE_TYPE_IMAGE; 250 catItems.add(catNode); 251 for(GlobalSimpleType g : SchemaModelFactory.getDefault(). 252 getPrimitiveTypesModel().getSchema().getSimpleTypes()) { 253 ArrayList <QueryCustomizerNode> items = new ArrayList <QueryCustomizerNode>(); 254 createCustomizerNode(items, g, icon_str, true); catNode.getChildren().add((QueryCustomizerNode[]) items.toArray(new QueryCustomizerNode[items.size()])); 256 } 257 258 259 catNode = QueryUtilities.createCategoryNode(AnalysisConstants.GlobalTypes.GROUP); 260 count++; 261 icon_str = ICON_BASE + GROUP_IMAGE; 262 catItems.add(catNode); 263 for(GlobalGroup g : schema.getGroups()) { 264 ArrayList <QueryCustomizerNode> items = new ArrayList <QueryCustomizerNode>(); 265 createCustomizerNode(items, g, icon_str); 266 catNode.getChildren().add((QueryCustomizerNode[]) items.toArray(new QueryCustomizerNode[items.size()])); 267 } 268 269 catNode = QueryUtilities.createCategoryNode(AnalysisConstants.GlobalTypes.ATTRIBUTE); 270 count++; 271 icon_str = ICON_BASE + ATTRIBUTE_IMAGE; 272 catItems.add(catNode); 273 for(GlobalAttribute g : schema.getAttributes()) { 274 ArrayList <QueryCustomizerNode> items = new ArrayList <QueryCustomizerNode>(); 275 createCustomizerNode(items, g, icon_str); 276 catNode.getChildren().add((QueryCustomizerNode[]) items.toArray(new QueryCustomizerNode[items.size()])); 277 } 278 279 280 281 catNode = QueryUtilities.createCategoryNode(AnalysisConstants.GlobalTypes.ATTRIBUTE_GROUP); 282 count++; 283 icon_str = ICON_BASE + ATTRIBUTE_GROUP_IMAGE; 284 catItems.add(catNode); 285 for(GlobalAttributeGroup g : schema.getAttributeGroups()) { 286 ArrayList <QueryCustomizerNode> items = new ArrayList <QueryCustomizerNode>(); 287 createCustomizerNode(items, g, icon_str); 288 catNode.getChildren().add((QueryCustomizerNode[]) items.toArray(new QueryCustomizerNode[items.size()])); 289 } 290 291 292 293 294 295 categories.add((AbstractNode[]) 296 catItems.toArray(new AbstractNode[catItems.size()])); 297 298 299 300 301 return root; 302 } 303 304 305 309 protected void createCustomizerNode(List <QueryCustomizerNode> items, Named c, String icon_base_with_ext, boolean primitive){ 310 QueryCustomizerNode n = null; 311 if (primitive){ 312 n = new QueryCustomizerNode(Children.LEAF, c, primitive, model); 313 } else { 314 n = new QueryCustomizerNode(Children.LEAF, c, primitive); 315 } 316 317 n.setIconBaseWithExtension(icon_base_with_ext); 318 n.setName(c.getName()); 319 items.add(n); 320 if (!primitive){ 321 count++; 322 } 323 } 324 325 326 330 protected void createCustomizerNode(List <QueryCustomizerNode> items, Named c, String icon_base_with_ext){ 331 createCustomizerNode(items, c, icon_base_with_ext, false); 332 } 333 334 335 336 337 341 public ExplorerManager getExplorerManager() { 342 return explorerManager; 343 } 344 345 346 347 public void removePropertyChangeListener(PropertyChangeListener listener) { 351 treeView.removePropertyChangeListener(listener); 352 } 353 354 public void addPropertyChangeListener(PropertyChangeListener listener) { 355 treeView.addPropertyChangeListener(listener); 356 } 357 358 public String getTitle() { 359 return NbBundle.getMessage(WhereUsedExplorer.class, "LBL_Schema_Queries"); 360 } 361 362 public JComponent getComponent() { 363 return this; 364 } 365 366 public boolean requestFocusInWindow() { 367 368 return treeView.requestFocusInWindow(); 369 } 370 371 375 379 protected class CustomizerTreeView extends BeanTreeView { 380 static final long serialVersionUID = 1L; 381 382 387 public CustomizerTreeView() { 388 super(); 389 390 setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); 391 setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 392 393 } 394 395 public int getRowHeight() { 396 return tree.getRowHeight(); 397 } 398 399 public void setSelectedNode(Node node){ 400 try { 401 selectionChanged(new Node[] {node}, explorerManager); 402 } catch (PropertyVetoException ex) { 403 ErrorManager.getDefault().notify(ex); 404 } 405 } 406 407 408 @Override 409 protected void selectionChanged(Node[] nodes, ExplorerManager eMgr ) throws PropertyVetoException { 410 super.selectionChanged(nodes, eMgr); 411 if (nodes != null && nodes.length > 0){ 412 if (nodes[0] instanceof QueryCustomizerNode) { 413 firePropertyChange(SELECTION_CHANGED, null, Boolean.TRUE); 415 return; 416 } 417 } 418 firePropertyChange(SELECTION_CHANGED, null, Boolean.FALSE); 419 420 } 421 422 } 423 424 425 429 public class QueryCustomizerNode extends AbstractNode { 430 431 protected String type; 432 protected SchemaComponent sc; 433 protected boolean isPrimitive; 434 protected SchemaModel userModel; 436 437 public QueryCustomizerNode(Children children, Named sc, boolean primitive){ 438 this(children, sc, primitive, null); 439 440 441 } 442 443 444 public QueryCustomizerNode(Children children, Named sc, boolean primitive, SchemaModel userModel){ 445 super(children); 446 this.sc = SchemaComponent.class.cast(sc); 447 this.isPrimitive = primitive; 448 this.userModel = userModel; 449 450 451 } 452 453 public SchemaModel getUserSchemaModel(){ 454 return userModel; 455 } 456 457 461 @Override 462 protected Sheet createSheet() { 463 Sheet sheet=Sheet.createDefault(); 464 Sheet.Set set=sheet.get(Sheet.PROPERTIES); 465 466 set.put( 467 new PropertySupport("type",String .class, 468 NbBundle.getMessage(WhereUsedExplorer.class, 469 "PROP_SchemaComponentNode_Type"), 470 "",true,false) { 471 public Object getValue() { 472 if (isPrimitive){ 473 return NbBundle.getMessage( 474 WhereUsedExplorer.class, 475 "LBL_Primitives"); 476 } else { 477 DisplayInfoVisitor div = new DisplayInfoVisitor(); 478 DisplayInfo info = div.getDisplayInfo(sc); 479 return info.getCompType(); 480 } 481 } 482 483 public void setValue(Object value) { 484 } 486 }); 487 488 return sheet; 489 } 490 491 496 public SchemaComponent getSchemaComponent() { 497 return sc; 498 } 499 500 504 public Action getPreferredAction() { 505 506 if (nodePreferredAction != null){ 507 return nodePreferredAction; 508 } 509 return super.getPreferredAction(); 510 511 } 512 513 public boolean isPrimitive() { 514 return isPrimitive; 515 } 516 517 518 } 520 521 } | Popular Tags |