mev-4.0.01/source/org/tigr/microarray/mev/cluster/gui/impl/rn/RelNetInitDialog.java

Code
Comments
Other
Rev Date Author Line
2 26 Feb 07 jari 1 /*
2 26 Feb 07 jari 2 Copyright @ 1999-2003, The Institute for Genomic Research (TIGR).
2 26 Feb 07 jari 3 All rights reserved.
2 26 Feb 07 jari 4 */
2 26 Feb 07 jari 5 /*
2 26 Feb 07 jari 6  * $RCSfile: RelNetInitDialog.java,v $
2 26 Feb 07 jari 7  * $Revision: 1.3 $
2 26 Feb 07 jari 8  * $Date: 2005/03/10 20:39:03 $
2 26 Feb 07 jari 9  * $Author: braistedj $
2 26 Feb 07 jari 10  * $State: Exp $
2 26 Feb 07 jari 11  */
2 26 Feb 07 jari 12 package org.tigr.microarray.mev.cluster.gui.impl.rn;
2 26 Feb 07 jari 13
2 26 Feb 07 jari 14 import java.awt.Color;
2 26 Feb 07 jari 15 import java.awt.Dimension;
2 26 Feb 07 jari 16 import java.awt.Frame;
2 26 Feb 07 jari 17 import java.awt.GridBagConstraints;
2 26 Feb 07 jari 18 import java.awt.GridBagLayout;
2 26 Feb 07 jari 19 import java.awt.Insets;
2 26 Feb 07 jari 20 import java.awt.Toolkit;
2 26 Feb 07 jari 21 import java.awt.event.ActionEvent;
2 26 Feb 07 jari 22 import java.awt.event.WindowEvent;
2 26 Feb 07 jari 23
2 26 Feb 07 jari 24 import javax.swing.AbstractButton;
2 26 Feb 07 jari 25 import javax.swing.JCheckBox;
2 26 Feb 07 jari 26 import javax.swing.JLabel;
2 26 Feb 07 jari 27 import javax.swing.JOptionPane;
2 26 Feb 07 jari 28 import javax.swing.JPanel;
2 26 Feb 07 jari 29 import javax.swing.JTextField;
2 26 Feb 07 jari 30 import javax.swing.UIManager;
2 26 Feb 07 jari 31
2 26 Feb 07 jari 32 import org.tigr.microarray.mev.cluster.gui.impl.dialogs.AlgorithmDialog;
2 26 Feb 07 jari 33 import org.tigr.microarray.mev.cluster.gui.impl.dialogs.DialogListener;
2 26 Feb 07 jari 34 import org.tigr.microarray.mev.cluster.gui.impl.dialogs.ParameterPanel;
2 26 Feb 07 jari 35 import org.tigr.microarray.mev.cluster.gui.impl.dialogs.SampleSelectionPanel;
2 26 Feb 07 jari 36 import org.tigr.microarray.mev.cluster.gui.impl.dialogs.dialogHelpUtil.HelpWindow;
2 26 Feb 07 jari 37
2 26 Feb 07 jari 38 public class RelNetInitDialog extends AlgorithmDialog {
2 26 Feb 07 jari 39     private int result;
2 26 Feb 07 jari 40     private JCheckBox usePermutationBox;
2 26 Feb 07 jari 41     private JTextField minThresholdField;
2 26 Feb 07 jari 42     private JTextField maxThresholdField;
2 26 Feb 07 jari 43     private JTextField entropyField;
2 26 Feb 07 jari 44     private JCheckBox useEntropyBox;
2 26 Feb 07 jari 45     private SampleSelectionPanel sampleSelectionPanel;
2 26 Feb 07 jari 46     
2 26 Feb 07 jari 47     
2 26 Feb 07 jari 48     /**
2 26 Feb 07 jari 49      * Constructs a <code>RelNetInitDialog</code> with default
2 26 Feb 07 jari 50      * initial parameters.
2 26 Feb 07 jari 51      */
2 26 Feb 07 jari 52     public RelNetInitDialog(Frame parent) {
2 26 Feb 07 jari 53         super(parent, "RN: Relevance Networks", true);
2 26 Feb 07 jari 54         
2 26 Feb 07 jari 55         Listener listener = new Listener();
2 26 Feb 07 jari 56         addWindowListener(listener);
2 26 Feb 07 jari 57         
2 26 Feb 07 jari 58         JPanel contentPanel = new JPanel();
2 26 Feb 07 jari 59         contentPanel.setLayout(new GridBagLayout());
2 26 Feb 07 jari 60         
2 26 Feb 07 jari 61         //sample selection panel
2 26 Feb 07 jari 62         sampleSelectionPanel = new SampleSelectionPanel(Color.white, UIManager.getColor("Label.foreground"),true,"Sample Selection");
2 26 Feb 07 jari 63         
2 26 Feb 07 jari 64         //parameter panel
2 26 Feb 07 jari 65         ParameterPanel parameters = new ParameterPanel();
2 26 Feb 07 jari 66         parameters.setLayout(new GridBagLayout());
2 26 Feb 07 jari 67         GridBagConstraints gbc = new GridBagConstraints();
2 26 Feb 07 jari 68         gbc.anchor = GridBagConstraints.WEST;
2 26 Feb 07 jari 69         
2 26 Feb 07 jari 70         usePermutationBox = new JCheckBox("Use Permutation Test");
2 26 Feb 07 jari 71         usePermutationBox.setFocusPainted(false);
2 26 Feb 07 jari 72         usePermutationBox.setBackground(Color.white);
2 26 Feb 07 jari 73         usePermutationBox.setForeground(UIManager.getColor("Label.foreground"));
2 26 Feb 07 jari 74         usePermutationBox.setActionCommand("permutation-command");
2 26 Feb 07 jari 75         usePermutationBox.addActionListener(listener);
2 26 Feb 07 jari 76         gbc.gridx = 0; gbc.gridy = 0; gbc.gridwidth = 2; gbc.insets.bottom = 5;
2 26 Feb 07 jari 77         parameters.add(usePermutationBox, gbc);
2 26 Feb 07 jari 78         
2 26 Feb 07 jari 79         gbc.gridwidth = 1;
2 26 Feb 07 jari 80         gbc.gridy = 1;
2 26 Feb 07 jari 81         gbc.insets.bottom = 5;
2 26 Feb 07 jari 82         parameters.add(new JLabel("Min Threshold:"), gbc);
2 26 Feb 07 jari 83         gbc.gridy = 2;
2 26 Feb 07 jari 84         parameters.add(new JLabel("Max Threshold:"), gbc);
2 26 Feb 07 jari 85         gbc.gridy = 3;
2 26 Feb 07 jari 86         useEntropyBox = new JCheckBox("Use Filter, %");
2 26 Feb 07 jari 87         useEntropyBox.setFocusPainted(false);
2 26 Feb 07 jari 88         useEntropyBox.setBackground(Color.white);
2 26 Feb 07 jari 89         useEntropyBox.setForeground(UIManager.getColor("Label.foreground"));
2 26 Feb 07 jari 90         useEntropyBox.setActionCommand("entropy-command");
2 26 Feb 07 jari 91         useEntropyBox.addActionListener(listener);
2 26 Feb 07 jari 92         parameters.add(useEntropyBox, gbc);
2 26 Feb 07 jari 93         
2 26 Feb 07 jari 94         minThresholdField = new JTextField(String.valueOf(0.97f), 5);
2 26 Feb 07 jari 95         maxThresholdField = new JTextField(String.valueOf(1f), 5);
2 26 Feb 07 jari 96         entropyField = new JTextField("95", 5);
2 26 Feb 07 jari 97         entropyField.setEnabled(false);
2 26 Feb 07 jari 98         gbc.insets = new Insets(0, 10, 5, 0);
2 26 Feb 07 jari 99         gbc.gridx = 1;
2 26 Feb 07 jari 100         gbc.gridy = 1;
2 26 Feb 07 jari 101         parameters.add(minThresholdField, gbc);
2 26 Feb 07 jari 102         gbc.gridy = 2;
2 26 Feb 07 jari 103         parameters.add(maxThresholdField, gbc);
2 26 Feb 07 jari 104         gbc.gridy = 3;
2 26 Feb 07 jari 105         parameters.add(entropyField, gbc);
2 26 Feb 07 jari 106         
2 26 Feb 07 jari 107         contentPanel.add(sampleSelectionPanel, new GridBagConstraints(0,0,1,1,1.0,0.0,GridBagConstraints.CENTER,GridBagConstraints.BOTH,new Insets(0,0,0,0),0,0));
2 26 Feb 07 jari 108         contentPanel.add(parameters, new GridBagConstraints(0,1,1,1,1.0,0.0,GridBagConstraints.CENTER,GridBagConstraints.BOTH,new Insets(0,0,0,0),0,0));
2 26 Feb 07 jari 109         
2 26 Feb 07 jari 110         setActionListeners(listener);
2 26 Feb 07 jari 111         addContent(contentPanel);
2 26 Feb 07 jari 112         pack();
2 26 Feb 07 jari 113         setResizable(false);
2 26 Feb 07 jari 114     }
2 26 Feb 07 jari 115     
2 26 Feb 07 jari 116     /**
2 26 Feb 07 jari 117      * Shows the dialog.
2 26 Feb 07 jari 118      */
2 26 Feb 07 jari 119     public int showModal() {
2 26 Feb 07 jari 120         Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
2 26 Feb 07 jari 121         setLocation((screenSize.width - getSize().width)/2, (screenSize.height - getSize().height)/2);
2 26 Feb 07 jari 122         show();
2 26 Feb 07 jari 123         return result;
2 26 Feb 07 jari 124     }
2 26 Feb 07 jari 125     
2 26 Feb 07 jari 126     /**
2 26 Feb 07 jari 127      * Returns true if entropy check box is selected.
2 26 Feb 07 jari 128      */
2 26 Feb 07 jari 129     public boolean usePermutation() {
2 26 Feb 07 jari 130         return usePermutationBox.isSelected();
2 26 Feb 07 jari 131     }
2 26 Feb 07 jari 132     
2 26 Feb 07 jari 133     /**
2 26 Feb 07 jari 134      * Returns min threshold value.
2 26 Feb 07 jari 135      */
2 26 Feb 07 jari 136     public float getMinThreshold() {
2 26 Feb 07 jari 137         return Float.parseFloat(minThresholdField.getText());
2 26 Feb 07 jari 138     }
2 26 Feb 07 jari 139     
2 26 Feb 07 jari 140     /**
2 26 Feb 07 jari 141      * Returns max threshold value.
2 26 Feb 07 jari 142      */
2 26 Feb 07 jari 143     public float getMaxThreshold() {
2 26 Feb 07 jari 144         return Float.parseFloat(maxThresholdField.getText());
2 26 Feb 07 jari 145     }
2 26 Feb 07 jari 146     
2 26 Feb 07 jari 147     /**
2 26 Feb 07 jari 148      * Returns true if entropy check box is selected.
2 26 Feb 07 jari 149      */
2 26 Feb 07 jari 150     public boolean useEntropy() {
2 26 Feb 07 jari 151         return useEntropyBox.isSelected();
2 26 Feb 07 jari 152     }
2 26 Feb 07 jari 153     
2 26 Feb 07 jari 154     /**
2 26 Feb 07 jari 155      * Returns the entropy value.
2 26 Feb 07 jari 156      */
2 26 Feb 07 jari 157     public float getEntropy() {
2 26 Feb 07 jari 158         if (useEntropy()) {
2 26 Feb 07 jari 159             return Float.parseFloat(entropyField.getText());
2 26 Feb 07 jari 160         }
2 26 Feb 07 jari 161         return 0f;
2 26 Feb 07 jari 162     }
2 26 Feb 07 jari 163     
2 26 Feb 07 jari 164     /**
2 26 Feb 07 jari 165      * Returns true if genes radio button was selected.
2 26 Feb 07 jari 166      */
2 26 Feb 07 jari 167     public boolean isClusterGenes() {
2 26 Feb 07 jari 168         return sampleSelectionPanel.isClusterGenesSelected();
2 26 Feb 07 jari 169     }
2 26 Feb 07 jari 170     
2 26 Feb 07 jari 171     /**
2 26 Feb 07 jari 172      * Resets defaults
2 26 Feb 07 jari 173      */
2 26 Feb 07 jari 174     private void resetControls(){
2 26 Feb 07 jari 175         sampleSelectionPanel.setClusterGenesSelected(true);
2 26 Feb 07 jari 176         useEntropyBox.setSelected(false);
2 26 Feb 07 jari 177         usePermutationBox.setSelected(false);
2 26 Feb 07 jari 178         this.entropyField.setText("95");
2 26 Feb 07 jari 179         this.entropyField.setEnabled(false);
2 26 Feb 07 jari 180         this.maxThresholdField.setText(String.valueOf(1f));
2 26 Feb 07 jari 181         this.minThresholdField.setText(String.valueOf(0.97f));
2 26 Feb 07 jari 182         this.minThresholdField.setEnabled(true);
2 26 Feb 07 jari 183     }
2 26 Feb 07 jari 184     /**
2 26 Feb 07 jari 185      *  Input validation
2 26 Feb 07 jari 186      */
2 26 Feb 07 jari 187     
2 26 Feb 07 jari 188     private boolean validInput(float min, float max, float entropy){
2 26 Feb 07 jari 189         boolean valid = true;
2 26 Feb 07 jari 190         if(!this.usePermutationBox.isSelected() && (min <= 0 || min > 1.0)){
2 26 Feb 07 jari 191             JOptionPane.showMessageDialog(RelNetInitDialog.this, "Min. Treshold must be > 0 and <= 1.0", "Input Error!", JOptionPane.ERROR_MESSAGE);
2 26 Feb 07 jari 192             this.minThresholdField.requestFocus();
2 26 Feb 07 jari 193             this.minThresholdField.selectAll();
2 26 Feb 07 jari 194             valid = false;
2 26 Feb 07 jari 195         }
2 26 Feb 07 jari 196         else if(max <= 0 || max > 1.0){
2 26 Feb 07 jari 197             JOptionPane.showMessageDialog(RelNetInitDialog.this, "Max. Treshold must be > 0 and <= 1.0", "Input Error!", JOptionPane.ERROR_MESSAGE);
2 26 Feb 07 jari 198             this.maxThresholdField.requestFocus();
2 26 Feb 07 jari 199             this.maxThresholdField.selectAll();
2 26 Feb 07 jari 200             valid = false;
2 26 Feb 07 jari 201         }
2 26 Feb 07 jari 202         else if(max <= min){
2 26 Feb 07 jari 203             JOptionPane.showMessageDialog(RelNetInitDialog.this, "Max. threshold must be > Min. threshold", "Input Error!", JOptionPane.ERROR_MESSAGE);
2 26 Feb 07 jari 204             
2 26 Feb 07 jari 205             valid = false;
2 26 Feb 07 jari 206         }
2 26 Feb 07 jari 207         else if(useEntropy() && (entropy <=0 || entropy > 100)){
2 26 Feb 07 jari 208             JOptionPane.showMessageDialog(RelNetInitDialog.this, "Entropy must be > 0 and <= 100", "Input Error!", JOptionPane.ERROR_MESSAGE);
2 26 Feb 07 jari 209             this.entropyField.requestFocus();
2 26 Feb 07 jari 210             this.entropyField.selectAll();
2 26 Feb 07 jari 211             valid = false;
2 26 Feb 07 jari 212         }
2 26 Feb 07 jari 213         return valid;
2 26 Feb 07 jari 214         
2 26 Feb 07 jari 215     }
2 26 Feb 07 jari 216     
2 26 Feb 07 jari 217     /**
2 26 Feb 07 jari 218      * The class to listen to the dialog events.
2 26 Feb 07 jari 219      */
2 26 Feb 07 jari 220     private class Listener extends DialogListener {
2 26 Feb 07 jari 221         
2 26 Feb 07 jari 222         public void actionPerformed(ActionEvent e) {
2 26 Feb 07 jari 223             String command = e.getActionCommand();
2 26 Feb 07 jari 224             if (command.equals("ok-command")) {
2 26 Feb 07 jari 225                 int progress = 0;
2 26 Feb 07 jari 226                 float min, max, entropy = 0;
2 26 Feb 07 jari 227                 try {
2 26 Feb 07 jari 228                     min = Float.parseFloat(minThresholdField.getText());
2 26 Feb 07 jari 229                     progress++;
2 26 Feb 07 jari 230                     max = Float.parseFloat(maxThresholdField.getText());
2 26 Feb 07 jari 231                     progress++;
2 26 Feb 07 jari 232                     if (useEntropy()) {
2 26 Feb 07 jari 233                         entropy = Float.parseFloat(entropyField.getText());
2 26 Feb 07 jari 234                         progress++;
2 26 Feb 07 jari 235                     }
2 26 Feb 07 jari 236                     if(validInput(min,max,entropy)){
2 26 Feb 07 jari 237                         result = JOptionPane.OK_OPTION;
2 26 Feb 07 jari 238                         dispose();
2 26 Feb 07 jari 239                     }
2 26 Feb 07 jari 240                 } catch (NumberFormatException nfe) {
2 26 Feb 07 jari 241                     JOptionPane.showMessageDialog(RelNetInitDialog.this, "Not a number: " + nfe.getMessage(), "Input Error!", JOptionPane.ERROR_MESSAGE);
2 26 Feb 07 jari 242                     if(progress == 0){
2 26 Feb 07 jari 243                         minThresholdField.requestFocus();
2 26 Feb 07 jari 244                         minThresholdField.selectAll();
2 26 Feb 07 jari 245                     } else if(progress == 1) {
2 26 Feb 07 jari 246                         maxThresholdField.requestFocus();
2 26 Feb 07 jari 247                         maxThresholdField.selectAll();
2 26 Feb 07 jari 248                     } else if(progress == 2){
2 26 Feb 07 jari 249                         entropyField.requestFocus();
2 26 Feb 07 jari 250                         entropyField.selectAll();
2 26 Feb 07 jari 251                     }
2 26 Feb 07 jari 252                 }
2 26 Feb 07 jari 253             } else if (command.equals("cancel-command")) {
2 26 Feb 07 jari 254                 result = JOptionPane.CANCEL_OPTION;
2 26 Feb 07 jari 255                 dispose();
2 26 Feb 07 jari 256             } else if (command.equals("entropy-command")) {
2 26 Feb 07 jari 257                 entropyField.setEnabled(((AbstractButton)e.getSource()).isSelected());
2 26 Feb 07 jari 258             } else if (command.equals("permutation-command")) {
2 26 Feb 07 jari 259                 minThresholdField.setEnabled(!((AbstractButton)e.getSource()).isSelected());
2 26 Feb 07 jari 260             }else if (command.equals("reset-command")){
2 26 Feb 07 jari 261                 resetControls();
2 26 Feb 07 jari 262             }else if(command.equals("info-command")){
2 26 Feb 07 jari 263                 HelpWindow helpWindow = new HelpWindow(RelNetInitDialog.this, "RN Initialization Dialog");
2 26 Feb 07 jari 264                 if(helpWindow.getWindowContent()){
2 26 Feb 07 jari 265                     helpWindow.setSize(450,500);
2 26 Feb 07 jari 266                     helpWindow.setLocation();
2 26 Feb 07 jari 267                     helpWindow.show();
2 26 Feb 07 jari 268                 }
2 26 Feb 07 jari 269                 else{
2 26 Feb 07 jari 270                     helpWindow.dispose();
2 26 Feb 07 jari 271                 }
2 26 Feb 07 jari 272                 
2 26 Feb 07 jari 273             }
2 26 Feb 07 jari 274         }
2 26 Feb 07 jari 275         
2 26 Feb 07 jari 276         public void windowClosing(WindowEvent e) {
2 26 Feb 07 jari 277             result = JOptionPane.CLOSED_OPTION;
2 26 Feb 07 jari 278             dispose();
2 26 Feb 07 jari 279         }
2 26 Feb 07 jari 280     }
2 26 Feb 07 jari 281     
2 26 Feb 07 jari 282     public static void main(String[] args) {
2 26 Feb 07 jari 283         RelNetInitDialog dlg = new RelNetInitDialog(new javax.swing.JFrame());
2 26 Feb 07 jari 284         if (dlg.showModal() == JOptionPane.OK_OPTION) {
2 26 Feb 07 jari 285             System.out.println("ok");
2 26 Feb 07 jari 286         }
2 26 Feb 07 jari 287         System.exit(0);
2 26 Feb 07 jari 288     }
2 26 Feb 07 jari 289 }