package org.netbeans.gradle.project.properties.ui;
import java.net.URL;
import javax.swing.JCheckBox;
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.ModelLoadingStrategy;
import org.netbeans.gradle.project.properties.global.CommonGlobalSettings;
import org.netbeans.gradle.project.properties.global.GlobalSettingsPage;
import org.netbeans.gradle.project.util.NbFileUtils;
@SuppressWarnings("serial")
public class BuildScriptParsingPanel extends javax.swing.JPanel implements ProfileEditorFactory {
private static final URL HELP_URL = NbFileUtils.getSafeURL("https://github.com/kelemen/netbeans-gradle-project/wiki/Build-Script-Parsing");
private final EnumCombo<ModelLoadingStrategy> modelLoadingStrategyCombo;
public BuildScriptParsingPanel() {
initComponents();
modelLoadingStrategyCombo = new EnumCombo<>(ModelLoadingStrategy.class, ModelLoadingStrategy.NEWEST_POSSIBLE, jModelLoadStrategy);
}
public static GlobalSettingsPage createSettingsPage() {
GlobalSettingsPage.Builder result = new GlobalSettingsPage.Builder(new BuildScriptParsingPanel());
result.setHelpUrl(HELP_URL);
return result.create();
}
@Override
public ProfileEditor startEditingProfile(ProfileInfo profileInfo, ActiveSettingsQuery profileQuery) {
return new PropertyRefs(profileQuery);
}
private void displayModelLoadingStrategy(ModelLoadingStrategy value) {
if (value != null) {
modelLoadingStrategyCombo.setSelectedValue(value);
}
}
private void displayCheck(JCheckBox checkbox, Boolean value, PropertyReference<Boolean> propertyRef) {
displayCheck(checkbox, value != null ? value : propertyRef.getActiveValue());
}
private void displayCheck(JCheckBox checkbox, Boolean value) {
if (value != null) {
checkbox.setSelected(value);
}
}
private final class PropertyRefs implements ProfileEditor {
private final PropertyReference<ModelLoadingStrategy> modelLoadingStrategyRef;
private final PropertyReference<Boolean> loadRootProjectFirstRef;
private final PropertyReference<Boolean> mayRelyOnJavaOfScriptRef;
public PropertyRefs(ActiveSettingsQuery settingsQuery) {
modelLoadingStrategyRef = CommonGlobalSettings.modelLoadingStrategy(settingsQuery);
loadRootProjectFirstRef = CommonGlobalSettings.loadRootProjectFirst(settingsQuery);
mayRelyOnJavaOfScriptRef = CommonGlobalSettings.mayRelyOnJavaOfScript(settingsQuery);
}
@Override
public StoredSettings readFromSettings() {
return new StoredSettingsImpl(this);
}
@Override
public StoredSettings readFromGui() {
return new StoredSettingsImpl(this, BuildScriptParsingPanel.this);
}
}
private class StoredSettingsImpl implements StoredSettings {
private final PropertyRefs properties;
private final ModelLoadingStrategy modelLoadingStrategy;
private final Boolean loadRootProjectFirst;
private final Boolean mayRelyOnJavaOfScript;
public StoredSettingsImpl(PropertyRefs properties) {
this.properties = properties;
this.modelLoadingStrategy = properties.modelLoadingStrategyRef.tryGetValueWithoutFallback();
this.loadRootProjectFirst = properties.loadRootProjectFirstRef.tryGetValueWithoutFallback();
this.mayRelyOnJavaOfScript = properties.mayRelyOnJavaOfScriptRef.tryGetValueWithoutFallback();
}
public StoredSettingsImpl(PropertyRefs properties, BuildScriptParsingPanel panel) {
this.properties = properties;
this.modelLoadingStrategy = panel.modelLoadingStrategyCombo.getSelectedValue();
this.loadRootProjectFirst = panel.jLoadRootProjectFirst.isSelected();
this.mayRelyOnJavaOfScript = panel.jReliableJavaVersionCheck.isSelected();
}
@Override
public void displaySettings() {
displayModelLoadingStrategy(modelLoadingStrategy != null
? modelLoadingStrategy
: properties.modelLoadingStrategyRef.getActiveValue());
displayCheck(jLoadRootProjectFirst, loadRootProjectFirst, properties.loadRootProjectFirstRef);
displayCheck(jReliableJavaVersionCheck, mayRelyOnJavaOfScript, properties.mayRelyOnJavaOfScriptRef);
}
@Override
public void saveSettings() {
properties.modelLoadingStrategyRef.setValue(modelLoadingStrategy);
properties.loadRootProjectFirstRef.setValue(loadRootProjectFirst);
properties.mayRelyOnJavaOfScriptRef.setValue(mayRelyOnJavaOfScript);
}
}
/**
* 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() {
jModelLoadStrategy = new javax.swing.JComboBox<>();
jModelLoadStrategyLabel = new javax.swing.JLabel();
jReliableJavaVersionCheck = new javax.swing.JCheckBox();
jLoadRootProjectFirst = new javax.swing.JCheckBox();
org.openide.awt.Mnemonics.setLocalizedText(jModelLoadStrategyLabel, org.openide.util.NbBundle.getMessage(BuildScriptParsingPanel.class, "BuildScriptParsingPanel.jModelLoadStrategyLabel.text")); // NOI18N
org.openide.awt.Mnemonics.setLocalizedText(jReliableJavaVersionCheck, org.openide.util.NbBundle.getMessage(BuildScriptParsingPanel.class, "BuildScriptParsingPanel.jReliableJavaVersionCheck.text")); // NOI18N
org.openide.awt.Mnemonics.setLocalizedText(jLoadRootProjectFirst, org.openide.util.NbBundle.getMessage(BuildScriptParsingPanel.class, "BuildScriptParsingPanel.jLoadRootProjectFirst.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()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jModelLoadStrategyLabel)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jModelLoadStrategy, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addComponent(jReliableJavaVersionCheck)
.addComponent(jLoadRootProjectFirst))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jModelLoadStrategy, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jModelLoadStrategyLabel))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jLoadRootProjectFirst)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jReliableJavaVersionCheck)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
}// </editor-fold>//GEN-END:initComponents
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JCheckBox jLoadRootProjectFirst;
private javax.swing.JComboBox<EnumCombo.Item<ModelLoadingStrategy>> jModelLoadStrategy;
private javax.swing.JLabel jModelLoadStrategyLabel;
private javax.swing.JCheckBox jReliableJavaVersionCheck;
// End of variables declaration//GEN-END:variables
}