KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > netbeans > modules > xml > schema > refactoring > query > views > WhereUsedExplorer


1 /*
2  * The contents of this file are subject to the terms of the Common Development
3  * and Distribution License (the License). You may not use this file except in
4  * compliance with the License.
5  *
6  * You can obtain a copy of the License at http://www.netbeans.org/cddl.html
7  * or http://www.netbeans.org/cddl.txt.
8  *
9  * When distributing Covered Code, include this CDDL Header Notice in each file
10  * and include the License file at http://www.netbeans.org/cddl.txt.
11  * If applicable, add the following below the CDDL Header, with the fields
12  * enclosed by brackets [] replaced by your own identifying information:
13  * "Portions Copyrighted [year] [name of copyright owner]"
14  *
15  * The Original Software is NetBeans. The Initial Developer of the Original
16  * Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun
17  * Microsystems, Inc. All Rights Reserved.
18  */

19
20 package org.netbeans.modules.xml.schema.refactoring.query.views;
21
22 import java.awt.BorderLayout JavaDoc;
23 import java.awt.Dimension JavaDoc;
24 import java.awt.event.ComponentAdapter JavaDoc;
25 import java.awt.event.ComponentEvent JavaDoc;
26 import java.beans.PropertyChangeListener JavaDoc;
27 import java.beans.PropertyVetoException JavaDoc;
28 import java.util.ArrayList JavaDoc;
29 import java.util.List JavaDoc;
30 import javax.swing.Action JavaDoc;
31 import javax.swing.JComponent JavaDoc;
32 import javax.swing.JPanel JavaDoc;
33 import javax.swing.JScrollPane JavaDoc;
34 import javax.swing.KeyStroke JavaDoc;
35 import javax.swing.ListSelectionModel JavaDoc;
36 import javax.swing.tree.TreeSelectionModel JavaDoc;
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 JavaDoc 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; // node Count, excluding primitives
70
protected Action JavaDoc nodePreferredAction;
71     
72     public static final String JavaDoc ICON_BASE =
73             "org/netbeans/modules/xml/schema/ui/nodes/resources/";
74     public static final String JavaDoc COMPLEX_TYPE_IMAGE = "complextype.png";
75     public static final String JavaDoc ELEMENT_IMAGE = "element.png";
76     public static final String JavaDoc SIMPLE_TYPE_IMAGE = "simpletype.png";
77     public static final String JavaDoc PRIMITIVE_TYPE_IMAGE = SIMPLE_TYPE_IMAGE;
78     public static final String JavaDoc GROUP_IMAGE = "complextype.png";
79     public static final String JavaDoc ATTRIBUTE_IMAGE = "attribute.png";
80     public static final String JavaDoc ATTRIBUTE_GROUP_IMAGE = "attribute.png";
81     
82     public static final String JavaDoc SELECTION_CHANGED = "selection-changed"; // for property change event
83

84     
85     /**
86      * @param model the Schema Model
87      *
88      */

89     public WhereUsedExplorer(SchemaModel model) {
90         this.model = model;
91         initialize();
92     }
93     
94     /**
95      *
96      *
97      */

98     private void initialize() {
99         removeAll();
100 // setPreferredSize(new Dimension(150,200));
101
setLayout(new BorderLayout JavaDoc());
102         explorerManager = new ExplorerManager();
103         Node root = createTree();
104         
105 // nodePreferredAction = new WhereUsedAction(customizer.getColView());
106
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 JavaDoc key = "org.openide.actions.PopupAction";
111         KeyStroke JavaDoc 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 JavaDoc(){
118             public void componentResized(ComponentEvent JavaDoc e) {
119                 // Don't expand nodes if scrolling will be needed
120
// Nodes for Primitive types are not expanded
121
removeComponentListener(this); // only check once
122
// System.out.println("WhereUsedExplorer component listener removed.");
123
Dimension JavaDoc d = getSize();
124                 int rh = treeView.getRowHeight();
125                 int totalH = rh * count;
126                 if (d.height > totalH){
127                     // expand nodes
128
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     /**
140      *
141      * change the default action for the QueryCustomizerNode
142      * Default is WhereUsedAction
143      */

144     public void setNodePreferredAction(Action JavaDoc 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         // this name is visible in the table header of the navigator
195
root.setName(NbBundle.getMessage(WhereUsedExplorer.class,
196                 "LBL_Global_Comps"));
197         
198         ArrayList JavaDoc<AbstractNode> catItems = new ArrayList JavaDoc<AbstractNode>();
199         
200         Schema schema = model.getSchema();
201         
202         /** order of categories suggested by Chris Webster
203          * GlobalComplexTypes
204          * GlobalElements (the ordering of these two really depends on the style of the schema)
205          * GlobalSimpleTypes
206          * primitives
207          * GlobalGroups
208          * Attributes
209          * Attribute Groups
210          */

211         
212         
213         AbstractNode catNode = QueryUtilities.createCategoryNode(AnalysisConstants.GlobalTypes.COMPLEX_TYPE);
214         count++;
215         String JavaDoc icon_str = ICON_BASE + COMPLEX_TYPE_IMAGE;
216         catItems.add(catNode);
217         for(GlobalComplexType g : schema.getComplexTypes()) {
218             ArrayList JavaDoc<QueryCustomizerNode> items = new ArrayList JavaDoc<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 JavaDoc<QueryCustomizerNode> items = new ArrayList JavaDoc<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 JavaDoc<QueryCustomizerNode> items = new ArrayList JavaDoc<QueryCustomizerNode>();
240             createCustomizerNode(items, g, icon_str);
241             catNode.getChildren().add((QueryCustomizerNode[]) items.toArray(new QueryCustomizerNode[items.size()]));
242             
243         }
244         
245         
246         // primitives
247
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 JavaDoc<QueryCustomizerNode> items = new ArrayList JavaDoc<QueryCustomizerNode>();
254             createCustomizerNode(items, g, icon_str, true); // primitive
255
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 JavaDoc<QueryCustomizerNode> items = new ArrayList JavaDoc<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 JavaDoc<QueryCustomizerNode> items = new ArrayList JavaDoc<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 JavaDoc<QueryCustomizerNode> items = new ArrayList JavaDoc<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     /**
306      *
307      *
308      */

309     protected void createCustomizerNode(List JavaDoc<QueryCustomizerNode> items, Named c, String JavaDoc 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     /**
327      *
328      *
329      */

330     protected void createCustomizerNode(List JavaDoc<QueryCustomizerNode> items, Named c, String JavaDoc icon_base_with_ext){
331         createCustomizerNode(items, c, icon_base_with_ext, false);
332     }
333     
334     
335     
336     
337     ///////////////////////////////////////////////////////////
338
// ExplorerManager.Provider interface implementation
339
///////////////////////////////////////////////////////////
340

341     public ExplorerManager getExplorerManager() {
342         return explorerManager;
343     }
344     
345     
346     
347     ///////////////////////////////////////////////////////////
348
// Column interface implementation
349
///////////////////////////////////////////////////////////
350
public void removePropertyChangeListener(PropertyChangeListener JavaDoc listener) {
351         treeView.removePropertyChangeListener(listener);
352     }
353     
354     public void addPropertyChangeListener(PropertyChangeListener JavaDoc listener) {
355         treeView.addPropertyChangeListener(listener);
356     }
357     
358     public String JavaDoc getTitle() {
359         return NbBundle.getMessage(WhereUsedExplorer.class, "LBL_Schema_Queries");
360     }
361     
362     public JComponent JavaDoc getComponent() {
363         return this;
364     }
365     
366     public boolean requestFocusInWindow() {
367         
368         return treeView.requestFocusInWindow();
369     }
370     
371     ////////////////////////////////////////////////////////////////////////////
372
// Inner class
373
////////////////////////////////////////////////////////////////////////////
374

375     /**
376      *
377      *
378      */

379     protected class CustomizerTreeView extends BeanTreeView {
380         static final long serialVersionUID = 1L;
381         
382 // Timer timer; // Swing timer
383
/**
384          *
385          *
386          */

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 JavaDoc ex) {
403                 ErrorManager.getDefault().notify(ex);
404             }
405         }
406         
407         
408         @Override JavaDoc
409                 protected void selectionChanged(Node[] nodes, ExplorerManager eMgr ) throws PropertyVetoException JavaDoc {
410             super.selectionChanged(nodes, eMgr);
411             if (nodes != null && nodes.length > 0){
412                 if (nodes[0] instanceof QueryCustomizerNode) {
413                     // assume it's valid as long as it's a QueryCustomizerNode and not an AbstractNode (category node)
414
firePropertyChange(SELECTION_CHANGED, null, Boolean.TRUE);
415                     return;
416                 }
417             }
418             firePropertyChange(SELECTION_CHANGED, null, Boolean.FALSE);
419            
420         }
421         
422     }
423     
424     
425     /**
426      *
427      *
428      */

429     public class QueryCustomizerNode extends AbstractNode {
430         
431         protected String JavaDoc type;
432         protected SchemaComponent sc;
433         protected boolean isPrimitive;
434         protected SchemaModel userModel; // model for user schema, if primitive
435

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         /**
458          *
459          *
460          */

461         @Override JavaDoc
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 JavaDoc.class,
468                     NbBundle.getMessage(WhereUsedExplorer.class,
469                     "PROP_SchemaComponentNode_Type"),
470                     "",true,false) {
471                 public Object JavaDoc 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 JavaDoc value) {
484                     // Not modifiable
485
}
486             });
487             
488             return sheet;
489         }
490         
491         /**
492          *
493          *
494          *
495          */

496         public SchemaComponent getSchemaComponent() {
497             return sc;
498         }
499         
500         /**
501          *
502          *
503          */

504         public Action JavaDoc 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     }// end QueryCustomizerNode
519

520     
521 }
Popular Tags