/*
* Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package com.sun.tools.visualvm.core.options;
import com.sun.tools.visualvm.core.ui.components.SectionSeparator;
import com.sun.tools.visualvm.core.ui.components.Spacer;
import com.sun.tools.visualvm.uisupport.JExtendedSpinner;
import java.awt.BorderLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.SpinnerNumberModel;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import org.netbeans.modules.profiler.api.ProfilerIDESettings;
import org.openide.awt.Mnemonics;
import org.openide.util.NbBundle;
/**
*
* @author Jaroslav Bachorik
* @author Jiri Sedlacek
*/
final class GeneralOptionsPanel extends JPanel {
private final GeneralOptionsPanelController controller;
transient private final ChangeListener changeListener = new ChangeListener() {
public void stateChanged(ChangeEvent e) {
controller.changed();
}
};
GeneralOptionsPanel(GeneralOptionsPanelController controller) {
this.controller = controller;
initComponents();
startTrackingChanges();
}
private void initComponents() {
GridBagConstraints c;
setLayout(new GridBagLayout());
// --- Polling ---
SectionSeparator pollingSection = UISupport.createSectionSeparator(NbBundle.getMessage
(GeneralOptionsPanel.class, "LBL_Polling")); // NOI18N
c = new GridBagConstraints();
c.gridy = 0;
c.gridwidth = GridBagConstraints.REMAINDER;
c.anchor = GridBagConstraints.WEST;
c.fill = GridBagConstraints.HORIZONTAL;
c.insets = new Insets(0, 0, 5, 0);
add(pollingSection, c);
monitoredHostPLabel = new JLabel();
Mnemonics.setLocalizedText(monitoredHostPLabel, NbBundle.getMessage(
GeneralOptionsPanel.class, "LBL_Monitored_Host")); // NOI18N
c = new GridBagConstraints();
c.gridx = 0;
c.gridy = 1;
c.anchor = GridBagConstraints.WEST;
c.insets = new Insets(3, 15, 3, 0);
add(monitoredHostPLabel, c);
monitoredHostPSpinner = new JExtendedSpinner();
monitoredHostPLabel.setLabelFor(monitoredHostPSpinner);
monitoredHostPSpinner.setModel(new SpinnerNumberModel(3, 1, 99999, 1));
c = new GridBagConstraints();
c.gridx = 1;
c.gridy = 1;
c.anchor = GridBagConstraints.WEST;
c.insets = new Insets(3, 40, 3, 4);
add(monitoredHostPSpinner, c);
monitoredHostPUnits = new JLabel();
Mnemonics.setLocalizedText(monitoredHostPUnits, NbBundle.getMessage(
GeneralOptionsPanel.class, "LBL_Sec")); // NOI18N
c = new GridBagConstraints();
c.gridx = 2;
c.gridy = 1;
c.anchor = GridBagConstraints.WEST;
c.insets = new Insets(3, 0, 3, 0);
add(monitoredHostPUnits, c);
threadsPLabel = new JLabel();
Mnemonics.setLocalizedText(threadsPLabel, NbBundle.getMessage(
GeneralOptionsPanel.class, "LBL_Threads")); // NOI18N
c = new GridBagConstraints();
c.gridx = 0;
c.gridy = 2;
c.anchor = GridBagConstraints.WEST;
c.insets = new Insets(3, 15, 3, 0);
add(threadsPLabel, c);
threadsPSpinner = new JExtendedSpinner();
threadsPLabel.setLabelFor(threadsPSpinner);
threadsPSpinner.setModel(new SpinnerNumberModel(1, 1, 99999, 1));
c = new GridBagConstraints();
c.gridx = 1;
c.gridy = 2;
c.anchor = GridBagConstraints.WEST;
c.insets = new Insets(3, 40, 3, 4);
add(threadsPSpinner, c);
threadsPUnits = new JLabel();
Mnemonics.setLocalizedText(threadsPUnits, NbBundle.getMessage(
GeneralOptionsPanel.class, "LBL_Sec")); // NOI18N
c = new GridBagConstraints();
c.gridx = 2;
c.gridy = 2;
c.anchor = GridBagConstraints.WEST;
c.insets = new Insets(3, 0, 3, 0);
add(threadsPUnits, c);
monitoredDataPLabel = new JLabel();
Mnemonics.setLocalizedText(monitoredDataPLabel, NbBundle.getMessage(
GeneralOptionsPanel.class, "LBL_Monitored_Data")); // NOI18N
c = new GridBagConstraints();
c.gridx = 0;
c.gridy = 3;
c.anchor = GridBagConstraints.WEST;
c.insets = new Insets(3, 15, 3, 0);
add(monitoredDataPLabel, c);
monitoredDataPSpinner = new JExtendedSpinner();
monitoredDataPLabel.setLabelFor(monitoredDataPSpinner);
monitoredDataPSpinner.setModel(new SpinnerNumberModel(1, 1, 99999, 1));
c = new GridBagConstraints();
c.gridx = 1;
c.gridy = 3;
c.anchor = GridBagConstraints.WEST;
c.insets = new Insets(3, 40, 3, 4);
add(monitoredDataPSpinner, c);
monitoredDataPUnits = new JLabel();
Mnemonics.setLocalizedText(monitoredDataPUnits, NbBundle.getMessage(
GeneralOptionsPanel.class, "LBL_Sec")); // NOI18N
c = new GridBagConstraints();
c.gridx = 2;
c.gridy = 3;
c.anchor = GridBagConstraints.WEST;
c.insets = new Insets(3, 0, 3, 0);
add(monitoredDataPUnits, c);
// --- Charts cache ---
SectionSeparator chartsCacheSection = UISupport.createSectionSeparator(NbBundle.getMessage
(GeneralOptionsPanel.class, "LBL_Charts_Cache")); // NOI18N
c = new GridBagConstraints();
c.gridy = 4;
c.gridwidth = GridBagConstraints.REMAINDER;
c.anchor = GridBagConstraints.WEST;
c.fill = GridBagConstraints.HORIZONTAL;
c.insets = new Insets(15, 0, 5, 0);
add(chartsCacheSection, c);
monitoredHostCLabel = new JLabel();
Mnemonics.setLocalizedText(monitoredHostCLabel, NbBundle.getMessage(
GeneralOptionsPanel.class, "LBL_Monitored_Host2")); // NOI18N
c = new GridBagConstraints();
c.gridx = 0;
c.gridy = 5;
c.anchor = GridBagConstraints.WEST;
c.insets = new Insets(3, 15, 3, 0);
add(monitoredHostCLabel, c);
monitoredHostCSpinner = new JExtendedSpinner();
monitoredHostCLabel.setLabelFor(monitoredHostCSpinner);
monitoredHostCSpinner.setModel(new SpinnerNumberModel(60, 1, 99999, 1));
c = new GridBagConstraints();
c.gridx = 1;
c.gridy = 5;
c.anchor = GridBagConstraints.WEST;
c.insets = new Insets(3, 40, 3, 4);
add(monitoredHostCSpinner, c);
monitoredHostCUnits = new JLabel();
Mnemonics.setLocalizedText(monitoredHostCUnits, NbBundle.getMessage(
GeneralOptionsPanel.class, "LBL_min")); // NOI18N
c = new GridBagConstraints();
c.gridx = 2;
c.gridy = 5;
c.anchor = GridBagConstraints.WEST;
c.insets = new Insets(3, 0, 3, 0);
add(monitoredHostCUnits, c);
monitoredDataCLabel = new JLabel();
Mnemonics.setLocalizedText(monitoredDataCLabel, NbBundle.getMessage(
GeneralOptionsPanel.class, "LBL_Monitored_Data2")); // NOI18N
c = new GridBagConstraints();
c.gridx = 0;
c.gridy = 6;
c.anchor = GridBagConstraints.WEST;
c.insets = new Insets(3, 15, 3, 0);
add(monitoredDataCLabel, c);
monitoredDataCSpinner = new JExtendedSpinner();
monitoredDataCLabel.setLabelFor(monitoredDataCSpinner);
monitoredDataCSpinner.setModel(new SpinnerNumberModel(60, 1, 99999, 1));
c = new GridBagConstraints();
c.gridx = 1;
c.gridy = 6;
c.anchor = GridBagConstraints.WEST;
c.insets = new Insets(3, 40, 3, 4);
add(monitoredDataCSpinner, c);
monitoredDataCUnits = new JLabel();
Mnemonics.setLocalizedText(monitoredDataCUnits, NbBundle.getMessage(
GeneralOptionsPanel.class, "LBL_min")); // NOI18N
c = new GridBagConstraints();
c.gridx = 2;
c.gridy = 6;
c.anchor = GridBagConstraints.WEST;
c.insets = new Insets(3, 0, 3, 0);
add(monitoredDataCUnits, c);
// --- Misc ---
SectionSeparator profilerSection = UISupport.createSectionSeparator(NbBundle.getMessage
(GeneralOptionsPanel.class, "LBL_Miscellaneous")); // NOI18N
c = new GridBagConstraints();
c.gridy = 7;
c.gridwidth = GridBagConstraints.REMAINDER;
c.anchor = GridBagConstraints.WEST;
c.fill = GridBagConstraints.HORIZONTAL;
c.insets = new Insets(15, 0, 5, 0);
add(profilerSection, c);
JPanel resetDNSAPanel = new JPanel(new BorderLayout());
resetDNSALabel = new JLabel();
Mnemonics.setLocalizedText(resetDNSALabel, NbBundle.getMessage(
GeneralOptionsPanel.class, "MSG_Do_Not_Show_Again")); // NOI18N
resetDNSAPanel.add(resetDNSALabel, BorderLayout.CENTER);
resetDNSAButton = new JButton();
Mnemonics.setLocalizedText(resetDNSAButton, NbBundle.getMessage(
GeneralOptionsPanel.class, "BTN_Reset")); // NOI18N
resetDNSAPanel.add(resetDNSAButton, BorderLayout.EAST);
c = new GridBagConstraints();
c.gridy = 8;
c.gridwidth = GridBagConstraints.REMAINDER;
c.anchor = GridBagConstraints.WEST;
c.fill = GridBagConstraints.HORIZONTAL;
c.insets = new Insets(2, 15, 2, 0);
add(resetDNSAPanel, c);
// --- Filler ---
c = new GridBagConstraints();
c.gridx = 0;
c.gridy = 10;
c.weightx = 1;
c.weighty = 1;
c.anchor = GridBagConstraints.NORTHWEST;
c.fill = GridBagConstraints.BOTH;
c.gridwidth = GridBagConstraints.REMAINDER;
add(Spacer.create(), c);
}
private void resetDNSAButtonAction() {
ProfilerIDESettings.getInstance().clearDoNotShowAgainMap();
resetDNSAButton.setEnabled(false);
}
void load() {
// TODO read settings and initialize GUI
// Example:
// someCheckBox.setSelected(Preferences.userNodeForPackage(CorePanel.class).getBoolean("someFlag", false));
// or for org.openide.util with API spec. version >= 7.4:
// someCheckBox.setSelected(NbPreferences.forModule(CorePanel.class).getBoolean("someFlag", false));
// or:
// someTextField.setText(SomeSystemOption.getDefault().getSomeStringProperty());
GlobalPreferences preferences = GlobalPreferences.sharedInstance();
resetDNSAButton.setEnabled(true);
monitoredHostPSpinner.setValue(preferences.getMonitoredHostPoll());
monitoredDataPSpinner.setValue(preferences.getMonitoredDataPoll());
threadsPSpinner.setValue(preferences.getThreadsPoll());
monitoredHostCSpinner.setValue(preferences.getMonitoredHostCache());
monitoredDataCSpinner.setValue(preferences.getMonitoredDataCache());
}
void store() {
// TODO store modified settings
// Example:
// Preferences.userNodeForPackage(CorePanel.class).putBoolean("someFlag", someCheckBox.isSelected());
// or for org.openide.util with API spec. version >= 7.4:
// NbPreferences.forModule(CorePanel.class).putBoolean("someFlag", someCheckBox.isSelected());
// or:
// SomeSystemOption.getDefault().setSomeStringProperty(someTextField.getText());
GlobalPreferences preferences = GlobalPreferences.sharedInstance();
preferences.setMonitoredHostPoll((Integer) monitoredHostPSpinner.getValue());
preferences.setMonitoredDataPoll((Integer) monitoredDataPSpinner.getValue());
preferences.setThreadsPoll((Integer) threadsPSpinner.getValue());
preferences.setMonitoredHostCache((Integer) monitoredHostCSpinner.getValue());
preferences.setMonitoredDataCache((Integer) monitoredDataCSpinner.getValue());
preferences.store();
}
boolean valid() {
try {
int mh = (Integer) monitoredHostPSpinner.getValue();
int md = (Integer) monitoredDataPSpinner.getValue();
int th = (Integer) threadsPSpinner.getValue();
int mhc = (Integer) monitoredHostCSpinner.getValue();
int mdc = (Integer) monitoredDataCSpinner.getValue();
return mh > 0 && md > 0 && th > 0 && mhc > 0 && mdc > 0;
} catch (Exception e) {
}
return false;
}
private void startTrackingChanges() {
monitoredHostPSpinner.getModel().addChangeListener(changeListener);
threadsPSpinner.getModel().addChangeListener(changeListener);
monitoredDataPSpinner.getModel().addChangeListener(changeListener);
monitoredHostCSpinner.getModel().addChangeListener(changeListener);
monitoredDataCSpinner.getModel().addChangeListener(changeListener);
resetDNSAButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
resetDNSAButtonAction();
}
});
}
private JLabel monitoredHostPLabel;
private JSpinner monitoredHostPSpinner;
private JLabel monitoredHostPUnits;
private JLabel threadsPLabel;
private JSpinner threadsPSpinner;
private JLabel threadsPUnits;
private JLabel monitoredDataPLabel;
private JSpinner monitoredDataPSpinner;
private JLabel monitoredDataPUnits;
private JLabel monitoredHostCLabel;
private JSpinner monitoredHostCSpinner;
private JLabel monitoredHostCUnits;
private JLabel monitoredDataCLabel;
private JSpinner monitoredDataCSpinner;
private JLabel monitoredDataCUnits;
private JLabel resetDNSALabel;
private JButton resetDNSAButton;
}