KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > netbeans > modules > java > ui > nodes > elements > AnnotationTypeMethodCustomizer


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-2006 Sun
17  * Microsystems, Inc. All Rights Reserved.
18  */

19
20 package org.netbeans.modules.java.ui.nodes.elements;
21
22 import java.awt.BorderLayout JavaDoc;
23 import java.lang.reflect.Modifier JavaDoc;
24
25 import javax.swing.*;
26 import javax.jmi.reflect.JmiException;
27
28 import org.openide.*;
29 import org.openide.util.Utilities;
30 import org.openide.util.NbBundle;
31 import org.openide.util.HelpCtx;
32
33 import org.netbeans.modules.javacore.internalapi.JavaMetamodel;
34 import org.netbeans.modules.java.ui.nodes.editors.TypeEditor;
35 import org.netbeans.jmi.javamodel.*;
36
37 /** Customizer for Attribute
38  *
39  * @author Jan Pokorsky, Petr Hamernik
40  */

41 public final class AnnotationTypeMethodCustomizer extends JPanel {
42     /** Predefined types in the type combo;
43      * duplicate of {@link org.netbeans.modules.java.ui.nodes.editors.TypeEditor#RVALUE_TYPES}
44      */

45     private static final String JavaDoc[] COMMON_TYPES = TypeEditor.ANNTYPE_VALUE_TYPES;
46
47     /**
48      * class where the customized method should be added
49      */

50     private final AnnotationType jclass;
51     
52     /** Edited method */
53     private final Attribute element;
54
55     private boolean isOK = true;
56
57     /** Create new MethodCustomizer component
58     * @param jclass class where the customized method should be added
59     * @param element The method or constructor to be customized
60     */

61     public AnnotationTypeMethodCustomizer(AnnotationType jclass, Attribute element) {
62         this.jclass = jclass;
63         this.element = element;
64
65         initComponents ();
66
67         // modifiers
68
int mask = Modifier.PUBLIC | Modifier.ABSTRACT;
69         accessPanel.add(SourceEditSupport.createAccessModifiersPanel(element, mask), BorderLayout.CENTER);
70         modifierPanel.add(SourceEditSupport.createOtherModifiersPanel(element, mask), BorderLayout.CENTER);
71
72         // name
73
nameTextField.setText(element.getName());
74         returnCombo.setSelectedItem(element.getType().getName());
75         defValueTextField.setText(element.getDefaultValueText());
76
77         HelpCtx.setHelpIDString (this, "java.annotationTypeMethod.customizer"); // NOI18N
78
//mnemonics
79
jLabel1.setDisplayedMnemonic(getString("CTL_Name_Mnemonic").charAt(0)); // NOI18N
80
jLabel2.setDisplayedMnemonic(getString("CTL_MethodType_Mnemonic").charAt(0)); // NOI18N
81
jLabel3.setDisplayedMnemonic(getString("CTL_DefaultValue_Mnemonic").charAt(0)); // NOI18N
82

83         initAccessibility();
84     }
85     
86     public void addNotify() {
87         super.addNotify();
88         
89         int len = nameTextField.getText().length();
90         nameTextField.setCaretPosition(0);
91         nameTextField.moveCaretPosition(len);
92         SwingUtilities.invokeLater(new Runnable JavaDoc() {
93             public void run() {
94                 nameTextField.requestFocus();
95             }
96         });
97     }
98
99     /** This method is called from within the constructor to
100      * initialize the form.
101      * WARNING: Do NOT modify this code. The content of this method is
102      * always regenerated by the FormEditor.
103      */

104     // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents
105
private void initComponents() {
106         java.awt.GridBagConstraints JavaDoc gridBagConstraints;
107
108         jLabel1 = new javax.swing.JLabel JavaDoc();
109         nameTextField = new javax.swing.JTextField JavaDoc();
110         jLabel2 = new javax.swing.JLabel JavaDoc();
111         returnCombo = new javax.swing.JComboBox JavaDoc(COMMON_TYPES);
112         jLabel3 = new javax.swing.JLabel JavaDoc();
113         defValueTextField = new javax.swing.JTextField JavaDoc();
114         jLabel4 = new javax.swing.JLabel JavaDoc();
115         accessPanel = new javax.swing.JPanel JavaDoc();
116         jLabel5 = new javax.swing.JLabel JavaDoc();
117         modifierPanel = new javax.swing.JPanel JavaDoc();
118         jPanel1 = new javax.swing.JPanel JavaDoc();
119
120         setLayout(new java.awt.GridBagLayout JavaDoc());
121
122         setBorder(new javax.swing.border.EmptyBorder JavaDoc(new java.awt.Insets JavaDoc(6, 6, 6, 6)));
123         jLabel1.setLabelFor(nameTextField);
124         jLabel1.setText(org.openide.util.NbBundle.getMessage(AnnotationTypeMethodCustomizer.class, "CTL_Name"));
125         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
126         gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
127         gridBagConstraints.insets = new java.awt.Insets JavaDoc(12, 0, 0, 0);
128         add(jLabel1, gridBagConstraints);
129
130         nameTextField.setColumns(25);
131         nameTextField.addFocusListener(new java.awt.event.FocusAdapter JavaDoc() {
132             public void focusLost(java.awt.event.FocusEvent JavaDoc evt) {
133                 nameTextFieldFocusLost(evt);
134             }
135         });
136
137         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
138         gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
139         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
140         gridBagConstraints.weightx = 1.0;
141         gridBagConstraints.insets = new java.awt.Insets JavaDoc(12, 8, 0, 0);
142         add(nameTextField, gridBagConstraints);
143
144         jLabel2.setLabelFor(returnCombo);
145         jLabel2.setText(org.openide.util.NbBundle.getMessage(AnnotationTypeMethodCustomizer.class, "CTL_ReturnType"));
146         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
147         gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
148         gridBagConstraints.insets = new java.awt.Insets JavaDoc(8, 0, 0, 0);
149         add(jLabel2, gridBagConstraints);
150
151         returnCombo.setEditable(true);
152         returnCombo.addActionListener(new java.awt.event.ActionListener JavaDoc() {
153             public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
154                 returnComboActionPerformed(evt);
155             }
156         });
157
158         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
159         gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
160         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
161         gridBagConstraints.weightx = 1.0;
162         gridBagConstraints.insets = new java.awt.Insets JavaDoc(8, 8, 0, 0);
163         add(returnCombo, gridBagConstraints);
164
165         jLabel3.setLabelFor(defValueTextField);
166         jLabel3.setText(org.openide.util.NbBundle.getMessage(AnnotationTypeMethodCustomizer.class, "CTL_DefaultValue"));
167         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
168         gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
169         gridBagConstraints.insets = new java.awt.Insets JavaDoc(8, 0, 0, 0);
170         add(jLabel3, gridBagConstraints);
171
172         defValueTextField.addFocusListener(new java.awt.event.FocusAdapter JavaDoc() {
173             public void focusLost(java.awt.event.FocusEvent JavaDoc evt) {
174                 defValueTextFieldFocusLost(evt);
175             }
176         });
177
178         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
179         gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
180         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
181         gridBagConstraints.weightx = 1.0;
182         gridBagConstraints.insets = new java.awt.Insets JavaDoc(8, 8, 0, 0);
183         add(defValueTextField, gridBagConstraints);
184
185         jLabel4.setLabelFor(accessPanel);
186         jLabel4.setText(org.openide.util.NbBundle.getMessage(AnnotationTypeMethodCustomizer.class, "CTL_AccessRights"));
187         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
188         gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
189         gridBagConstraints.insets = new java.awt.Insets JavaDoc(8, 0, 0, 0);
190         add(jLabel4, gridBagConstraints);
191
192         accessPanel.setLayout(new java.awt.BorderLayout JavaDoc());
193
194         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
195         gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
196         gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
197         gridBagConstraints.insets = new java.awt.Insets JavaDoc(8, 8, 0, 0);
198         add(accessPanel, gridBagConstraints);
199
200         jLabel5.setLabelFor(modifierPanel);
201         jLabel5.setText(org.openide.util.NbBundle.getMessage(AnnotationTypeMethodCustomizer.class, "CTL_Modifiers"));
202         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
203         gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
204         gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
205         gridBagConstraints.insets = new java.awt.Insets JavaDoc(8, 0, 0, 0);
206         add(jLabel5, gridBagConstraints);
207
208         modifierPanel.setLayout(new java.awt.BorderLayout JavaDoc());
209
210         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
211         gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
212         gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
213         gridBagConstraints.insets = new java.awt.Insets JavaDoc(8, 8, 0, 0);
214         add(modifierPanel, gridBagConstraints);
215
216         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
217         gridBagConstraints.fill = java.awt.GridBagConstraints.VERTICAL;
218         gridBagConstraints.weighty = 1.0;
219         add(jPanel1, gridBagConstraints);
220
221     }
222     // </editor-fold>//GEN-END:initComponents
223

224     private void defValueTextFieldFocusLost(java.awt.event.FocusEvent JavaDoc evt) {//GEN-FIRST:event_defValueTextFieldFocusLost
225
if (evt != null && (evt.isTemporary() || !this.isAncestorOf(evt.getOppositeComponent())))
226             return;
227         
228         String JavaDoc newName = defValueTextField.getText().trim();
229         newName = newName.length() > 0? newName: null;
230         String JavaDoc oldName = element.getDefaultValueText();
231         boolean ok = false;
232         
233         try {
234             if (newName != null && newName.equals(oldName) || newName == oldName) {
235                 return; // nothing to change
236
} else {
237                 this.element.setDefaultValueText(newName);
238                 ok = true;
239             }
240         } catch (JmiException e) {
241             ErrorManager.getDefault().notify(e);
242         }
243         isOK = ok;
244         if (!ok) {
245             oldName = oldName == null? "": oldName; // NOI18N
246
defValueTextField.setText(oldName);
247         }
248     }//GEN-LAST:event_defValueTextFieldFocusLost
249

250     private void returnComboActionPerformed (java.awt.event.ActionEvent JavaDoc evt) {//GEN-FIRST:event_returnComboActionPerformed
251
Object JavaDoc selItem = returnCombo.getSelectedItem();
252         if (selItem == null)
253            return;
254         
255         String JavaDoc selItemTxt = selItem.toString().trim();
256         Type oldValue = element.getType();
257         boolean ok = false;
258         
259         try {
260             Type newValue = getJModel().getType().resolve(selItemTxt);
261             if (oldValue.equals(newValue)) {
262                 return;
263             } else if (!TypeEditor.isValidTypeSyntax(selItemTxt)) {
264                 notifyUserWarning("MSG_Not_Valid_Type", "invalid type"); // NOI18N
265
} else if (!TypeEditor.isValidTypeOfAnnTypeMethod(newValue)) {
266                 notifyUserWarning("MSG_Not_Valid_Type", "invalid type"); // NOI18N
267
} else {
268                 element.setType(newValue);
269                 ok = true;
270             }
271         } catch (JmiException e) {
272             ErrorManager.getDefault().notify(e);
273         }
274         isOK = ok;
275         if (!ok)
276             returnCombo.setSelectedItem(ElementFormat.elementName(oldValue));
277     }//GEN-LAST:event_returnComboActionPerformed
278

279     private void nameTextFieldFocusLost (java.awt.event.FocusEvent JavaDoc evt) {//GEN-FIRST:event_nameTextFieldFocusLost
280
if (evt != null && (evt.isTemporary() || !this.isAncestorOf(evt.getOppositeComponent())))
281             return;
282         
283         String JavaDoc newName = nameTextField.getText().trim();
284         String JavaDoc oldName = element.getName();
285         boolean ok = false;
286         
287         try {
288             if (!Utilities.isJavaIdentifier(newName)) {
289                 notifyUserWarning("MSG_Not_Valid_Type", "invalid type"); // NOI18N
290
} else if (oldName.equals(newName)) {
291                 return; // nothing to change
292
} else if (SourceEditSupport.findAttribute(this.jclass, newName) != null) {
293                 notifyUserWarning("MSG_Used_Identifier", newName, "invalid name"); // NOI18N
294
} else {
295                 this.element.setName(newName);
296                 ok = true;
297             }
298         } catch (JmiException e) {
299             ErrorManager.getDefault().notify(e);
300         }
301         isOK = ok;
302         if (!ok) {
303             nameTextField.setText(oldName);
304         }
305     }//GEN-LAST:event_nameTextFieldFocusLost
306

307     
308     // Variables declaration - do not modify//GEN-BEGIN:variables
309
private javax.swing.JPanel JavaDoc accessPanel;
310     private javax.swing.JTextField JavaDoc defValueTextField;
311     private javax.swing.JLabel JavaDoc jLabel1;
312     private javax.swing.JLabel JavaDoc jLabel2;
313     private javax.swing.JLabel JavaDoc jLabel3;
314     private javax.swing.JLabel JavaDoc jLabel4;
315     private javax.swing.JLabel JavaDoc jLabel5;
316     private javax.swing.JPanel JavaDoc jPanel1;
317     private javax.swing.JPanel JavaDoc modifierPanel;
318     private javax.swing.JTextField JavaDoc nameTextField;
319     private javax.swing.JComboBox JavaDoc returnCombo;
320     // End of variables declaration//GEN-END:variables
321

322     private void initAccessibility() {
323         nameTextField.getAccessibleContext().setAccessibleName(getString("ACS_MethodNameTextField")); // NOI18N
324
nameTextField.getAccessibleContext().setAccessibleDescription(getString("ACS_MethodNameTextField")); // NOI18N
325
defValueTextField.getAccessibleContext().setAccessibleName(getString("ACSN_DefaultValue")); // NOI18N
326
defValueTextField.getAccessibleContext().setAccessibleDescription(getString("ACSD_DefaultValue")); // NOI18N
327
this.getAccessibleContext().setAccessibleDescription(getString("ACSD_AnnotationTypeMethodCustomizer")); // NOI18N
328
}
329     
330     public boolean isOK() {
331         nameTextFieldFocusLost(null);
332         if (isOK) {
333             returnComboActionPerformed(null);
334         }
335         if (isOK) {
336             defValueTextFieldFocusLost(null);
337         }
338         return isOK;
339     }
340     
341     private JavaModelPackage getJModel() {
342         return JavaMetamodel.getManager().getJavaExtent(this.jclass);
343     }
344     
345     private static String JavaDoc getString(String JavaDoc key) {
346         return NbBundle.getMessage(AnnotationTypeMethodCustomizer.class, key);
347     }
348     
349     private static void notifyUserWarning(String JavaDoc bundleKey, String JavaDoc msg) {
350         IllegalArgumentException JavaDoc e = new IllegalArgumentException JavaDoc(msg); // NOI18N
351
ErrorManager.getDefault().annotate(
352             e, ErrorManager.USER, null,
353             getString(bundleKey),
354             null, null);
355         ErrorManager.getDefault().notify(e);
356     }
357     
358     private static void notifyUserWarning(String JavaDoc bundleKey, String JavaDoc param, String JavaDoc msg) {
359         IllegalArgumentException JavaDoc e = new IllegalArgumentException JavaDoc(msg);
360         ErrorManager.getDefault().annotate(
361             e, ErrorManager.USER, null,
362             NbBundle.getMessage(AnnotationTypeMethodCustomizer.class, bundleKey, param),
363             null, null);
364         ErrorManager.getDefault().notify(e);
365     }
366 }
367
Popular Tags