KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > netbeans > modules > xml > schema > ui > basic > editors > GlobalReferenceEditor


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  * GlobalReferenceEditor.java
22  *
23  * Created on December 22, 2005, 12:58 PM
24  */

25
26 package org.netbeans.modules.xml.schema.ui.basic.editors;
27
28 import java.awt.Component JavaDoc;
29 import java.awt.Dialog JavaDoc;
30 import java.awt.event.ActionEvent JavaDoc;
31 import java.awt.event.ActionListener JavaDoc;
32 import java.beans.FeatureDescriptor JavaDoc;
33 import java.beans.PropertyEditorSupport JavaDoc;
34 import java.util.ArrayList JavaDoc;
35 import java.util.Collection JavaDoc;
36 import org.netbeans.modules.xml.schema.model.GlobalSimpleType;
37 import org.netbeans.modules.xml.schema.model.ReferenceableSchemaComponent;
38 import org.netbeans.modules.xml.schema.model.SchemaComponent;
39 import org.netbeans.modules.xml.xam.Named;
40 import org.netbeans.modules.xml.xam.dom.NamedComponentReference;
41 import org.openide.DialogDescriptor;
42 import org.openide.DialogDisplayer;
43 import org.openide.ErrorManager;
44 import org.openide.explorer.propertysheet.ExPropertyEditor;
45 import org.openide.explorer.propertysheet.PropertyEnv;
46 import org.openide.util.NbBundle;
47
48 /**
49  *
50  * @author Ajit Bhate
51  */

52 public class GlobalReferenceEditor<T extends ReferenceableSchemaComponent>
53         extends PropertyEditorSupport JavaDoc
54         implements ExPropertyEditor {
55     
56     private SchemaComponentSelectionPanel panel;
57     private DialogDescriptor descriptor;
58     private SchemaComponent component;
59     private Class JavaDoc<T> referenceType;
60     private String JavaDoc typeDisplayName;
61     private String JavaDoc propertyDisplayName;
62     
63     
64     /**
65      * Creates a new instance of GlobalReferenceEditor
66      */

67     public GlobalReferenceEditor(SchemaComponent component,
68             String JavaDoc typeDisplayName,
69             String JavaDoc propertyDisplayName,
70             Class JavaDoc<T> referenceType) {
71         this.typeDisplayName = typeDisplayName;
72         this.propertyDisplayName = propertyDisplayName;
73         this.referenceType = referenceType;
74         this.component = component;
75     }
76     
77     public String JavaDoc getAsText() {
78         Object JavaDoc val = getValue();
79         if (val == null){
80             return null;
81         }
82         if (val instanceof NamedComponentReference && component.getModel() != null){
83             Object JavaDoc obj = ((NamedComponentReference)val).get();
84             if (obj == null){
85                 return null;
86             }
87             if (obj instanceof Named){
88                 return ((Named)obj).getName();
89             }
90         }
91         // TODO how to display invalid values?
92
return val.toString();
93     }
94     
95     @SuppressWarnings JavaDoc("unchecked")
96     public Component JavaDoc getCustomEditor() {
97         NamedComponentReference<T> currentGlobalReference = (NamedComponentReference<T>) getValue();
98         Collection JavaDoc<SchemaComponent> exclude = null;
99         if(referenceType.isInstance(component)) {
100             exclude = new ArrayList JavaDoc<SchemaComponent>();
101             exclude.add(component);
102         } else {
103             SchemaComponent parent = component.getParent();
104             while (parent!=null) {
105                 if(referenceType.isInstance(parent)) {
106                     exclude = new ArrayList JavaDoc<SchemaComponent>();
107                     exclude.add(parent);
108                     break;
109                 }
110                 parent = parent.getParent();
111             }
112         }
113         // Determine if primitive simple types should be shown (e.g. boolean).
114
boolean primitives = GlobalSimpleType.class.isAssignableFrom(referenceType);
115         panel = new SchemaComponentSelectionPanel<T>(component.getModel(),
116                 referenceType, currentGlobalReference==null?null:
117                     currentGlobalReference.get(), exclude, primitives);
118         descriptor = new SchemaComponentSelDialogDesc(panel,
119                 NbBundle.getMessage(GlobalReferenceEditor.class,
120                 "LBL_Custom_Property_Editor_Title",
121                 new Object JavaDoc[] {typeDisplayName, propertyDisplayName}),
122                 true,
123                 new ActionListener JavaDoc() {
124             public void actionPerformed(ActionEvent JavaDoc evt) {
125                 if (evt.getSource().equals(DialogDescriptor.OK_OPTION)) {
126                     try {
127                         setValue(getCurrentSelection(panel.getCurrentSelection()));
128                     } catch (IllegalArgumentException JavaDoc iae) {
129                         ErrorManager.getDefault().annotate(iae, ErrorManager.USER,
130                                 iae.getMessage(), iae.getLocalizedMessage(),
131                                 null, new java.util.Date JavaDoc());
132                         throw iae;
133                     }
134                 }
135             }
136         });
137         
138         Dialog JavaDoc dlg = DialogDisplayer.getDefault().createDialog(descriptor);
139         return dlg;
140     }
141     
142     
143     public boolean supportsCustomEditor() {
144         return true;
145     }
146
147     private NamedComponentReference getCurrentSelection(SchemaComponent sc){
148         return sc==null?null:
149             sc.getModel().getFactory().createGlobalReference(
150                 referenceType.cast(sc),
151                 referenceType , component);
152     }
153     
154     public void attachEnv(PropertyEnv env ) {
155         FeatureDescriptor JavaDoc desc = env.getFeatureDescriptor();
156         // make this is not editable
157
desc.setValue("canEditAsText", Boolean.FALSE); // NOI18N
158
}
159
160 }
161
Popular Tags