package org.netbeans.gradle.project.properties.ui; import java.net.URL; import javax.swing.JCheckBox; import javax.swing.SpinnerNumberModel; 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.global.CommonGlobalSettings; import org.netbeans.gradle.project.properties.global.GlobalSettingsPage; import org.netbeans.gradle.project.util.NbFileUtils; @SuppressWarnings("serial") public class OtherOptionsPanel extends javax.swing.JPanel implements ProfileEditorFactory { private static final URL HELP_URL = NbFileUtils.getSafeURL("https://github.com/kelemen/netbeans-gradle-project/wiki/Other"); public OtherOptionsPanel() { initComponents(); jProjectCacheSize.setModel(new SpinnerNumberModel(1, 1, Integer.MAX_VALUE, 1)); } public static GlobalSettingsPage createSettingsPage() { GlobalSettingsPage.Builder result = new GlobalSettingsPage.Builder(new OtherOptionsPanel()); result.setHelpUrl(HELP_URL); return result.create(); } @Override public ProfileEditor startEditingProfile(ProfileInfo profileInfo, ActiveSettingsQuery profileQuery) { return new PropertyRefs(profileQuery); } 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 void displayProjectCacheSize(Integer value) { if (value != null) { jProjectCacheSize.setValue(value); } } private int getProjectCacheSize(PropertyRefs properties) { Object value = jProjectCacheSize.getValue(); int result; if (value instanceof Number) { result = ((Number)value).intValue(); } else { result = properties.projectCacheSizeRef.getActiveValue(); } return result > 0 ? result : 1; } private final class PropertyRefs implements ProfileEditor { private final PropertyReference<Boolean> detectProjectDependenciesByJarNameRef; private final PropertyReference<Boolean> compileOnSaveRef; private final PropertyReference<Integer> projectCacheSizeRef; public PropertyRefs(ActiveSettingsQuery settingsQuery) { detectProjectDependenciesByJarNameRef = CommonGlobalSettings.detectProjectDependenciesByJarName(settingsQuery); compileOnSaveRef = CommonGlobalSettings.compileOnSave(settingsQuery); projectCacheSizeRef = CommonGlobalSettings.projectCacheSize(settingsQuery); } @Override public StoredSettings readFromSettings() { return new StoredSettingsImpl(this); } @Override public StoredSettings readFromGui() { return new StoredSettingsImpl(this, OtherOptionsPanel.this); } } private class StoredSettingsImpl implements StoredSettings { private final PropertyRefs properties; private final Boolean detectProjectDependenciesByJarName; private final Boolean compileOnSave; private final Integer projectCacheSize; public StoredSettingsImpl(PropertyRefs properties) { this.properties = properties; this.detectProjectDependenciesByJarName = properties.detectProjectDependenciesByJarNameRef.tryGetValueWithoutFallback(); this.compileOnSave = properties.compileOnSaveRef.tryGetValueWithoutFallback(); this.projectCacheSize = properties.projectCacheSizeRef.tryGetValueWithoutFallback(); } public StoredSettingsImpl(PropertyRefs properties, OtherOptionsPanel panel) { this.properties = properties; this.detectProjectDependenciesByJarName = panel.jDetectProjectDependenciesByName.isSelected(); this.compileOnSave = panel.jCompileOnSaveCheckbox.isSelected(); this.projectCacheSize = panel.getProjectCacheSize(properties); } @Override public void displaySettings() { displayCheck(jDetectProjectDependenciesByName, detectProjectDependenciesByJarName, properties.detectProjectDependenciesByJarNameRef); displayCheck(jCompileOnSaveCheckbox, compileOnSave, properties.compileOnSaveRef); displayProjectCacheSize(projectCacheSize != null ? projectCacheSize : properties.projectCacheSizeRef.getActiveValue()); } @Override public void saveSettings() { properties.detectProjectDependenciesByJarNameRef.setValue(detectProjectDependenciesByJarName); properties.compileOnSaveRef.setValue(compileOnSave); properties.projectCacheSizeRef.setValue(projectCacheSize); } } /** * 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() { jCompileOnSaveCheckbox = new javax.swing.JCheckBox(); jProjectCacheSizeLabel = new javax.swing.JLabel(); jProjectCacheSize = new javax.swing.JSpinner(); jDetectProjectDependenciesByName = new javax.swing.JCheckBox(); org.openide.awt.Mnemonics.setLocalizedText(jCompileOnSaveCheckbox, org.openide.util.NbBundle.getMessage(OtherOptionsPanel.class, "OtherOptionsPanel.jCompileOnSaveCheckbox.text")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(jProjectCacheSizeLabel, org.openide.util.NbBundle.getMessage(OtherOptionsPanel.class, "OtherOptionsPanel.jProjectCacheSizeLabel.text")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(jDetectProjectDependenciesByName, org.openide.util.NbBundle.getMessage(OtherOptionsPanel.class, "OtherOptionsPanel.jDetectProjectDependenciesByName.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(jProjectCacheSizeLabel) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(jProjectCacheSize, javax.swing.GroupLayout.PREFERRED_SIZE, 95, javax.swing.GroupLayout.PREFERRED_SIZE)) .addComponent(jCompileOnSaveCheckbox) .addComponent(jDetectProjectDependenciesByName)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jProjectCacheSizeLabel) .addComponent(jProjectCacheSize, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(jCompileOnSaveCheckbox) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(jDetectProjectDependenciesByName) .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 jCompileOnSaveCheckbox; private javax.swing.JCheckBox jDetectProjectDependenciesByName; private javax.swing.JSpinner jProjectCacheSize; private javax.swing.JLabel jProjectCacheSizeLabel; // End of variables declaration//GEN-END:variables }