1 19 20 package org.netbeans.modules.apisupport.project.ui.wizard.wizard; 21 22 import java.awt.Component ; 23 import java.io.File ; 24 import java.util.HashMap ; 25 import java.util.Map ; 26 import javax.swing.JFileChooser ; 27 import javax.swing.JTextField ; 28 import javax.swing.event.DocumentEvent ; 29 import javax.swing.event.DocumentListener ; 30 import javax.swing.text.JTextComponent ; 31 import org.netbeans.api.project.ProjectUtils; 32 import org.netbeans.modules.apisupport.project.CreatedModifiedFiles; 33 import org.netbeans.modules.apisupport.project.Util; 34 import org.netbeans.modules.apisupport.project.ui.UIUtil; 35 import org.netbeans.modules.apisupport.project.ui.wizard.BasicWizardIterator; 36 import org.openide.WizardDescriptor; 37 import org.openide.util.HelpCtx; 38 import org.openide.util.NbBundle; 39 import org.openide.util.Utilities; 40 41 46 final class NameIconLocationPanel extends BasicWizardIterator.Panel { 47 48 private static final Map <String ,Object > PURE_TEMPLATES_FILTER = new HashMap <String ,Object >(2); 49 50 private static final String TEMPLATES_DIR = "Templates"; private static final String DEFAULT_CATEGORY_PATH = TEMPLATES_DIR + "/Other"; 53 54 static { 55 PURE_TEMPLATES_FILTER.put("template", true); PURE_TEMPLATES_FILTER.put("simple", false); } 58 59 private boolean categoriesLoaded; 60 private boolean firstTime = true; 61 private DataModel data; 62 63 private static final String ENTER_LABEL = getMessage("CTL_EnterLabel"); 64 private static final String NONE_LABEL = getMessage("CTL_None"); 65 66 67 public NameIconLocationPanel(final WizardDescriptor setting, final DataModel data) { 68 super(setting); 69 this.data = data; 70 initComponents(); 71 initAccessibility(); 72 putClientProperty("NewFileWizard_Title", getMessage("LBL_WizardWizardTitle")); 73 DocumentListener updateListener = new UIUtil.DocumentAdapter() { 74 public void insertUpdate(DocumentEvent e) { 75 updateData(); 76 } 77 }; 78 classNamePrefix.getDocument().addDocumentListener(updateListener); 79 displayName.getDocument().addDocumentListener(updateListener); 80 icon.getDocument().addDocumentListener(updateListener); 81 Component editorComp = packageName.getEditor().getEditorComponent(); 82 if (editorComp instanceof JTextComponent ) { 83 ((JTextComponent ) editorComp).getDocument().addDocumentListener(updateListener); 84 } 85 if (category.getEditor().getEditorComponent() instanceof JTextField ) { 86 JTextComponent txt = (JTextComponent ) category.getEditor().getEditorComponent(); 87 txt.getDocument().addDocumentListener(updateListener); 88 } 89 } 90 91 protected String getPanelName() { 92 return getMessage("LBL_NameIconLocation_Title"); 93 } 94 95 private String getCategoryPath() { 96 String path = UIUtil.getSFSPath(category, TEMPLATES_DIR); 97 return path == null ? DEFAULT_CATEGORY_PATH : path; 98 } 99 100 protected void storeToDataModel() { 101 data.setClassNamePrefix(getClassNamePrefix()); 102 data.setPackageName(packageName.getEditor().getItem().toString()); 103 if (data.isFileTemplateType()) { 104 data.setDisplayName(displayName.getText()); 105 if (icon.getText().trim().length() > 0) { 106 data.setIcon(icon.getText().equals(NONE_LABEL) ? null : icon.getText()); 107 } 108 data.setCategory(getCategoryPath()); 109 } 110 } 111 112 protected void readFromDataModel() { 113 boolean isFileTemplate = data.isFileTemplateType(); 114 displayName.setVisible(isFileTemplate); 115 displayNameTxt.setVisible(isFileTemplate); 116 category.setVisible(isFileTemplate); 117 categoryTxt.setVisible(isFileTemplate); 118 icon.setVisible(isFileTemplate); 119 iconButton.setVisible(isFileTemplate); 120 iconTxt.setVisible(isFileTemplate); 121 if (isFileTemplate && !categoriesLoaded) { 122 category.setModel(UIUtil.createLayerPresenterComboModel( 123 data.getProject(), TEMPLATES_DIR, PURE_TEMPLATES_FILTER)); 124 categoriesLoaded = true; 125 } 126 if (firstTime) { 127 if (data.getPackageName() != null) { 128 packageName.setSelectedItem(data.getPackageName()); 129 } 130 firstTime = false; 131 markInvalid(); 132 } else { 133 updateData(); 134 } 135 136 } 137 138 private void updateData() { 139 storeToDataModel(); 140 if (checkValidity()) { 141 CreatedModifiedFiles files = data.getCreatedModifiedFiles(); 142 createdFiles.setText(UIUtil.generateTextAreaContent(files.getCreatedPaths())); 143 modifiedFiles.setText(UIUtil.generateTextAreaContent(files.getModifiedPaths())); 144 } 145 } 146 147 private boolean checkValidity() { 148 boolean valid = false; 149 String pName = packageName.getEditor().getItem().toString().trim(); 150 if (!Utilities.isJavaIdentifier(getClassNamePrefix())) { 151 setError(getMessage("MSG_ClassNameMustBeValidJavaIdentifier")); 152 } else if (data.isFileTemplateType() && 153 (getDisplayName().equals("") || getDisplayName().equals(ENTER_LABEL))) { 154 setError(getMessage("MSG_DisplayNameMustBeEntered")); 155 } else if (pName.length() == 0 || !UIUtil.isValidPackageName(pName)) { 156 setError(getMessage("ERR_Package_Invalid")); 157 } else if (data.getCreatedModifiedFiles().getInvalidPaths().length > 0) { 158 String [] invalid = data.getCreatedModifiedFiles().getInvalidPaths(); 160 setError(NbBundle.getMessage(NameIconLocationPanel.class, "ERR_ToBeCreateFileExists", invalid[0])); 161 } else if (!Util.isValidSFSPath(getCategoryPath())) { 162 setError(getMessage("ERR_Category_Invalid")); 163 } else { 164 String path = icon.getText().trim(); 165 File iconFile = (path.length() == 0) ? null : new File (path); 166 if (icon.isVisible() && (iconFile == null || !iconFile.exists())) { 167 setWarning(UIUtil.getNoIconSelectedWarning(16,16)); 168 } else if (icon.isVisible() && !UIUtil.isValidIcon(iconFile,16,16)) { 169 setWarning(UIUtil.getIconDimensionWarning(iconFile,16,16)); 170 } else { 171 markValid(); 172 } 173 valid = true; 174 } 175 return valid; 176 } 177 178 private String getDisplayName() { 179 return displayName.getText().trim(); 180 } 181 182 private String getClassNamePrefix() { 183 return classNamePrefix.getText().trim(); 184 } 185 186 protected HelpCtx getHelp() { 187 return new HelpCtx(NameIconLocationPanel.class); 188 } 189 190 private void initAccessibility() { 191 this.getAccessibleContext().setAccessibleDescription(getMessage("ACS_NameIconLocationPanel")); 192 classNamePrefix.getAccessibleContext().setAccessibleDescription(getMessage("ACS_LBL_ClassNamePrefix")); 193 displayName.getAccessibleContext().setAccessibleDescription(getMessage("ACS_LBL_DisplayName")); 194 category.getAccessibleContext().setAccessibleDescription(getMessage("ACS_LBL_Category")); 195 icon.getAccessibleContext().setAccessibleDescription(getMessage("ACS_LBL_Icon")); 196 iconButton.getAccessibleContext().setAccessibleDescription(getMessage("ACS_LBL_IconBrowse")); 197 project.getAccessibleContext().setAccessibleDescription(getMessage("ACS_LBL_ProjectName")); 198 packageName.getAccessibleContext().setAccessibleDescription(getMessage("ACS_LBL_PackageName")); 199 createdFiles.getAccessibleContext().setAccessibleDescription(getMessage("ACS_LBL_CreatedFiles")); 200 modifiedFiles.getAccessibleContext().setAccessibleDescription(getMessage("ACS_LBL_ModifiedFiles")); 201 } 202 203 private static String getMessage(String key) { 204 return NbBundle.getMessage(NameIconLocationPanel.class, key); 205 } 206 207 212 private void initComponents() { 214 java.awt.GridBagConstraints gridBagConstraints; 215 216 classNamePrefixTxt = new javax.swing.JLabel (); 217 classNamePrefix = new javax.swing.JTextField (); 218 displayNameTxt = new javax.swing.JLabel (); 219 displayName = new javax.swing.JTextField (); 220 categoryTxt = new javax.swing.JLabel (); 221 category = new javax.swing.JComboBox (); 222 iconTxt = new javax.swing.JLabel (); 223 icon = new javax.swing.JTextField (); 224 iconButton = new javax.swing.JButton (); 225 projectTxt = new javax.swing.JLabel (); 226 project = new JTextField (ProjectUtils.getInformation(data.getProject()).getDisplayName()); 227 packageNameTxt = new javax.swing.JLabel (); 228 packageName = UIUtil.createPackageComboBox(data.getSourceRootGroup()); 229 createdFilesTxt = new javax.swing.JLabel (); 230 modifiedFilesTxt = new javax.swing.JLabel (); 231 createdFilesSP = new javax.swing.JScrollPane (); 232 createdFiles = new javax.swing.JTextArea (); 233 modifiedFilesSP = new javax.swing.JScrollPane (); 234 modifiedFiles = new javax.swing.JTextArea (); 235 236 setLayout(new java.awt.GridBagLayout ()); 237 238 classNamePrefixTxt.setLabelFor(classNamePrefix); 239 org.openide.awt.Mnemonics.setLocalizedText(classNamePrefixTxt, org.openide.util.NbBundle.getMessage(NameIconLocationPanel.class, "LBL_ClassNamePrefix")); 240 gridBagConstraints = new java.awt.GridBagConstraints (); 241 gridBagConstraints.gridx = 0; 242 gridBagConstraints.gridy = 0; 243 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 244 gridBagConstraints.insets = new java.awt.Insets (0, 0, 6, 12); 245 add(classNamePrefixTxt, gridBagConstraints); 246 247 gridBagConstraints = new java.awt.GridBagConstraints (); 248 gridBagConstraints.gridx = 1; 249 gridBagConstraints.gridy = 0; 250 gridBagConstraints.gridwidth = 2; 251 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 252 gridBagConstraints.weightx = 1.0; 253 gridBagConstraints.insets = new java.awt.Insets (0, 0, 6, 0); 254 add(classNamePrefix, gridBagConstraints); 255 256 displayNameTxt.setLabelFor(displayName); 257 org.openide.awt.Mnemonics.setLocalizedText(displayNameTxt, org.openide.util.NbBundle.getMessage(NameIconLocationPanel.class, "LBL_DisplayName")); 258 gridBagConstraints = new java.awt.GridBagConstraints (); 259 gridBagConstraints.gridx = 0; 260 gridBagConstraints.gridy = 1; 261 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 262 gridBagConstraints.insets = new java.awt.Insets (0, 0, 6, 12); 263 add(displayNameTxt, gridBagConstraints); 264 265 displayName.setText(org.openide.util.NbBundle.getMessage(NameIconLocationPanel.class, "CTL_EnterLabel")); 266 gridBagConstraints = new java.awt.GridBagConstraints (); 267 gridBagConstraints.gridx = 1; 268 gridBagConstraints.gridy = 1; 269 gridBagConstraints.gridwidth = 2; 270 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 271 gridBagConstraints.weightx = 1.0; 272 gridBagConstraints.insets = new java.awt.Insets (0, 0, 6, 0); 273 add(displayName, gridBagConstraints); 274 275 categoryTxt.setLabelFor(category); 276 org.openide.awt.Mnemonics.setLocalizedText(categoryTxt, org.openide.util.NbBundle.getMessage(NameIconLocationPanel.class, "LBL_Category")); 277 gridBagConstraints = new java.awt.GridBagConstraints (); 278 gridBagConstraints.gridx = 0; 279 gridBagConstraints.gridy = 2; 280 gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; 281 gridBagConstraints.insets = new java.awt.Insets (3, 0, 3, 12); 282 add(categoryTxt, gridBagConstraints); 283 284 category.setEditable(true); 285 gridBagConstraints = new java.awt.GridBagConstraints (); 286 gridBagConstraints.gridx = 1; 287 gridBagConstraints.gridy = 2; 288 gridBagConstraints.gridwidth = 2; 289 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 290 gridBagConstraints.insets = new java.awt.Insets (3, 0, 3, 0); 291 add(category, gridBagConstraints); 292 293 iconTxt.setLabelFor(icon); 294 org.openide.awt.Mnemonics.setLocalizedText(iconTxt, org.openide.util.NbBundle.getMessage(NameIconLocationPanel.class, "LBL_Icon")); 295 gridBagConstraints = new java.awt.GridBagConstraints (); 296 gridBagConstraints.gridx = 0; 297 gridBagConstraints.gridy = 3; 298 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 299 gridBagConstraints.insets = new java.awt.Insets (18, 0, 0, 12); 300 add(iconTxt, gridBagConstraints); 301 302 icon.setEditable(false); 303 icon.setText(org.openide.util.NbBundle.getMessage(NameIconLocationPanel.class, "CTL_None")); 304 gridBagConstraints = new java.awt.GridBagConstraints (); 305 gridBagConstraints.gridx = 1; 306 gridBagConstraints.gridy = 3; 307 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 308 gridBagConstraints.weightx = 1.0; 309 gridBagConstraints.insets = new java.awt.Insets (18, 0, 0, 0); 310 add(icon, gridBagConstraints); 311 312 org.openide.awt.Mnemonics.setLocalizedText(iconButton, org.openide.util.NbBundle.getMessage(NameIconLocationPanel.class, "LBL_Icon_Browse")); 313 iconButton.addActionListener(new java.awt.event.ActionListener () { 314 public void actionPerformed(java.awt.event.ActionEvent evt) { 315 iconButtonActionPerformed(evt); 316 } 317 }); 318 319 gridBagConstraints = new java.awt.GridBagConstraints (); 320 gridBagConstraints.gridx = 2; 321 gridBagConstraints.gridy = 3; 322 gridBagConstraints.insets = new java.awt.Insets (18, 12, 0, 0); 323 add(iconButton, gridBagConstraints); 324 325 projectTxt.setLabelFor(project); 326 org.openide.awt.Mnemonics.setLocalizedText(projectTxt, org.openide.util.NbBundle.getMessage(NameIconLocationPanel.class, "LBL_ProjectName")); 327 gridBagConstraints = new java.awt.GridBagConstraints (); 328 gridBagConstraints.gridx = 0; 329 gridBagConstraints.gridy = 4; 330 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 331 gridBagConstraints.insets = new java.awt.Insets (18, 0, 6, 12); 332 add(projectTxt, gridBagConstraints); 333 334 project.setEditable(false); 335 gridBagConstraints = new java.awt.GridBagConstraints (); 336 gridBagConstraints.gridx = 1; 337 gridBagConstraints.gridy = 4; 338 gridBagConstraints.gridwidth = 2; 339 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 340 gridBagConstraints.weightx = 1.0; 341 gridBagConstraints.insets = new java.awt.Insets (18, 0, 6, 0); 342 add(project, gridBagConstraints); 343 344 packageNameTxt.setLabelFor(packageName); 345 org.openide.awt.Mnemonics.setLocalizedText(packageNameTxt, org.openide.util.NbBundle.getMessage(NameIconLocationPanel.class, "LBL_PackageName")); 346 gridBagConstraints = new java.awt.GridBagConstraints (); 347 gridBagConstraints.gridx = 0; 348 gridBagConstraints.gridy = 5; 349 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 350 gridBagConstraints.insets = new java.awt.Insets (0, 0, 36, 12); 351 add(packageNameTxt, gridBagConstraints); 352 353 packageName.setEditable(true); 354 gridBagConstraints = new java.awt.GridBagConstraints (); 355 gridBagConstraints.gridx = 1; 356 gridBagConstraints.gridy = 5; 357 gridBagConstraints.gridwidth = 2; 358 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 359 gridBagConstraints.weightx = 1.0; 360 gridBagConstraints.insets = new java.awt.Insets (0, 0, 36, 0); 361 add(packageName, gridBagConstraints); 362 363 createdFilesTxt.setLabelFor(createdFiles); 364 org.openide.awt.Mnemonics.setLocalizedText(createdFilesTxt, org.openide.util.NbBundle.getMessage(NameIconLocationPanel.class, "LBL_CreatedFiles")); 365 gridBagConstraints = new java.awt.GridBagConstraints (); 366 gridBagConstraints.gridx = 0; 367 gridBagConstraints.gridy = 6; 368 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 369 gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; 370 gridBagConstraints.weighty = 0.5; 371 gridBagConstraints.insets = new java.awt.Insets (0, 0, 6, 12); 372 add(createdFilesTxt, gridBagConstraints); 373 374 modifiedFilesTxt.setLabelFor(modifiedFiles); 375 org.openide.awt.Mnemonics.setLocalizedText(modifiedFilesTxt, org.openide.util.NbBundle.getMessage(NameIconLocationPanel.class, "LBL_ModifiedFiles")); 376 gridBagConstraints = new java.awt.GridBagConstraints (); 377 gridBagConstraints.gridx = 0; 378 gridBagConstraints.gridy = 7; 379 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 380 gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; 381 gridBagConstraints.weighty = 0.5; 382 gridBagConstraints.insets = new java.awt.Insets (6, 0, 0, 12); 383 add(modifiedFilesTxt, gridBagConstraints); 384 385 createdFiles.setBackground(javax.swing.UIManager.getDefaults().getColor("Label.background")); 386 createdFiles.setColumns(20); 387 createdFiles.setEditable(false); 388 createdFiles.setRows(5); 389 createdFiles.setBorder(null); 390 createdFilesSP.setViewportView(createdFiles); 391 392 gridBagConstraints = new java.awt.GridBagConstraints (); 393 gridBagConstraints.gridx = 1; 394 gridBagConstraints.gridy = 6; 395 gridBagConstraints.gridwidth = 2; 396 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 397 gridBagConstraints.weightx = 1.0; 398 gridBagConstraints.weighty = 0.5; 399 add(createdFilesSP, gridBagConstraints); 400 401 modifiedFiles.setBackground(javax.swing.UIManager.getDefaults().getColor("Label.background")); 402 modifiedFiles.setColumns(20); 403 modifiedFiles.setEditable(false); 404 modifiedFiles.setRows(5); 405 modifiedFiles.setToolTipText("modifiedFilesValue"); 406 modifiedFiles.setBorder(null); 407 modifiedFilesSP.setViewportView(modifiedFiles); 408 409 gridBagConstraints = new java.awt.GridBagConstraints (); 410 gridBagConstraints.gridx = 1; 411 gridBagConstraints.gridy = 7; 412 gridBagConstraints.gridwidth = 2; 413 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 414 gridBagConstraints.weightx = 1.0; 415 gridBagConstraints.weighty = 0.5; 416 gridBagConstraints.insets = new java.awt.Insets (6, 0, 0, 0); 417 add(modifiedFilesSP, gridBagConstraints); 418 419 } 421 private void iconButtonActionPerformed(java.awt.event.ActionEvent evt) { JFileChooser chooser = UIUtil.getIconFileChooser(icon.getText()); 423 int ret = chooser.showDialog(this, getMessage("LBL_Select")); 424 if (ret == JFileChooser.APPROVE_OPTION) { 425 File file = chooser.getSelectedFile(); 426 icon.setText(file.getAbsolutePath()); 427 } 428 } 430 431 private javax.swing.JComboBox category; 433 private javax.swing.JLabel categoryTxt; 434 private javax.swing.JTextField classNamePrefix; 435 private javax.swing.JLabel classNamePrefixTxt; 436 private javax.swing.JTextArea createdFiles; 437 private javax.swing.JScrollPane createdFilesSP; 438 private javax.swing.JLabel createdFilesTxt; 439 private javax.swing.JTextField displayName; 440 private javax.swing.JLabel displayNameTxt; 441 private javax.swing.JTextField icon; 442 private javax.swing.JButton iconButton; 443 private javax.swing.JLabel iconTxt; 444 private javax.swing.JTextArea modifiedFiles; 445 private javax.swing.JScrollPane modifiedFilesSP; 446 private javax.swing.JLabel modifiedFilesTxt; 447 private javax.swing.JComboBox packageName; 448 private javax.swing.JLabel packageNameTxt; 449 private javax.swing.JTextField project; 450 private javax.swing.JLabel projectTxt; 451 453 } 454 | Popular Tags |