package org.netbeans.gradle.project.properties.ui;
import java.io.File;
import java.net.URL;
import org.netbeans.gradle.project.api.config.ActiveSettingsQuery;
import org.netbeans.gradle.project.api.config.PropertyReference;
import org.netbeans.gradle.project.api.config.ui.ProfileEditor;
import org.netbeans.gradle.project.api.config.ui.ProfileEditorFactory;
import org.netbeans.gradle.project.api.config.ui.ProfileInfo;
import org.netbeans.gradle.project.api.config.ui.StoredSettings;
import org.netbeans.gradle.project.properties.GradleLocationDef;
import org.netbeans.gradle.project.properties.GradleLocationRef;
import org.netbeans.gradle.project.properties.global.CommonGlobalSettings;
import org.netbeans.gradle.project.properties.global.GlobalSettingsPage;
import org.netbeans.gradle.project.tasks.vars.StringResolver;
import org.netbeans.gradle.project.tasks.vars.StringResolvers;
import org.netbeans.gradle.project.util.NbFileUtils;
import org.openide.filesystems.FileChooserBuilder;
@SuppressWarnings("serial")
public class GradleInstallationPanel extends javax.swing.JPanel implements ProfileEditorFactory {
private static final URL HELP_URL = NbFileUtils.getSafeURL("https://github.com/kelemen/netbeans-gradle-project/wiki/Gradle-Installation");
private final StringResolver locationResolver;
private GradleLocationRef selectedGradleLocationRef;
public GradleInstallationPanel() {
selectedGradleLocationRef = null;
locationResolver = StringResolvers.getDefaultGlobalResolver();
initComponents();
}
public static GlobalSettingsPage createSettingsPage() {
GlobalSettingsPage.Builder result = new GlobalSettingsPage.Builder(new GradleInstallationPanel());
result.setHelpUrl(HELP_URL);
return result.create();
}
private void displayLocationDef(GradleLocationDef locationDef) {
if (locationDef != null) {
selectGradleLocation(locationDef.getLocationRef());
jPreferWrapperCheck.setSelected(locationDef.isPreferWrapper());
}
else {
selectGradleLocation(null);
jPreferWrapperCheck.setSelected(false);
}
}
private void displayUserHome(File userHome) {
jGradleUserHomeEdit.setText(userHome != null ? userHome.getPath() : "");
}
private String toString(GradleLocationRef locationRef) {
if (locationRef == null) {
return "";
}
return locationRef.getLocation(locationResolver).toLocalizedString();
}
private void selectGradleLocation(GradleLocationRef newLocationRef) {
selectedGradleLocationRef = newLocationRef;
jGradleLocationDescription.setText(toString(newLocationRef));
}
@Override
public ProfileEditor startEditingProfile(ProfileInfo profileInfo, ActiveSettingsQuery profileQuery) {
return new PropertyRefs(profileQuery);
}
private GradleLocationDef getGradleLocationDef() {
if (selectedGradleLocationRef == null) {
return null;
}
return new GradleLocationDef(selectedGradleLocationRef, jPreferWrapperCheck.isSelected());
}
private File getGradleUserHomeDir() {
String result = jGradleUserHomeEdit.getText();
if (result == null) {
return null;
}
result = result.trim();
return result.isEmpty() ? null : new File(result);
}
private final class PropertyRefs implements ProfileEditor {
private final PropertyReference<GradleLocationDef> gradleLocationRef;
private final PropertyReference<File> gradleUserHomeDirRef;
public PropertyRefs(ActiveSettingsQuery settingsQuery) {
gradleLocationRef = CommonGlobalSettings.gradleLocation(settingsQuery);
gradleUserHomeDirRef = CommonGlobalSettings.gradleUserHomeDir(settingsQuery);
}
@Override
public StoredSettings readFromSettings() {
return new StoredSettingsImpl(this);
}
@Override
public StoredSettings readFromGui() {
return new StoredSettingsImpl(this, GradleInstallationPanel.this);
}
}
private final class StoredSettingsImpl implements StoredSettings {
private final PropertyRefs properties;
private final GradleLocationDef locationDef;
private final File userHome;
public StoredSettingsImpl(PropertyRefs properties) {
this.properties = properties;
this.locationDef = properties.gradleLocationRef.tryGetValueWithoutFallback();
this.userHome = properties.gradleUserHomeDirRef.tryGetValueWithoutFallback();
}
public StoredSettingsImpl(PropertyRefs properties, GradleInstallationPanel panel) {
this.properties = properties;
this.locationDef = panel.getGradleLocationDef();
this.userHome = panel.getGradleUserHomeDir();
}
@Override
public void displaySettings() {
displayLocationDef(locationDef != null
? locationDef
: properties.gradleLocationRef.getActiveValue());
displayUserHome(userHome != null
? userHome
: properties.gradleUserHomeDirRef.getActiveValue());
}
@Override
public void saveSettings() {
properties.gradleLocationRef.setValue(locationDef);
properties.gradleUserHomeDirRef.setValue(userHome);
}
}
/**
* 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() {
jGradlePathCaption = new javax.swing.JLabel();
jGradleLocationDescription = new javax.swing.JTextField();
jChangeGradleLocationButton = new javax.swing.JButton();
jGradleUserHomeCaption = new javax.swing.JLabel();
jGradleUserHomeEdit = new javax.swing.JTextField();
jBrowseUserHomeDirButton = new javax.swing.JButton();
jPreferWrapperCheck = new javax.swing.JCheckBox();
org.openide.awt.Mnemonics.setLocalizedText(jGradlePathCaption, org.openide.util.NbBundle.getMessage(GradleInstallationPanel.class, "GradleInstallationPanel.jGradlePathCaption.text")); // NOI18N
jGradleLocationDescription.setEditable(false);
jGradleLocationDescription.setText(org.openide.util.NbBundle.getMessage(GradleInstallationPanel.class, "GradleInstallationPanel.jGradleLocationDescription.text")); // NOI18N
org.openide.awt.Mnemonics.setLocalizedText(jChangeGradleLocationButton, org.openide.util.NbBundle.getMessage(GradleInstallationPanel.class, "GradleInstallationPanel.jChangeGradleLocationButton.text")); // NOI18N
jChangeGradleLocationButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jChangeGradleLocationButtonActionPerformed(evt);
}
});
org.openide.awt.Mnemonics.setLocalizedText(jGradleUserHomeCaption, org.openide.util.NbBundle.getMessage(GradleInstallationPanel.class, "GradleInstallationPanel.jGradleUserHomeCaption.text")); // NOI18N
jGradleUserHomeEdit.setText(org.openide.util.NbBundle.getMessage(GradleInstallationPanel.class, "GradleInstallationPanel.jGradleUserHomeEdit.text")); // NOI18N
org.openide.awt.Mnemonics.setLocalizedText(jBrowseUserHomeDirButton, org.openide.util.NbBundle.getMessage(GradleInstallationPanel.class, "GradleInstallationPanel.jBrowseUserHomeDirButton.text")); // NOI18N
jBrowseUserHomeDirButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jBrowseUserHomeDirButtonActionPerformed(evt);
}
});
org.openide.awt.Mnemonics.setLocalizedText(jPreferWrapperCheck, org.openide.util.NbBundle.getMessage(GradleInstallationPanel.class, "GradleInstallationPanel.jPreferWrapperCheck.text")); // NOI18N
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jGradleUserHomeEdit, javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jGradlePathCaption, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGap(8, 8, 8)
.addComponent(jBrowseUserHomeDirButton))
.addGroup(layout.createSequentialGroup()
.addComponent(jGradleUserHomeCaption)
.addGap(0, 109, Short.MAX_VALUE))
.addGroup(layout.createSequentialGroup()
.addComponent(jChangeGradleLocationButton)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jGradleLocationDescription)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jPreferWrapperCheck)))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jGradlePathCaption)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jGradleLocationDescription, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jChangeGradleLocationButton)
.addComponent(jPreferWrapperCheck))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jGradleUserHomeCaption)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jGradleUserHomeEdit, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jBrowseUserHomeDirButton))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
}// </editor-fold>//GEN-END:initComponents
private void jChangeGradleLocationButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jChangeGradleLocationButtonActionPerformed
GradleLocationRef currentLocationRef = selectedGradleLocationRef;
GradleLocationRef newLocationRef = GradleLocationPanel.tryChooseLocation(this, locationResolver, currentLocationRef);
if (newLocationRef != null) {
selectGradleLocation(newLocationRef);
}
}//GEN-LAST:event_jChangeGradleLocationButtonActionPerformed
private void jBrowseUserHomeDirButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jBrowseUserHomeDirButtonActionPerformed
FileChooserBuilder dlgChooser = new FileChooserBuilder(GradleInstallationPanel.class);
dlgChooser.setDirectoriesOnly(true);
File f = dlgChooser.showOpenDialog();
if (f != null && f.isDirectory()) {
File file = f.getAbsoluteFile();
jGradleUserHomeEdit.setText(file.toString());
}
}//GEN-LAST:event_jBrowseUserHomeDirButtonActionPerformed
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton jBrowseUserHomeDirButton;
private javax.swing.JButton jChangeGradleLocationButton;
private javax.swing.JTextField jGradleLocationDescription;
private javax.swing.JLabel jGradlePathCaption;
private javax.swing.JLabel jGradleUserHomeCaption;
private javax.swing.JTextField jGradleUserHomeEdit;
private javax.swing.JCheckBox jPreferWrapperCheck;
// End of variables declaration//GEN-END:variables
}