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 }