| /** |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| |
| package org.netbeans.modules.apisupport.project.ui.wizard.project; |
| |
| import java.awt.Color; |
| import java.awt.EventQueue; |
| import java.io.IOException; |
| import java.util.logging.Level; |
| import java.util.logging.Logger; |
| import javax.swing.ComboBoxModel; |
| import javax.swing.JTextField; |
| import javax.swing.UIManager; |
| import javax.swing.event.DocumentEvent; |
| import javax.swing.event.DocumentListener; |
| import org.netbeans.api.project.ProjectUtils; |
| import org.netbeans.modules.apisupport.project.ui.wizard.common.CreatedModifiedFiles; |
| import org.netbeans.modules.apisupport.project.api.UIUtil; |
| import org.netbeans.modules.apisupport.project.ui.wizard.common.BasicWizardIterator; |
| import org.netbeans.modules.apisupport.project.ui.wizard.common.WizardUtils; |
| import org.openide.WizardDescriptor; |
| import org.openide.util.HelpCtx; |
| import org.openide.util.NbBundle; |
| import org.openide.util.RequestProcessor; |
| import org.openide.util.Utilities; |
| |
| /** |
| * The second panel in project template wizard. |
| * |
| * @author Milos Kleint |
| */ |
| final class NameAndLocationPanel extends BasicWizardIterator.Panel { |
| |
| private static final String PROJECT_TEMPLATES_DIR = "Templates/Project"; // NOI18N |
| private static final String DEFAULT_CATEGORY_PATH = PROJECT_TEMPLATES_DIR + "/Other"; // NOI18N |
| private static final RequestProcessor RP = new RequestProcessor(NameAndLocationPanel.class); |
| |
| private NewProjectIterator.DataModel data; |
| |
| /** Creates new NameAndLocationPanel */ |
| NameAndLocationPanel(WizardDescriptor setting, NewProjectIterator.DataModel data) { |
| super(setting); |
| this.data = data; |
| initComponents(); |
| initAccessibility(); |
| Color lblBgr = UIManager.getColor("Label.background"); // NOI18N |
| putClientProperty("NewFileWizard_Title", getMessage("LBL_ProjectWizardTitle")); |
| modifiedFilesValue.setBackground(lblBgr); |
| createdFilesValue.setBackground(lblBgr); |
| modifiedFilesValue.setEditable(false); |
| createdFilesValue.setEditable(false); |
| |
| DocumentListener dListener = new UIUtil.DocumentAdapter() { |
| public void insertUpdate(DocumentEvent e) { |
| if (checkValidity()) { |
| updateData(); |
| } |
| } |
| }; |
| txtName.getDocument().addDocumentListener(dListener); |
| txtDisplayName.getDocument().addDocumentListener(dListener); |
| if (comCategory.getEditor().getEditorComponent() instanceof JTextField) { |
| JTextField txt = (JTextField) comCategory.getEditor().getEditorComponent(); |
| txt.getDocument().addDocumentListener(dListener); |
| } |
| if (comPackageName.getEditor().getEditorComponent() instanceof JTextField) { |
| JTextField txt = (JTextField)comPackageName.getEditor().getEditorComponent(); |
| txt.getDocument().addDocumentListener(dListener); |
| } |
| } |
| |
| protected void storeToDataModel() { |
| updateData(); |
| } |
| |
| private String getCategoryPath() { |
| String path = WizardUtils.getSFSPath(comCategory, PROJECT_TEMPLATES_DIR); |
| return path == null ? DEFAULT_CATEGORY_PATH : path; |
| } |
| |
| private void updateData() { |
| data.setPackageName(comPackageName.getEditor().getItem().toString()); |
| data.setName(txtName.getText().trim()); |
| data.setDisplayName(txtDisplayName.getText().trim()); |
| data.setCategory(getCategoryPath()); |
| NewProjectIterator.generateFileChanges(data); |
| CreatedModifiedFiles fls = data.getCreatedModifiedFiles(); |
| createdFilesValue.setText(generateText(fls.getCreatedPaths())); |
| modifiedFilesValue.setText(generateText(fls.getModifiedPaths())); |
| //#68294 check if the paths for newly created files are valid or not.. |
| String[] invalid = data.getCreatedModifiedFiles().getInvalidPaths(); |
| if (invalid.length > 0) { |
| setError(NbBundle.getMessage(NameAndLocationPanel.class, "ERR_ToBeCreateFileExists", invalid[0])); |
| } |
| |
| } |
| |
| protected void readFromDataModel() { |
| loadCombo(); |
| if (data.getPackageName() != null) { |
| comPackageName.setSelectedItem(data.getPackageName()); |
| } |
| checkValidity(); |
| } |
| |
| protected String getPanelName() { |
| return getMessage("LBL_NameLocation_Title"); |
| } |
| |
| private boolean checkValidity() { |
| if (!checkPlatformValidity()) { |
| return false; |
| } |
| if (txtName.getText().trim().length() == 0) { |
| setInfo(getMessage("ERR_Name_Prefix_Empty"), false); |
| return false; |
| } |
| if (txtDisplayName.getText().trim().length() == 0) { |
| setInfo(getMessage("ERR_Display_Name_Prefix_Empty"), false); |
| return false; |
| } |
| if (!Utilities.isJavaIdentifier(txtName.getText().trim())) { |
| setError(getMessage("ERR_Name_Prefix_Invalid")); |
| return false; |
| } |
| String packageName = comPackageName.getEditor().getItem().toString().trim(); |
| if (packageName.length() == 0 || !WizardUtils.isValidPackageName(packageName)) { |
| setError(getMessage("ERR_Package_Invalid")); |
| return false; |
| } |
| if (!WizardUtils.isValidSFSPath(getCategoryPath())) { |
| setError(getMessage("ERR_Category_Invalid")); |
| return false; |
| } |
| markValid(); |
| return true; |
| } |
| |
| private boolean checkPlatformValidity() { |
| for (String module : NewProjectIterator.MODULES) { |
| try { |
| if (data.getModuleInfo().getDependencyVersion(module) == null) { |
| setError(getMessage("ERR_Missing_Modules")); |
| return false; |
| } |
| } catch (IOException x) { |
| Logger.getLogger(NameAndLocationPanel.class.getName()).log(Level.INFO, null, x); |
| } |
| } |
| return true; |
| } |
| |
| private void loadCombo() { |
| comCategory.setModel(UIUtil.createComboWaitModel()); |
| // XXX Utilities.attachInitJob probably better |
| RP.post(new Runnable() { |
| @Override public void run() { |
| final ComboBoxModel model = WizardUtils.createLayerPresenterComboModel(data.getProject(), PROJECT_TEMPLATES_DIR); |
| EventQueue.invokeLater(new Runnable() { |
| @Override public void run() { |
| comCategory.setModel(model); |
| } |
| }); |
| } |
| }); |
| } |
| |
| protected HelpCtx getHelp() { |
| return new HelpCtx(NameAndLocationPanel.class); |
| } |
| |
| private static String getMessage(String key) { |
| return NbBundle.getMessage(NameAndLocationPanel.class, key); |
| } |
| |
| /** This method is called from within the constructor to |
| * initialize the form. |
| * WARNING: Do NOT modify this code. The content of this method is |
| * always regenerated by the Form Editor. |
| */ |
| // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents |
| private void initComponents() { |
| java.awt.GridBagConstraints gridBagConstraints; |
| |
| lblName = new javax.swing.JLabel(); |
| txtName = new javax.swing.JTextField(); |
| lblDisplayName = new javax.swing.JLabel(); |
| txtDisplayName = new javax.swing.JTextField(); |
| lblCategory = new javax.swing.JLabel(); |
| comCategory = new javax.swing.JComboBox(); |
| lblProjectName = new javax.swing.JLabel(); |
| txtProjectName = new JTextField(ProjectUtils.getInformation(this.data.getProject()).getDisplayName()); |
| lblPackageName = new javax.swing.JLabel(); |
| comPackageName = WizardUtils.createPackageComboBox(this.data.getSourceRootGroup()); |
| createdFiles = new javax.swing.JLabel(); |
| modifiedFiles = new javax.swing.JLabel(); |
| filler = new javax.swing.JLabel(); |
| createdFilesValue = new javax.swing.JTextArea(); |
| modifiedFilesValue = new javax.swing.JTextArea(); |
| |
| setLayout(new java.awt.GridBagLayout()); |
| |
| lblName.setLabelFor(txtName); |
| org.openide.awt.Mnemonics.setLocalizedText(lblName, org.openide.util.NbBundle.getMessage(NameAndLocationPanel.class, "LBL_Name")); // NOI18N |
| gridBagConstraints = new java.awt.GridBagConstraints(); |
| gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; |
| gridBagConstraints.insets = new java.awt.Insets(0, 0, 0, 12); |
| add(lblName, gridBagConstraints); |
| gridBagConstraints = new java.awt.GridBagConstraints(); |
| gridBagConstraints.gridwidth = 2; |
| gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; |
| add(txtName, gridBagConstraints); |
| |
| lblDisplayName.setLabelFor(txtDisplayName); |
| org.openide.awt.Mnemonics.setLocalizedText(lblDisplayName, org.openide.util.NbBundle.getMessage(NameAndLocationPanel.class, "LBL_DisplayName")); // NOI18N |
| gridBagConstraints = new java.awt.GridBagConstraints(); |
| gridBagConstraints.gridx = 0; |
| gridBagConstraints.gridy = 1; |
| gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; |
| gridBagConstraints.insets = new java.awt.Insets(6, 0, 0, 12); |
| add(lblDisplayName, gridBagConstraints); |
| gridBagConstraints = new java.awt.GridBagConstraints(); |
| gridBagConstraints.gridx = 1; |
| gridBagConstraints.gridy = 1; |
| gridBagConstraints.gridwidth = 2; |
| gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; |
| gridBagConstraints.insets = new java.awt.Insets(6, 0, 0, 0); |
| add(txtDisplayName, gridBagConstraints); |
| |
| lblCategory.setLabelFor(comCategory); |
| org.openide.awt.Mnemonics.setLocalizedText(lblCategory, org.openide.util.NbBundle.getMessage(NameAndLocationPanel.class, "LBL_Category")); // NOI18N |
| gridBagConstraints = new java.awt.GridBagConstraints(); |
| gridBagConstraints.gridx = 0; |
| gridBagConstraints.gridy = 2; |
| gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; |
| gridBagConstraints.insets = new java.awt.Insets(6, 0, 0, 12); |
| add(lblCategory, gridBagConstraints); |
| |
| comCategory.setEditable(true); |
| comCategory.setPrototypeDisplayValue("Samples | Whatever"); |
| gridBagConstraints = new java.awt.GridBagConstraints(); |
| gridBagConstraints.gridx = 1; |
| gridBagConstraints.gridy = 2; |
| gridBagConstraints.gridwidth = 2; |
| gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; |
| gridBagConstraints.insets = new java.awt.Insets(5, 0, 0, 0); |
| add(comCategory, gridBagConstraints); |
| |
| lblProjectName.setLabelFor(txtProjectName); |
| java.util.ResourceBundle bundle = java.util.ResourceBundle.getBundle("org/netbeans/modules/apisupport/project/ui/wizard/librarydescriptor/Bundle"); // NOI18N |
| org.openide.awt.Mnemonics.setLocalizedText(lblProjectName, bundle.getString("LBL_ProjectName")); // NOI18N |
| gridBagConstraints = new java.awt.GridBagConstraints(); |
| gridBagConstraints.gridx = 0; |
| gridBagConstraints.gridy = 3; |
| gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; |
| gridBagConstraints.insets = new java.awt.Insets(18, 0, 6, 12); |
| add(lblProjectName, gridBagConstraints); |
| |
| txtProjectName.setEditable(false); |
| gridBagConstraints = new java.awt.GridBagConstraints(); |
| gridBagConstraints.gridx = 1; |
| gridBagConstraints.gridy = 3; |
| gridBagConstraints.gridwidth = 2; |
| gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; |
| gridBagConstraints.weightx = 1.0; |
| gridBagConstraints.insets = new java.awt.Insets(18, 0, 6, 0); |
| add(txtProjectName, gridBagConstraints); |
| |
| lblPackageName.setLabelFor(comPackageName); |
| org.openide.awt.Mnemonics.setLocalizedText(lblPackageName, bundle.getString("LBL_PackageName")); // NOI18N |
| gridBagConstraints = new java.awt.GridBagConstraints(); |
| gridBagConstraints.gridx = 0; |
| gridBagConstraints.gridy = 4; |
| gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; |
| gridBagConstraints.insets = new java.awt.Insets(0, 0, 0, 12); |
| add(lblPackageName, gridBagConstraints); |
| |
| comPackageName.setEditable(true); |
| gridBagConstraints = new java.awt.GridBagConstraints(); |
| gridBagConstraints.gridx = 1; |
| gridBagConstraints.gridy = 4; |
| gridBagConstraints.gridwidth = 2; |
| gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; |
| gridBagConstraints.weightx = 1.0; |
| add(comPackageName, gridBagConstraints); |
| |
| createdFiles.setLabelFor(createdFilesValue); |
| org.openide.awt.Mnemonics.setLocalizedText(createdFiles, bundle.getString("LBL_CreatedFiles")); // NOI18N |
| gridBagConstraints = new java.awt.GridBagConstraints(); |
| gridBagConstraints.gridx = 0; |
| gridBagConstraints.gridy = 5; |
| gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; |
| gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; |
| gridBagConstraints.insets = new java.awt.Insets(36, 0, 6, 12); |
| add(createdFiles, gridBagConstraints); |
| |
| modifiedFiles.setLabelFor(modifiedFilesValue); |
| org.openide.awt.Mnemonics.setLocalizedText(modifiedFiles, bundle.getString("LBL_ModifiedFiles")); // NOI18N |
| gridBagConstraints = new java.awt.GridBagConstraints(); |
| gridBagConstraints.gridx = 0; |
| gridBagConstraints.gridy = 6; |
| gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; |
| gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; |
| gridBagConstraints.insets = new java.awt.Insets(0, 0, 0, 12); |
| add(modifiedFiles, gridBagConstraints); |
| gridBagConstraints = new java.awt.GridBagConstraints(); |
| gridBagConstraints.gridx = 0; |
| gridBagConstraints.gridy = 7; |
| gridBagConstraints.gridwidth = 3; |
| gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; |
| gridBagConstraints.weightx = 1.0; |
| gridBagConstraints.weighty = 1.0; |
| add(filler, gridBagConstraints); |
| |
| createdFilesValue.setColumns(20); |
| createdFilesValue.setRows(5); |
| createdFilesValue.setBorder(null); |
| gridBagConstraints = new java.awt.GridBagConstraints(); |
| gridBagConstraints.gridx = 1; |
| gridBagConstraints.gridy = 5; |
| gridBagConstraints.gridwidth = 2; |
| gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; |
| gridBagConstraints.weightx = 1.0; |
| gridBagConstraints.insets = new java.awt.Insets(36, 0, 6, 0); |
| add(createdFilesValue, gridBagConstraints); |
| |
| modifiedFilesValue.setColumns(20); |
| modifiedFilesValue.setRows(5); |
| modifiedFilesValue.setToolTipText("modifiedFilesValue"); |
| modifiedFilesValue.setBorder(null); |
| gridBagConstraints = new java.awt.GridBagConstraints(); |
| gridBagConstraints.gridx = 1; |
| gridBagConstraints.gridy = 6; |
| gridBagConstraints.gridwidth = 2; |
| gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; |
| gridBagConstraints.weightx = 1.0; |
| add(modifiedFilesValue, gridBagConstraints); |
| }// </editor-fold>//GEN-END:initComponents |
| |
| private void initAccessibility() { |
| this.getAccessibleContext().setAccessibleDescription(getMessage("ACS_NameAndLocationPanel")); |
| comPackageName.getAccessibleContext().setAccessibleDescription(getMessage("ACS_CTL_PackageName")); |
| comCategory.getAccessibleContext().setAccessibleDescription(getMessage("ACS_CTL_Category")); |
| txtDisplayName.getAccessibleContext().setAccessibleDescription(getMessage("ACS_CTL_DisplayName")); |
| txtName.getAccessibleContext().setAccessibleDescription(getMessage("ACS_CTL_Name")); |
| txtProjectName.getAccessibleContext().setAccessibleDescription(getMessage("ACS_CTL_ProjectName")); |
| createdFilesValue.getAccessibleContext().setAccessibleDescription(getMessage("ACS_CTL_CreatedFilesValue")); |
| modifiedFilesValue.getAccessibleContext().setAccessibleDescription(getMessage("ACS_CTL_ModifiedFilesValue")); |
| } |
| |
| // Variables declaration - do not modify//GEN-BEGIN:variables |
| private javax.swing.JComboBox comCategory; |
| private javax.swing.JComboBox comPackageName; |
| private javax.swing.JLabel createdFiles; |
| private javax.swing.JTextArea createdFilesValue; |
| private javax.swing.JLabel filler; |
| private javax.swing.JLabel lblCategory; |
| private javax.swing.JLabel lblDisplayName; |
| private javax.swing.JLabel lblName; |
| private javax.swing.JLabel lblPackageName; |
| private javax.swing.JLabel lblProjectName; |
| private javax.swing.JLabel modifiedFiles; |
| private javax.swing.JTextArea modifiedFilesValue; |
| private javax.swing.JTextField txtDisplayName; |
| private javax.swing.JTextField txtName; |
| private javax.swing.JTextField txtProjectName; |
| // End of variables declaration//GEN-END:variables |
| |
| private static String generateText(String[] relPaths) { |
| StringBuffer sb = new StringBuffer(); |
| if (relPaths.length > 0) { |
| for (int i = 0; i < relPaths.length; i++) { |
| if (i > 0) { |
| sb.append('\n'); |
| } |
| sb.append(relPaths[i]); |
| } |
| } |
| return sb.toString(); |
| } |
| |
| } |