blob: 8df736d867a2f7542d557817355c0e3896b302e9 [file] [log] [blame]
/*
* 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.javafx2.samples;
import java.io.File;
import java.text.MessageFormat;
import javax.swing.JFileChooser;
import javax.swing.JPanel;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import org.netbeans.spi.project.ui.support.ProjectChooser;
import org.openide.WizardDescriptor;
import org.openide.util.NbBundle;
import org.openide.util.NbPreferences;
public class PanelProjectLocationVisual extends JPanel implements DocumentListener {
private PanelConfigureProject panel;
/** Creates new form PanelProjectLocationVisual */
public PanelProjectLocationVisual(PanelConfigureProject panel) {
initComponents();
this.panel = panel;
// Register listener on the textFields to make the automatic updates
projectNameTextField.getDocument().addDocumentListener(this);
projectLocationTextField.getDocument().addDocumentListener(this);
}
/** 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;
projectNameLabel = new javax.swing.JLabel();
projectNameTextField = new javax.swing.JTextField();
projectLocationLabel = new javax.swing.JLabel();
projectLocationTextField = new javax.swing.JTextField();
Button = new javax.swing.JButton();
createdFolderLabel = new javax.swing.JLabel();
createdFolderTextField = new javax.swing.JTextField();
setLayout(new java.awt.GridBagLayout());
projectNameLabel.setLabelFor(projectNameTextField);
projectNameLabel.setText(org.openide.util.NbBundle.getMessage(PanelProjectLocationVisual.class, "LBL_NWP1_ProjectName_Label")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(0, 0, 12, 0);
add(projectNameLabel, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(0, 12, 12, 0);
add(projectNameTextField, gridBagConstraints);
projectNameTextField.getAccessibleContext().setAccessibleDescription(org.openide.util.NbBundle.getMessage(PanelProjectLocationVisual.class, "ACS_LBL_NWP1_ProjectName_A11YDesc")); // NOI18N
projectLocationLabel.setLabelFor(projectLocationTextField);
projectLocationLabel.setText(org.openide.util.NbBundle.getMessage(PanelProjectLocationVisual.class, "LBL_NWP1_ProjectLocation_Label")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridy = 1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.insets = new java.awt.Insets(0, 0, 5, 0);
add(projectLocationLabel, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridy = 1;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(0, 12, 5, 0);
add(projectLocationTextField, gridBagConstraints);
projectLocationTextField.getAccessibleContext().setAccessibleDescription(org.openide.util.NbBundle.getMessage(PanelProjectLocationVisual.class, "ACS_LBL_NPW1_ProjectLocation_A11YDesc")); // NOI18N
Button.setText(org.openide.util.NbBundle.getMessage(PanelProjectLocationVisual.class, "LBL_NWP1_BrowseLocation_Button")); // NOI18N
Button.setActionCommand("BROWSE");
Button.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
browseLocationAction(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridy = 1;
gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
gridBagConstraints.insets = new java.awt.Insets(0, 6, 5, 0);
add(Button, gridBagConstraints);
Button.getAccessibleContext().setAccessibleDescription(org.openide.util.NbBundle.getMessage(PanelProjectLocationVisual.class, "ACS_LBL_NWP1_BrowseLocation_A11YDesc")); // NOI18N
createdFolderLabel.setLabelFor(createdFolderTextField);
createdFolderLabel.setText(org.openide.util.NbBundle.getMessage(PanelProjectLocationVisual.class, "LBL_NWP1_CreatedProjectFolder_Lablel")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridheight = java.awt.GridBagConstraints.REMAINDER;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
add(createdFolderLabel, gridBagConstraints);
createdFolderTextField.setEditable(false);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridheight = java.awt.GridBagConstraints.REMAINDER;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 1.0;
gridBagConstraints.insets = new java.awt.Insets(0, 12, 0, 0);
add(createdFolderTextField, gridBagConstraints);
createdFolderTextField.getAccessibleContext().setAccessibleDescription(org.openide.util.NbBundle.getMessage(PanelProjectLocationVisual.class, "ACS_LBL_NWP1_CreatedProjectFolder_A11YDesc")); // NOI18N
}// </editor-fold>//GEN-END:initComponents
private void browseLocationAction(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_browseLocationAction
String command = evt.getActionCommand();
if ("BROWSE".equals(command)) { //NOI18N
JFileChooser chooser = new JFileChooser();
chooser.setDialogTitle(NbBundle.getMessage(PanelProjectLocationVisual.class,"LBL_NWP1_SelectProjectLocation")); //NOI18N
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
String path = projectLocationTextField.getText();
if (path.length() > 0) {
File f = new File(path);
if (f.exists())
chooser.setSelectedFile(f);
}
if (JFileChooser.APPROVE_OPTION == chooser.showOpenDialog(this)) {
File projectDir = chooser.getSelectedFile();
projectLocationTextField.setText(projectDir.getAbsolutePath());
}
panel.fireChangeEvent();
}
}//GEN-LAST:event_browseLocationAction
@Override
public void addNotify() {
super.addNotify();
//same problem as in 31086, initial focus on Cancel button
projectLocationTextField.requestFocus();
}
boolean valid(WizardDescriptor wizardDescriptor) {
if (projectNameTextField.getText().length() == 0) {
wizardDescriptor.putProperty(WizardDescriptor.PROP_ERROR_MESSAGE, NbBundle.getMessage(PanelProjectLocationVisual.class,"MSG_IllegalProjectName")); //NOI18N
return false; // Display name not specified
}
File destFolder = new File(createdFolderTextField.getText());
File[] children = destFolder.listFiles();
if (destFolder.exists() && children != null && children.length > 0) {
// Folder exists and is not empty
wizardDescriptor.putProperty(WizardDescriptor.PROP_ERROR_MESSAGE, NbBundle.getMessage(PanelProjectLocationVisual.class,"MSG_ProjectFolderExists")); //NOI18N
return false;
}
wizardDescriptor.putProperty(WizardDescriptor.PROP_ERROR_MESSAGE, ""); //NOI18N
return true;
}
void store(WizardDescriptor d) {
String name = projectNameTextField.getText().trim();
d.putProperty(WizardProperties.PROJECT_DIR, new File(createdFolderTextField.getText().trim()));
d.putProperty(WizardProperties.NAME, name);
File projectsDir = new File(this.projectLocationTextField.getText());
if (projectsDir.isDirectory()) {
ProjectChooser.setProjectsFolder (projectsDir);
}
}
void read (WizardDescriptor settings) {
File projectLocation = (File) settings.getProperty(WizardProperties.PROJECT_DIR);
if (projectLocation == null)
projectLocation = ProjectChooser.getProjectsFolder();
else
projectLocation = projectLocation.getParentFile();
projectLocationTextField.setText(projectLocation.getAbsolutePath());
String formater = null;
String projectName = (String) settings.getProperty(WizardProperties.NAME);
if (projectName == null) {
formater = NbBundle.getMessage(PanelProjectLocationVisual.class, "LBL_NPW1_DefaultProjectName"); //NOI18N
} else {
formater = projectName + "{0}"; //NOI18N
}
if ((projectName == null) || (validFreeProjectName(projectLocation, projectName) == null)) {
int baseCount = 1;
while ((projectName = validFreeProjectName(projectLocation, formater, baseCount)) == null) {
baseCount++;
}
}
projectNameTextField.setText(projectName);
projectNameTextField.selectAll();
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton Button;
private javax.swing.JLabel createdFolderLabel;
private javax.swing.JTextField createdFolderTextField;
private javax.swing.JLabel projectLocationLabel;
private javax.swing.JTextField projectLocationTextField;
private javax.swing.JLabel projectNameLabel;
protected javax.swing.JTextField projectNameTextField;
// End of variables declaration//GEN-END:variables
private String validFreeProjectName(final File parentFolder, final String formater, final int index) {
String name = MessageFormat.format(formater, new Object[] {new Integer (index)});
File file = new File(parentFolder, name);
return file.exists() ? null : name;
}
private String validFreeProjectName(final File parentFolder, final String name) {
File file = new File(parentFolder, name);
return file.exists() ? null : name;
}
// Implementation of DocumentListener --------------------------------------
@Override
public void changedUpdate(DocumentEvent e) {
updateTexts(e);
}
@Override
public void insertUpdate(DocumentEvent e) {
updateTexts(e);
}
@Override
public void removeUpdate(DocumentEvent e) {
updateTexts(e);
}
// End if implementation of DocumentListener -------------------------------
/** Handles changes in the project name and project directory
*/
private void updateTexts(DocumentEvent e) {
createdFolderTextField.setText(getCreatedFolderPath());
panel.fireChangeEvent(); // Notify that the panel changed
}
private String getCreatedFolderPath() {
StringBuilder folder = new StringBuilder(projectLocationTextField.getText().trim());
if (!projectLocationTextField.getText().endsWith(File.separator))
folder.append(File.separatorChar);
folder.append(projectNameTextField.getText().trim());
return folder.toString();
}
}
//TODO implement check for project folder name and location