1 19 20 package org.netbeans.modules.apisupport.project.ui.wizard.project; 21 22 import java.awt.Color ; 23 import java.util.Arrays ; 24 import java.util.Collection ; 25 import java.util.HashSet ; 26 import javax.swing.JTextField ; 27 import javax.swing.UIManager ; 28 import javax.swing.event.DocumentEvent ; 29 import javax.swing.event.DocumentListener ; 30 import org.netbeans.api.project.ProjectUtils; 31 import org.netbeans.modules.apisupport.project.CreatedModifiedFiles; 32 import org.netbeans.modules.apisupport.project.NbModuleProject; 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.netbeans.modules.apisupport.project.universe.ModuleEntry; 37 import org.netbeans.modules.apisupport.project.universe.NbPlatform; 38 import org.openide.WizardDescriptor; 39 import org.openide.util.HelpCtx; 40 import org.openide.util.NbBundle; 41 import org.openide.util.Utilities; 42 43 48 final class NameAndLocationPanel extends BasicWizardIterator.Panel { 49 50 private static final String PROJECT_TEMPLATES_DIR = "Templates/Project"; private static final String DEFAULT_CATEGORY_PATH = PROJECT_TEMPLATES_DIR + "/Other"; 53 private NewProjectIterator.DataModel data; 54 55 56 NameAndLocationPanel(WizardDescriptor setting, NewProjectIterator.DataModel data) { 57 super(setting); 58 this.data = data; 59 initComponents(); 60 initAccessibility(); 61 Color lblBgr = UIManager.getColor("Label.background"); putClientProperty("NewFileWizard_Title", getMessage("LBL_ProjectWizardTitle")); 63 modifiedFilesValue.setBackground(lblBgr); 64 createdFilesValue.setBackground(lblBgr); 65 modifiedFilesValue.setEditable(false); 66 createdFilesValue.setEditable(false); 67 68 DocumentListener dListener = new UIUtil.DocumentAdapter() { 69 public void insertUpdate(DocumentEvent e) { 70 if (checkValidity()) { 71 updateData(); 72 } 73 } 74 }; 75 txtName.getDocument().addDocumentListener(dListener); 76 txtDisplayName.getDocument().addDocumentListener(dListener); 77 if (comCategory.getEditor().getEditorComponent() instanceof JTextField ) { 78 JTextField txt = (JTextField ) comCategory.getEditor().getEditorComponent(); 79 txt.getDocument().addDocumentListener(dListener); 80 } 81 if (comPackageName.getEditor().getEditorComponent() instanceof JTextField ) { 82 JTextField txt = (JTextField )comPackageName.getEditor().getEditorComponent(); 83 txt.getDocument().addDocumentListener(dListener); 84 } 85 } 86 87 protected void storeToDataModel() { 88 updateData(); 89 } 90 91 private String getCategoryPath() { 92 String path = UIUtil.getSFSPath(comCategory, PROJECT_TEMPLATES_DIR); 93 return path == null ? DEFAULT_CATEGORY_PATH : path; 94 } 95 96 private void updateData() { 97 data.setPackageName(comPackageName.getEditor().getItem().toString()); 98 data.setName(txtName.getText().trim()); 99 data.setDisplayName(txtDisplayName.getText().trim()); 100 data.setCategory(getCategoryPath()); 101 NewProjectIterator.generateFileChanges(data); 102 CreatedModifiedFiles fls = data.getCreatedModifiedFiles(); 103 createdFilesValue.setText(generateText(fls.getCreatedPaths())); 104 modifiedFilesValue.setText(generateText(fls.getModifiedPaths())); 105 String [] invalid = data.getCreatedModifiedFiles().getInvalidPaths(); 107 if (invalid.length > 0) { 108 setError(NbBundle.getMessage(NameAndLocationPanel.class, "ERR_ToBeCreateFileExists", invalid[0])); 109 } 110 111 } 112 113 protected void readFromDataModel() { 114 loadCombo(); 115 if (data.getPackageName() != null) { 116 comPackageName.setSelectedItem(data.getPackageName()); 117 } 118 checkValidity(); 119 } 120 121 protected String getPanelName() { 122 return getMessage("LBL_NameLocation_Title"); 123 } 124 125 private boolean checkValidity() { 126 if (!checkPlatformValidity()) { 127 return false; 128 } 129 if (txtName.getText().trim().length() == 0) { 130 setError(getMessage("ERR_Name_Prefix_Empty")); 131 return false; 132 } 133 if (!Utilities.isJavaIdentifier(txtName.getText().trim())) { 134 setError(getMessage("ERR_Name_Prefix_Invalid")); 135 return false; 136 } 137 String packageName = comPackageName.getEditor().getItem().toString().trim(); 138 if (packageName.length() == 0 || !UIUtil.isValidPackageName(packageName)) { 139 setError(getMessage("ERR_Package_Invalid")); 140 return false; 141 } 142 if (!Util.isValidSFSPath(getCategoryPath())) { 143 setError(getMessage("ERR_Category_Invalid")); 144 return false; 145 } 146 markValid(); 147 return true; 148 } 149 150 private boolean checkPlatformValidity() { 151 NbModuleProject nbprj = data.getProject().getLookup().lookup(NbModuleProject.class); 152 if (nbprj == null) { 153 return true; 155 } 156 NbPlatform platform = nbprj.getPlatform(false); 157 if (platform == null) { 158 setError(getMessage("ERR_No_Platform")); 159 return false; 160 } 161 ModuleEntry[] entries = platform.getModules(); 162 Collection modules = new HashSet (Arrays.asList(NewProjectIterator.MODULES)); 163 164 for (int i = 0; i < entries.length; i++) { 165 modules.remove(entries[i].getCodeNameBase()); 166 } 167 if (modules.size() > 0) { 168 setError(getMessage("ERR_Missing_Modules")); 169 return false; 170 } 171 return true; 172 } 173 174 private void loadCombo() { 175 comCategory.setModel(UIUtil.createLayerPresenterComboModel( 176 data.getProject(), PROJECT_TEMPLATES_DIR)); 177 } 178 179 protected HelpCtx getHelp() { 180 return new HelpCtx(NameAndLocationPanel.class); 181 } 182 183 private static String getMessage(String key) { 184 return NbBundle.getMessage(NameAndLocationPanel.class, key); 185 } 186 187 192 private void initComponents() { 194 java.awt.GridBagConstraints gridBagConstraints; 195 196 lblName = new javax.swing.JLabel (); 197 txtName = new javax.swing.JTextField (); 198 lblDisplayName = new javax.swing.JLabel (); 199 txtDisplayName = new javax.swing.JTextField (); 200 lblCategory = new javax.swing.JLabel (); 201 comCategory = new javax.swing.JComboBox (); 202 lblProjectName = new javax.swing.JLabel (); 203 txtProjectName = new JTextField (ProjectUtils.getInformation(this.data.getProject()).getDisplayName()); 204 lblPackageName = new javax.swing.JLabel (); 205 comPackageName = UIUtil.createPackageComboBox(this.data.getSourceRootGroup()); 206 createdFiles = new javax.swing.JLabel (); 207 modifiedFiles = new javax.swing.JLabel (); 208 filler = new javax.swing.JLabel (); 209 createdFilesValue = new javax.swing.JTextArea (); 210 modifiedFilesValue = new javax.swing.JTextArea (); 211 212 setLayout(new java.awt.GridBagLayout ()); 213 214 lblName.setLabelFor(txtName); 215 org.openide.awt.Mnemonics.setLocalizedText(lblName, org.openide.util.NbBundle.getMessage(NameAndLocationPanel.class, "LBL_Name")); 216 gridBagConstraints = new java.awt.GridBagConstraints (); 217 gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; 218 gridBagConstraints.insets = new java.awt.Insets (0, 0, 0, 12); 219 add(lblName, gridBagConstraints); 220 221 gridBagConstraints = new java.awt.GridBagConstraints (); 222 gridBagConstraints.gridwidth = 2; 223 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 224 add(txtName, gridBagConstraints); 225 226 lblDisplayName.setLabelFor(txtDisplayName); 227 org.openide.awt.Mnemonics.setLocalizedText(lblDisplayName, org.openide.util.NbBundle.getMessage(NameAndLocationPanel.class, "LBL_DisplayName")); 228 gridBagConstraints = new java.awt.GridBagConstraints (); 229 gridBagConstraints.gridx = 0; 230 gridBagConstraints.gridy = 1; 231 gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; 232 gridBagConstraints.insets = new java.awt.Insets (6, 0, 0, 12); 233 add(lblDisplayName, gridBagConstraints); 234 235 gridBagConstraints = new java.awt.GridBagConstraints (); 236 gridBagConstraints.gridx = 1; 237 gridBagConstraints.gridy = 1; 238 gridBagConstraints.gridwidth = 2; 239 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 240 gridBagConstraints.insets = new java.awt.Insets (6, 0, 0, 0); 241 add(txtDisplayName, gridBagConstraints); 242 243 lblCategory.setLabelFor(comCategory); 244 org.openide.awt.Mnemonics.setLocalizedText(lblCategory, org.openide.util.NbBundle.getMessage(NameAndLocationPanel.class, "LBL_Category")); 245 gridBagConstraints = new java.awt.GridBagConstraints (); 246 gridBagConstraints.gridx = 0; 247 gridBagConstraints.gridy = 2; 248 gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; 249 gridBagConstraints.insets = new java.awt.Insets (6, 0, 0, 12); 250 add(lblCategory, gridBagConstraints); 251 252 comCategory.setEditable(true); 253 gridBagConstraints = new java.awt.GridBagConstraints (); 254 gridBagConstraints.gridx = 1; 255 gridBagConstraints.gridy = 2; 256 gridBagConstraints.gridwidth = 2; 257 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 258 gridBagConstraints.insets = new java.awt.Insets (5, 0, 0, 0); 259 add(comCategory, gridBagConstraints); 260 261 lblProjectName.setLabelFor(txtProjectName); 262 org.openide.awt.Mnemonics.setLocalizedText(lblProjectName, java.util.ResourceBundle.getBundle("org/netbeans/modules/apisupport/project/ui/wizard/librarydescriptor/Bundle").getString("LBL_ProjectName")); 263 gridBagConstraints = new java.awt.GridBagConstraints (); 264 gridBagConstraints.gridx = 0; 265 gridBagConstraints.gridy = 3; 266 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 267 gridBagConstraints.insets = new java.awt.Insets (18, 0, 6, 12); 268 add(lblProjectName, gridBagConstraints); 269 270 txtProjectName.setEditable(false); 271 gridBagConstraints = new java.awt.GridBagConstraints (); 272 gridBagConstraints.gridx = 1; 273 gridBagConstraints.gridy = 3; 274 gridBagConstraints.gridwidth = 2; 275 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 276 gridBagConstraints.weightx = 1.0; 277 gridBagConstraints.insets = new java.awt.Insets (18, 0, 6, 0); 278 add(txtProjectName, gridBagConstraints); 279 280 lblPackageName.setLabelFor(comPackageName); 281 org.openide.awt.Mnemonics.setLocalizedText(lblPackageName, java.util.ResourceBundle.getBundle("org/netbeans/modules/apisupport/project/ui/wizard/librarydescriptor/Bundle").getString("LBL_PackageName")); 282 gridBagConstraints = new java.awt.GridBagConstraints (); 283 gridBagConstraints.gridx = 0; 284 gridBagConstraints.gridy = 4; 285 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 286 gridBagConstraints.insets = new java.awt.Insets (0, 0, 0, 12); 287 add(lblPackageName, gridBagConstraints); 288 289 comPackageName.setEditable(true); 290 gridBagConstraints = new java.awt.GridBagConstraints (); 291 gridBagConstraints.gridx = 1; 292 gridBagConstraints.gridy = 4; 293 gridBagConstraints.gridwidth = 2; 294 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 295 gridBagConstraints.weightx = 1.0; 296 add(comPackageName, gridBagConstraints); 297 298 createdFiles.setLabelFor(createdFilesValue); 299 org.openide.awt.Mnemonics.setLocalizedText(createdFiles, java.util.ResourceBundle.getBundle("org/netbeans/modules/apisupport/project/ui/wizard/librarydescriptor/Bundle").getString("LBL_CreatedFiles")); 300 gridBagConstraints = new java.awt.GridBagConstraints (); 301 gridBagConstraints.gridx = 0; 302 gridBagConstraints.gridy = 5; 303 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 304 gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; 305 gridBagConstraints.insets = new java.awt.Insets (36, 0, 6, 12); 306 add(createdFiles, gridBagConstraints); 307 308 modifiedFiles.setLabelFor(modifiedFilesValue); 309 org.openide.awt.Mnemonics.setLocalizedText(modifiedFiles, java.util.ResourceBundle.getBundle("org/netbeans/modules/apisupport/project/ui/wizard/librarydescriptor/Bundle").getString("LBL_ModifiedFiles")); 310 gridBagConstraints = new java.awt.GridBagConstraints (); 311 gridBagConstraints.gridx = 0; 312 gridBagConstraints.gridy = 6; 313 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 314 gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; 315 gridBagConstraints.insets = new java.awt.Insets (0, 0, 0, 12); 316 add(modifiedFiles, gridBagConstraints); 317 318 gridBagConstraints = new java.awt.GridBagConstraints (); 319 gridBagConstraints.gridx = 0; 320 gridBagConstraints.gridy = 7; 321 gridBagConstraints.gridwidth = 3; 322 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 323 gridBagConstraints.weightx = 1.0; 324 gridBagConstraints.weighty = 1.0; 325 add(filler, gridBagConstraints); 326 327 createdFilesValue.setColumns(20); 328 createdFilesValue.setRows(5); 329 createdFilesValue.setBorder(null); 330 gridBagConstraints = new java.awt.GridBagConstraints (); 331 gridBagConstraints.gridx = 1; 332 gridBagConstraints.gridy = 5; 333 gridBagConstraints.gridwidth = 2; 334 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 335 gridBagConstraints.weightx = 1.0; 336 gridBagConstraints.insets = new java.awt.Insets (36, 0, 6, 0); 337 add(createdFilesValue, gridBagConstraints); 338 339 modifiedFilesValue.setColumns(20); 340 modifiedFilesValue.setRows(5); 341 modifiedFilesValue.setToolTipText("modifiedFilesValue"); 342 modifiedFilesValue.setBorder(null); 343 gridBagConstraints = new java.awt.GridBagConstraints (); 344 gridBagConstraints.gridx = 1; 345 gridBagConstraints.gridy = 6; 346 gridBagConstraints.gridwidth = 2; 347 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 348 gridBagConstraints.weightx = 1.0; 349 add(modifiedFilesValue, gridBagConstraints); 350 351 } 353 private void initAccessibility() { 354 this.getAccessibleContext().setAccessibleDescription(getMessage("ACS_NameAndLocationPanel")); 355 comPackageName.getAccessibleContext().setAccessibleDescription(getMessage("ACS_CTL_PackageName")); 356 comCategory.getAccessibleContext().setAccessibleDescription(getMessage("ACS_CTL_Category")); 357 txtDisplayName.getAccessibleContext().setAccessibleDescription(getMessage("ACS_CTL_DisplayName")); 358 txtName.getAccessibleContext().setAccessibleDescription(getMessage("ACS_CTL_Name")); 359 txtProjectName.getAccessibleContext().setAccessibleDescription(getMessage("ACS_CTL_ProjectName")); 360 createdFilesValue.getAccessibleContext().setAccessibleDescription(getMessage("ACS_CTL_CreatedFilesValue")); 361 modifiedFilesValue.getAccessibleContext().setAccessibleDescription(getMessage("ACS_CTL_ModifiedFilesValue")); 362 } 363 364 private javax.swing.JComboBox comCategory; 366 private javax.swing.JComboBox comPackageName; 367 private javax.swing.JLabel createdFiles; 368 private javax.swing.JTextArea createdFilesValue; 369 private javax.swing.JLabel filler; 370 private javax.swing.JLabel lblCategory; 371 private javax.swing.JLabel lblDisplayName; 372 private javax.swing.JLabel lblName; 373 private javax.swing.JLabel lblPackageName; 374 private javax.swing.JLabel lblProjectName; 375 private javax.swing.JLabel modifiedFiles; 376 private javax.swing.JTextArea modifiedFilesValue; 377 private javax.swing.JTextField txtDisplayName; 378 private javax.swing.JTextField txtName; 379 private javax.swing.JTextField txtProjectName; 380 382 private static String generateText(String [] relPaths) { 383 StringBuffer sb = new StringBuffer (); 384 if (relPaths.length > 0) { 385 for (int i = 0; i < relPaths.length; i++) { 386 if (i > 0) { 387 sb.append('\n'); 388 } 389 sb.append(relPaths[i]); 390 } 391 } 392 return sb.toString(); 393 } 394 395 } 396 | Popular Tags |