mev-4.0.01/source/org/tigr/microarray/mev/cgh/CGHGuiObj/GuiUtil/GroupExperimentsPanel.java

Code
Comments
Other
Rev Date Author Line
2 26 Feb 07 jari 1 /*
2 26 Feb 07 jari 2  * GroupExperimentsPanel.java
2 26 Feb 07 jari 3  *
2 26 Feb 07 jari 4  * Created on November 22, 2003, 4:36 AM
2 26 Feb 07 jari 5  */
2 26 Feb 07 jari 6
2 26 Feb 07 jari 7 package org.tigr.microarray.mev.cgh.CGHGuiObj.GuiUtil;
2 26 Feb 07 jari 8
2 26 Feb 07 jari 9 import java.awt.Color;
2 26 Feb 07 jari 10 import java.awt.Dimension;
2 26 Feb 07 jari 11 import java.awt.Font;
2 26 Feb 07 jari 12 import java.awt.GridBagConstraints;
2 26 Feb 07 jari 13 import java.awt.GridBagLayout;
2 26 Feb 07 jari 14 import java.awt.Insets;
2 26 Feb 07 jari 15 import java.awt.event.ActionEvent;
2 26 Feb 07 jari 16 import java.awt.event.ActionListener;
2 26 Feb 07 jari 17 import java.io.BufferedReader;
2 26 Feb 07 jari 18 import java.io.File;
2 26 Feb 07 jari 19 import java.io.FileOutputStream;
2 26 Feb 07 jari 20 import java.io.FileReader;
2 26 Feb 07 jari 21 import java.io.PrintWriter;
2 26 Feb 07 jari 22 import java.util.Vector;
2 26 Feb 07 jari 23
2 26 Feb 07 jari 24 import javax.swing.BorderFactory;
2 26 Feb 07 jari 25 import javax.swing.ButtonGroup;
2 26 Feb 07 jari 26 import javax.swing.JButton;
2 26 Feb 07 jari 27 import javax.swing.JFileChooser;
2 26 Feb 07 jari 28 import javax.swing.JLabel;
2 26 Feb 07 jari 29 import javax.swing.JOptionPane;
2 26 Feb 07 jari 30 import javax.swing.JPanel;
2 26 Feb 07 jari 31 import javax.swing.JRadioButton;
2 26 Feb 07 jari 32 import javax.swing.JScrollPane;
2 26 Feb 07 jari 33 import javax.swing.ScrollPaneConstants;
2 26 Feb 07 jari 34 import javax.swing.border.BevelBorder;
2 26 Feb 07 jari 35 import javax.swing.border.EtchedBorder;
2 26 Feb 07 jari 36 import javax.swing.border.TitledBorder;
2 26 Feb 07 jari 37
2 26 Feb 07 jari 38 import org.tigr.util.StringSplitter;
2 26 Feb 07 jari 39
2 26 Feb 07 jari 40 /**
2 26 Feb 07 jari 41  *
2 26 Feb 07 jari 42  * @author  Adam Margolin
2 26 Feb 07 jari 43  * @author Raktim Sinha
2 26 Feb 07 jari 44  */
2 26 Feb 07 jari 45 public class GroupExperimentsPanel extends JPanel {
2 26 Feb 07 jari 46     public static final int GROUP_A = 1;
2 26 Feb 07 jari 47     public static final int GROUP_B = 2;
2 26 Feb 07 jari 48     public static final int NEITHER_GROUP = 3;
2 26 Feb 07 jari 49
2 26 Feb 07 jari 50     GroupExperimentsPanel gPanel;
2 26 Feb 07 jari 51     Vector exptNames;
2 26 Feb 07 jari 52     JLabel[] expLabels;
2 26 Feb 07 jari 53     JRadioButton[] groupARadioButtons, groupBRadioButtons, neitherGroupRadioButtons;
2 26 Feb 07 jari 54     public GroupExperimentsPanel(Vector exptNames) {
2 26 Feb 07 jari 55         gPanel = this;
2 26 Feb 07 jari 56         this.exptNames = exptNames;
2 26 Feb 07 jari 57         this.setBorder(new TitledBorder(new EtchedBorder(EtchedBorder.LOWERED), "Group Assignments", TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.DEFAULT_POSITION, new Font("Dialog", Font.BOLD, 12), Color.black));
2 26 Feb 07 jari 58         this.setBackground(Color.white);
2 26 Feb 07 jari 59         JPanel panel1 = new JPanel();
2 26 Feb 07 jari 60         // panel1.setBackground(Color.white);
2 26 Feb 07 jari 61         expLabels = new JLabel[exptNames.size()];
2 26 Feb 07 jari 62         groupARadioButtons = new JRadioButton[exptNames.size()];
2 26 Feb 07 jari 63         groupBRadioButtons = new JRadioButton[exptNames.size()];
2 26 Feb 07 jari 64         neitherGroupRadioButtons = new JRadioButton[exptNames.size()];
2 26 Feb 07 jari 65         //ButtonGroup chooseGroup[] = new ButtonGroup[exptNames.size()];
2 26 Feb 07 jari 66         ButtonGroup chooseGroup[] = new ButtonGroup[2];
2 26 Feb 07 jari 67         chooseGroup[0] = new ButtonGroup();
2 26 Feb 07 jari 68         chooseGroup[1] = new ButtonGroup();
2 26 Feb 07 jari 69
2 26 Feb 07 jari 70         GridBagLayout gridbag = new GridBagLayout();
2 26 Feb 07 jari 71         GridBagLayout gridbag2 = new GridBagLayout();
2 26 Feb 07 jari 72         GridBagConstraints constraints = new GridBagConstraints();
2 26 Feb 07 jari 73         this.setLayout(gridbag2);
2 26 Feb 07 jari 74         panel1.setLayout(gridbag);
2 26 Feb 07 jari 75
2 26 Feb 07 jari 76         for (int i = 0; i < exptNames.size(); i++) {
2 26 Feb 07 jari 77             String s1 = (String)(exptNames.get(i));//permut
2 26 Feb 07 jari 78             expLabels[i] = new JLabel(s1);
2 26 Feb 07 jari 79             expLabels[i].setForeground(Color.black);
2 26 Feb 07 jari 80
2 26 Feb 07 jari 81             groupARadioButtons[i] = new JRadioButton("Group A", false);
2 26 Feb 07 jari 82
2 26 Feb 07 jari 83             groupBRadioButtons[i] = new JRadioButton("Group B", false);
2 26 Feb 07 jari 84
2 26 Feb 07 jari 85             //neitherGroupRadioButtons[i] = new JRadioButton("Neither group", false);
2 26 Feb 07 jari 86
2 26 Feb 07 jari 87             buildConstraints(constraints, 0, i, 1, 1, 25, 100);
2 26 Feb 07 jari 88
2 26 Feb 07 jari 89             gridbag.setConstraints(expLabels[i], constraints);
2 26 Feb 07 jari 90             panel1.add(expLabels[i]);
2 26 Feb 07 jari 91
2 26 Feb 07 jari 92             buildConstraints(constraints, 1, i, 1, 1, 25, 100);
2 26 Feb 07 jari 93             gridbag.setConstraints(groupARadioButtons[i], constraints);
2 26 Feb 07 jari 94             panel1.add(groupARadioButtons[i]);
2 26 Feb 07 jari 95
2 26 Feb 07 jari 96             buildConstraints(constraints, 2, i, 1, 1, 25, 100);
2 26 Feb 07 jari 97             gridbag.setConstraints(groupBRadioButtons[i], constraints);
2 26 Feb 07 jari 98             panel1.add(groupBRadioButtons[i]);
2 26 Feb 07 jari 99
2 26 Feb 07 jari 100             //buildConstraints(constraints, 3, i, 1, 1, 25, 100);
2 26 Feb 07 jari 101             //gridbag.setConstraints(neitherGroupRadioButtons[i], constraints);
2 26 Feb 07 jari 102             //panel1.add(neitherGroupRadioButtons[i]);
2 26 Feb 07 jari 103
2 26 Feb 07 jari 104             //chooseGroup[i] = new ButtonGroup();
2 26 Feb 07 jari 105             //chooseGroup[i].add(groupARadioButtons[i]);
2 26 Feb 07 jari 106             //chooseGroup[i].add(groupBRadioButtons[i]);
2 26 Feb 07 jari 107             //chooseGroup[i].add(neitherGroupRadioButtons[i]);
2 26 Feb 07 jari 108             chooseGroup[0].add(groupARadioButtons[i]);
2 26 Feb 07 jari 109             chooseGroup[1].add(groupBRadioButtons[i]);
2 26 Feb 07 jari 110         }
2 26 Feb 07 jari 111
2 26 Feb 07 jari 112         if(exptNames.size() > 0){
2 26 Feb 07 jari 113             groupARadioButtons[0].setSelected(true);
2 26 Feb 07 jari 114         }
2 26 Feb 07 jari 115         if(exptNames.size() > 1){
2 26 Feb 07 jari 116             groupBRadioButtons[1].setSelected(true);
2 26 Feb 07 jari 117         }
2 26 Feb 07 jari 118
2 26 Feb 07 jari 119         JScrollPane scroll = new JScrollPane(panel1);
2 26 Feb 07 jari 120         scroll.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
2 26 Feb 07 jari 121         scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
2 26 Feb 07 jari 122         scroll.setBorder(BorderFactory.createLineBorder(Color.black,2));
2 26 Feb 07 jari 123
2 26 Feb 07 jari 124         buildConstraints(constraints, 0, 0, 1, 1, 100, 90);
2 26 Feb 07 jari 125         constraints.fill = GridBagConstraints.BOTH;
2 26 Feb 07 jari 126         gridbag2.setConstraints(scroll, constraints);
2 26 Feb 07 jari 127         this.add(scroll);
2 26 Feb 07 jari 128
2 26 Feb 07 jari 129         /*
2 26 Feb 07 jari 130         JLabel label1 = new JLabel("                                                Note: Group A and Group B  MUST each contain more than one experiment.");
2 26 Feb 07 jari 131         buildConstraints(constraints, 0, 1, 1, 1, 0, 5);
2 26 Feb 07 jari 132         constraints.anchor = GridBagConstraints.EAST;
2 26 Feb 07 jari 133         gridbag2.setConstraints(label1, constraints);
2 26 Feb 07 jari 134         this.add(label1);
2 26 Feb 07 jari 135
2 26 Feb 07 jari 136          */
2 26 Feb 07 jari 137
2 26 Feb 07 jari 138         JPanel panel2 = new JPanel();
2 26 Feb 07 jari 139         panel2.setBackground(Color.white);
2 26 Feb 07 jari 140         GridBagLayout gridbag3 = new GridBagLayout();
2 26 Feb 07 jari 141         panel2.setLayout(gridbag3);
2 26 Feb 07 jari 142
2 26 Feb 07 jari 143         JButton saveButton = new JButton(" Save grouping ");
2 26 Feb 07 jari 144         saveButton.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED, Color.gray, new Color(185,185,185), Color.darkGray, Color.darkGray));
2 26 Feb 07 jari 145         saveButton.setFocusPainted(false);
2 26 Feb 07 jari 146         saveButton.setPreferredSize(new Dimension(100,30));
2 26 Feb 07 jari 147         JButton loadButton = new JButton(" Load grouping ");
2 26 Feb 07 jari 148         loadButton.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED, Color.gray, new Color(185,185,185), Color.darkGray, Color.darkGray));
2 26 Feb 07 jari 149         loadButton.setFocusPainted(false);
2 26 Feb 07 jari 150         loadButton.setPreferredSize(new Dimension(100,30));
2 26 Feb 07 jari 151         JButton resetButton = new JButton(" Reset ");
2 26 Feb 07 jari 152         resetButton.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED, Color.gray, new Color(185,185,185), Color.darkGray, Color.darkGray));
2 26 Feb 07 jari 153         resetButton.setFocusPainted(false);
2 26 Feb 07 jari 154         resetButton.setPreferredSize(new Dimension(55,30));
2 26 Feb 07 jari 155         final int finNum = exptNames.size();
2 26 Feb 07 jari 156
2 26 Feb 07 jari 157         resetButton.addActionListener(new ActionListener() {
2 26 Feb 07 jari 158             public void actionPerformed(ActionEvent evt) {
2 26 Feb 07 jari 159                 for (int i = 0; i < finNum; i++) {
2 26 Feb 07 jari 160                     groupARadioButtons[i].setSelected(true);
2 26 Feb 07 jari 161                 }
2 26 Feb 07 jari 162             }
2 26 Feb 07 jari 163         });
2 26 Feb 07 jari 164
2 26 Feb 07 jari 165         final JFileChooser fc = new JFileChooser();
2 26 Feb 07 jari 166         fc.setCurrentDirectory(new File("Data"));
2 26 Feb 07 jari 167
2 26 Feb 07 jari 168         saveButton.addActionListener(new ActionListener(){
2 26 Feb 07 jari 169             public void actionPerformed(ActionEvent evt) {
2 26 Feb 07 jari 170                 int returnVal = fc.showSaveDialog(GroupExperimentsPanel.this);
2 26 Feb 07 jari 171                 if (returnVal == JFileChooser.APPROVE_OPTION) {
2 26 Feb 07 jari 172                     File file = fc.getSelectedFile();
2 26 Feb 07 jari 173                     try {
2 26 Feb 07 jari 174                         PrintWriter out = new PrintWriter(new FileOutputStream(file));
2 26 Feb 07 jari 175                         int[] groupAssgn = getGroupAssignments();
2 26 Feb 07 jari 176                         for (int i = 0; i < groupAssgn.length; i++) {
2 26 Feb 07 jari 177                             out.print(groupAssgn[i]);
2 26 Feb 07 jari 178                             if (i < groupAssgn.length - 1) {
2 26 Feb 07 jari 179                                 out.print("\t");
2 26 Feb 07 jari 180                             }
2 26 Feb 07 jari 181                         }
2 26 Feb 07 jari 182                         out.println();
2 26 Feb 07 jari 183                         out.flush();
2 26 Feb 07 jari 184                     out.close();
2 26 Feb 07 jari 185                     } catch (Exception e) {
2 26 Feb 07 jari 186                         //e.printStackTrace();
2 26 Feb 07 jari 187                     }
2 26 Feb 07 jari 188                     //this is where a real application would save the file.
2 26 Feb 07 jari 189                     //log.append("Saving: " + file.getName() + "." + newline);
2 26 Feb 07 jari 190                 } else {
2 26 Feb 07 jari 191                     //log.append("Save command cancelled by user." + newline);
2 26 Feb 07 jari 192                 }
2 26 Feb 07 jari 193             }
2 26 Feb 07 jari 194         });
2 26 Feb 07 jari 195
2 26 Feb 07 jari 196         loadButton.addActionListener(new ActionListener(){
2 26 Feb 07 jari 197             public void actionPerformed(ActionEvent evt) {
2 26 Feb 07 jari 198                 int returnVal = fc.showOpenDialog(GroupExperimentsPanel.this);
2 26 Feb 07 jari 199                 if (returnVal == JFileChooser.APPROVE_OPTION) {
2 26 Feb 07 jari 200                     try {
2 26 Feb 07 jari 201                         FileReader file = new FileReader(fc.getSelectedFile());
2 26 Feb 07 jari 202                         BufferedReader buff = new BufferedReader(file);
2 26 Feb 07 jari 203                         String line = buff.readLine();
2 26 Feb 07 jari 204                         //System.out.println(line);
2 26 Feb 07 jari 205                         StringSplitter st = new StringSplitter('\t');
2 26 Feb 07 jari 206                         st.init(line);
2 26 Feb 07 jari 207                         Vector groupsVector = new Vector();
2 26 Feb 07 jari 208                         while (st.hasMoreTokens()) {
2 26 Feb 07 jari 209                             String current = st.nextToken();
2 26 Feb 07 jari 210                             groupsVector.add(new Integer(current));
2 26 Feb 07 jari 211                             //System.out.print(current);
2 26 Feb 07 jari 212                         }
2 26 Feb 07 jari 213                         buff.close();
2 26 Feb 07 jari 214                         int[] groupAssgn = getGroupAssignments();
2 26 Feb 07 jari 215                         if (groupsVector.size() != groupAssgn.length) {
2 26 Feb 07 jari 216                             JOptionPane.showMessageDialog(gPanel, "Incompatible file!", "Error", JOptionPane.WARNING_MESSAGE);
2 26 Feb 07 jari 217                         } else {
2 26 Feb 07 jari 218                             for (int i = 0; i < groupsVector.size(); i++) {
2 26 Feb 07 jari 219                                 int currentExpt = ((Integer)groupsVector.get(i)).intValue();
2 26 Feb 07 jari 220                                 if (currentExpt == 1) {
2 26 Feb 07 jari 221                                     groupARadioButtons[i].setSelected(true);
2 26 Feb 07 jari 222                                 } else if (currentExpt == 2) {
2 26 Feb 07 jari 223                                     groupBRadioButtons[i].setSelected(true);
2 26 Feb 07 jari 224                                 } else if (currentExpt == 3) {
2 26 Feb 07 jari 225                                     neitherGroupRadioButtons[i].setSelected(true);
2 26 Feb 07 jari 226                                 } else {
2 26 Feb 07 jari 227                                     for (int j = 0; j < finNum; j++) {
2 26 Feb 07 jari 228                                         groupARadioButtons[j].setSelected(true);
2 26 Feb 07 jari 229                                     }
2 26 Feb 07 jari 230                                     JOptionPane.showMessageDialog(gPanel, "Incompatible file!", "Error", JOptionPane.WARNING_MESSAGE);
2 26 Feb 07 jari 231                                     break;
2 26 Feb 07 jari 232                                 }
2 26 Feb 07 jari 233                             }
2 26 Feb 07 jari 234                         }
2 26 Feb 07 jari 235                     } catch (Exception e) {
2 26 Feb 07 jari 236                         JOptionPane.showMessageDialog(gPanel, "Incompatible file!", "Error", JOptionPane.WARNING_MESSAGE);
2 26 Feb 07 jari 237                         //e.printStackTrace();
2 26 Feb 07 jari 238                     }
2 26 Feb 07 jari 239
2 26 Feb 07 jari 240                     //this is where a real application would save the file.
2 26 Feb 07 jari 241                     //log.append("Saving: " + file.getName() + "." + newline);
2 26 Feb 07 jari 242                 } else {
2 26 Feb 07 jari 243                     //log.append("Save command cancelled by user." + newline);
2 26 Feb 07 jari 244                 }
2 26 Feb 07 jari 245             }
2 26 Feb 07 jari 246         });
2 26 Feb 07 jari 247
2 26 Feb 07 jari 248         constraints.anchor = GridBagConstraints.CENTER;
2 26 Feb 07 jari 249         constraints.fill = GridBagConstraints.NONE;
2 26 Feb 07 jari 250         constraints.insets = new Insets(0,5,0,5);
2 26 Feb 07 jari 251
2 26 Feb 07 jari 252         buildConstraints(constraints, 0, 0, 1, 1, 33, 100);
2 26 Feb 07 jari 253         gridbag3.setConstraints(saveButton, constraints);
2 26 Feb 07 jari 254         panel2.add(saveButton);
2 26 Feb 07 jari 255
2 26 Feb 07 jari 256         buildConstraints(constraints, 1, 0, 1, 1, 33, 0);
2 26 Feb 07 jari 257         gridbag3.setConstraints(loadButton, constraints);
2 26 Feb 07 jari 258         panel2.add(loadButton);
2 26 Feb 07 jari 259
2 26 Feb 07 jari 260         buildConstraints(constraints, 2, 0, 1, 1, 34, 0);
2 26 Feb 07 jari 261         gridbag3.setConstraints(resetButton, constraints);
2 26 Feb 07 jari 262         panel2.add(resetButton);
2 26 Feb 07 jari 263
2 26 Feb 07 jari 264         buildConstraints(constraints, 0, 2, 1, 1, 0, 5);
2 26 Feb 07 jari 265         constraints.anchor = GridBagConstraints.CENTER;
2 26 Feb 07 jari 266         //constraints.fill = GridBagConstraints.BOTH;
2 26 Feb 07 jari 267         gridbag2.setConstraints(panel2, constraints);
2 26 Feb 07 jari 268         //this.add(panel2);
2 26 Feb 07 jari 269
2 26 Feb 07 jari 270             /*
2 26 Feb 07 jari 271             JButton gButton = new JButton("groupExpts");
2 26 Feb 07 jari 272             buildConstraints(constraints, 0, 0, 1, 1, 100, 100);
2 26 Feb 07 jari 273             constraints.fill = GridBagConstraints.BOTH;
2 26 Feb 07 jari 274             gridbag.setConstraints(gButton, constraints);
2 26 Feb 07 jari 275             this.add(gButton);
2 26 Feb 07 jari 276              */
2 26 Feb 07 jari 277
2 26 Feb 07 jari 278     }
2 26 Feb 07 jari 279     public void reset(){
2 26 Feb 07 jari 280         final int finNum = exptNames.size();
2 26 Feb 07 jari 281         for (int i = 0; i < finNum; i++) {
2 26 Feb 07 jari 282             groupARadioButtons[i].setSelected(true);
2 26 Feb 07 jari 283         }
2 26 Feb 07 jari 284     }
2 26 Feb 07 jari 285
2 26 Feb 07 jari 286     void buildConstraints(GridBagConstraints gbc, int gx, int gy,
2 26 Feb 07 jari 287     int gw, int gh, int wx, int wy) {
2 26 Feb 07 jari 288
2 26 Feb 07 jari 289         gbc.gridx = gx;
2 26 Feb 07 jari 290         gbc.gridy = gy;
2 26 Feb 07 jari 291         gbc.gridwidth = gw;
2 26 Feb 07 jari 292         gbc.gridheight = gh;
2 26 Feb 07 jari 293         gbc.weightx = wx;
2 26 Feb 07 jari 294         gbc.weighty = wy;
2 26 Feb 07 jari 295     }
2 26 Feb 07 jari 296
2 26 Feb 07 jari 297     public int[] getGroupAssignments() {
2 26 Feb 07 jari 298         int[] groupAssignments = {-1, -1};
2 26 Feb 07 jari 299
2 26 Feb 07 jari 300         for (int i = 0; i < exptNames.size(); i++) {
2 26 Feb 07 jari 301             if (gPanel.groupARadioButtons[i].isSelected()) {
2 26 Feb 07 jari 302                 groupAssignments[0] = i;
2 26 Feb 07 jari 303             }if (gPanel.groupBRadioButtons[i].isSelected()) {
2 26 Feb 07 jari 304                 groupAssignments[1] = i;
2 26 Feb 07 jari 305             }
2 26 Feb 07 jari 306         }
2 26 Feb 07 jari 307
2 26 Feb 07 jari 308         /*
2 26 Feb 07 jari 309         int[] groupAssignments = new int[exptNames.size()];
2 26 Feb 07 jari 310         for (int i = 0; i < exptNames.size(); i++) {
2 26 Feb 07 jari 311             if (gPanel.groupARadioButtons[i].isSelected()) {
2 26 Feb 07 jari 312                 groupAssignments[i] = GROUP_A;
2 26 Feb 07 jari 313             } else if (gPanel.groupBRadioButtons[i].isSelected()) {
2 26 Feb 07 jari 314                 groupAssignments[i] = GROUP_B;
2 26 Feb 07 jari 315             } else {
2 26 Feb 07 jari 316                 groupAssignments[i] = NEITHER_GROUP;
2 26 Feb 07 jari 317             }
2 26 Feb 07 jari 318         }
2 26 Feb 07 jari 319          */
2 26 Feb 07 jari 320
2 26 Feb 07 jari 321         return groupAssignments;
2 26 Feb 07 jari 322     }
2 26 Feb 07 jari 323 }