mev-4.0.01/source/org/tigr/microarray/mev/cluster/gui/impl/coa/COAInertiaValsViewer.java

Code
Comments
Other
Rev Date Author Line
2 26 Feb 07 jari 1 /*
2 26 Feb 07 jari 2  * COAInertiaValsViewer.java
2 26 Feb 07 jari 3  *
2 26 Feb 07 jari 4  * Created on December 14, 2004, 4:03 PM
2 26 Feb 07 jari 5  */
2 26 Feb 07 jari 6
2 26 Feb 07 jari 7 package org.tigr.microarray.mev.cluster.gui.impl.coa;
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.GridBagConstraints;
2 26 Feb 07 jari 12 import java.awt.GridBagLayout;
2 26 Feb 07 jari 13 import java.awt.Insets;
2 26 Feb 07 jari 14 import java.awt.event.ActionEvent;
2 26 Feb 07 jari 15 import java.awt.event.ActionListener;
2 26 Feb 07 jari 16 import java.awt.event.MouseAdapter;
2 26 Feb 07 jari 17 import java.awt.event.MouseEvent;
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.PrintWriter;
2 26 Feb 07 jari 21 import java.text.DecimalFormat;
2 26 Feb 07 jari 22
2 26 Feb 07 jari 23 import javax.swing.JComponent;
2 26 Feb 07 jari 24 import javax.swing.JFileChooser;
2 26 Feb 07 jari 25 import javax.swing.JLabel;
2 26 Feb 07 jari 26 import javax.swing.JMenuItem;
2 26 Feb 07 jari 27 import javax.swing.JPanel;
2 26 Feb 07 jari 28 import javax.swing.JPopupMenu;
2 26 Feb 07 jari 29 import javax.swing.JTextArea;
2 26 Feb 07 jari 30
2 26 Feb 07 jari 31 import org.tigr.microarray.mev.cluster.gui.impl.GUIFactory;
2 26 Feb 07 jari 32 import org.tigr.microarray.mev.cluster.gui.impl.ViewerAdapter;
2 26 Feb 07 jari 33
2 26 Feb 07 jari 34 /**
2 26 Feb 07 jari 35  *
2 26 Feb 07 jari 36  * @author  nbhagaba
2 26 Feb 07 jari 37  * @version 
2 26 Feb 07 jari 38  */
2 26 Feb 07 jari 39 public class COAInertiaValsViewer extends ViewerAdapter implements java.io.Serializable {
2 26 Feb 07 jari 40     
2 26 Feb 07 jari 41     private JComponent header;
2 26 Feb 07 jari 42     private JTextArea  content; 
2 26 Feb 07 jari 43     private double[] inertiaVals, cumulInertiaVals;
2 26 Feb 07 jari 44     
2 26 Feb 07 jari 45     private JPopupMenu popup;
2 26 Feb 07 jari 46     
2 26 Feb 07 jari 47     //private SAMState localSAMState;
2 26 Feb 07 jari 48
2 26 Feb 07 jari 49     /** Creates new SAMDeltaInfoViewer */
2 26 Feb 07 jari 50     public COAInertiaValsViewer(double[] inertiaVals, double[] cumulInertiaVals) {
2 26 Feb 07 jari 51         this.inertiaVals = inertiaVals;
2 26 Feb 07 jari 52         this.cumulInertiaVals = cumulInertiaVals;    
2 26 Feb 07 jari 53            
2 26 Feb 07 jari 54   header  = createHeader();
2 26 Feb 07 jari 55   content = createContent();
2 26 Feb 07 jari 56   setMaxWidth(content, header);   
2 26 Feb 07 jari 57     }
2 26 Feb 07 jari 58     
2 26 Feb 07 jari 59     public COAInertiaValsViewer(JTextArea content, JComponent header){
2 26 Feb 07 jari 60       this.content = content;
2 26 Feb 07 jari 61       this.header = header;
2 26 Feb 07 jari 62         setMaxWidth(content, header);
2 26 Feb 07 jari 63     }
2 26 Feb 07 jari 64     
2 26 Feb 07 jari 65     /**
2 26 Feb 07 jari 66      * Returns component to be inserted into the framework scroll pane.
2 26 Feb 07 jari 67      */
2 26 Feb 07 jari 68     public JComponent getContentComponent() {
2 26 Feb 07 jari 69   return content;
2 26 Feb 07 jari 70     }
2 26 Feb 07 jari 71     
2 26 Feb 07 jari 72     /**
2 26 Feb 07 jari 73      * Returns the viewer header.
2 26 Feb 07 jari 74      */
2 26 Feb 07 jari 75     public JComponent getHeaderComponent() {
2 26 Feb 07 jari 76   return header;
2 26 Feb 07 jari 77     }
2 26 Feb 07 jari 78     
2 26 Feb 07 jari 79     /**
2 26 Feb 07 jari 80      * Creates the viewer header.
2 26 Feb 07 jari 81      */
2 26 Feb 07 jari 82     /*
2 26 Feb 07 jari 83     private JComponent createHeader() {
2 26 Feb 07 jari 84   JPanel panel = new JPanel(new GridBagLayout());
2 26 Feb 07 jari 85   panel.setBackground(Color.white);
2 26 Feb 07 jari 86   GridBagConstraints gbc = new GridBagConstraints();
2 26 Feb 07 jari 87   gbc.fill = GridBagConstraints.HORIZONTAL;
2 26 Feb 07 jari 88   gbc.insets = new Insets(10, 0, 10, 0);
2 26 Feb 07 jari 89   panel.add(new JLabel("<html><body bgcolor='#FFFFFF'><font face='serif' size='5' color='#000080'><b>Delta Table</b></font></body></html>"), gbc);
2 26 Feb 07 jari 90         //panel.add(new JLabel("Delta\tMedian false\t90th %ile false\t  # sig. genes\tFDR(%) Median\t   FDR(%) 90th %ile\n\n"), gbc);
2 26 Feb 07 jari 91   return panel;
2 26 Feb 07 jari 92     } 
2 26 Feb 07 jari 93      */
2 26 Feb 07 jari 94     
2 26 Feb 07 jari 95     void buildConstraints(GridBagConstraints gbc, int gx, int gy,
2 26 Feb 07 jari 96     int gw, int gh, int wx, int wy) {
2 26 Feb 07 jari 97   
2 26 Feb 07 jari 98   gbc.gridx = gx;
2 26 Feb 07 jari 99   gbc.gridy = gy;
2 26 Feb 07 jari 100   gbc.gridwidth = gw;
2 26 Feb 07 jari 101   gbc.gridheight = gh;
2 26 Feb 07 jari 102   gbc.weightx = wx;
2 26 Feb 07 jari 103   gbc.weighty = wy;
2 26 Feb 07 jari 104     }    
2 26 Feb 07 jari 105     
2 26 Feb 07 jari 106     private JComponent createHeader() {
2 26 Feb 07 jari 107   JPanel panel = new JPanel();
2 26 Feb 07 jari 108         GridBagLayout gridbag = new GridBagLayout();
2 26 Feb 07 jari 109         GridBagConstraints constraints = new GridBagConstraints();
2 26 Feb 07 jari 110   panel.setBackground(Color.white);
2 26 Feb 07 jari 111         panel.setLayout(gridbag);
2 26 Feb 07 jari 112         constraints.fill = GridBagConstraints.HORIZONTAL;
2 26 Feb 07 jari 113   constraints.insets = new Insets(10, 200, 10, 200);
2 26 Feb 07 jari 114   JLabel label1 = new JLabel("<html><body bgcolor='#FFFFFF'><font face='serif' size='5' color='#000080'><b>Inertia values</b></font></body></html>");
2 26 Feb 07 jari 115         
2 26 Feb 07 jari 116         buildConstraints(constraints, 0, 0, 1, 1, 100, 80);
2 26 Feb 07 jari 117         //constraints.fill = GridBagConstraints.BOTH;
2 26 Feb 07 jari 118         //constraints.anchor = GridBagConstraints.EAST;
2 26 Feb 07 jari 119         gridbag.setConstraints(label1, constraints);
2 26 Feb 07 jari 120         panel.add(label1);
2 26 Feb 07 jari 121         
2 26 Feb 07 jari 122         JTextArea area = new JTextArea();
2 26 Feb 07 jari 123         area.setEditable(false);
2 26 Feb 07 jari 124         StringBuffer sb = new StringBuffer();
2 26 Feb 07 jari 125         sb.append("  Axis\tInertia (%)\tCumulative Inertia (%)");
2 26 Feb 07 jari 126         area.setForeground(Color.blue);
2 26 Feb 07 jari 127         area.setText(sb.toString());
2 26 Feb 07 jari 128   area.setCaretPosition(0);
2 26 Feb 07 jari 129         
2 26 Feb 07 jari 130         buildConstraints(constraints, 0, 1, 1, 1, 0, 20);
2 26 Feb 07 jari 131         constraints.anchor = GridBagConstraints.SOUTH;
2 26 Feb 07 jari 132         constraints.insets = new Insets(10, 0, 0, 0);
2 26 Feb 07 jari 133         //constraints.fill = GridBagConstraints.BOTH;
2 26 Feb 07 jari 134         gridbag.setConstraints(area, constraints);
2 26 Feb 07 jari 135         panel.add(area);        
2 26 Feb 07 jari 136         
2 26 Feb 07 jari 137   return panel;
2 26 Feb 07 jari 138     }    
2 26 Feb 07 jari 139     
2 26 Feb 07 jari 140     private JTextArea createContent() {
2 26 Feb 07 jari 141         JTextArea area = new JTextArea();
2 26 Feb 07 jari 142         area.setEditable(false);
2 26 Feb 07 jari 143         StringBuffer sb = new StringBuffer();
2 26 Feb 07 jari 144         DecimalFormat nf = new DecimalFormat();
2 26 Feb 07 jari 145         nf.setMaximumFractionDigits(2);
2 26 Feb 07 jari 146         nf.setMinimumFractionDigits(2);        
2 26 Feb 07 jari 147         //sb.append("Delta\tMedian false\t90th %ile false\t  # sig. genes\tFDR(%) Median\t   FDR(%) 90th %ile\n\n");
2 26 Feb 07 jari 148         //counter = 0;
2 26 Feb 07 jari 149         for (int counter = 0; counter < inertiaVals.length; counter++) {            
2 26 Feb 07 jari 150             sb.append("   " + (counter + 1)+ "\t" + printFormat(inertiaVals[counter]) + "\t" + printFormat(cumulInertiaVals[counter]) + "\n");
2 26 Feb 07 jari 151             //counter += 100;
2 26 Feb 07 jari 152         }
2 26 Feb 07 jari 153         area.setText(sb.toString());
2 26 Feb 07 jari 154   area.setCaretPosition(0);
2 26 Feb 07 jari 155
2 26 Feb 07 jari 156         final JFileChooser fc = new JFileChooser();
2 26 Feb 07 jari 157         fc.setCurrentDirectory(new File("Data"));   
2 26 Feb 07 jari 158         fc.setDialogTitle("Save Inertia values");
2 26 Feb 07 jari 159         
2 26 Feb 07 jari 160         popup = new JPopupMenu();
2 26 Feb 07 jari 161         JMenuItem menuItem = new JMenuItem("Save inertia values", GUIFactory.getIcon("save16.gif"));
2 26 Feb 07 jari 162         menuItem.addActionListener(new ActionListener() {
2 26 Feb 07 jari 163             public void actionPerformed(ActionEvent evt) {
2 26 Feb 07 jari 164                     int returnVal = fc.showSaveDialog(COAInertiaValsViewer.this.getHeaderComponent());
2 26 Feb 07 jari 165                     if (returnVal == JFileChooser.APPROVE_OPTION) {
2 26 Feb 07 jari 166                         File file = fc.getSelectedFile();
2 26 Feb 07 jari 167                         try {
2 26 Feb 07 jari 168                             PrintWriter out = new PrintWriter(new FileOutputStream(file));
2 26 Feb 07 jari 169                             out.print("Axis\tInertia (%)\tCumulative Inertia (%)\n\n");
2 26 Feb 07 jari 170                             //int[] groupAssgn = getGroupAssignments();
2 26 Feb 07 jari 171                             for (int i = 0; i < inertiaVals.length; i++) {
2 26 Feb 07 jari 172                                 //out.print(groupAssgn[i]);
2 26 Feb 07 jari 173                                 out.print((i + 1) + "\t" + inertiaVals[i] + "\t" + cumulInertiaVals[i] + "\n");
2 26 Feb 07 jari 174                             }
2 26 Feb 07 jari 175                             out.println();
2 26 Feb 07 jari 176                             out.flush();
2 26 Feb 07 jari 177                             out.close();
2 26 Feb 07 jari 178                        } catch (Exception e) {
2 26 Feb 07 jari 179                             //e.printStackTrace();
2 26 Feb 07 jari 180                         }
2 26 Feb 07 jari 181                         //this is where a real application would save the file.
2 26 Feb 07 jari 182                         //log.append("Saving: " + file.getName() + "." + newline);
2 26 Feb 07 jari 183                     } else {
2 26 Feb 07 jari 184                         //log.append("Save command cancelled by user." + newline);
2 26 Feb 07 jari 185                     }                
2 26 Feb 07 jari 186             }
2 26 Feb 07 jari 187         });
2 26 Feb 07 jari 188         
2 26 Feb 07 jari 189         popup.add(menuItem);
2 26 Feb 07 jari 190         
2 26 Feb 07 jari 191         area.addMouseListener(new MouseAdapter() {
2 26 Feb 07 jari 192             public void mousePressed(MouseEvent e) {
2 26 Feb 07 jari 193                 maybeShowPopup(e);
2 26 Feb 07 jari 194             }
2 26 Feb 07 jari 195             
2 26 Feb 07 jari 196             public void mouseReleased(MouseEvent e) {
2 26 Feb 07 jari 197                 maybeShowPopup(e);
2 26 Feb 07 jari 198             }
2 26 Feb 07 jari 199             
2 26 Feb 07 jari 200             private void maybeShowPopup(MouseEvent e) {
2 26 Feb 07 jari 201                 if (e.isPopupTrigger()) {
2 26 Feb 07 jari 202                     popup.show(e.getComponent(),
2 26 Feb 07 jari 203                     e.getX(), e.getY());
2 26 Feb 07 jari 204                 }
2 26 Feb 07 jari 205             }            
2 26 Feb 07 jari 206             /*
2 26 Feb 07 jari 207             public void mouseClicked(MouseEvent event) {
2 26 Feb 07 jari 208                 if (SwingUtilities.isRightMouseButton(event)) {
2 26 Feb 07 jari 209                     //System.out.println("Right clicked");
2 26 Feb 07 jari 210                     fc.setDialogTitle("Save delta table");
2 26 Feb 07 jari 211                     int returnVal = fc.showSaveDialog(SAMDeltaInfoViewer.this.getHeaderComponent());
2 26 Feb 07 jari 212                     if (returnVal == JFileChooser.APPROVE_OPTION) {
2 26 Feb 07 jari 213                         File file = fc.getSelectedFile();
2 26 Feb 07 jari 214                         try {
2 26 Feb 07 jari 215                             PrintWriter out = new PrintWriter(new FileOutputStream(file));
2 26 Feb 07 jari 216                             out.print("Delta\tMedian false\t90th %ile false\t# sig. genes\tFDR(%) Median\tFDR(%) 90th %ile");
2 26 Feb 07 jari 217                             //int[] groupAssgn = getGroupAssignments();
2 26 Feb 07 jari 218                             for (int i = 0; i < deltaGrid.length; i++) {
2 26 Feb 07 jari 219                                 //out.print(groupAssgn[i]);
2 26 Feb 07 jari 220                                 out.print(deltaGrid[i] + "\t" + medNumFalse[i] + "\t" + false90th[i] + "\t" + numSig[i] + "\t" + FDRMedian[i] + "\t" + FDR90th[i] + "\n");
2 26 Feb 07 jari 221                             }
2 26 Feb 07 jari 222                             out.println();
2 26 Feb 07 jari 223                             out.flush();
2 26 Feb 07 jari 224                             out.close();
2 26 Feb 07 jari 225                        } catch (Exception e) {
2 26 Feb 07 jari 226                             //e.printStackTrace();
2 26 Feb 07 jari 227                         }
2 26 Feb 07 jari 228                         //this is where a real application would save the file.
2 26 Feb 07 jari 229                         //log.append("Saving: " + file.getName() + "." + newline);
2 26 Feb 07 jari 230                     } else {
2 26 Feb 07 jari 231                         //log.append("Save command cancelled by user." + newline);
2 26 Feb 07 jari 232                     }                     
2 26 Feb 07 jari 233                     
2 26 Feb 07 jari 234                 }
2 26 Feb 07 jari 235             }
2 26 Feb 07 jari 236              */
2 26 Feb 07 jari 237         });
2 26 Feb 07 jari 238         
2 26 Feb 07 jari 239   return area;        
2 26 Feb 07 jari 240     }
2 26 Feb 07 jari 241
2 26 Feb 07 jari 242     /**
2 26 Feb 07 jari 243      * Synchronize content and header sizes.
2 26 Feb 07 jari 244      */
2 26 Feb 07 jari 245     private void setMaxWidth(JComponent content, JComponent header) {
2 26 Feb 07 jari 246   int c_width = content.getPreferredSize().width;
2 26 Feb 07 jari 247   int h_width = header.getPreferredSize().width;
2 26 Feb 07 jari 248   if (c_width > h_width) {
2 26 Feb 07 jari 249       header.setPreferredSize(new Dimension(c_width, header.getPreferredSize().height));
2 26 Feb 07 jari 250   } else {
2 26 Feb 07 jari 251       content.setPreferredSize(new Dimension(h_width, content.getPreferredSize().height));
2 26 Feb 07 jari 252   }
2 26 Feb 07 jari 253     } 
2 26 Feb 07 jari 254     
2 26 Feb 07 jari 255     private String printFormat(double d) {
2 26 Feb 07 jari 256         DecimalFormat nf = new DecimalFormat();
2 26 Feb 07 jari 257         nf.setMaximumFractionDigits(2);
2 26 Feb 07 jari 258         nf.setMinimumFractionDigits(2); 
2 26 Feb 07 jari 259         if (Double.isNaN(d)) {
2 26 Feb 07 jari 260             return "N/A";
2 26 Feb 07 jari 261         } else {
2 26 Feb 07 jari 262             return nf.format(d);
2 26 Feb 07 jari 263         }
2 26 Feb 07 jari 264     }
2 26 Feb 07 jari 265     
2 26 Feb 07 jari 266 }
2 26 Feb 07 jari 267
2 26 Feb 07 jari 268     
2 26 Feb 07 jari 269