1 19 20 package org.netbeans.modules.java.ui.nodes.elements; 21 22 import java.awt.BorderLayout ; 23 import java.lang.reflect.Modifier ; 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 41 public final class AnnotationTypeMethodCustomizer extends JPanel { 42 45 private static final String [] COMMON_TYPES = TypeEditor.ANNTYPE_VALUE_TYPES; 46 47 50 private final AnnotationType jclass; 51 52 53 private final Attribute element; 54 55 private boolean isOK = true; 56 57 61 public AnnotationTypeMethodCustomizer(AnnotationType jclass, Attribute element) { 62 this.jclass = jclass; 63 this.element = element; 64 65 initComponents (); 66 67 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 nameTextField.setText(element.getName()); 74 returnCombo.setSelectedItem(element.getType().getName()); 75 defValueTextField.setText(element.getDefaultValueText()); 76 77 HelpCtx.setHelpIDString (this, "java.annotationTypeMethod.customizer"); jLabel1.setDisplayedMnemonic(getString("CTL_Name_Mnemonic").charAt(0)); jLabel2.setDisplayedMnemonic(getString("CTL_MethodType_Mnemonic").charAt(0)); jLabel3.setDisplayedMnemonic(getString("CTL_DefaultValue_Mnemonic").charAt(0)); 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 () { 93 public void run() { 94 nameTextField.requestFocus(); 95 } 96 }); 97 } 98 99 104 private void initComponents() { 106 java.awt.GridBagConstraints gridBagConstraints; 107 108 jLabel1 = new javax.swing.JLabel (); 109 nameTextField = new javax.swing.JTextField (); 110 jLabel2 = new javax.swing.JLabel (); 111 returnCombo = new javax.swing.JComboBox (COMMON_TYPES); 112 jLabel3 = new javax.swing.JLabel (); 113 defValueTextField = new javax.swing.JTextField (); 114 jLabel4 = new javax.swing.JLabel (); 115 accessPanel = new javax.swing.JPanel (); 116 jLabel5 = new javax.swing.JLabel (); 117 modifierPanel = new javax.swing.JPanel (); 118 jPanel1 = new javax.swing.JPanel (); 119 120 setLayout(new java.awt.GridBagLayout ()); 121 122 setBorder(new javax.swing.border.EmptyBorder (new java.awt.Insets (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 (); 126 gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; 127 gridBagConstraints.insets = new java.awt.Insets (12, 0, 0, 0); 128 add(jLabel1, gridBagConstraints); 129 130 nameTextField.setColumns(25); 131 nameTextField.addFocusListener(new java.awt.event.FocusAdapter () { 132 public void focusLost(java.awt.event.FocusEvent evt) { 133 nameTextFieldFocusLost(evt); 134 } 135 }); 136 137 gridBagConstraints = new java.awt.GridBagConstraints (); 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 (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 (); 147 gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; 148 gridBagConstraints.insets = new java.awt.Insets (8, 0, 0, 0); 149 add(jLabel2, gridBagConstraints); 150 151 returnCombo.setEditable(true); 152 returnCombo.addActionListener(new java.awt.event.ActionListener () { 153 public void actionPerformed(java.awt.event.ActionEvent evt) { 154 returnComboActionPerformed(evt); 155 } 156 }); 157 158 gridBagConstraints = new java.awt.GridBagConstraints (); 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 (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 (); 168 gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; 169 gridBagConstraints.insets = new java.awt.Insets (8, 0, 0, 0); 170 add(jLabel3, gridBagConstraints); 171 172 defValueTextField.addFocusListener(new java.awt.event.FocusAdapter () { 173 public void focusLost(java.awt.event.FocusEvent evt) { 174 defValueTextFieldFocusLost(evt); 175 } 176 }); 177 178 gridBagConstraints = new java.awt.GridBagConstraints (); 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 (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 (); 188 gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; 189 gridBagConstraints.insets = new java.awt.Insets (8, 0, 0, 0); 190 add(jLabel4, gridBagConstraints); 191 192 accessPanel.setLayout(new java.awt.BorderLayout ()); 193 194 gridBagConstraints = new java.awt.GridBagConstraints (); 195 gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; 196 gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; 197 gridBagConstraints.insets = new java.awt.Insets (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 (); 203 gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; 204 gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; 205 gridBagConstraints.insets = new java.awt.Insets (8, 0, 0, 0); 206 add(jLabel5, gridBagConstraints); 207 208 modifierPanel.setLayout(new java.awt.BorderLayout ()); 209 210 gridBagConstraints = new java.awt.GridBagConstraints (); 211 gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; 212 gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; 213 gridBagConstraints.insets = new java.awt.Insets (8, 8, 0, 0); 214 add(modifierPanel, gridBagConstraints); 215 216 gridBagConstraints = new java.awt.GridBagConstraints (); 217 gridBagConstraints.fill = java.awt.GridBagConstraints.VERTICAL; 218 gridBagConstraints.weighty = 1.0; 219 add(jPanel1, gridBagConstraints); 220 221 } 222 224 private void defValueTextFieldFocusLost(java.awt.event.FocusEvent evt) { if (evt != null && (evt.isTemporary() || !this.isAncestorOf(evt.getOppositeComponent()))) 226 return; 227 228 String newName = defValueTextField.getText().trim(); 229 newName = newName.length() > 0? newName: null; 230 String oldName = element.getDefaultValueText(); 231 boolean ok = false; 232 233 try { 234 if (newName != null && newName.equals(oldName) || newName == oldName) { 235 return; } 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; defValueTextField.setText(oldName); 247 } 248 } 250 private void returnComboActionPerformed (java.awt.event.ActionEvent evt) { Object selItem = returnCombo.getSelectedItem(); 252 if (selItem == null) 253 return; 254 255 String 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"); } else if (!TypeEditor.isValidTypeOfAnnTypeMethod(newValue)) { 266 notifyUserWarning("MSG_Not_Valid_Type", "invalid type"); } 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 } 279 private void nameTextFieldFocusLost (java.awt.event.FocusEvent evt) { if (evt != null && (evt.isTemporary() || !this.isAncestorOf(evt.getOppositeComponent()))) 281 return; 282 283 String newName = nameTextField.getText().trim(); 284 String oldName = element.getName(); 285 boolean ok = false; 286 287 try { 288 if (!Utilities.isJavaIdentifier(newName)) { 289 notifyUserWarning("MSG_Not_Valid_Type", "invalid type"); } else if (oldName.equals(newName)) { 291 return; } else if (SourceEditSupport.findAttribute(this.jclass, newName) != null) { 293 notifyUserWarning("MSG_Used_Identifier", newName, "invalid name"); } 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 } 307 308 private javax.swing.JPanel accessPanel; 310 private javax.swing.JTextField defValueTextField; 311 private javax.swing.JLabel jLabel1; 312 private javax.swing.JLabel jLabel2; 313 private javax.swing.JLabel jLabel3; 314 private javax.swing.JLabel jLabel4; 315 private javax.swing.JLabel jLabel5; 316 private javax.swing.JPanel jPanel1; 317 private javax.swing.JPanel modifierPanel; 318 private javax.swing.JTextField nameTextField; 319 private javax.swing.JComboBox returnCombo; 320 322 private void initAccessibility() { 323 nameTextField.getAccessibleContext().setAccessibleName(getString("ACS_MethodNameTextField")); nameTextField.getAccessibleContext().setAccessibleDescription(getString("ACS_MethodNameTextField")); defValueTextField.getAccessibleContext().setAccessibleName(getString("ACSN_DefaultValue")); defValueTextField.getAccessibleContext().setAccessibleDescription(getString("ACSD_DefaultValue")); this.getAccessibleContext().setAccessibleDescription(getString("ACSD_AnnotationTypeMethodCustomizer")); } 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 getString(String key) { 346 return NbBundle.getMessage(AnnotationTypeMethodCustomizer.class, key); 347 } 348 349 private static void notifyUserWarning(String bundleKey, String msg) { 350 IllegalArgumentException e = new IllegalArgumentException (msg); 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 bundleKey, String param, String msg) { 359 IllegalArgumentException e = new IllegalArgumentException (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 |