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

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