KickJava   Java API By Example, From Geeks To Geeks.

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


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.schema;
21
22 import java.beans.PropertyEditor JavaDoc;
23 import java.beans.PropertyEditorSupport JavaDoc;
24 import org.netbeans.modules.xml.schema.model.Constraint;
25 import org.netbeans.modules.xml.schema.model.Element;
26 import org.netbeans.modules.xml.schema.model.KeyRef;
27 import org.netbeans.modules.xml.schema.model.SchemaComponent;
28 import org.netbeans.modules.xml.schema.model.SchemaComponentReference;
29 import org.netbeans.modules.xml.schema.model.visitor.FindReferredConstraintVisitor;
30 import org.netbeans.modules.xml.schema.ui.nodes.SchemaComponentNode;
31 import org.netbeans.modules.xml.schema.ui.nodes.SchemaModelFlushWrapper;
32 import org.netbeans.modules.xml.schema.ui.nodes.SchemaUIContext;
33 import org.netbeans.modules.xml.schema.ui.nodes.schema.properties.BaseSchemaProperty;
34 import org.openide.ErrorManager;
35 import org.openide.nodes.Node.Property;
36 import org.openide.nodes.Children;
37 import org.openide.nodes.Sheet;
38 import org.openide.util.NbBundle;
39 /**
40  *
41  * @author Todd Fast, todd.fast@sun.com
42  */

43 public class KeyRefNode extends SchemaComponentNode<KeyRef>
44 {
45     /**
46      *
47      *
48      */

49     public KeyRefNode(SchemaUIContext context,
50             SchemaComponentReference<KeyRef> reference,
51             Children children)
52     {
53         super(context,reference,children);
54     setIconBaseWithExtension(
55             "org/netbeans/modules/xml/schema/ui/nodes/resources/keyRef.png");
56     }
57     
58     
59     /**
60      *
61      *
62      */

63     @Override JavaDoc
64     public String JavaDoc getTypeDisplayName()
65     {
66         return NbBundle.getMessage(KeyRefNode.class,
67                 "LBL_KeyRefNode_TypeDisplayName"); // NOI18N
68
}
69     
70     @Override JavaDoc
71     protected Sheet createSheet()
72     {
73         Sheet sheet = super.createSheet();
74         Sheet.Set props = sheet.get(Sheet.PROPERTIES);
75         if (props == null)
76         {
77             props = Sheet.createPropertiesSet();
78             sheet.put(props);
79         }
80         try
81         {
82             // Referer property
83
Property refererProp = new BaseSchemaProperty(
84                     getReference().get(), // schema component
85
Constraint.class, // property value type
86
KeyRef.REFERER_PROPERTY, // property name
87
NbBundle.getMessage(KeyRefNode.class,"PROP_KeyRef_Referer_DisplayName"), // display name
88
NbBundle.getMessage(KeyRefNode.class,"PROP_KeyRef_Referer_ShortDescription"), // descr
89
null // prop editor class
90
)
91             {
92                 public boolean supportsDefaultValue()
93                 {
94                     return false;
95                 }
96
97                 public PropertyEditor JavaDoc getPropertyEditor()
98                 {
99                     return new ConstraintEditor(getReference().get());
100                 }
101             };
102             props.put(new SchemaModelFlushWrapper(getReference().get(), refererProp));
103             
104         }
105         catch (NoSuchMethodException JavaDoc nsme)
106         {
107             assert false : "properties should be defined";
108         }
109         
110         return sheet;
111     }
112     
113     public static class ConstraintEditor extends PropertyEditorSupport JavaDoc
114     {
115         private SchemaComponent component;
116         public ConstraintEditor(SchemaComponent component)
117         {
118             super();
119             this.component = component;
120         }
121
122         public void setAsText(String JavaDoc text) throws IllegalArgumentException JavaDoc
123         {
124             SchemaComponent parent = findOutermostParentElement();
125             FindReferredConstraintVisitor visitor =
126                     new FindReferredConstraintVisitor();
127             
128             Constraint c = visitor.findReferredConstraint(parent, text);
129             if(c!=null)
130             {
131                 setValue(c);
132             }
133             else
134             {
135                 throwError(text);
136             }
137        }
138         
139         public String JavaDoc getAsText()
140         {
141             Object JavaDoc val = getValue();
142             if (val instanceof Constraint)
143             {
144                 return ((Constraint)val).getName();
145             }
146             return null;
147         }
148
149         private SchemaComponent findOutermostParentElement()
150         {
151             SchemaComponent element = null;
152             //go up the tree and look for the last instance of <element>
153
SchemaComponent sc = component.getParent();
154             while(sc != null)
155             {
156                 if(sc instanceof Element)
157                 {
158                     element = sc;
159                 }
160                 sc = sc.getParent();
161             }
162             return element;
163         }
164
165         private void throwError(String JavaDoc text)
166         {
167             String JavaDoc msg = NbBundle.getMessage(KeyRefNode.class, "LBL_Illegal_Referer_Value", text); //NOI18N
168
IllegalArgumentException JavaDoc iae = new IllegalArgumentException JavaDoc(msg);
169             ErrorManager.getDefault().annotate(iae, ErrorManager.USER,
170                     msg, msg, null, new java.util.Date JavaDoc());
171             throw iae;
172             
173         }
174     }
175 }
176
Popular Tags