mev-4.0.01/source/org/tigr/microarray/mev/file/AffyGCOSFileLoader.java

Code
Comments
Other
Rev Date Author Line
2 26 Feb 07 jari 1     /*
2 26 Feb 07 jari 2 Copyright @ 1999-2005, 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: AffyGCOSFileLoader.java,v $
2 26 Feb 07 jari 7  * $Revision: 1.9 $
2 26 Feb 07 jari 8  * $Date: 2006/07/07 13:15:55 $
2 26 Feb 07 jari 9  * $Author: wwang67 $
2 26 Feb 07 jari 10  * $State: Exp $
2 26 Feb 07 jari 11  */
2 26 Feb 07 jari 12
2 26 Feb 07 jari 13 package org.tigr.microarray.mev.file;
2 26 Feb 07 jari 14
2 26 Feb 07 jari 15 import java.awt.Color;
2 26 Feb 07 jari 16 import java.awt.Component;
2 26 Feb 07 jari 17 import java.awt.Dimension;
2 26 Feb 07 jari 18 import java.awt.Font;
2 26 Feb 07 jari 19 import java.awt.GridBagLayout;
2 26 Feb 07 jari 20 import java.awt.Insets;
2 26 Feb 07 jari 21 import java.awt.event.ActionEvent;
2 26 Feb 07 jari 22 import java.awt.event.ActionListener;
2 26 Feb 07 jari 23 import java.awt.event.MouseAdapter;
2 26 Feb 07 jari 24 import java.awt.event.MouseEvent;
2 26 Feb 07 jari 25 import java.io.BufferedReader;
2 26 Feb 07 jari 26 import java.io.File;
2 26 Feb 07 jari 27 import java.io.FileNotFoundException;
2 26 Feb 07 jari 28 import java.io.FileReader;
2 26 Feb 07 jari 29 import java.io.IOException;
2 26 Feb 07 jari 30 import java.util.Vector;
2 26 Feb 07 jari 31
2 26 Feb 07 jari 32 import javax.swing.ButtonGroup;
2 26 Feb 07 jari 33 import javax.swing.DefaultListCellRenderer;
2 26 Feb 07 jari 34 import javax.swing.DefaultListModel;
2 26 Feb 07 jari 35 import javax.swing.DefaultListSelectionModel;
2 26 Feb 07 jari 36 import javax.swing.JButton;
2 26 Feb 07 jari 37 import javax.swing.JFileChooser;
2 26 Feb 07 jari 38 import javax.swing.JLabel;
2 26 Feb 07 jari 39 import javax.swing.JList;
2 26 Feb 07 jari 40 import javax.swing.JOptionPane;
2 26 Feb 07 jari 41 import javax.swing.JPanel;
2 26 Feb 07 jari 42 import javax.swing.JScrollPane;
2 26 Feb 07 jari 43 import javax.swing.JSplitPane;
2 26 Feb 07 jari 44 import javax.swing.JTable;
2 26 Feb 07 jari 45 import javax.swing.JTextField;
2 26 Feb 07 jari 46 import javax.swing.ScrollPaneConstants;
2 26 Feb 07 jari 47 import javax.swing.border.EtchedBorder;
2 26 Feb 07 jari 48 import javax.swing.border.TitledBorder;
2 26 Feb 07 jari 49 import javax.swing.event.ListSelectionEvent;
2 26 Feb 07 jari 50 import javax.swing.filechooser.FileFilter;
2 26 Feb 07 jari 51 import javax.swing.table.DefaultTableModel;
2 26 Feb 07 jari 52 import javax.swing.table.TableModel;
2 26 Feb 07 jari 53 import javax.swing.JRadioButton;
2 26 Feb 07 jari 54 import org.tigr.microarray.mev.AffySlideDataElement;
2 26 Feb 07 jari 55 import org.tigr.microarray.mev.FloatSlideData;
2 26 Feb 07 jari 56 //import org.tigr.microarray.mev.GCOSSlideDataElement;
2 26 Feb 07 jari 57 import org.tigr.microarray.mev.ISlideData;
2 26 Feb 07 jari 58 import org.tigr.microarray.mev.SlideData;
2 26 Feb 07 jari 59 import org.tigr.microarray.mev.ISlideMetaData;
2 26 Feb 07 jari 60 import org.tigr.microarray.mev.SlideDataElement;
2 26 Feb 07 jari 61 import org.tigr.microarray.mev.TMEV;
2 26 Feb 07 jari 62 import org.tigr.microarray.mev.cluster.gui.IData;
2 26 Feb 07 jari 63
2 26 Feb 07 jari 64 public class AffyGCOSFileLoader extends ExpressionFileLoader {
2 26 Feb 07 jari 65     
2 26 Feb 07 jari 66     private GBA gba;
2 26 Feb 07 jari 67     private boolean stop = false;
2 26 Feb 07 jari 68     private AffyGCOSFileLoaderPanel sflp;
2 26 Feb 07 jari 69     private int affyDataType = IData.DATA_TYPE_AFFY_ABS;
2 26 Feb 07 jari 70
2 26 Feb 07 jari 71     public AffyGCOSFileLoader(SuperExpressionFileLoader superLoader) {
2 26 Feb 07 jari 72         super(superLoader);
2 26 Feb 07 jari 73         gba = new GBA();
2 26 Feb 07 jari 74         sflp = new AffyGCOSFileLoaderPanel();
2 26 Feb 07 jari 75     }
2 26 Feb 07 jari 76     
2 26 Feb 07 jari 77     public Vector loadExpressionFiles() throws IOException {
2 26 Feb 07 jari 78         return loadAffyGCOSExpressionFile(new File(this.sflp.pathTextField.getText()));
2 26 Feb 07 jari 79     }
2 26 Feb 07 jari 80     
2 26 Feb 07 jari 81     public ISlideData loadExpressionFile(File f){
2 26 Feb 07 jari 82         return null;
2 26 Feb 07 jari 83     }
2 26 Feb 07 jari 84     /*by wwang 
2 26 Feb 07 jari 85      * set datatype =DATA_TYPE_AFFY
2 26 Feb 07 jari 86      */ 
2 26 Feb 07 jari 87      
2 26 Feb 07 jari 88      public void setTMEVDataType(){
2 26 Feb 07 jari 89          TMEV.setDataType(TMEV.DATA_TYPE_AFFY);
2 26 Feb 07 jari 90      }
2 26 Feb 07 jari 91      
2 26 Feb 07 jari 92     /*
2 26 Feb 07 jari 93      *  Handling of Mas5 data has been altered in version 3.0 to permit loading of
2 26 Feb 07 jari 94      *  "ratio" input without the creation of false cy3 and cy5.  cy5 values in data structures
2 26 Feb 07 jari 95      *  are used to hold the input value.
2 26 Feb 07 jari 96      *
2 26 Feb 07 jari 97      *  getRatio methods are altered to return the value (held in cy5) rather than
2 26 Feb 07 jari 98      *  taking log2(cy5/cy3).
2 26 Feb 07 jari 99      */
2 26 Feb 07 jari 100     
2 26 Feb 07 jari 101     public Vector loadAffyGCOSExpressionFile(File f) throws IOException {
2 26 Feb 07 jari 102       this.setTMEVDataType();
2 26 Feb 07 jari 103         final int preSpotRows = this.sflp.getXRow()+1;
2 26 Feb 07 jari 104         final int preExperimentColumns = this.sflp.getXColumn();
2 26 Feb 07 jari 105         int numLines = this.getCountOfLines(f);
2 26 Feb 07 jari 106         int spotCount = numLines - preSpotRows;
2 26 Feb 07 jari 107
2 26 Feb 07 jari 108         if (spotCount <= 0) {
2 26 Feb 07 jari 109             JOptionPane.showMessageDialog(superLoader.getFrame(),  "There is no spot data available.",  "TDMS Load Error", JOptionPane.INFORMATION_MESSAGE);
2 26 Feb 07 jari 110         }
2 26 Feb 07 jari 111         
2 26 Feb 07 jari 112         int[] rows = new int[] {0, 1, 0};
2 26 Feb 07 jari 113         int[] columns = new int[] {0, 1, 0};
2 26 Feb 07 jari 114         //String value,pvalue;
2 26 Feb 07 jari 115          String detection;
2 26 Feb 07 jari 116
2 26 Feb 07 jari 117         float cy3, cy5;
2 26 Feb 07 jari 118
2 26 Feb 07 jari 119         String[] moreFields = new String[1];
2 26 Feb 07 jari 120         String[] extraFields=null;
2 26 Feb 07 jari 121         final int rColumns = 1;
2 26 Feb 07 jari 122         final int rRows = spotCount;
2 26 Feb 07 jari 123         
2 26 Feb 07 jari 124         ISlideData slideDataArray[]=null;
2 26 Feb 07 jari 125         AffySlideDataElement sde=null;
2 26 Feb 07 jari 126         FloatSlideData slideData=null;
2 26 Feb 07 jari 127         
2 26 Feb 07 jari 128         BufferedReader reader = new BufferedReader(new FileReader(f));
2 26 Feb 07 jari 129         StringSplitter ss = new StringSplitter((char)0x09);
2 26 Feb 07 jari 130         String currentLine;
2 26 Feb 07 jari 131         int counter, row, column,experimentCount=0;
2 26 Feb 07 jari 132         counter = 0;
2 26 Feb 07 jari 133         row = column = 1;
2 26 Feb 07 jari 134         this.setFilesCount(1);
2 26 Feb 07 jari 135         this.setRemain(1);
2 26 Feb 07 jari 136         this.setFilesProgress(0);
2 26 Feb 07 jari 137         this.setLinesCount(numLines);
2 26 Feb 07 jari 138         this.setFileProgress(0);
2 26 Feb 07 jari 139         float[] intensities = new float[2];
2 26 Feb 07 jari 140         
2 26 Feb 07 jari 141         while ((currentLine = reader.readLine()) != null) {
2 26 Feb 07 jari 142             if (stop) {
2 26 Feb 07 jari 143                 return null;
2 26 Feb 07 jari 144             }
2 26 Feb 07 jari 145 //          fix empty tabbs appending to the end of line by wwang
2 26 Feb 07 jari 146             while(currentLine.endsWith("\t")){
2 26 Feb 07 jari 147               currentLine=currentLine.substring(0,currentLine.length()-1);
2 26 Feb 07 jari 148             }
2 26 Feb 07 jari 149             ss.init(currentLine);
2 26 Feb 07 jari 150             if (counter == 0) { // parse header
2 26 Feb 07 jari 151               if(sflp.absoluteRadioButton.isSelected())
2 26 Feb 07 jari 152                 experimentCount = ss.countTokens()- preExperimentColumns;
2 26 Feb 07 jari 153               if(sflp.absMeanRadioButton.isSelected())
2 26 Feb 07 jari 154                 experimentCount = (ss.countTokens()+1- preExperimentColumns)/2;
2 26 Feb 07 jari 155               if(sflp.referenceRadioButton.isSelected())
2 26 Feb 07 jari 156                 experimentCount = (ss.countTokens()+1- preExperimentColumns)/3;
2 26 Feb 07 jari 157               slideDataArray = new ISlideData[experimentCount];
2 26 Feb 07 jari 158                 slideDataArray[0] = new SlideData(rRows, rColumns);
2 26 Feb 07 jari 159                 slideDataArray[0].setSlideFileName(f.getPath());
2 26 Feb 07 jari 160                 for (int i=1; i<experimentCount; i++) {
2 26 Feb 07 jari 161                   slideDataArray[i] = new FloatSlideData(slideDataArray[0].getSlideMetaData(),spotCount);
2 26 Feb 07 jari 162                   slideDataArray[i].setSlideFileName(f.getPath());
2 26 Feb 07 jari 163                 }
2 26 Feb 07 jari 164                 if(sflp.absoluteRadioButton.isSelected()){
2 26 Feb 07 jari 165                   String [] fieldNames = new String[1];
2 26 Feb 07 jari 166                   //extraFields = new String[1];
2 26 Feb 07 jari 167                   fieldNames[0]="AffyID";
2 26 Feb 07 jari 168                   slideDataArray[0].getSlideMetaData().appendFieldNames(fieldNames);
2 26 Feb 07 jari 169                 }else if(sflp.absMeanRadioButton.isSelected()){
2 26 Feb 07 jari 170                   String [] fieldNames = new String[2];
2 26 Feb 07 jari 171                   extraFields = new String[1];
2 26 Feb 07 jari 172                     fieldNames[0]="AffyID";
2 26 Feb 07 jari 173                     fieldNames[1]="Detection";
2 26 Feb 07 jari 174                     slideDataArray[0].getSlideMetaData().appendFieldNames(fieldNames);
2 26 Feb 07 jari 175                 }else{
2 26 Feb 07 jari 176                   String [] fieldNames = new String[3];
2 26 Feb 07 jari 177                   extraFields = new String[2];
2 26 Feb 07 jari 178                     fieldNames[0]="AffyID";
2 26 Feb 07 jari 179                     fieldNames[1]="Detection";
2 26 Feb 07 jari 180                     fieldNames[2]="P-value";
2 26 Feb 07 jari 181                     slideDataArray[0].getSlideMetaData().appendFieldNames(fieldNames);
2 26 Feb 07 jari 182                 }
2 26 Feb 07 jari 183                 ss.nextToken();//pares the blank on header
2 26 Feb 07 jari 184                 for (int i=0; i<experimentCount; i++) {
2 26 Feb 07 jari 185                     slideDataArray[i].setSlideDataName(ss.nextToken());
2 26 Feb 07 jari 186                     if(sflp.referenceRadioButton.isSelected()){
2 26 Feb 07 jari 187                       ss.nextToken();//parse the detection
2 26 Feb 07 jari 188                         ss.nextToken();//parse the pvalue
2 26 Feb 07 jari 189                      }else if(sflp.absMeanRadioButton.isSelected()){
2 26 Feb 07 jari 190                           ss.nextToken();//parse the detection  
2 26 Feb 07 jari 191                      }            
2 26 Feb 07 jari 192                 }
2 26 Feb 07 jari 193                 
2 26 Feb 07 jari 194             } else if (counter >= preSpotRows) { // data rows
2 26 Feb 07 jari 195                 rows[0] = rows[2] = row;
2 26 Feb 07 jari 196                 columns[0] = columns[2] = column;
2 26 Feb 07 jari 197                 if (column == rColumns) {
2 26 Feb 07 jari 198                     column = 1;
2 26 Feb 07 jari 199                     row++;
2 26 Feb 07 jari 200                 } else {
2 26 Feb 07 jari 201                     column++;
2 26 Feb 07 jari 202                 }
2 26 Feb 07 jari 203                 
2 26 Feb 07 jari 204                 //affy ID
2 26 Feb 07 jari 205                 moreFields[0] = ss.nextToken();
2 26 Feb 07 jari 206                 sde = new AffySlideDataElement(String.valueOf(row+1), rows, columns, new float[2], moreFields);
2 26 Feb 07 jari 207                 slideDataArray[0].addSlideDataElement(sde);
2 26 Feb 07 jari 208                 int i=0;
2 26 Feb 07 jari 209                 for ( i=0; i<slideDataArray.length; i++) {                   
2 26 Feb 07 jari 210                     try {  
2 26 Feb 07 jari 211                       
2 26 Feb 07 jari 212                         // Intensity
2 26 Feb 07 jari 213                         intensities[0] = 1.0f;
2 26 Feb 07 jari 214                         intensities[1] = ss.nextFloatToken(0.0f);
2 26 Feb 07 jari 215                         if(sflp.referenceRadioButton.isSelected()){
2 26 Feb 07 jari 216                            extraFields[0]=ss.nextToken();//detection
2 26 Feb 07 jari 217                              extraFields[1]=ss.nextToken();//p-value
2 26 Feb 07 jari 218                         }else if(sflp.absMeanRadioButton.isSelected()){
2 26 Feb 07 jari 219                           extraFields[0]=ss.nextToken();//detection
2 26 Feb 07 jari 220                         }
2 26 Feb 07 jari 221                         
2 26 Feb 07 jari 222                     } catch (Exception e) {
2 26 Feb 07 jari 223                         cy3 = 0;
2 26 Feb 07 jari 224                         cy5 = Float.NaN;
2 26 Feb 07 jari 225                     }
2 26 Feb 07 jari 226                     if(i==0){
2 26 Feb 07 jari 227                       slideDataArray[i].setIntensities(counter - preSpotRows, intensities[0], intensities[1]);
2 26 Feb 07 jari 228                       //sde.setExtraFields(extraFields);
2 26 Feb 07 jari 229                        if(sflp.referenceRadioButton.isSelected()){
2 26 Feb 07 jari 230                          sde.setDetection(extraFields[0]);
2 26 Feb 07 jari 231                              sde.setPvalue(new Float(extraFields[1]).floatValue());
2 26 Feb 07 jari 232                        }else if(sflp.absMeanRadioButton.isSelected()){
2 26 Feb 07 jari 233                          sde.setDetection(extraFields[0]);
2 26 Feb 07 jari 234                        }
2 26 Feb 07 jari 235                     }else{
2 26 Feb 07 jari 236                       if(i==1){
2 26 Feb 07 jari 237                         meta = slideDataArray[0].getSlideMetaData();                      
2 26 Feb 07 jari 238                       }
2 26 Feb 07 jari 239                       slideDataArray[i].setIntensities(counter-preSpotRows,intensities[0],intensities[1]);
2 26 Feb 07 jari 240                       if(sflp.referenceRadioButton.isSelected()){
2 26 Feb 07 jari 241                         ((FloatSlideData)slideDataArray[i]).setDetection(counter-preSpotRows,extraFields[0]);
2 26 Feb 07 jari 242                         ((FloatSlideData)slideDataArray[i]).setPvalue(counter-preSpotRows,new Float(extraFields[1]).floatValue());
2 26 Feb 07 jari 243                       }
2 26 Feb 07 jari 244                       if(sflp.absMeanRadioButton.isSelected()){
2 26 Feb 07 jari 245                         ((FloatSlideData)slideDataArray[i]).setDetection(counter-preSpotRows,extraFields[0]);
2 26 Feb 07 jari 246                       }
2 26 Feb 07 jari 247                     }
2 26 Feb 07 jari 248                 }
2 26 Feb 07 jari 249                
2 26 Feb 07 jari 250             } else {
2 26 Feb 07 jari 251                 //we have additional sample annoation
2 26 Feb 07 jari 252                 
2 26 Feb 07 jari 253                 //advance to sample key
2 26 Feb 07 jari 254                 for(int i = 0; i < preExperimentColumns-1; i++) {
2 26 Feb 07 jari 255                   ss.nextToken();
2 26 Feb 07 jari 256                 }
2 26 Feb 07 jari 257                 String key = ss.nextToken();
2 26 Feb 07 jari 258                 
2 26 Feb 07 jari 259                 for(int j = 0; j < slideDataArray.length; j++) {
2 26 Feb 07 jari 260                   slideDataArray[j].addNewSampleLabel(key, ss.nextToken());
2 26 Feb 07 jari 261                 }
2 26 Feb 07 jari 262               }
2 26 Feb 07 jari 263               
2 26 Feb 07 jari 264             this.setFileProgress(counter);
2 26 Feb 07 jari 265              counter++;
2 26 Feb 07 jari 266              
2 26 Feb 07 jari 267           }
2 26 Feb 07 jari 268         reader.close();
2 26 Feb 07 jari 269         
2 26 Feb 07 jari 270         Vector data = new Vector(slideDataArray.length);
2 26 Feb 07 jari 271         
2 26 Feb 07 jari 272         for(int j = 0; j < slideDataArray.length; j++)
2 26 Feb 07 jari 273           data.add(slideDataArray[j]);
2 26 Feb 07 jari 274         
2 26 Feb 07 jari 275         this.setFilesProgress(1);
2 26 Feb 07 jari 276         return data;
2 26 Feb 07 jari 277     }
2 26 Feb 07 jari 278     
2 26 Feb 07 jari 279     
2 26 Feb 07 jari 280     public FileFilter getFileFilter() {
2 26 Feb 07 jari 281         
2 26 Feb 07 jari 282         FileFilter mevFileFilter = new FileFilter() {
2 26 Feb 07 jari 283             
2 26 Feb 07 jari 284             public boolean accept(File f) {
2 26 Feb 07 jari 285                 if (f.isDirectory()) return true;
2 26 Feb 07 jari 286                 if (f.getName().endsWith(".txt")) return true;
2 26 Feb 07 jari 287                 else return false;
2 26 Feb 07 jari 288             }
2 26 Feb 07 jari 289             
2 26 Feb 07 jari 290             public String getDescription() {
2 26 Feb 07 jari 291                 return "AffyGCOS Files(*.txt)";
2 26 Feb 07 jari 292             }
2 26 Feb 07 jari 293         };
2 26 Feb 07 jari 294         
2 26 Feb 07 jari 295         return mevFileFilter;
2 26 Feb 07 jari 296     }
2 26 Feb 07 jari 297     
2 26 Feb 07 jari 298     public boolean checkLoadEnable() {
2 26 Feb 07 jari 299         
2 26 Feb 07 jari 300         // Currently, the only requirement is that a cell has been highlighted
2 26 Feb 07 jari 301         
2 26 Feb 07 jari 302         int tableRow = sflp.getXRow() + 1; // Adjusted by 1 to account for the table header
2 26 Feb 07 jari 303         int tableColumn = sflp.getXColumn();
2 26 Feb 07 jari 304         if (tableColumn < 0) return false;
2 26 Feb 07 jari 305         
2 26 Feb 07 jari 306         TableModel model = sflp.getTable().getModel();
2 26 Feb 07 jari 307         String fieldSummary = "";
2 26 Feb 07 jari 308         for (int i = 0; i < tableColumn; i++) {
2 26 Feb 07 jari 309             // System.out.print(model.getColumnName(i) + (i + 1 == tableColumn ? "\n" : ", "));
2 26 Feb 07 jari 310             fieldSummary += model.getColumnName(i) + (i + 1 == tableColumn ? "" : ", ");
2 26 Feb 07 jari 311         }
2 26 Feb 07 jari 312         
2 26 Feb 07 jari 313         sflp.setFieldsText(fieldSummary);
2 26 Feb 07 jari 314         
2 26 Feb 07 jari 315         if (tableRow >= 1 && tableColumn >= 0) {
2 26 Feb 07 jari 316             setLoadEnabled(true);
2 26 Feb 07 jari 317             return true;
2 26 Feb 07 jari 318         } else {
2 26 Feb 07 jari 319             setLoadEnabled(false);
2 26 Feb 07 jari 320             return false;
2 26 Feb 07 jari 321         }
2 26 Feb 07 jari 322     }
2 26 Feb 07 jari 323     
2 26 Feb 07 jari 324     public boolean validateFile(File targetFile) {
2 26 Feb 07 jari 325         return true; // For now, no validation on Mas5 Files
2 26 Feb 07 jari 326     }
2 26 Feb 07 jari 327     
2 26 Feb 07 jari 328     public JPanel getFileLoaderPanel() {
2 26 Feb 07 jari 329         return sflp;
2 26 Feb 07 jari 330     }
2 26 Feb 07 jari 331     public int getAffyDataType(){
2 26 Feb 07 jari 332         return this.affyDataType;
2 26 Feb 07 jari 333     }
2 26 Feb 07 jari 334    
2 26 Feb 07 jari 335     public void processAffyGCOSFile(File targetFile) {
2 26 Feb 07 jari 336         
2 26 Feb 07 jari 337         Vector columnHeaders = new Vector();
2 26 Feb 07 jari 338         Vector dataVector = new Vector();
2 26 Feb 07 jari 339         Vector rowVector = null;
2 26 Feb 07 jari 340         BufferedReader reader = null;
2 26 Feb 07 jari 341         String currentLine = null;
2 26 Feb 07 jari 342         
2 26 Feb 07 jari 343         if (! validateFile(targetFile)) return;
2 26 Feb 07 jari 344         sflp.setDataFileName(targetFile.getAbsolutePath());
2 26 Feb 07 jari 345         DefaultTableModel model = new DefaultTableModel() {
2 26 Feb 07 jari 346             public boolean isCellEditable(int row, int column) {
2 26 Feb 07 jari 347                 return false;
2 26 Feb 07 jari 348             }
2 26 Feb 07 jari 349         };
2 26 Feb 07 jari 350         
2 26 Feb 07 jari 351         try {
2 26 Feb 07 jari 352             reader = new BufferedReader(new FileReader(targetFile), 1024 * 128);
2 26 Feb 07 jari 353         } catch (FileNotFoundException fnfe) {
2 26 Feb 07 jari 354             fnfe.printStackTrace();
2 26 Feb 07 jari 355         }
2 26 Feb 07 jari 356         
2 26 Feb 07 jari 357         try {
2 26 Feb 07 jari 358             StringSplitter ss = new StringSplitter('\t');
2 26 Feb 07 jari 359             currentLine = reader.readLine();
2 26 Feb 07 jari 360 //          fix empty tabbs appending to the end of line by wwang
2 26 Feb 07 jari 361             while(currentLine.endsWith("\t")){
2 26 Feb 07 jari 362               currentLine=currentLine.substring(0,currentLine.length()-1);
2 26 Feb 07 jari 363             }
2 26 Feb 07 jari 364             ss.init(currentLine);
2 26 Feb 07 jari 365         
2 26 Feb 07 jari 366             for (int i = 0; i < ss.countTokens()+1; i++) {
2 26 Feb 07 jari 367                 columnHeaders.add(ss.nextToken());
2 26 Feb 07 jari 368             }
2 26 Feb 07 jari 369             //for (int i = 0; i < columnHeaders.size(); i++) {
2 26 Feb 07 jari 370             //    System.out.print(columnHeaders.get(i));
2 26 Feb 07 jari 371            // }
2 26 Feb 07 jari 372             model.setColumnIdentifiers(columnHeaders);
2 26 Feb 07 jari 373             int cnt = 0;
2 26 Feb 07 jari 374             while ((currentLine = reader.readLine()) != null && cnt < 100) {
2 26 Feb 07 jari 375                 cnt++;
2 26 Feb 07 jari 376                 ss.init(currentLine);
2 26 Feb 07 jari 377                 rowVector = new Vector();
2 26 Feb 07 jari 378                 for (int i = 0; i < ss.countTokens()+1; i++) {
2 26 Feb 07 jari 379                     try {
2 26 Feb 07 jari 380                         rowVector.add(ss.nextToken());
2 26 Feb 07 jari 381                     } catch (java.util.NoSuchElementException nsee) {
2 26 Feb 07 jari 382                         rowVector.add(" ");
2 26 Feb 07 jari 383                     }
2 26 Feb 07 jari 384                 }
2 26 Feb 07 jari 385                 
2 26 Feb 07 jari 386                 dataVector.add(rowVector);
2 26 Feb 07 jari 387                 model.addRow(rowVector);
2 26 Feb 07 jari 388             }
2 26 Feb 07 jari 389             
2 26 Feb 07 jari 390             reader.close();
2 26 Feb 07 jari 391         } catch (IOException ioe) {
2 26 Feb 07 jari 392             ioe.printStackTrace();
2 26 Feb 07 jari 393         }
2 26 Feb 07 jari 394         
2 26 Feb 07 jari 395         sflp.setTableModel(model);
2 26 Feb 07 jari 396     }
2 26 Feb 07 jari 397     
2 26 Feb 07 jari 398     
2 26 Feb 07 jari 399     public String getFilePath() {
2 26 Feb 07 jari 400         return this.sflp.pathTextField.getText();
2 26 Feb 07 jari 401     }
2 26 Feb 07 jari 402     
2 26 Feb 07 jari 403     public void openDataPath() {
2 26 Feb 07 jari 404         this.sflp.openDataPath();
2 26 Feb 07 jari 405     }
2 26 Feb 07 jari 406     
2 26 Feb 07 jari 407 /*
2 26 Feb 07 jari 408 //
2 26 Feb 07 jari 409 //  AffyGCOSFileLoader - Internal Classes
2 26 Feb 07 jari 410 //
2 26 Feb 07 jari 411  */
2 26 Feb 07 jari 412     
2 26 Feb 07 jari 413     private class AffyGCOSFileLoaderPanel extends JPanel {
2 26 Feb 07 jari 414       FileTreePane fileTreePane;
2 26 Feb 07 jari 415         
2 26 Feb 07 jari 416       JTextField pathTextField;
2 26 Feb 07 jari 417         JPanel pathPanel;
2 26 Feb 07 jari 418         
2 26 Feb 07 jari 419         JTable expressionTable;
2 26 Feb 07 jari 420         JLabel instructionsLabel;
2 26 Feb 07 jari 421         JScrollPane tableScrollPane;
2 26 Feb 07 jari 422         JPanel tablePanel;
2 26 Feb 07 jari 423         
2 26 Feb 07 jari 424         JPanel AffyGCOSListPanel,refSelectionPanel;
2 26 Feb 07 jari 425         JList AffyGCOSAvailableList;
2 26 Feb 07 jari 426         JScrollPane AffyGCOSAvailableScrollPane;
2 26 Feb 07 jari 427
2 26 Feb 07 jari 428         ButtonGroup optionsButtonGroup;
2 26 Feb 07 jari 429         JRadioButton absoluteRadioButton;
2 26 Feb 07 jari 430         JRadioButton absMeanRadioButton;
2 26 Feb 07 jari 431         JRadioButton referenceRadioButton;
2 26 Feb 07 jari 432         
2 26 Feb 07 jari 433         JTextField annoTextField;
2 26 Feb 07 jari 434         JPanel annoPanel;
2 26 Feb 07 jari 435         
2 26 Feb 07 jari 436         JPanel fileLoaderPanel,rightLoaderPanel;
2 26 Feb 07 jari 437         JSplitPane splitPane;
2 26 Feb 07 jari 438  
2 26 Feb 07 jari 439         private int xRow = -1;
2 26 Feb 07 jari 440         private int xColumn = -1;
2 26 Feb 07 jari 441         
2 26 Feb 07 jari 442         
2 26 Feb 07 jari 443         public AffyGCOSFileLoaderPanel() {                
2 26 Feb 07 jari 444                 setLayout(new GridBagLayout());
2 26 Feb 07 jari 445                 fileTreePane = new FileTreePane(SuperExpressionFileLoader.DATA_PATH);
2 26 Feb 07 jari 446                 fileTreePane.addFileTreePaneListener(new FileTreePaneEventHandler());
2 26 Feb 07 jari 447
2 26 Feb 07 jari 448                 pathTextField = new JTextField();
2 26 Feb 07 jari 449                 pathTextField.setEditable(false);
2 26 Feb 07 jari 450                 pathTextField.setBorder(new TitledBorder(new EtchedBorder(), "Selected Path"));
2 26 Feb 07 jari 451                 pathTextField.setForeground(Color.black);
2 26 Feb 07 jari 452                 pathTextField.setFont(new Font("monospaced", Font.BOLD, 12));
2 26 Feb 07 jari 453                 
2 26 Feb 07 jari 454                 pathPanel = new JPanel();
2 26 Feb 07 jari 455                 pathPanel.setLayout(new GridBagLayout());
2 26 Feb 07 jari 456                 pathPanel.setBorder(new TitledBorder(new EtchedBorder(), getFileFilter().getDescription()));
2 26 Feb 07 jari 457                 gba.add(pathPanel, pathTextField, 0, 0, 2, 1, 1, 0, GBA.H, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 458                 
2 26 Feb 07 jari 459                 refSelectionPanel = new JPanel();
2 26 Feb 07 jari 460                 refSelectionPanel.setLayout(new GridBagLayout());
2 26 Feb 07 jari 461                 refSelectionPanel.setBorder(new TitledBorder(new EtchedBorder(), "Affymetrix Data Options"));
2 26 Feb 07 jari 462                 optionsButtonGroup = new ButtonGroup();
2 26 Feb 07 jari 463                 absoluteRadioButton = new JRadioButton("Only Intensity", true);
2 26 Feb 07 jari 464                 //absoluteRadioButton.addActionListener(new EventHandler());
2 26 Feb 07 jari 465                 optionsButtonGroup.add(absoluteRadioButton);
2 26 Feb 07 jari 466
2 26 Feb 07 jari 467                 absMeanRadioButton = new JRadioButton("Intensity With Detection");
2 26 Feb 07 jari 468                 //absMeanRadioButton.addActionListener(new EventHandler());
2 26 Feb 07 jari 469                 optionsButtonGroup.add(absMeanRadioButton);
2 26 Feb 07 jari 470
2 26 Feb 07 jari 471                 referenceRadioButton = new JRadioButton("Intensity with Detection and P-value");
2 26 Feb 07 jari 472                 //referenceRadioButton.addActionListener(new EventHandler());
2 26 Feb 07 jari 473                 optionsButtonGroup.add(referenceRadioButton);
2 26 Feb 07 jari 474                 gba.add(refSelectionPanel, absoluteRadioButton, 0, 0, 1, 1, 1, 0, GBA.H, GBA.C, new Insets(5, 50, 0, 5), 0, 0);
2 26 Feb 07 jari 475                 gba.add(refSelectionPanel, referenceRadioButton, 0, 1, 1, 1, 1, 0, GBA.H, GBA.C, new Insets(5, 50, 0, 5), 0, 0);
2 26 Feb 07 jari 476                 gba.add(refSelectionPanel, absMeanRadioButton, 1, 0, 1, 1, 1, 0, GBA.H, GBA.C, new Insets(5, 5, 0, 5), 0, 0);
2 26 Feb 07 jari 477
2 26 Feb 07 jari 478         
2 26 Feb 07 jari 479                 AffyGCOSAvailableList = new JList(new DefaultListModel());
2 26 Feb 07 jari 480                 AffyGCOSAvailableList.setCellRenderer(new ListRenderer());
2 26 Feb 07 jari 481                 AffyGCOSAvailableList.addListSelectionListener(new ListListener());
2 26 Feb 07 jari 482                 AffyGCOSAvailableScrollPane = new JScrollPane(AffyGCOSAvailableList);
2 26 Feb 07 jari 483                 AffyGCOSListPanel = new JPanel();
2 26 Feb 07 jari 484                 AffyGCOSListPanel.setLayout(new GridBagLayout());
2 26 Feb 07 jari 485                 AffyGCOSListPanel.setBorder(new TitledBorder(new EtchedBorder(), "Data File Available"));
2 26 Feb 07 jari 486                 gba.add(AffyGCOSListPanel, AffyGCOSAvailableScrollPane, 0, 0, 2, 8, 1, 1, GBA.B, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 487                 
2 26 Feb 07 jari 488                 expressionTable = new JTable();
2 26 Feb 07 jari 489                 expressionTable.setCellSelectionEnabled(true);
2 26 Feb 07 jari 490                 expressionTable.setColumnSelectionAllowed(false);
2 26 Feb 07 jari 491                 expressionTable.setRowSelectionAllowed(false);
2 26 Feb 07 jari 492                 expressionTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
2 26 Feb 07 jari 493                 expressionTable.getTableHeader().setReorderingAllowed(false);
2 26 Feb 07 jari 494                 expressionTable.addMouseListener(new MouseAdapter() {
2 26 Feb 07 jari 495                     public void mousePressed(MouseEvent event) {
2 26 Feb 07 jari 496                         xRow = expressionTable.rowAtPoint(event.getPoint());
2 26 Feb 07 jari 497                         xColumn = expressionTable.columnAtPoint(event.getPoint());
2 26 Feb 07 jari 498                         checkLoadEnable();
2 26 Feb 07 jari 499                     }
2 26 Feb 07 jari 500                 });
2 26 Feb 07 jari 501                 
2 26 Feb 07 jari 502                 tableScrollPane = new JScrollPane(expressionTable, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
2 26 Feb 07 jari 503                 instructionsLabel = new JLabel();
2 26 Feb 07 jari 504                 instructionsLabel.setForeground(java.awt.Color.red);
2 26 Feb 07 jari 505                 String instructions = "<html>Click the upper-leftmost expression value. Click the <b>Load</b> button to finish.</html>";
2 26 Feb 07 jari 506                 instructionsLabel.setText(instructions);
2 26 Feb 07 jari 507                 
2 26 Feb 07 jari 508                 tablePanel = new JPanel();
2 26 Feb 07 jari 509                 tablePanel.setLayout(new GridBagLayout());
2 26 Feb 07 jari 510                 tablePanel.setBorder(new TitledBorder(new EtchedBorder(), "Expression Table"));
2 26 Feb 07 jari 511                 gba.add(tablePanel, tableScrollPane, 0, 0, 1, 5, 1, 1, GBA.B, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 512                 gba.add(tablePanel, instructionsLabel, 0, 6, 1, 1, 1, 0, GBA.H, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 513  
2 26 Feb 07 jari 514                 
2 26 Feb 07 jari 515                 annoTextField = new JTextField();
2 26 Feb 07 jari 516                 annoTextField.setEditable(false);
2 26 Feb 07 jari 517                 annoTextField.setForeground(Color.black);
2 26 Feb 07 jari 518                 annoTextField.setFont(new Font("serif", Font.BOLD, 12));
2 26 Feb 07 jari 519                 
2 26 Feb 07 jari 520                 annoPanel = new JPanel();
2 26 Feb 07 jari 521                 annoPanel.setLayout(new GridBagLayout());
2 26 Feb 07 jari 522                 annoPanel.setBorder(new TitledBorder(new EtchedBorder(), "Annotation Fields"));
2 26 Feb 07 jari 523                 gba.add(annoPanel, annoTextField, 0, 0, 2, 1, 1, 0, GBA.H, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 524                
2 26 Feb 07 jari 525                 fileLoaderPanel = new JPanel();
2 26 Feb 07 jari 526                 fileLoaderPanel.setLayout(new GridBagLayout());
2 26 Feb 07 jari 527                 
2 26 Feb 07 jari 528                 //gba.add(fileLoaderPanel,AffyGCOSListPanel, 0, 0, 2, 9, 1, 1, GBA.B, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 529                 gba.add(fileLoaderPanel, pathPanel, 0, 0, 1, 1, 3, 0, GBA.H, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 530                 gba.add(fileLoaderPanel, refSelectionPanel, 0, 1, 1, 1, 1, 0, GBA.H, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 531                 gba.add(fileLoaderPanel, tablePanel, 0, 2, 1, 5, 3, 1, GBA.B, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 532                 gba.add(fileLoaderPanel, annoPanel, 0, 7, 1, 1, 3, 0, GBA.H, GBA.C, new Insets(5, 5, 5, 5), 0, 0);               
2 26 Feb 07 jari 533                 
2 26 Feb 07 jari 534                 rightLoaderPanel=new JPanel();
2 26 Feb 07 jari 535                 rightLoaderPanel.setLayout(new GridBagLayout());
2 26 Feb 07 jari 536                 gba.add(rightLoaderPanel,AffyGCOSListPanel, 0, 0, 1, 9, 1, 1, GBA.B, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 537                 gba.add(rightLoaderPanel,fileLoaderPanel, 1, 0, 1, 9, 1, 1, GBA.B, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 538                 
2 26 Feb 07 jari 539                 splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, fileTreePane, rightLoaderPanel);
2 26 Feb 07 jari 540                 splitPane.setPreferredSize(new java.awt.Dimension(600, 600));
2 26 Feb 07 jari 541                 splitPane.setDividerLocation(200);
2 26 Feb 07 jari 542                 gba.add(this,splitPane,0,0,1,1,1,1,GBA.B,GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 543                 
2 26 Feb 07 jari 544         }
2 26 Feb 07 jari 545         
2 26 Feb 07 jari 546         public void openDataPath() {
2 26 Feb 07 jari 547             fileTreePane.openDataPath();
2 26 Feb 07 jari 548         }     
2 26 Feb 07 jari 549  
2 26 Feb 07 jari 550        
2 26 Feb 07 jari 551         public JTable getTable() {
2 26 Feb 07 jari 552             return expressionTable;
2 26 Feb 07 jari 553         }
2 26 Feb 07 jari 554         
2 26 Feb 07 jari 555         public int getXColumn() {
2 26 Feb 07 jari 556             return xColumn;
2 26 Feb 07 jari 557         }
2 26 Feb 07 jari 558         
2 26 Feb 07 jari 559         public int getXRow() {
2 26 Feb 07 jari 560             return xRow;
2 26 Feb 07 jari 561         }
2 26 Feb 07 jari 562         
2 26 Feb 07 jari 563         public void selectAffyGCOSFile() {
2 26 Feb 07 jari 564             JFileChooser jfc = new JFileChooser(SuperExpressionFileLoader.DATA_PATH);
2 26 Feb 07 jari 565             jfc.setFileFilter(getFileFilter());
2 26 Feb 07 jari 566             int activityCode = jfc.showDialog(this, "Select");
2 26 Feb 07 jari 567             
2 26 Feb 07 jari 568             if (activityCode == JFileChooser.APPROVE_OPTION) {
2 26 Feb 07 jari 569                 File target = jfc.getSelectedFile();
2 26 Feb 07 jari 570                 processAffyGCOSFile(target);
2 26 Feb 07 jari 571             }
2 26 Feb 07 jari 572         }
2 26 Feb 07 jari 573         
2 26 Feb 07 jari 574         public void setDataFileName(String fileName) {
2 26 Feb 07 jari 575             pathTextField.setText(fileName);
2 26 Feb 07 jari 576            // System.out.println(pathTextField);
2 26 Feb 07 jari 577         }
2 26 Feb 07 jari 578     
2 26 Feb 07 jari 579         
2 26 Feb 07 jari 580         public void setTableModel(TableModel model) {
2 26 Feb 07 jari 581             expressionTable.setModel(model);
2 26 Feb 07 jari 582             int numCols = expressionTable.getColumnCount();
2 26 Feb 07 jari 583             //System.out.print(numCols);
2 26 Feb 07 jari 584             for(int i = 0; i < numCols; i++){
2 26 Feb 07 jari 585                 expressionTable.getColumnModel().getColumn(i).setMinWidth(75);
2 26 Feb 07 jari 586             }
2 26 Feb 07 jari 587         }
2 26 Feb 07 jari 588         
2 26 Feb 07 jari 589         public void setFieldsText(String fieldsText) {
2 26 Feb 07 jari 590             annoTextField.setText(fieldsText);
2 26 Feb 07 jari 591         }
2 26 Feb 07 jari 592         
2 26 Feb 07 jari 593         
2 26 Feb 07 jari 594         private class ListRenderer extends DefaultListCellRenderer {
2 26 Feb 07 jari 595             public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
2 26 Feb 07 jari 596                 super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
2 26 Feb 07 jari 597                 File file = (File) value;
2 26 Feb 07 jari 598                 setText(file.getName());
2 26 Feb 07 jari 599                 return this;
2 26 Feb 07 jari 600             }
2 26 Feb 07 jari 601         }
2 26 Feb 07 jari 602         
2 26 Feb 07 jari 603         
2 26 Feb 07 jari 604         
2 26 Feb 07 jari 605         private class ListListener implements javax.swing.event.ListSelectionListener {
2 26 Feb 07 jari 606             
2 26 Feb 07 jari 607             public void valueChanged(ListSelectionEvent lse) {
2 26 Feb 07 jari 608               File file;
2 26 Feb 07 jari 609               //Object source=lse.getSource();
2 26 Feb 07 jari 610               file = (File)(AffyGCOSAvailableList.getSelectedValue());
2 26 Feb 07 jari 611               if(file == null || !(file.exists()))
2 26 Feb 07 jari 612                 return;
2 26 Feb 07 jari 613               processAffyGCOSFile(file);
2 26 Feb 07 jari 614               return;
2 26 Feb 07 jari 615               
2 26 Feb 07 jari 616             }
2 26 Feb 07 jari 617         }
2 26 Feb 07 jari 618         
2 26 Feb 07 jari 619      
2 26 Feb 07 jari 620         
2 26 Feb 07 jari 621         private class FileTreePaneEventHandler implements FileTreePaneListener {
2 26 Feb 07 jari 622             
2 26 Feb 07 jari 623             public void nodeSelected(FileTreePaneEvent event) {
2 26 Feb 07 jari 624                 
2 26 Feb 07 jari 625                 String filePath = (String) event.getValue("Path");
2 26 Feb 07 jari 626                 Vector fileNames = (Vector) event.getValue("Filenames");
2 26 Feb 07 jari 627      
2 26 Feb 07 jari 628                 if(fileNames.size() < 1)
2 26 Feb 07 jari 629                     return;
2 26 Feb 07 jari 630                 
2 26 Feb 07 jari 631                 FileFilter AffyGCOSFileFilter = getFileFilter();
2 26 Feb 07 jari 632 //                FileFilter AffyGCOSCallFileFilter = getFileFilter();
2 26 Feb 07 jari 633                 ((DefaultListModel)(AffyGCOSAvailableList.getModel())).clear();
2 26 Feb 07 jari 634                 
2 26 Feb 07 jari 635                 for (int i = 0; i < fileNames.size(); i++) {
2 26 Feb 07 jari 636                     
2 26 Feb 07 jari 637                     File targetFile = new File((String) fileNames.elementAt(i));
2 26 Feb 07 jari 638                       
2 26 Feb 07 jari 639                     if (AffyGCOSFileFilter.accept(targetFile)) {
2 26 Feb 07 jari 640                         ((DefaultListModel)(AffyGCOSAvailableList.getModel())).addElement(new File((String) fileNames.elementAt(i)));
2 26 Feb 07 jari 641                     }
2 26 Feb 07 jari 642                 }
2 26 Feb 07 jari 643             }
2 26 Feb 07 jari 644             
2 26 Feb 07 jari 645             public void nodeCollapsed(FileTreePaneEvent event) {}
2 26 Feb 07 jari 646             public void nodeExpanded(FileTreePaneEvent event) {}
2 26 Feb 07 jari 647         }
2 26 Feb 07 jari 648     }  
2 26 Feb 07 jari 649     }
2 26 Feb 07 jari 650