package com.ibm.nmon.gui.data;
import java.awt.BorderLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import com.ibm.nmon.data.SystemDataSet;
import com.ibm.nmon.gui.Styles;
import com.ibm.nmon.gui.GUIDialog;
import com.ibm.nmon.gui.main.NMONVisualizerGui;
import com.ibm.nmon.gui.util.HostnameComboBoxModel;
/**
* Modal JDialog to merge a given {@link SystemDataSet} into another. This allows multiple datasets
* parsed under different hostnames to be merged into a single dataset in the GUI.
*
* @see SystemDataSet#addData(SystemDataSet)
*/
public final class MergeDataSetDialog extends GUIDialog {
private static final long serialVersionUID = 8152894318175367260L;
private JComboBox<String> hostnames;
private JButton merge;
private SystemDataSet toMerge;
public MergeDataSetDialog(NMONVisualizerGui gui, SystemDataSet toMerge) {
super(gui, gui.getMainFrame(), "Merge With?");
setResizable(false);
setModal(true);
this.toMerge = toMerge;
JLabel hostname = new JLabel(toMerge.getHostname());
hostname.setFont(Styles.TITLE);
hostname.setHorizontalAlignment(SwingConstants.CENTER);
hostname.setBorder(Styles.TITLE_BORDER);
JLabel mergeHostLabel = new JLabel("Merge Into:");
mergeHostLabel.setFont(Styles.LABEL);
hostnames = new JComboBox<String>(new HostnameComboBoxModel(gui));
hostnames.setEditable(false);
merge = new JButton("Merge");
merge.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String hostname = (String) hostnames.getSelectedItem();
if ("".equals(hostname)) {
JOptionPane.showMessageDialog(MergeDataSetDialog.this, "Please select a valid hostname",
"Invalid hostname", JOptionPane.ERROR_MESSAGE);
}
else if (MergeDataSetDialog.this.toMerge.getHostname().equals(hostname)) {
dispose();
}
else {
for (SystemDataSet data : MergeDataSetDialog.this.gui.getDataSets()) {
if (data.getHostname().equals(hostname)) {
data.addData(MergeDataSetDialog.this.toMerge);
MergeDataSetDialog.this.gui.removeDataSet(MergeDataSetDialog.this.toMerge);
MergeDataSetDialog.this.gui.updateDataSet(data);
dispose();
return;
}
}
}
}
});
JButton cancel = new JButton("Cancel");
cancel.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
dispose();
}
});
JPanel center = new JPanel();
center.setBorder(Styles.CONTENT_BORDER);
center.add(mergeHostLabel);
center.add(hostnames);
JPanel temp = new JPanel();
temp.add(merge);
temp.add(cancel);
add(hostname, BorderLayout.PAGE_START);
add(center, BorderLayout.CENTER);
add(temp, BorderLayout.PAGE_END);
}
@Override
public void setVisible(boolean b) {
if (b) {
getRootPane().setDefaultButton(merge);
hostnames.setSelectedItem(hostnames.getItemAt(0));
hostnames.requestFocus();
}
super.setVisible(b);
}
}