KickJava   Java API By Example, From Geeks To Geeks.

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


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.SchemaComponentNode;
49 import org.netbeans.modules.xml.schema.ui.nodes.SchemaNodeFactory;
50 import org.netbeans.modules.xml.schema.ui.nodes.categorized.CategorizedSchemaNodeFactory;
51 import org.netbeans.modules.xml.schema.ui.nodes.categorized.ReadOnlySchemaComponentNode;
52 import org.netbeans.modules.xml.wsdl.model.Import;
53 import org.netbeans.modules.xml.wsdl.model.Types;
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.NodesFactory;
57 import org.netbeans.modules.xml.wsdl.ui.wsdl.nodes.XSDBuiltInTypeFolderNode;
58 import org.netbeans.modules.xml.wsdl.ui.wsdl.nodes.XSDTypesNode;
59 import org.openide.explorer.ExplorerManager;
60 import org.openide.explorer.propertysheet.PropertyEnv;
61 import org.openide.explorer.view.BeanTreeView;
62 import org.openide.nodes.AbstractNode;
63 import org.openide.nodes.Children;
64 import org.openide.nodes.FilterNode;
65 import org.openide.nodes.Node;
66 import org.openide.util.Lookup;
67 import org.openide.util.NbBundle;
68
69
70
71 /**
72  * @author radval
73  *
74  * To change the template for this generated type comment go to
75  * Window - Preferences - Java - Code Generation - Code and Comments
76  */

77 public class ElementOrTypePropertyPanel extends JPanel JavaDoc {
78
79     /**
80      *
81      */

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

162         private static final long serialVersionUID = -6287320647253756110L;
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 ElementOrType previousSelection;
178
179
180
181
182         public WsdlPartnerLinkTypeTreeView(ElementOrType 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(ElementOrTypePropertyPanel.class, "ElementOrTypePropertyPanel.btv.name")); // NOI18N
220
btv.getAccessibleContext().setAccessibleName(NbBundle.getMessage(ElementOrTypePropertyPanel.class, "ElementOrTypePropertyPanel.btv.AccessibleContext.accessibleName")); // NOI18N
221
btv.getAccessibleContext().setAccessibleDescription(NbBundle.getMessage(ElementOrTypePropertyPanel.class, "ElementOrTypePropertyPanel.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             //type in current wsdl document
234
Types types = mModel.getDefinitions().getTypes();
235             if(types != null) {
236                 XSDTypesNode typesNode = new XSDTypesNode(NodesFactory.getInstance().create(types), types.getSchemas());
237                 mRootNode.getChildren().add(new Node[] {new EnabledNode(typesNode)});
238             }
239
240             // built in schema types
241
XSDBuiltInTypeFolderNode builtInTypes = new XSDBuiltInTypeFolderNode();
242             mRootNode.getChildren().add(new Node[] {new EnabledNode(builtInTypes)});
243
244             //imported schemas
245
List JavaDoc<Class JavaDoc<? extends SchemaComponent>> filters = new ArrayList JavaDoc<Class JavaDoc<? extends SchemaComponent>>();
246             filters.add(GlobalSimpleType.class);
247             filters.add(GlobalComplexType.class);
248             filters.add(GlobalElement.class);
249             filters.add(SchemaModelReference.class);
250             Collection JavaDoc<Import> importedSchemas = mModel.getDefinitions().getImports();
251             for (Import imp : importedSchemas) {
252                 List JavaDoc list = imp.getModel().findSchemas(imp.getNamespace());
253                 if (list != null && list.size() > 0) {
254                     Schema schema = (Schema) list.get(0);
255                     SchemaNodeFactory factory = new CategorizedSchemaNodeFactory(
256                             schema.getModel(), filters, Lookup.EMPTY);
257                     Node node = factory.createNode(schema);
258                     mRootNode.getChildren().add(new Node[] { new EnabledNode(node) });
259                 }
260             }
261             
262         }
263
264
265
266         class ExplorerPropertyChangeListener implements PropertyChangeListener JavaDoc {
267
268             public void propertyChange(PropertyChangeEvent JavaDoc evt) {
269                 if(evt.getPropertyName().equals(ExplorerManager.PROP_SELECTED_NODES)) {
270                     Node[] nodes = (Node[]) evt.getNewValue();
271                     if(nodes.length > 0) {
272                         Node node = nodes[0];
273                         //set the selected node to null and state as invalid by default
274
mSelectedNode = null;
275                         mEnv.setState(PropertyEnv.STATE_INVALID);
276                         SchemaComponent sc = null;
277                         SchemaComponentReference reference = (SchemaComponentReference) node.getLookup().lookup(SchemaComponentReference.class);
278                         if (reference != null) {
279                             sc = reference.get();
280                         }
281                         if (sc == null) {
282                             sc = (SchemaComponent) node.getLookup().lookup(SchemaComponent.class);
283                         }
284                         
285                         if (sc != null && (sc instanceof GlobalType || sc instanceof GlobalElement)) {
286                             mSelectedNode = node;
287                             mEnv.setState(PropertyEnv.STATE_VALID);
288                         }
289                     }
290                 }
291             }
292         }
293     }
294     
295     /*
296      * Filternode to make the nodes look enabled.
297      */

298     public static class EnabledNode extends FilterNode {
299         private static Pattern JavaDoc pattern = Pattern.compile("(^<font.*>)(.*)(<.*>$)");
300
301         public EnabledNode(Node node) {
302             super(node, new EnabledChildren(node));
303         }
304         
305         @Override JavaDoc
306         public String JavaDoc getHtmlDisplayName()
307         {
308             //strips off font tag, to make it not grey. IZ
309
String JavaDoc retValue = super.getHtmlDisplayName();
310             if(retValue == null) retValue = getDisplayName();
311             
312             
313             if(retValue != null) {
314                 Matcher JavaDoc matcher = pattern.matcher(retValue);
315                 if (matcher.find()) {
316                     return matcher.group(2);
317                 }
318             }
319             return retValue;
320         }
321         
322         
323     }
324     
325     private static class EnabledChildren extends FilterNode.Children {
326
327         public EnabledChildren(Node node) {
328             super(node);
329         }
330         
331         @Override JavaDoc
332         protected Node[] createNodes(Node n) {
333              return new Node[] {new EnabledNode(n)};
334         }
335         
336     }
337     
338     
339 }
340
341
Popular Tags