package org.chesmapper.view.gui.util; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.List; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JDialog; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.border.EmptyBorder; import org.chesmapper.map.dataInterface.CompoundProperty; import org.chesmapper.map.dataInterface.NominalProperty; import org.chesmapper.map.dataInterface.NumericProperty; import org.chesmapper.map.main.Settings; import org.chesmapper.view.cluster.ClusterController; import org.chesmapper.view.cluster.Clustering; import org.chesmapper.view.cluster.SALIProperty; import org.chesmapper.view.cluster.ClusteringImpl.LogProperty; import org.chesmapper.view.gui.ViewControler; import org.mg.javalib.gui.TextPanel; import org.mg.javalib.util.ArrayUtil; import com.jgoodies.forms.builder.DefaultFormBuilder; import com.jgoodies.forms.factories.ButtonBarFactory; import com.jgoodies.forms.layout.FormLayout; public class SALIDialog extends JDialog { private SALIDialog(final ViewControler viewControler, final Clustering clustering, List<CompoundProperty> list) { super(Settings.TOP_LEVEL_FRAME, Settings.text("action.edit-show-sali"), true); DefaultFormBuilder builder = new DefaultFormBuilder(new FormLayout("p,10px,fill:p:grow")); TextPanel tp1 = new TextPanel(Settings.text("props.sali.detail", SALIProperty.MIN_ENDPOINT_DEV_STR)); builder.append(tp1, 3); builder.nextLine(); final JComboBox<CompoundProperty> propCombo = new JComboBox<CompoundProperty>(ArrayUtil.toArray( CompoundProperty.class, list)); if (viewControler.getHighlightedProperty() != null) { CompoundProperty sel = viewControler.getHighlightedProperty(); if (list.contains(sel)) propCombo.setSelectedItem(sel); } JLabel label = new JLabel("Endpoint:"); builder.append(label); builder.append(propCombo); builder.nextLine(); JButton ok = new JButton("OK"); JButton close = new JButton("Cancel"); ok.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { SALIDialog.this.setVisible(false); CompoundProperty p = clustering.addSALIFeatures((CompoundProperty) propCombo.getSelectedItem()); if (p != null) viewControler.setHighlighter(p); } }); close.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { SALIDialog.this.setVisible(false); } }); builder.append(" ");//add gap builder.nextLine(); builder.append(ButtonBarFactory.buildOKCancelBar(ok, close), 3); builder.setBorder(new EmptyBorder(10, 10, 10, 10)); setLayout(new BorderLayout()); add(builder.getPanel()); pack(); tp1.setPreferredWith(Math.max(300, label.getPreferredSize().width + 10 + propCombo.getPreferredSize().width)); pack(); setLocationRelativeTo(getOwner()); } public static void showDialog(ViewControler viewControler, Clustering clustering, ClusterController clusterControler) { if (clusterControler.getCompoundFilter() != null) { JOptionPane .showMessageDialog( Settings.TOP_LEVEL_FRAME, "Currently, activity cliffs can only be computed for the complete un-filtered dataset. Please remove compound filter first.", "Message", JOptionPane.OK_OPTION); return; } List<CompoundProperty> list = new ArrayList<CompoundProperty>(); for (CompoundProperty p : clustering.getAdditionalProperties()) if (p instanceof LogProperty) list.add(p); for (CompoundProperty p : clustering.getProperties()) { if (p instanceof NumericProperty || ((NominalProperty) p).getDomain().length == 2) list.add(p); } if (list.size() == 0) JOptionPane .showMessageDialog( Settings.TOP_LEVEL_FRAME, "Currently, only numeric or binary endpoint properties are supported.\nNo such property is available in the dataset.", "Message", JOptionPane.OK_OPTION); else { SALIDialog d = new SALIDialog(viewControler, clustering, list); d.setVisible(true); } } }