package org.netbeans.gradle.project.newproject;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.concurrent.atomic.AtomicBoolean;
import javax.swing.event.ChangeListener;
import org.jtrim.event.ListenerRef;
import org.netbeans.gradle.project.validate.BackgroundValidator;
import org.netbeans.gradle.project.validate.Validator;
import org.netbeans.gradle.project.validate.Validators;
import org.openide.WizardDescriptor;
@SuppressWarnings("serial")
public final class GradleSingleProjectPropertiesPanel extends javax.swing.JPanel {
private final AtomicBoolean started;
private final BackgroundValidator bckgValidator;
private final WizardDescriptor wizard;
/**
* Creates new form GradleSingleProjectPropertiesPanel
*/
public GradleSingleProjectPropertiesPanel(WizardDescriptor wizard) {
this.started = new AtomicBoolean(false);
this.bckgValidator = new BackgroundValidator();
this.wizard = wizard;
initComponents();
jProjectLocationEdit.setText(NewProjectUtils.getDefaultProjectDir(wizard));
}
public ListenerRef addProjectLocationValidator(Validator<String> validator) {
return bckgValidator.addValidator(
validator,
Validators.trimmedText(jProjectLocationEdit));
}
public void startValidation() {
if (!started.compareAndSet(false, true)) {
return;
}
bckgValidator.addValidator(
NewProjectUtils.createClassNameValidator(true),
Validators.trimmedText(jMainClassEdit));
NewProjectUtils.setupNewProjectValidators(bckgValidator,
jProjectNameEdit, jProjectFolderEdit, jProjectLocationEdit);
Validators.connectWizardDescriptorToProblems(bckgValidator, wizard);
}
public void addChangeListener(ChangeListener listener) {
bckgValidator.currentProblemForSwing().addChangeListener(listener);
}
public void removeChangeListener(ChangeListener listener) {
bckgValidator.currentProblemForSwing().removeChangeListener(listener);
}
public GradleSingleProjectConfig getConfig() {
String projectName = jProjectNameEdit.getText().trim();
String projectDirStr = jProjectFolderEdit.getText().trim();
String mainClass = jMainClassEdit.getText().trim();
if (mainClass.isEmpty()) {
mainClass = null;
}
if (projectName.isEmpty() || projectDirStr.isEmpty()) {
return null;
}
NewProjectUtils.setDefaultProjectDir(jProjectLocationEdit.getText());
Path projectDir = Paths.get(projectDirStr);
return new GradleSingleProjectConfig(projectName, projectDir, mainClass);
}
public boolean containsValidData() {
return bckgValidator.isValid();
}
/**
* 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.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
jProjectNameCaption = new javax.swing.JLabel();
jProjectNameEdit = new javax.swing.JTextField();
jProjectLocationCaption = new javax.swing.JLabel();
jProjectLocationEdit = new javax.swing.JTextField();
jBrowseButton = new javax.swing.JButton();
jProjectFolderLocationLabel = new javax.swing.JLabel();
jProjectFolderEdit = new javax.swing.JTextField();
jMainClassLabel = new javax.swing.JLabel();
jMainClassEdit = new javax.swing.JTextField();
org.openide.awt.Mnemonics.setLocalizedText(jProjectNameCaption, org.openide.util.NbBundle.getMessage(GradleSingleProjectPropertiesPanel.class, "GradleSingleProjectPropertiesPanel.jProjectNameCaption.text")); // NOI18N
jProjectNameEdit.setText(org.openide.util.NbBundle.getMessage(GradleSingleProjectPropertiesPanel.class, "GradleSingleProjectPropertiesPanel.jProjectNameEdit.text")); // NOI18N
org.openide.awt.Mnemonics.setLocalizedText(jProjectLocationCaption, org.openide.util.NbBundle.getMessage(GradleSingleProjectPropertiesPanel.class, "GradleSingleProjectPropertiesPanel.jProjectLocationCaption.text")); // NOI18N
jProjectLocationEdit.setText(org.openide.util.NbBundle.getMessage(GradleSingleProjectPropertiesPanel.class, "GradleSingleProjectPropertiesPanel.jProjectLocationEdit.text")); // NOI18N
org.openide.awt.Mnemonics.setLocalizedText(jBrowseButton, org.openide.util.NbBundle.getMessage(GradleSingleProjectPropertiesPanel.class, "GradleSingleProjectPropertiesPanel.jBrowseButton.text")); // NOI18N
jBrowseButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jBrowseButtonActionPerformed(evt);
}
});
org.openide.awt.Mnemonics.setLocalizedText(jProjectFolderLocationLabel, org.openide.util.NbBundle.getMessage(GradleSingleProjectPropertiesPanel.class, "GradleSingleProjectPropertiesPanel.jProjectFolderLocationLabel.text")); // NOI18N
jProjectFolderEdit.setText(org.openide.util.NbBundle.getMessage(GradleSingleProjectPropertiesPanel.class, "GradleSingleProjectPropertiesPanel.jProjectFolderEdit.text")); // NOI18N
jProjectFolderEdit.setEnabled(false);
org.openide.awt.Mnemonics.setLocalizedText(jMainClassLabel, org.openide.util.NbBundle.getMessage(GradleSingleProjectPropertiesPanel.class, "GradleSingleProjectPropertiesPanel.jMainClassLabel.text")); // NOI18N
jMainClassEdit.setText(org.openide.util.NbBundle.getMessage(GradleSingleProjectPropertiesPanel.class, "GradleSingleProjectPropertiesPanel.jMainClassEdit.text")); // NOI18N
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jProjectNameCaption)
.addComponent(jMainClassLabel)
.addComponent(jProjectLocationCaption)
.addComponent(jProjectFolderLocationLabel))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jProjectNameEdit, javax.swing.GroupLayout.DEFAULT_SIZE, 316, Short.MAX_VALUE)
.addComponent(jMainClassEdit)
.addComponent(jProjectLocationEdit)
.addComponent(jProjectFolderEdit))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jBrowseButton))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jProjectNameCaption)
.addComponent(jProjectNameEdit, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jProjectLocationCaption)
.addComponent(jProjectLocationEdit, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jBrowseButton))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jProjectFolderEdit, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jProjectFolderLocationLabel))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jMainClassLabel)
.addComponent(jMainClassEdit, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
);
}// </editor-fold>//GEN-END:initComponents
private void jBrowseButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jBrowseButtonActionPerformed
NewProjectUtils.chooseProjectLocation(this, jProjectLocationEdit);
}//GEN-LAST:event_jBrowseButtonActionPerformed
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton jBrowseButton;
private javax.swing.JTextField jMainClassEdit;
private javax.swing.JLabel jMainClassLabel;
private javax.swing.JTextField jProjectFolderEdit;
private javax.swing.JLabel jProjectFolderLocationLabel;
private javax.swing.JLabel jProjectLocationCaption;
private javax.swing.JTextField jProjectLocationEdit;
private javax.swing.JLabel jProjectNameCaption;
private javax.swing.JTextField jProjectNameEdit;
// End of variables declaration//GEN-END:variables
}