KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > netbeans > modules > xml > wsdl > ui > api > property > ElementOrTypeOrMessagePartPropertyPanel


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 /*
21  * Created on May 16, 2005
22  *
23  * To change the template for this generated file go to
24  * Window - Preferences - Java - Code Generation - Code and Comments
25  */

26 package org.netbeans.modules.xml.wsdl.ui.api.property;
27
28 import java.awt.BorderLayout JavaDoc;
29 import java.beans.PropertyChangeEvent JavaDoc;
30 import java.beans.PropertyChangeListener JavaDoc;
31 import java.beans.PropertyChangeSupport JavaDoc;
32 import java.util.ArrayList JavaDoc;
33 import java.util.Collection JavaDoc;
34 import java.util.List JavaDoc;
35 import java.util.regex.Matcher JavaDoc;
36 import java.util.regex.Pattern JavaDoc;
37
38 import javax.swing.JPanel JavaDoc;
39
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.GlobalSimpleType;
43 import org.netbeans.modules.xml.schema.model.GlobalType;
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.SchemaModelReference;
48 import org.netbeans.modules.xml.schema.ui.nodes.SchemaNodeFactory;
49 import org.netbeans.modules.xml.schema.ui.nodes.categorized.CategorizedSchemaNodeFactory;
50 import org.netbeans.modules.xml.wsdl.model.Import;
51 import org.netbeans.modules.xml.wsdl.model.Part;
52 import org.netbeans.modules.xml.wsdl.model.Types;
53 import org.netbeans.modules.xml.wsdl.model.WSDLComponent;
54 import org.netbeans.modules.xml.wsdl.model.WSDLModel;
55 import org.netbeans.modules.xml.wsdl.ui.netbeans.module.Utility;
56 import org.netbeans.modules.xml.wsdl.ui.view.treeeditor.ImportFolderNode;
57 import org.netbeans.modules.xml.wsdl.ui.view.treeeditor.MessageFolderNode;
58 import org.netbeans.modules.xml.wsdl.ui.view.treeeditor.NodesFactory;
59 import org.netbeans.modules.xml.wsdl.ui.wsdl.nodes.XSDBuiltInTypeFolderNode;
60 import org.netbeans.modules.xml.wsdl.ui.wsdl.nodes.XSDTypesNode;
61 import org.openide.explorer.ExplorerManager;
62 import org.openide.explorer.propertysheet.PropertyEnv;
63 import org.openide.explorer.view.BeanTreeView;
64 import org.openide.nodes.AbstractNode;
65 import org.openide.nodes.Children;
66 import org.openide.nodes.FilterNode;
67 import org.openide.nodes.Node;
68 import org.openide.util.Lookup;
69 import org.openide.util.NbBundle;
70
71
72
73 /**
74  * @author radval
75  *
76  * To change the template for this generated type comment go to
77  * Window - Preferences - Java - Code Generation - Code and Comments
78  */

79 public class ElementOrTypeOrMessagePartPropertyPanel extends JPanel JavaDoc {
80
81     private PropertyEnv mEnv;
82
83     private WsdlPartnerLinkTypeTreeView mTreeView;
84
85     private Node mSelectedNode;
86
87     private WSDLModel mModel;
88
89     private ElementOrTypeOrMessagePartProvider mProv;
90
91
92     public ElementOrTypeOrMessagePartPropertyPanel(ElementOrTypeOrMessagePartProvider prov, PropertyEnv env) {
93         this.mProv = prov;
94         this.mEnv = env;
95         this.mEnv.setState(PropertyEnv.STATE_INVALID);
96
97         this.mModel = mProv.getModel();
98
99         initGUI();
100     }
101
102     private void initGUI() {
103         this.setLayout(new BorderLayout JavaDoc());
104         ElementOrTypeOrMessagePart elementOrTypeOrMessagePart = mProv.getValue();
105         
106         this.mTreeView = new WsdlPartnerLinkTypeTreeView(elementOrTypeOrMessagePart);
107         this.add(BorderLayout.CENTER, this.mTreeView);
108     }
109
110     /** Override method to detect the OK button */
111     @Override JavaDoc
112     public void removeNotify() {
113         if (mEnv.getState().equals(PropertyEnv.STATE_VALID)) {
114             if (mSelectedNode != null) {
115                 ElementOrTypeOrMessagePart elementOrTypeOrMessagePart = null;
116                 WSDLComponent comp = (WSDLComponent) mSelectedNode.getLookup().lookup(WSDLComponent.class);
117                 if (comp != null) {
118                     if (comp instanceof Part) {
119                         elementOrTypeOrMessagePart = new ElementOrTypeOrMessagePart((Part) comp, mProv.getModel());
120                     }
121                 } else {
122                     SchemaComponent sc = null;
123                     SchemaComponentReference reference = (SchemaComponentReference) mSelectedNode.getLookup().lookup(SchemaComponentReference.class);
124                     if (reference != null) {
125                         sc = reference.get();
126                     }
127                     if (sc == null) {
128                         sc = (SchemaComponent) mSelectedNode.getLookup().lookup(SchemaComponent.class);
129                     }
130
131                     if (sc != null) {
132                         if (sc instanceof GlobalType) {
133                             elementOrTypeOrMessagePart = createType((GlobalType) sc);
134                         } else if (sc instanceof GlobalElement) {
135                             elementOrTypeOrMessagePart = createElement((GlobalElement) sc);
136                         }
137                     }
138                 }
139                 
140
141                 
142                 if(elementOrTypeOrMessagePart != null) {
143                     this.firePropertyChange(ElementOrTypePropertyEditor.PROP_NAME, null, elementOrTypeOrMessagePart);
144                 }
145
146             }
147
148         } else {
149         }
150         super.removeNotify();
151     }
152
153     private ElementOrTypeOrMessagePart createElement(GlobalElement element) {
154         return new ElementOrTypeOrMessagePart(element, mProv.getModel());
155     }
156
157     private ElementOrTypeOrMessagePart createType(GlobalType type) {
158         return new ElementOrTypeOrMessagePart(type, mProv.getModel());
159     }
160
161     private class WsdlPartnerLinkTypeTreeView
162             extends JPanel JavaDoc implements ExplorerManager.Provider {
163
164         private BeanTreeView btv;
165
166         private ExplorerManager manager;
167
168
169         public static final String JavaDoc PROP_VALID_NODE_SELECTED = "PROP_VALID_NODE_SELECTED";//NOI18N
170

171         public static final String JavaDoc PROP_DUPLICATE_NODE_SELECTED = "PROP_DUPLICATE_NODE_SELECTED"; //NOI18N
172

173         public PropertyChangeSupport JavaDoc pChangeSupport = new PropertyChangeSupport JavaDoc(this);
174
175         private Node mRootNode;
176
177         private ElementOrTypeOrMessagePart previousSelection;
178
179
180
181
182         public WsdlPartnerLinkTypeTreeView(ElementOrTypeOrMessagePart elementOrType) {
183             initGUI();
184             previousSelection = elementOrType;
185         }
186
187
188         @Override JavaDoc
189         public void addPropertyChangeListener(PropertyChangeListener JavaDoc listener) {
190             pChangeSupport.addPropertyChangeListener(listener);
191         }
192
193         @Override JavaDoc
194         public void removePropertyChangeListener(PropertyChangeListener JavaDoc listener) {
195             pChangeSupport.removePropertyChangeListener(listener);
196         }
197
198         private void initGUI() {
199             this.setLayout(new BorderLayout JavaDoc());
200
201             manager = new ExplorerManager();
202             manager.addPropertyChangeListener(new ExplorerPropertyChangeListener());
203
204             mRootNode = new AbstractNode(new Children.Array());
205             populateRootNode();
206             manager.setRootContext( mRootNode );
207
208             
209             // Create the templates view
210
btv = new BeanTreeView();
211             btv.setRootVisible( false );
212             btv.setSelectionMode( javax.swing.tree.TreeSelectionModel.SINGLE_TREE_SELECTION );
213             btv.setPopupAllowed( false );
214             btv.expandNode(mRootNode);
215             btv.setDefaultActionAllowed(false);
216             Utility.expandNodes(btv, 4, mRootNode);
217             manager.setExploredContext(mRootNode);
218             this.add(btv, BorderLayout.CENTER);
219             btv.setName(NbBundle.getMessage(ElementOrTypeOrMessagePartPropertyPanel.class, "ElementOrTypeOrMessagePartPropertyPanel.btv.name")); // NOI18N
220
btv.getAccessibleContext().setAccessibleName(NbBundle.getMessage(ElementOrTypeOrMessagePartPropertyPanel.class, "ElementOrTypeOrMessagePartPropertyPanel.btv.AccessibleContext.accessibleName")); // NOI18N
221
btv.getAccessibleContext().setAccessibleDescription(NbBundle.getMessage(ElementOrTypeOrMessagePartPropertyPanel.class, "ElementOrTypeOrMessagePartPropertyPanel.btv.AccessibleContext.accessibleDescription")); // NOI18N
222
}
223
224         public ExplorerManager getExplorerManager() {
225             return manager;
226         }
227
228         BeanTreeView getTreeView() {
229             return this.btv;
230         }
231
232         private void populateRootNode() {
233             //show current messages
234
MessageFolderNode msgFolderNode = new MessageFolderNode(mModel.getDefinitions());
235             mRootNode.getChildren().add(new Node[] {new EnabledNode(msgFolderNode)});
236             
237             //show wsdl imports
238
ImportFolderNode impFolderNode = new ImportFolderNode(mModel.getDefinitions());
239             mRootNode.getChildren().add(new Node[] {new EnabledNode(impFolderNode)});
240             
241             
242             //type in current wsdl document
243
Types types = mModel.getDefinitions().getTypes();
244             if(types != null) {
245                 XSDTypesNode typesNode = new XSDTypesNode(NodesFactory.getInstance().create(types), types.getSchemas());
246                 mRootNode.getChildren().add(new Node[] {new EnabledNode(typesNode)});
247             }
248
249             // built in schema types
250
XSDBuiltInTypeFolderNode builtInTypes = new XSDBuiltInTypeFolderNode();
251             mRootNode.getChildren().add(new Node[] {new EnabledNode(builtInTypes)});
252
253             //imported schemas
254
List JavaDoc<Class JavaDoc<? extends SchemaComponent>> filters = new ArrayList JavaDoc<Class JavaDoc<? extends SchemaComponent>>();
255             filters.add(GlobalSimpleType.class);
256             filters.add(GlobalComplexType.class);
257             filters.add(GlobalElement.class);
258             filters.add(SchemaModelReference.class);
259             Collection JavaDoc<Import> importedSchemas = mModel.getDefinitions().getImports();
260             for (Import imp : importedSchemas) {
261                 List JavaDoc list = imp.getModel().findSchemas(imp.getNamespace());
262                 if (list != null && list.size() > 0) {
263                     Schema schema = (Schema) list.get(0);
264                     SchemaNodeFactory factory = new CategorizedSchemaNodeFactory(
265                             schema.getModel(), filters, Lookup.EMPTY);
266                     Node node = factory.createNode(schema);
267                     mRootNode.getChildren().add(new Node[] { new EnabledNode(node) });
268                 }
269             }
270             
271         }
272
273
274
275         class ExplorerPropertyChangeListener implements PropertyChangeListener JavaDoc {
276
277             public void propertyChange(PropertyChangeEvent JavaDoc evt) {
278                 if(evt.getPropertyName().equals(ExplorerManager.PROP_SELECTED_NODES)) {
279                     Node[] nodes = (Node[]) evt.getNewValue();
280                     if(nodes.length > 0) {
281                         Node node = nodes[0];
282                         //set the selected node to null and state as invalid by default
283
mSelectedNode = null;
284                         mEnv.setState(PropertyEnv.STATE_INVALID);
285                         
286                         WSDLComponent comp = (WSDLComponent) node.getLookup().lookup(WSDLComponent.class);
287                         if (comp != null && comp instanceof Part) {
288                             mSelectedNode = node;
289                             mEnv.setState(PropertyEnv.STATE_VALID);
290                             return;
291                         }
292                         SchemaComponent sc = null;
293                         SchemaComponentReference reference = (SchemaComponentReference) node.getLookup().lookup(SchemaComponentReference.class);
294                         if (reference != null) {
295                             sc = reference.get();
296                         }
297                         if (sc == null) {
298                             sc = (SchemaComponent) node.getLookup().lookup(SchemaComponent.class);
299                         }
300                         
301                         if (sc != null && (sc instanceof GlobalType || sc instanceof GlobalElement)) {
302                             mSelectedNode = node;
303                             mEnv.setState(PropertyEnv.STATE_VALID);
304                         }
305                     }
306                 }
307             }
308         }
309     }
310     
311     /*
312      * Filternode to make the nodes look enabled.
313      */

314     public static class EnabledNode extends FilterNode {
315         private static Pattern JavaDoc pattern = Pattern.compile("(^<font.*>)(.*)(<.*>$)");
316
317         public EnabledNode(Node node) {
318             super(node, new EnabledChildren(node));
319         }
320         
321         @Override JavaDoc
322         public String JavaDoc getHtmlDisplayName()
323         {
324             //strips off font tag, to make it not grey. IZ
325
String JavaDoc retValue = super.getHtmlDisplayName();
326             if(retValue == null) retValue = getDisplayName();
327             
328             
329             if(retValue != null) {
330                 Matcher JavaDoc matcher = pattern.matcher(retValue);
331                 if (matcher.find()) {
332                     return matcher.group(2);
333                 }
334             }
335             return retValue;
336         }
337         
338         
339     }
340     
341     private static class EnabledChildren extends FilterNode.Children {
342
343         public EnabledChildren(Node node) {
344             super(node);
345         }
346         
347         @Override JavaDoc
348         protected Node[] createNodes(Node n) {
349              return new Node[] {new EnabledNode(n)};
350         }
351         
352     }
353     
354     
355 }
356
357
Popular Tags