KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > netbeans > modules > xml > schema > ui > nodes > categorized > AdvancedGlobalSimpleTypeNode


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.ui.nodes.categorized;
21
22 import java.beans.PropertyChangeEvent JavaDoc;
23 import org.openide.nodes.Children;
24 import org.openide.nodes.Node;
25 import org.openide.nodes.Sheet;
26 import org.openide.nodes.Node.Property;
27 import org.openide.util.NbBundle;
28 import org.netbeans.modules.xml.xam.ComponentEvent;
29 import org.netbeans.modules.xml.axi.datatype.DatatypeFactory;
30 import org.netbeans.modules.xml.schema.model.Enumeration;
31 import org.netbeans.modules.xml.schema.model.BoundaryFacet;
32 import org.netbeans.modules.xml.schema.model.GlobalSimpleType;
33 import org.netbeans.modules.xml.schema.model.LengthFacet;
34 import org.netbeans.modules.xml.schema.model.SchemaComponentReference;
35 import org.netbeans.modules.xml.schema.ui.nodes.SchemaUIContext;
36 import org.netbeans.modules.xml.schema.ui.nodes.schema.GlobalSimpleTypeNode;
37 import org.netbeans.modules.xml.schema.model.SimpleTypeDefinition;
38 import org.netbeans.modules.xml.schema.model.SimpleTypeRestriction;
39 import org.netbeans.modules.xml.schema.model.List;
40 import org.netbeans.modules.xml.schema.model.Pattern;
41 import org.netbeans.modules.xml.schema.model.SchemaComponent;
42 import org.netbeans.modules.xml.schema.model.Whitespace;
43 import org.netbeans.modules.xml.schema.ui.nodes.SchemaComponentNode;
44 import org.netbeans.modules.xml.schema.ui.nodes.SchemaModelFlushWrapper;
45 import org.netbeans.modules.xml.schema.ui.nodes.schema.WhitespaceNode;
46 import org.netbeans.modules.xml.schema.ui.nodes.schema.properties.AdvancedFacetProperty;
47 import org.netbeans.modules.xml.schema.ui.nodes.schema.properties.AdvancedEnumerationProperty;
48 import org.netbeans.modules.xml.schema.ui.nodes.RefreshableChildren;
49 import org.netbeans.modules.xml.schema.ui.nodes.NewTypesFactory;
50 import org.netbeans.modules.xml.schema.ui.nodes.categorized.customizer.SimpleTypeCustomizer;
51 import org.netbeans.modules.xml.xam.ui.customizer.Customizer;
52 import org.netbeans.modules.xml.xam.ui.customizer.CustomizerProvider;
53
54 /**
55  *
56  * @author Todd Fast, todd.fast@sun.com
57  */

58 public class AdvancedGlobalSimpleTypeNode extends GlobalSimpleTypeNode
59 {
60     /**
61      *
62      *
63      */

64     public AdvancedGlobalSimpleTypeNode(SchemaUIContext context,
65             SchemaComponentReference<GlobalSimpleType> reference,
66             Children children)
67     {
68         super(context,reference,children);
69         
70     }
71     
72     @Override JavaDoc
73     public boolean hasCustomizer()
74     {
75         return isEditable();
76     }
77     
78     public CustomizerProvider getCustomizerProvider()
79     {
80         return new CustomizerProvider()
81         {
82             
83             public Customizer getCustomizer()
84             {
85                 return new SimpleTypeCustomizer<GlobalSimpleType>(getReference());
86             }
87         };
88     }
89     
90     
91     @Override JavaDoc
92     protected Sheet createSheet()
93     {
94         Sheet sheet = super.createSheet();
95         Sheet.Set set = sheet.get(Sheet.PROPERTIES);
96         GlobalSimpleType gst = getReference().get();
97         SimpleTypeDefinition typeDef = gst.getDefinition();
98         if(typeDef instanceof SimpleTypeRestriction)
99         {
100             SimpleTypeRestriction str = (SimpleTypeRestriction)typeDef;
101             try
102             {
103                 // facet properties use axi to find appropriate facets
104
java.util.List JavaDoc<Class JavaDoc<? extends SchemaComponent>> facetTypes =
105                         DatatypeFactory.getDefault().
106                         getApplicableSchemaFacets(getReference().get());
107                 for(Class JavaDoc<? extends SchemaComponent> facetType:facetTypes)
108                 {
109                     String JavaDoc facetTypeName = facetType.getSimpleName();
110                     if(facetType == Enumeration.class)
111                     {
112                         Property facetProperty = new AdvancedEnumerationProperty(
113                                 str, SimpleTypeRestriction.ENUMERATION_PROPERTY,
114                                 NbBundle.getMessage(AdvancedLocalSimpleTypeNode.class,
115                                 "PROP_"+facetTypeName+"_DisplayName"), // display name
116
NbBundle.getMessage(AdvancedLocalSimpleTypeNode.class,
117                                 "PROP_"+facetTypeName+"_ShortDescription"), // descr
118
isEditable());
119                         set.put(new SchemaModelFlushWrapper(getReference().get(), facetProperty));
120                         continue;
121                     }
122                     SchemaComponent facet = null;
123                     java.util.List JavaDoc<? extends SchemaComponent> facets =
124                             str.getChildren(facetType);
125                     if(facets!=null && !facets.isEmpty()) facet = facets.get(0);
126                     Class JavaDoc valueType = null;
127                     String JavaDoc property = null;
128                     Class JavaDoc propEditorClass = null;
129                     if(BoundaryFacet.class.isAssignableFrom(facetType))
130                     {
131                         valueType = String JavaDoc.class;
132                         property = BoundaryFacet.VALUE_PROPERTY;
133                     }
134                     else if(LengthFacet.class.isAssignableFrom(facetType))
135                     {
136                         valueType = int.class;
137                         property = LengthFacet.VALUE_PROPERTY;
138                     }
139                     else if(Pattern.class.isAssignableFrom(facetType))
140                     {
141                         valueType = String JavaDoc.class;
142                         property = Pattern.VALUE_PROPERTY;
143                     }
144                     else if(Whitespace.class.isAssignableFrom(facetType))
145                     {
146                         valueType = Whitespace.Treatment.class;
147                         property = Whitespace.VALUE_PROPERTY;
148                         propEditorClass = WhitespaceNode.WhitespaceValueEditor.class;
149                     }
150                     if (valueType!=null && property!=null)
151                     {
152                         Property facetProperty = new AdvancedFacetProperty(
153                                 str, facet, facetType, valueType, property,
154                                 NbBundle.getMessage(AdvancedLocalSimpleTypeNode.class,
155                                 "PROP_"+facetTypeName+"_DisplayName"), // display name
156
NbBundle.getMessage(AdvancedLocalSimpleTypeNode.class,
157                                 "PROP_"+facetTypeName+"_ShortDescription"), // descr
158
propEditorClass
159                                 );
160                         set.put(new SchemaModelFlushWrapper(getReference().get(), facetProperty));
161                     }
162                 }
163             }
164             catch (NoSuchMethodException JavaDoc nsme)
165             {
166                 assert false : "properties should be defined";
167             }
168         }
169         return sheet;
170     }
171     
172     protected NewTypesFactory getNewTypesFactory()
173     {
174         return new AdvancedNewTypesFactory();
175     }
176     
177     
178     public void childrenDeleted(ComponentEvent evt)
179     {
180         super.childrenDeleted(evt);
181         if (isValid())
182         {
183             Object JavaDoc source = evt.getSource();
184             GlobalSimpleType component = getReference().get();
185             if (source == component.getDefinition())
186             {
187                 ((RefreshableChildren) getChildren()).refreshChildren();
188             }
189             if (source == component || source == component.getDefinition())
190             {
191                 updatePropertiesSet();
192                 fireDisplayNameChange(null,getDisplayName());
193             }
194         }
195     }
196     
197     public void childrenAdded(ComponentEvent evt)
198     {
199         super.childrenAdded(evt);
200         if (isValid())
201         {
202             Object JavaDoc source = evt.getSource();
203             GlobalSimpleType component = getReference().get();
204             if (source == component.getDefinition())
205             {
206                 ((RefreshableChildren) getChildren()).refreshChildren();
207             }
208             if(source == component || source == component.getDefinition())
209             {
210                 fireDisplayNameChange(null,getDisplayName());
211             }
212         }
213     }
214     
215     public void valueChanged(ComponentEvent evt)
216     {
217         super.valueChanged(evt);
218         if (isValid())
219         {
220             SimpleTypeDefinition def = getReference().get().getDefinition();
221             if(evt.getSource() == def)
222             {
223                 ((RefreshableChildren) getChildren()).refreshChildren();
224                 fireDisplayNameChange(null,getDisplayName());
225             }
226             else if(def instanceof SimpleTypeRestriction)
227             {
228                 SimpleTypeRestriction str = (SimpleTypeRestriction)def;
229                 if(str.getBase() != null && str.getBase().get() == evt.getSource())
230                 {
231                     ((RefreshableChildren) getChildren()).refreshChildren();
232                 }
233             }
234         }
235     }
236     
237     public void propertyChange(PropertyChangeEvent JavaDoc event)
238     {
239         super.propertyChange(event);
240         if(!isValid()) return;
241         Object JavaDoc source = event.getSource();
242         GlobalSimpleType component = getReference().get();
243         SimpleTypeDefinition def = component.getDefinition();
244         if (source == component && event.getPropertyName().equals(
245                 GlobalSimpleType.DEFINITION_PROPERTY))
246         {
247             updatePropertiesSet();
248         }
249         else if(def instanceof SimpleTypeRestriction)
250         {
251             if(source==def)
252             {
253                 updatePropertiesSet();
254             }
255             else if(def.getChildren().contains(source) && event.getPropertyName().
256                     equals(BoundaryFacet.VALUE_PROPERTY))
257             {
258                 updatePropertiesSet();
259             }
260         }
261     }
262
263     protected void updatePropertiesSet()
264     {
265         Sheet.Set oldSet = getSheet().get(Sheet.PROPERTIES);
266         if(oldSet!=null)
267         {
268             Sheet.Set newSet = createSheet().get(Sheet.PROPERTIES);
269             getSheet().put(newSet);
270             firePropertySetsChange(new Sheet.Set[]{oldSet}, new Sheet.Set[]{newSet});
271         }
272         Node parent = getParentNode();
273         if(parent == null) return;
274         SchemaComponentNode scn = (SchemaComponentNode) parent.
275                 getCookie(SchemaComponentNode.class);
276         if(scn instanceof AdvancedLocalSimpleTypeNode)
277         {
278             ((AdvancedLocalSimpleTypeNode)scn).updatePropertiesSet();
279         }
280         else if(scn instanceof AdvancedGlobalSimpleTypeNode)
281         {
282             ((AdvancedGlobalSimpleTypeNode)scn).updatePropertiesSet();
283         }
284     }
285     
286     public String JavaDoc getHtmlDisplayName()
287     {
288         String JavaDoc gstName = getSuperDefinitionName();
289         if(gstName==null) return super.getHtmlDisplayName();
290
291         String JavaDoc retValue = getDefaultDisplayName();
292         SimpleTypeDefinition definition = getReference().get().getDefinition();
293         String JavaDoc supertypeLabel = null;
294         
295         if(definition instanceof SimpleTypeRestriction)
296         {
297             supertypeLabel = NbBundle.getMessage(AdvancedGlobalSimpleTypeNode.class,
298                     "LBL_SimpleTypeChildren_RestrictionOf",gstName);
299         }
300         if(definition instanceof List)
301         {
302             supertypeLabel = NbBundle.getMessage(AdvancedGlobalSimpleTypeNode.class,
303                     "LBL_SimpleTypeChildren_ListOf",gstName);
304         }
305         if(supertypeLabel!=null)
306         {
307             retValue = retValue+"<font color='#999999'> ("+supertypeLabel+")</font>";
308         }
309         return applyHighlights(retValue);
310     }
311 }
312
Popular Tags