mev-4.0.01/source/org/tigr/microarray/mev/file/CGHStanfordFileLoader.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: CGHStanfordFileLoader.java,v $
2 26 Feb 07 jari 7  * $Revision: 1.5 $
2 26 Feb 07 jari 8  * $Date: 2006/05/02 16:57:56 $
2 26 Feb 07 jari 9  * $Author: eleanorahowe $
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.MouseAdapter;
2 26 Feb 07 jari 22 import java.awt.event.MouseEvent;
2 26 Feb 07 jari 23 import java.io.BufferedReader;
2 26 Feb 07 jari 24 import java.io.File;
2 26 Feb 07 jari 25 import java.io.FileNotFoundException;
2 26 Feb 07 jari 26 import java.io.FileReader;
2 26 Feb 07 jari 27 import java.io.IOException;
2 26 Feb 07 jari 28 import java.util.ArrayList;
2 26 Feb 07 jari 29 import java.util.Arrays;
2 26 Feb 07 jari 30 import java.util.Collections;
2 26 Feb 07 jari 31 import java.util.Hashtable;
2 26 Feb 07 jari 32 import java.util.Iterator;
2 26 Feb 07 jari 33 import java.util.List;
2 26 Feb 07 jari 34 import java.util.Vector;
2 26 Feb 07 jari 35
2 26 Feb 07 jari 36 import javax.swing.ButtonGroup;
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.JRadioButton;
2 26 Feb 07 jari 46 import javax.swing.JScrollPane;
2 26 Feb 07 jari 47 import javax.swing.JSplitPane;
2 26 Feb 07 jari 48 import javax.swing.JTable;
2 26 Feb 07 jari 49 import javax.swing.JTextField;
2 26 Feb 07 jari 50 import javax.swing.ScrollPaneConstants;
2 26 Feb 07 jari 51 import javax.swing.border.EtchedBorder;
2 26 Feb 07 jari 52 import javax.swing.border.TitledBorder;
2 26 Feb 07 jari 53 import javax.swing.event.ListSelectionEvent;
2 26 Feb 07 jari 54 import javax.swing.filechooser.FileFilter;
2 26 Feb 07 jari 55 import javax.swing.table.DefaultTableModel;
2 26 Feb 07 jari 56 import javax.swing.table.TableModel;
2 26 Feb 07 jari 57
2 26 Feb 07 jari 58 import org.tigr.microarray.mev.CGHSlideDataElement;
2 26 Feb 07 jari 59 import org.tigr.microarray.mev.FloatSlideData;
2 26 Feb 07 jari 60 import org.tigr.microarray.mev.ISlideData;
2 26 Feb 07 jari 61 import org.tigr.microarray.mev.MultipleArrayData;
2 26 Feb 07 jari 62 import org.tigr.microarray.mev.MultipleArrayViewer;
2 26 Feb 07 jari 63 import org.tigr.microarray.mev.SlideData;
2 26 Feb 07 jari 64 import org.tigr.microarray.mev.TMEV;
2 26 Feb 07 jari 65 import org.tigr.microarray.mev.cgh.CGHDataGenerator.CGHCloneComparator;
2 26 Feb 07 jari 66 import org.tigr.microarray.mev.cgh.CGHDataObj.CGHClone;
2 26 Feb 07 jari 67
2 26 Feb 07 jari 68 public class CGHStanfordFileLoader extends ExpressionFileLoader {
2 26 Feb 07 jari 69
2 26 Feb 07 jari 70     private GBA gba;
2 26 Feb 07 jari 71     private boolean stop = false;
2 26 Feb 07 jari 72     private CGHStanfordFileLoaderPanel CGHsflp;
2 26 Feb 07 jari 73     
2 26 Feb 07 jari 74     /**
2 26 Feb 07 jari 75      * 
2 26 Feb 07 jari 76      * @param superLoader
2 26 Feb 07 jari 77      */
2 26 Feb 07 jari 78     public CGHStanfordFileLoader(SuperExpressionFileLoader superLoader) {
2 26 Feb 07 jari 79         super(superLoader);
2 26 Feb 07 jari 80         gba = new GBA();
2 26 Feb 07 jari 81         CGHsflp = new CGHStanfordFileLoaderPanel();
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 //      Raktim
2 26 Feb 07 jari 86       System.out.println("CGH StanfordFileLoader loadExpressionFiles() " + this.CGHsflp.fileNameTextField.getText());
2 26 Feb 07 jari 87         return loadStanfordExpressionFile(new File(this.CGHsflp.fileNameTextField.getText()));
2 26 Feb 07 jari 88     }
2 26 Feb 07 jari 89
2 26 Feb 07 jari 90     public ISlideData loadExpressionFile(File f){
2 26 Feb 07 jari 91         return null;
2 26 Feb 07 jari 92     }
2 26 Feb 07 jari 93
2 26 Feb 07 jari 94     /*
2 26 Feb 07 jari 95      *  Handling of Stanford data has been altered in version 3.0 to permit loading of
2 26 Feb 07 jari 96      *  "ratio" input without the creation of false cy3 and cy5.  cy5 values in data structures
2 26 Feb 07 jari 97      *  are used to hold the input value.
2 26 Feb 07 jari 98      *
2 26 Feb 07 jari 99      *  getRatio methods are altered to return the value (held in cy5) rather than
2 26 Feb 07 jari 100      *  taking log2(cy5/cy3).
2 26 Feb 07 jari 101      */
2 26 Feb 07 jari 102
2 26 Feb 07 jari 103     public Vector loadStanfordExpressionFile(File f) throws IOException {
2 26 Feb 07 jari 104
2 26 Feb 07 jari 105         final int preSpotRows = this.CGHsflp.getXRow()+1;
2 26 Feb 07 jari 106         final int preExperimentColumns = this.CGHsflp.getXColumn();
2 26 Feb 07 jari 107         final int species = this.CGHsflp.getXSpecies();
2 26 Feb 07 jari 108         final boolean isLog2 = this.CGHsflp.getXLog2Status();
2 26 Feb 07 jari 109         System.out.println("Selected Species: " + species);
2 26 Feb 07 jari 110         ArrayList clones = new ArrayList();
2 26 Feb 07 jari 111                 
2 26 Feb 07 jari 112         if (preExperimentColumns < 4) {
2 26 Feb 07 jari 113           //Throw Message Here for errors
2 26 Feb 07 jari 114           JOptionPane.showMessageDialog(superLoader.getFrame(),  "Insufficient annotation.",  "TDMS Load Error", JOptionPane.INFORMATION_MESSAGE);
2 26 Feb 07 jari 115         }
2 26 Feb 07 jari 116         int cloneFileIndex = 0; // Position of Clone in File
2 26 Feb 07 jari 117         
2 26 Feb 07 jari 118         int numLines = this.getCountOfLines(f);
2 26 Feb 07 jari 119
2 26 Feb 07 jari 120         int spotCount = numLines - preSpotRows;
2 26 Feb 07 jari 121
2 26 Feb 07 jari 122         if (spotCount <= 0) {
2 26 Feb 07 jari 123             JOptionPane.showMessageDialog(superLoader.getFrame(),  "There is no spot data available.",  "TDMS Load Error", JOptionPane.INFORMATION_MESSAGE);
2 26 Feb 07 jari 124         }
2 26 Feb 07 jari 125         
2 26 Feb 07 jari 126         CGHClone[] cloneArray = new CGHClone[numLines-1];
2 26 Feb 07 jari 127         Hashtable unSortedCloneNames = new Hashtable();
2 26 Feb 07 jari 128         
2 26 Feb 07 jari 129         int[] rows = new int[] {0, 1, 0};
2 26 Feb 07 jari 130         int[] columns = new int[] {0, 1, 0};
2 26 Feb 07 jari 131         String value;
2 26 Feb 07 jari 132         float cy3, cy5;
2 26 Feb 07 jari 133         String[] moreFields = new String[preExperimentColumns];
2 26 Feb 07 jari 134
2 26 Feb 07 jari 135         final int rColumns = 1;
2 26 Feb 07 jari 136         final int rRows = spotCount;
2 26 Feb 07 jari 137
2 26 Feb 07 jari 138         ISlideData[] slideDataArray = null;
2 26 Feb 07 jari 139         CGHSlideDataElement sde;
2 26 Feb 07 jari 140
2 26 Feb 07 jari 141         BufferedReader reader = new BufferedReader(new FileReader(f));
2 26 Feb 07 jari 142         StringSplitter ss = new StringSplitter((char)0x09);
2 26 Feb 07 jari 143         String currentLine;
2 26 Feb 07 jari 144         int counter, row, column;
2 26 Feb 07 jari 145         counter = 0;
2 26 Feb 07 jari 146         row = column = 1;
2 26 Feb 07 jari 147         this.setFilesCount(1);
2 26 Feb 07 jari 148         this.setRemain(1);
2 26 Feb 07 jari 149         this.setFilesProgress(0);
2 26 Feb 07 jari 150         this.setLinesCount(numLines);
2 26 Feb 07 jari 151         this.setFileProgress(0);
2 26 Feb 07 jari 152
2 26 Feb 07 jari 153
2 26 Feb 07 jari 154         while ((currentLine = reader.readLine()) != null) {
2 26 Feb 07 jari 155             if (stop) {
2 26 Feb 07 jari 156                 return null;
2 26 Feb 07 jari 157             }
2 26 Feb 07 jari 158             ss.init(currentLine);
2 26 Feb 07 jari 159             if (counter == 0) { // parse header
2 26 Feb 07 jari 160                 int experimentCount = ss.countTokens()+1 - preExperimentColumns;
2 26 Feb 07 jari 161                 slideDataArray = new ISlideData[experimentCount];
2 26 Feb 07 jari 162                 //Raktim
2 26 Feb 07 jari 163                 //System.out.println("ISlideData length: " + experimentCount);
2 26 Feb 07 jari 164                 slideDataArray[0] = new SlideData(rRows, rColumns);
2 26 Feb 07 jari 165                 //Raktim
2 26 Feb 07 jari 166                 //System.out.println("SlideData rRows & rColumns: " + rRows + ", " + rColumns);
2 26 Feb 07 jari 167                 slideDataArray[0].setSlideFileName(f.getPath());
2 26 Feb 07 jari 168                 for (int i=1; i<slideDataArray.length; i++) {
2 26 Feb 07 jari 169                     slideDataArray[i] = new FloatSlideData(slideDataArray[0].getSlideMetaData(), spotCount);
2 26 Feb 07 jari 170                     slideDataArray[i].setSlideFileName(f.getPath());
2 26 Feb 07 jari 171                 }
2 26 Feb 07 jari 172                 //get Field Names
2 26 Feb 07 jari 173                 String [] fieldNames = new String[preExperimentColumns];
2 26 Feb 07 jari 174                 for(int i = 0; i < preExperimentColumns; i++){
2 26 Feb 07 jari 175                     fieldNames[i] = ss.nextToken();
2 26 Feb 07 jari 176                     //Raktim
2 26 Feb 07 jari 177                   //System.out.println("preExpr Token " + fieldNames[i]);
2 26 Feb 07 jari 178                 }
2 26 Feb 07 jari 179                 //TMEV.setFieldNames(fieldNames);
2 26 Feb 07 jari 180                 slideDataArray[0].getSlideMetaData().setFieldNames(fieldNames);
2 26 Feb 07 jari 181
2 26 Feb 07 jari 182                 for (int i=0; i<experimentCount; i++) {
2 26 Feb 07 jari 183                     slideDataArray[i].setSlideDataName(ss.nextToken());
2 26 Feb 07 jari 184                     //Raktim
2 26 Feb 07 jari 185                   //System.out.println("Expr Token " + slideDataArray[i].getSlideDataName());
2 26 Feb 07 jari 186                 }
2 26 Feb 07 jari 187             } else if (counter >= preSpotRows) { // data rows
2 26 Feb 07 jari 188               //Raktim
2 26 Feb 07 jari 189               //System.out.println("Else If counter value: " + counter);
2 26 Feb 07 jari 190                 rows[0] = rows[2] = row;
2 26 Feb 07 jari 191                 columns[0] = columns[2] = column;
2 26 Feb 07 jari 192                 if (column == rColumns) {
2 26 Feb 07 jari 193                     column = 1;
2 26 Feb 07 jari 194                     row++;
2 26 Feb 07 jari 195                 } else {
2 26 Feb 07 jari 196                     column++;
2 26 Feb 07 jari 197                 }
2 26 Feb 07 jari 198                 for (int i=0; i<preExperimentColumns; i++) {
2 26 Feb 07 jari 199                     moreFields[i] = ss.nextToken();
2 26 Feb 07 jari 200                 }
2 26 Feb 07 jari 201                 
2 26 Feb 07 jari 202                 CGHClone clone_T2 = new CGHClone(moreFields[0].trim(), moreFields[1].trim(), moreFields[2].trim(), moreFields[3].trim(), species);
2 26 Feb 07 jari 203                 cloneArray[cloneFileIndex] = clone_T2;
2 26 Feb 07 jari 204                 unSortedCloneNames.put(moreFields[0].trim(), new Integer(cloneFileIndex));
2 26 Feb 07 jari 205                 
2 26 Feb 07 jari 206                 sde = new CGHSlideDataElement(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
2 26 Feb 07 jari 209                 for (int i=0; i<slideDataArray.length; i++) {
2 26 Feb 07 jari 210
2 26 Feb 07 jari 211                     cy3 = 1f;  //set cy3 to a default value of 1.
2 26 Feb 07 jari 212
2 26 Feb 07 jari 213                     try {
2 26 Feb 07 jari 214                         value = ss.nextToken();
2 26 Feb 07 jari 215                         cy5 = Float.parseFloat(value);  //set cy5 to hold the value
2 26 Feb 07 jari 216                         //getRatio methods will return cy5
2 26 Feb 07 jari 217                         //for Stanford data type
2 26 Feb 07 jari 218                     } catch (Exception e) {
2 26 Feb 07 jari 219                         cy3 = 0;
2 26 Feb 07 jari 220                         cy5 = Float.NaN;
2 26 Feb 07 jari 221                     }
2 26 Feb 07 jari 222                     slideDataArray[i].setIntensities(counter - preSpotRows, cy3, cy5);
2 26 Feb 07 jari 223                 }
2 26 Feb 07 jari 224                 cloneFileIndex++;
2 26 Feb 07 jari 225             } else {
2 26 Feb 07 jari 226 //              Raktim
2 26 Feb 07 jari 227               System.out.println("Final Else counter value: " + counter);
2 26 Feb 07 jari 228                 //we have additional sample annotation
2 26 Feb 07 jari 229
2 26 Feb 07 jari 230                 //advance to sample key
2 26 Feb 07 jari 231                 for(int i = 0; i < preExperimentColumns-1; i++) {
2 26 Feb 07 jari 232                     ss.nextToken();
2 26 Feb 07 jari 233                 }
2 26 Feb 07 jari 234                 String key = ss.nextToken();
2 26 Feb 07 jari 235
2 26 Feb 07 jari 236                 for(int j = 0; j < slideDataArray.length; j++) {
2 26 Feb 07 jari 237                     slideDataArray[j].addNewSampleLabel(key, ss.nextToken());
2 26 Feb 07 jari 238                 }
2 26 Feb 07 jari 239             }
2 26 Feb 07 jari 240
2 26 Feb 07 jari 241             this.setFileProgress(counter);
2 26 Feb 07 jari 242             counter++;
2 26 Feb 07 jari 243         }
2 26 Feb 07 jari 244         reader.close();
2 26 Feb 07 jari 245         MultipleArrayViewer mav = this.superLoader.getArrayViewer();
2 26 Feb 07 jari 246         
2 26 Feb 07 jari 247         //Set Data characteristics
2 26 Feb 07 jari 248         ((MultipleArrayData)mav.getData()).setHasDyeSwap(false);
2 26 Feb 07 jari 249         ((MultipleArrayData)mav.getData()).setLog2Data(isLog2);
2 26 Feb 07 jari 250         ((MultipleArrayData)mav.getData()).setHasCloneDistribution(false);
2 26 Feb 07 jari 251         ((MultipleArrayData)mav.getData()).setCGHData();
2 26 Feb 07 jari 252         ((MultipleArrayData)mav.getData()).setCGHSpecies(species);
2 26 Feb 07 jari 253         
2 26 Feb 07 jari 254         /**
2 26 Feb 07 jari 255          * Sort the Data based on CGHClone Chr & Start Position
2 26 Feb 07 jari 256          */
2 26 Feb 07 jari 257         
2 26 Feb 07 jari 258         List sortedList = Arrays.asList(cloneArray);
2 26 Feb 07 jari 259         Collections.sort(sortedList, new CGHCloneComparator());
2 26 Feb 07 jari 260         
2 26 Feb 07 jari 261         //sortSlideDataArray(slideDataArray, sortedList, unSortedCloneNames, clones, species);
2 26 Feb 07 jari 262         sortSlideDataArrays(slideDataArray, sortedList, unSortedCloneNames, clones, species);
2 26 Feb 07 jari 263         
2 26 Feb 07 jari 264         /**
2 26 Feb 07 jari 265          * Create Chromosome Indices for MAD variable chromosomeIndices
2 26 Feb 07 jari 266          */
2 26 Feb 07 jari 267         int chrIndices[][] = calculateChromosomeIndices(sortedList);
2 26 Feb 07 jari 268         
2 26 Feb 07 jari 269         /**
2 26 Feb 07 jari 270          * Remove temporary variables
2 26 Feb 07 jari 271          */
2 26 Feb 07 jari 272         unSortedCloneNames.clear();
2 26 Feb 07 jari 273         unSortedCloneNames = null;
2 26 Feb 07 jari 274         cloneArray = null;
2 26 Feb 07 jari 275         sortedList = null;
2 26 Feb 07 jari 276         
2 26 Feb 07 jari 277         ((MultipleArrayData)mav.getData()).setChromosomeIndices(chrIndices);
2 26 Feb 07 jari 278         
2 26 Feb 07 jari 279         /**
2 26 Feb 07 jari 280          * Create default samples order as apprered in the file
2 26 Feb 07 jari 281          */
2 26 Feb 07 jari 282         int samplesOrder[] = generateDefaultSamplesOrder(slideDataArray);
2 26 Feb 07 jari 283         ((MultipleArrayData)mav.getData()).setSamplesOrder(samplesOrder);
2 26 Feb 07 jari 284         
2 26 Feb 07 jari 285         /**
2 26 Feb 07 jari 286          * Set ArrayList clones in MAD
2 26 Feb 07 jari 287          */
2 26 Feb 07 jari 288         ((MultipleArrayData)mav.getData()).setClones(clones);
2 26 Feb 07 jari 289         
2 26 Feb 07 jari 290         Vector data = new Vector(slideDataArray.length);
2 26 Feb 07 jari 291         for(int i = 0; i < slideDataArray.length; i++)
2 26 Feb 07 jari 292             data.add(slideDataArray[i]);
2 26 Feb 07 jari 293
2 26 Feb 07 jari 294         this.setFilesProgress(1);
2 26 Feb 07 jari 295         return data;
2 26 Feb 07 jari 296     }
2 26 Feb 07 jari 297
2 26 Feb 07 jari 298     /**
2 26 Feb 07 jari 299      * Raktim Oct 27, 05
2 26 Feb 07 jari 300      * @param clones
2 26 Feb 07 jari 301      * @return
2 26 Feb 07 jari 302      */
2 26 Feb 07 jari 303     public static int[][] calculateChromosomeIndices(List sortedList){
2 26 Feb 07 jari 304       int numClones  = sortedList.size();
2 26 Feb 07 jari 305         int numChromosomes = ((CGHClone)sortedList.get(sortedList.size()-1)).getChromosomeIndex() + 1;
2 26 Feb 07 jari 306         int[][] chromosomeIndices = new int[numChromosomes][2];
2 26 Feb 07 jari 307         
2 26 Feb 07 jari 308         chromosomeIndices[0][0] = 0;
2 26 Feb 07 jari 309         int curChromosomeIndex = 0;
2 26 Feb 07 jari 310         Iterator clonesIt = sortedList.iterator();
2 26 Feb 07 jari 311         int i = 0;
2 26 Feb 07 jari 312         while(clonesIt.hasNext()){
2 26 Feb 07 jari 313             CGHClone curClone = (CGHClone)clonesIt.next();
2 26 Feb 07 jari 314             while(curClone.getChromosomeIndex() > curChromosomeIndex){
2 26 Feb 07 jari 315                 chromosomeIndices[curChromosomeIndex][1] = i - 1;
2 26 Feb 07 jari 316                 curChromosomeIndex++;
2 26 Feb 07 jari 317                 chromosomeIndices[curChromosomeIndex][0] = i;
2 26 Feb 07 jari 318             }
2 26 Feb 07 jari 319             i++;
2 26 Feb 07 jari 320         }
2 26 Feb 07 jari 321         chromosomeIndices[numChromosomes - 1][1] = numClones - 1;
2 26 Feb 07 jari 322         
2 26 Feb 07 jari 323         return chromosomeIndices;
2 26 Feb 07 jari 324     }
2 26 Feb 07 jari 325     
2 26 Feb 07 jari 326     /**
2 26 Feb 07 jari 327      * Raktim Oct 28, 05
2 26 Feb 07 jari 328      * @param slideDataArray
2 26 Feb 07 jari 329      * @return
2 26 Feb 07 jari 330      */
2 26 Feb 07 jari 331     private int[] generateDefaultSamplesOrder(ISlideData[] slideDataArray){
2 26 Feb 07 jari 332         int[] samplesOrder = new int[slideDataArray.length];
2 26 Feb 07 jari 333         for(int i = 0 ; i < samplesOrder.length; i++){
2 26 Feb 07 jari 334             samplesOrder[i] = i;
2 26 Feb 07 jari 335         }
2 26 Feb 07 jari 336         return samplesOrder;
2 26 Feb 07 jari 337     }
2 26 Feb 07 jari 338     
2 26 Feb 07 jari 339     /**
2 26 Feb 07 jari 340      * Raktim Oct 25, 05
2 26 Feb 07 jari 341      * CGH Function - NOT USED
2 26 Feb 07 jari 342      * Function to arrange SlideDataElements & Float values according to sort order
2 26 Feb 07 jari 343      */
2 26 Feb 07 jari 344     private void sortSlideDataArray(ISlideData[] slideDataArray, List sorted, ArrayList unSorted, ArrayList clones, int species) {
2 26 Feb 07 jari 345         System.out.println("unSorted size: " + unSorted.size());
2 26 Feb 07 jari 346   
2 26 Feb 07 jari 347         Iterator clonesIt = sorted.iterator();
2 26 Feb 07 jari 348         int sortInd_T = 0;
2 26 Feb 07 jari 349         while(clonesIt.hasNext()){
2 26 Feb 07 jari 350           CGHClone curClone = (CGHClone)clonesIt.next();
2 26 Feb 07 jari 351           int ind_T = unSorted.indexOf(curClone.getName());    
2 26 Feb 07 jari 352           //System.out.println("Clone Ind & Name: " + ind_T + ": " + curClone.getName());
2 26 Feb 07 jari 353             clones.add(curClone);
2 26 Feb 07 jari 354                        
2 26 Feb 07 jari 355             if (curClone.getName() != unSorted.get(ind_T)) {
2 26 Feb 07 jari 356               //System.out.println("Swap Sort Ind, File Ind: " + sortInd_T + ", " + ind_T);
2 26 Feb 07 jari 357               System.out.println("Sorted clone entry: " + curClone.getName());
2 26 Feb 07 jari 358               System.out.println("UnSorted clone entry: " + unSorted.get(ind_T));
2 26 Feb 07 jari 359               System.exit(1);
2 26 Feb 07 jari 360             }
2 26 Feb 07 jari 361             
2 26 Feb 07 jari 362           CGHSlideDataElement sde_T1 = (CGHSlideDataElement)slideDataArray[0].getSlideDataElement(sortInd_T);
2 26 Feb 07 jari 363           
2 26 Feb 07 jari 364       CGHClone clone_T1 = sde_T1.getClone(species);
2 26 Feb 07 jari 365           if (clone_T1 == null) {
2 26 Feb 07 jari 366         System.out.println("Null CGHClone");
2 26 Feb 07 jari 367         System.exit(1);
2 26 Feb 07 jari 368       }
2 26 Feb 07 jari 369           
2 26 Feb 07 jari 370       for(int j = 0; j < slideDataArray.length; j++) {    
2 26 Feb 07 jari 371             //Swap SlideData Element for ordering
2 26 Feb 07 jari 372             if (j == 0) {
2 26 Feb 07 jari 373               CGHSlideDataElement rem_T = (CGHSlideDataElement)((SlideData)slideDataArray[j]).set(ind_T, sde_T1);
2 26 Feb 07 jari 374               ((SlideData)slideDataArray[j]).setElementAt(rem_T, sortInd_T);
2 26 Feb 07 jari 375             }
2 26 Feb 07 jari 376             else {
2 26 Feb 07 jari 377               //Swap FloatMatrix Element for ordering, index 1 to n samples
2 26 Feb 07 jari 378               FloatSlideData fse_T = (FloatSlideData)slideDataArray[j];
2 26 Feb 07 jari 379               float cy3_1 = fse_T.getCY3(sortInd_T);
2 26 Feb 07 jari 380               float cy5_1 = fse_T.getCY5(sortInd_T);
2 26 Feb 07 jari 381               float cy3_2 = fse_T.getCY3(ind_T);
2 26 Feb 07 jari 382               float cy5_2 = fse_T.getCY5(ind_T);
2 26 Feb 07 jari 383               fse_T.setIntensities(ind_T, cy3_1, cy5_1);
2 26 Feb 07 jari 384               fse_T.setIntensities(sortInd_T, cy3_2, cy5_2);
2 26 Feb 07 jari 385             }
2 26 Feb 07 jari 386           }
2 26 Feb 07 jari 387       String name_T = (String) unSorted.set(ind_T, clone_T1.getName());
2 26 Feb 07 jari 388       unSorted.set(sortInd_T, name_T);
2 26 Feb 07 jari 389       //if(sortInd_T % 500 == 0) System.out.println("Records Done: " + sortInd_T);
2 26 Feb 07 jari 390           sortInd_T++;
2 26 Feb 07 jari 391         }
2 26 Feb 07 jari 392         
2 26 Feb 07 jari 393         System.out.println("Loop times: " + sortInd_T);
2 26 Feb 07 jari 394         System.out.println("# of SlideDataElements: " + slideDataArray[0].getSize() + ", " + sorted.size());
2 26 Feb 07 jari 395
2 26 Feb 07 jari 396     }
2 26 Feb 07 jari 397     
2 26 Feb 07 jari 398     /**
2 26 Feb 07 jari 399      * Function to arrange SlideDataElements & Float values according to sort order
2 26 Feb 07 jari 400      * Improvement Over sortSlideDataArray() in terms of cost efficiency
2 26 Feb 07 jari 401      * @param slideDataArray
2 26 Feb 07 jari 402      * @param sorted
2 26 Feb 07 jari 403      * @param unSorted
2 26 Feb 07 jari 404      * @param clones
2 26 Feb 07 jari 405      */
2 26 Feb 07 jari 406     private void sortSlideDataArrays(ISlideData[] slideDataArray, List sorted, Hashtable unSorted, ArrayList clones, int species) {
2 26 Feb 07 jari 407         System.out.println("List size: " + sorted.size());
2 26 Feb 07 jari 408         System.out.println("unSorted size: " + unSorted.size());
2 26 Feb 07 jari 409   
2 26 Feb 07 jari 410         Iterator clonesIt = sorted.iterator();
2 26 Feb 07 jari 411         int sortInd_T = 0;
2 26 Feb 07 jari 412         while(clonesIt.hasNext()){
2 26 Feb 07 jari 413           CGHClone curClone = (CGHClone)clonesIt.next();
2 26 Feb 07 jari 414           Integer int_T = (Integer)unSorted.get(curClone.getName());
2 26 Feb 07 jari 415           if (int_T == null) {
2 26 Feb 07 jari 416             System.out.println("Sorted clone entry not found in Hashtable: " + curClone.getName());
2 26 Feb 07 jari 417             System.exit(1);
2 26 Feb 07 jari 418           }
2 26 Feb 07 jari 419           int ind_T = int_T.intValue();
2 26 Feb 07 jari 420             clones.add(curClone);
2 26 Feb 07 jari 421                         
2 26 Feb 07 jari 422           CGHSlideDataElement sde_T1 = (CGHSlideDataElement)slideDataArray[0].getSlideDataElement(sortInd_T);
2 26 Feb 07 jari 423       CGHClone clone_T1 = sde_T1.getClone(species);
2 26 Feb 07 jari 424           if (clone_T1 == null) {
2 26 Feb 07 jari 425         System.out.println("Null CGHClone");
2 26 Feb 07 jari 426         System.exit(1);
2 26 Feb 07 jari 427       }
2 26 Feb 07 jari 428           
2 26 Feb 07 jari 429       for(int j = 0; j < slideDataArray.length; j++) {    
2 26 Feb 07 jari 430             //Swap SlideData Element for ordering
2 26 Feb 07 jari 431             if (j == 0) {
2 26 Feb 07 jari 432               CGHSlideDataElement rem_T = (CGHSlideDataElement)((SlideData)slideDataArray[j]).set(ind_T, sde_T1);
2 26 Feb 07 jari 433               ((SlideData)slideDataArray[j]).setElementAt(rem_T, sortInd_T);
2 26 Feb 07 jari 434             }
2 26 Feb 07 jari 435             else {
2 26 Feb 07 jari 436               //Swap FloatMatrix Element for ordering, index 1 to n samples
2 26 Feb 07 jari 437               FloatSlideData fse_T = (FloatSlideData)slideDataArray[j];
2 26 Feb 07 jari 438               float cy3_1 = fse_T.getCY3(sortInd_T);
2 26 Feb 07 jari 439               float cy5_1 = fse_T.getCY5(sortInd_T);
2 26 Feb 07 jari 440               float cy3_2 = fse_T.getCY3(ind_T);
2 26 Feb 07 jari 441               float cy5_2 = fse_T.getCY5(ind_T);
2 26 Feb 07 jari 442               fse_T.setIntensities(ind_T, cy3_1, cy5_1);
2 26 Feb 07 jari 443               fse_T.setIntensities(sortInd_T, cy3_2, cy5_2);
2 26 Feb 07 jari 444             }
2 26 Feb 07 jari 445           }
2 26 Feb 07 jari 446       Integer loc_T = (Integer) unSorted.put(clone_T1.getName(), new Integer(ind_T));
2 26 Feb 07 jari 447       unSorted.put(curClone.getName(), loc_T);
2 26 Feb 07 jari 448           sortInd_T++;
2 26 Feb 07 jari 449         }       
2 26 Feb 07 jari 450          System.out.println("# of SlideDataElements: " + slideDataArray[0].getSize() + ", " + sorted.size());
2 26 Feb 07 jari 451     }
2 26 Feb 07 jari 452     
2 26 Feb 07 jari 453     public FileFilter getFileFilter() {
2 26 Feb 07 jari 454
2 26 Feb 07 jari 455         FileFilter mevFileFilter = new FileFilter() {
2 26 Feb 07 jari 456
2 26 Feb 07 jari 457             public boolean accept(File f) {
2 26 Feb 07 jari 458                 if (f.isDirectory()) return true;
2 26 Feb 07 jari 459                 if (f.getName().endsWith(".txt")) return true;
2 26 Feb 07 jari 460                 else return false;
2 26 Feb 07 jari 461             }
2 26 Feb 07 jari 462
2 26 Feb 07 jari 463             public String getDescription() {
2 26 Feb 07 jari 464                 return "CGH Tab Delimited, Multiple Sample Files (*.txt)";
2 26 Feb 07 jari 465             }
2 26 Feb 07 jari 466         };
2 26 Feb 07 jari 467
2 26 Feb 07 jari 468         return mevFileFilter;
2 26 Feb 07 jari 469     }
2 26 Feb 07 jari 470
2 26 Feb 07 jari 471     public boolean checkLoadEnable() {
2 26 Feb 07 jari 472
2 26 Feb 07 jari 473         // Currently, the only requirement is that a cell has been highlighted
2 26 Feb 07 jari 474
2 26 Feb 07 jari 475         int tableRow = CGHsflp.getXRow() + 1; // Adjusted by 1 to account for the table header
2 26 Feb 07 jari 476         int tableColumn = CGHsflp.getXColumn();
2 26 Feb 07 jari 477
2 26 Feb 07 jari 478         if (tableColumn < 0) return false;
2 26 Feb 07 jari 479
2 26 Feb 07 jari 480         TableModel model = CGHsflp.getTable().getModel();
2 26 Feb 07 jari 481         String fieldSummary = "";
2 26 Feb 07 jari 482         for (int i = 0; i < tableColumn; i++) {
2 26 Feb 07 jari 483             //  System.out.print(model.getColumnName(i) + (i + 1 == tableColumn ? "\n" : ", "));
2 26 Feb 07 jari 484             fieldSummary += model.getColumnName(i) + (i + 1 == tableColumn ? "" : ", ");
2 26 Feb 07 jari 485         }
2 26 Feb 07 jari 486
2 26 Feb 07 jari 487         CGHsflp.setFieldsText(fieldSummary);
2 26 Feb 07 jari 488
2 26 Feb 07 jari 489         if (tableRow >= 1 && tableColumn >= 0) {
2 26 Feb 07 jari 490             setLoadEnabled(true);
2 26 Feb 07 jari 491             return true;
2 26 Feb 07 jari 492         } else {
2 26 Feb 07 jari 493             setLoadEnabled(false);
2 26 Feb 07 jari 494             return false;
2 26 Feb 07 jari 495         }
2 26 Feb 07 jari 496     }
2 26 Feb 07 jari 497
2 26 Feb 07 jari 498     public boolean validateFile(File targetFile) {
2 26 Feb 07 jari 499         return true; // For now, no validation on Stanford Files
2 26 Feb 07 jari 500     }
2 26 Feb 07 jari 501
2 26 Feb 07 jari 502     public JPanel getFileLoaderPanel() {
2 26 Feb 07 jari 503         return CGHsflp;
2 26 Feb 07 jari 504     }
2 26 Feb 07 jari 505
2 26 Feb 07 jari 506     public void processStanfordFile(File targetFile) {
2 26 Feb 07 jari 507
2 26 Feb 07 jari 508         Vector columnHeaders = new Vector();
2 26 Feb 07 jari 509         Vector dataVector = new Vector();
2 26 Feb 07 jari 510         Vector rowVector = null;
2 26 Feb 07 jari 511         BufferedReader reader = null;
2 26 Feb 07 jari 512         String currentLine = null;
2 26 Feb 07 jari 513
2 26 Feb 07 jari 514         if (! validateFile(targetFile)) return;
2 26 Feb 07 jari 515
2 26 Feb 07 jari 516         CGHsflp.setFileName(targetFile.getAbsolutePath());
2 26 Feb 07 jari 517
2 26 Feb 07 jari 518         DefaultTableModel model = new DefaultTableModel() {
2 26 Feb 07 jari 519             public boolean isCellEditable(int row, int column) {
2 26 Feb 07 jari 520                 return false;
2 26 Feb 07 jari 521             }
2 26 Feb 07 jari 522         };
2 26 Feb 07 jari 523
2 26 Feb 07 jari 524         try {
2 26 Feb 07 jari 525             reader = new BufferedReader(new FileReader(targetFile), 1024 * 128);
2 26 Feb 07 jari 526         } catch (FileNotFoundException fnfe) {
2 26 Feb 07 jari 527             fnfe.printStackTrace();
2 26 Feb 07 jari 528         }
2 26 Feb 07 jari 529
2 26 Feb 07 jari 530         try {
2 26 Feb 07 jari 531             StringSplitter ss = new StringSplitter('\t');
2 26 Feb 07 jari 532
2 26 Feb 07 jari 533             currentLine = reader.readLine();
2 26 Feb 07 jari 534             ss.init(currentLine);
2 26 Feb 07 jari 535
2 26 Feb 07 jari 536             for (int i = 0; i < ss.countTokens()+1; i++) {
2 26 Feb 07 jari 537                 columnHeaders.add(ss.nextToken());
2 26 Feb 07 jari 538             }
2 26 Feb 07 jari 539
2 26 Feb 07 jari 540             model.setColumnIdentifiers(columnHeaders);
2 26 Feb 07 jari 541             int cnt = 0;
2 26 Feb 07 jari 542             while ((currentLine = reader.readLine()) != null && cnt < 100) {
2 26 Feb 07 jari 543                 cnt++;
2 26 Feb 07 jari 544                 ss.init(currentLine);
2 26 Feb 07 jari 545                 rowVector = new Vector();
2 26 Feb 07 jari 546                 for (int i = 0; i < ss.countTokens()+1; i++) {
2 26 Feb 07 jari 547                     try {
2 26 Feb 07 jari 548                         rowVector.add(ss.nextToken());
2 26 Feb 07 jari 549                     } catch (java.util.NoSuchElementException nsee) {
2 26 Feb 07 jari 550                         rowVector.add(" ");
2 26 Feb 07 jari 551                     }
2 26 Feb 07 jari 552                 }
2 26 Feb 07 jari 553
2 26 Feb 07 jari 554                 dataVector.add(rowVector);
2 26 Feb 07 jari 555                 model.addRow(rowVector);
2 26 Feb 07 jari 556             }
2 26 Feb 07 jari 557
2 26 Feb 07 jari 558             reader.close();
2 26 Feb 07 jari 559         } catch (IOException ioe) {
2 26 Feb 07 jari 560             ioe.printStackTrace();
2 26 Feb 07 jari 561         }
2 26 Feb 07 jari 562
2 26 Feb 07 jari 563         CGHsflp.setTableModel(model);
2 26 Feb 07 jari 564     }
2 26 Feb 07 jari 565
2 26 Feb 07 jari 566     public String getFilePath() {
2 26 Feb 07 jari 567         return this.CGHsflp.fileNameTextField.getText();
2 26 Feb 07 jari 568     }
2 26 Feb 07 jari 569
2 26 Feb 07 jari 570     public void openDataPath() {
2 26 Feb 07 jari 571         this.CGHsflp.openDataPath();
2 26 Feb 07 jari 572     }
2 26 Feb 07 jari 573
2 26 Feb 07 jari 574   /*
2 26 Feb 07 jari 575    * CGHStanfordFileLoader - Internal Classes
2 26 Feb 07 jari 576    */
2 26 Feb 07 jari 577
2 26 Feb 07 jari 578     private class CGHStanfordFileLoaderPanel extends JPanel {
2 26 Feb 07 jari 579
2 26 Feb 07 jari 580         FileTreePane fileTreePane;
2 26 Feb 07 jari 581
2 26 Feb 07 jari 582         JTextField fileNameTextField;
2 26 Feb 07 jari 583         JPanel fileSelectionPanel;
2 26 Feb 07 jari 584         //New Fields for Species
2 26 Feb 07 jari 585         JRadioButton speciesHsButton;
2 26 Feb 07 jari 586         JRadioButton speciesMmButton;
2 26 Feb 07 jari 587         ButtonGroup speciesGroup;
2 26 Feb 07 jari 588         
2 26 Feb 07 jari 589         JRadioButton log2RatioButton;
2 26 Feb 07 jari 590         JRadioButton justRatioButton;
2 26 Feb 07 jari 591         ButtonGroup ratioGroup;
2 26 Feb 07 jari 592         JPanel fileDataParamsPanel;
2 26 Feb 07 jari 593         //
2 26 Feb 07 jari 594         JTable expressionTable;
2 26 Feb 07 jari 595         JLabel instructionsLabel;
2 26 Feb 07 jari 596         JScrollPane tableScrollPane;
2 26 Feb 07 jari 597         JPanel tablePanel;
2 26 Feb 07 jari 598         JPanel fileLoaderPanel;
2 26 Feb 07 jari 599         JTextField fieldsTextField;
2 26 Feb 07 jari 600         JPanel fieldsPanel;
2 26 Feb 07 jari 601         JSplitPane splitPane;
2 26 Feb 07 jari 602
2 26 Feb 07 jari 603         JList availableList;
2 26 Feb 07 jari 604         JScrollPane availableScrollPane;
2 26 Feb 07 jari 605
2 26 Feb 07 jari 606         private int xRow = -1;
2 26 Feb 07 jari 607         private int xColumn = -1;
2 26 Feb 07 jari 608         private int xSpecies = -1;
2 26 Feb 07 jari 609         private boolean isLog2 = false;
2 26 Feb 07 jari 610
2 26 Feb 07 jari 611         public CGHStanfordFileLoaderPanel() {
2 26 Feb 07 jari 612
2 26 Feb 07 jari 613             setLayout(new GridBagLayout());
2 26 Feb 07 jari 614
2 26 Feb 07 jari 615             fileTreePane = new FileTreePane(SuperExpressionFileLoader.DATA_PATH);
2 26 Feb 07 jari 616             fileTreePane.addFileTreePaneListener(new FileTreePaneEventHandler());
2 26 Feb 07 jari 617             fileTreePane.setPreferredSize(new java.awt.Dimension(200, 50));
2 26 Feb 07 jari 618
2 26 Feb 07 jari 619             fileNameTextField = new JTextField();
2 26 Feb 07 jari 620             fileNameTextField.setEditable(false);
2 26 Feb 07 jari 621             fileNameTextField.setForeground(Color.black);
2 26 Feb 07 jari 622             fileNameTextField.setFont(new Font("monospaced", Font.BOLD, 12));
2 26 Feb 07 jari 623
2 26 Feb 07 jari 624             fileSelectionPanel = new JPanel();
2 26 Feb 07 jari 625             fileSelectionPanel.setLayout(new GridBagLayout());
2 26 Feb 07 jari 626             fileSelectionPanel.setBorder(new TitledBorder(new EtchedBorder(), "Selected CGH File"));
2 26 Feb 07 jari 627             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 628             
2 26 Feb 07 jari 629             //
2 26 Feb 07 jari 630             speciesHsButton = new JRadioButton("Human", true);
2 26 Feb 07 jari 631             speciesHsButton.setFocusPainted(false);
2 26 Feb 07 jari 632             speciesMmButton = new JRadioButton("Mouse");
2 26 Feb 07 jari 633             speciesMmButton.setFocusPainted(false);
2 26 Feb 07 jari 634             speciesGroup = new ButtonGroup();
2 26 Feb 07 jari 635             speciesGroup.add(speciesHsButton);
2 26 Feb 07 jari 636             speciesGroup.add(speciesMmButton);
2 26 Feb 07 jari 637             
2 26 Feb 07 jari 638             fileDataParamsPanel = new JPanel();
2 26 Feb 07 jari 639             fileDataParamsPanel.setLayout(new GridBagLayout());
2 26 Feb 07 jari 640             fileDataParamsPanel.setBorder(new TitledBorder(new EtchedBorder(), "CGH Data Characteristics"));
2 26 Feb 07 jari 641             gba.add(fileDataParamsPanel, speciesHsButton, 0, 0, 1, 1, 1, 0, GBA.H, GBA.C, new Insets(0, 20, 0, 5), 0, 0);
2 26 Feb 07 jari 642             gba.add(fileDataParamsPanel, speciesMmButton, 0, 1, 1, 1, 1, 0, GBA.H, GBA.C, new Insets(0, 20, 0, 5), 0, 0);
2 26 Feb 07 jari 643             
2 26 Feb 07 jari 644             log2RatioButton = new JRadioButton("Log2 Ratio", true);
2 26 Feb 07 jari 645             log2RatioButton.setFocusPainted(false);
2 26 Feb 07 jari 646             justRatioButton = new JRadioButton("Just Ratio");
2 26 Feb 07 jari 647             justRatioButton.setFocusPainted(false);
2 26 Feb 07 jari 648             ratioGroup = new ButtonGroup();
2 26 Feb 07 jari 649             ratioGroup.add(log2RatioButton);
2 26 Feb 07 jari 650             ratioGroup.add(justRatioButton);
2 26 Feb 07 jari 651             gba.add(fileDataParamsPanel, log2RatioButton, 1, 0, 1, 1, 1, 0, GBA.H, GBA.C, new Insets(0, 20, 0, 5), 0, 0);
2 26 Feb 07 jari 652             gba.add(fileDataParamsPanel, justRatioButton, 1, 1, 1, 1, 1, 0, GBA.H, GBA.C, new Insets(0, 20, 0, 5), 0, 0);
2 26 Feb 07 jari 653             //
2 26 Feb 07 jari 654             expressionTable = new JTable();
2 26 Feb 07 jari 655             expressionTable.setCellSelectionEnabled(true);
2 26 Feb 07 jari 656             expressionTable.setColumnSelectionAllowed(false);
2 26 Feb 07 jari 657             expressionTable.setRowSelectionAllowed(false);
2 26 Feb 07 jari 658             expressionTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
2 26 Feb 07 jari 659             expressionTable.getTableHeader().setReorderingAllowed(false);
2 26 Feb 07 jari 660             expressionTable.addMouseListener(new MouseAdapter() {
2 26 Feb 07 jari 661                 public void mousePressed(MouseEvent event) {
2 26 Feb 07 jari 662                     xRow = expressionTable.rowAtPoint(event.getPoint());
2 26 Feb 07 jari 663                     xColumn = expressionTable.columnAtPoint(event.getPoint());
2 26 Feb 07 jari 664                     checkLoadEnable();
2 26 Feb 07 jari 665                 }
2 26 Feb 07 jari 666             });
2 26 Feb 07 jari 667
2 26 Feb 07 jari 668             tableScrollPane = new JScrollPane(expressionTable, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
2 26 Feb 07 jari 669
2 26 Feb 07 jari 670             instructionsLabel = new JLabel();
2 26 Feb 07 jari 671             instructionsLabel.setForeground(java.awt.Color.red);
2 26 Feb 07 jari 672             String instructions = "<html>First 4 column MUST be MarkerID, Marker Chromosome, Marker Start, Marker End " +
2 26 Feb 07 jari 673                         "appearing exactly in the same order. <BR>" +
2 26 Feb 07 jari 674                         "Click the upper-leftmost expression value. Click the <b>Load</b> button to finish.</html>";
2 26 Feb 07 jari 675             instructionsLabel.setText(instructions);
2 26 Feb 07 jari 676
2 26 Feb 07 jari 677             tablePanel = new JPanel();
2 26 Feb 07 jari 678             tablePanel.setLayout(new GridBagLayout());
2 26 Feb 07 jari 679             tablePanel.setBorder(new TitledBorder(new EtchedBorder(), "Expression Table"));
2 26 Feb 07 jari 680             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 681             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 682
2 26 Feb 07 jari 683             fieldsTextField = new JTextField();
2 26 Feb 07 jari 684             fieldsTextField.setEditable(false);
2 26 Feb 07 jari 685             fieldsTextField.setForeground(Color.black);
2 26 Feb 07 jari 686             fieldsTextField.setFont(new Font("serif", Font.BOLD, 12));
2 26 Feb 07 jari 687
2 26 Feb 07 jari 688             fieldsPanel = new JPanel();
2 26 Feb 07 jari 689             fieldsPanel.setLayout(new GridBagLayout());
2 26 Feb 07 jari 690             fieldsPanel.setBorder(new TitledBorder(new EtchedBorder(), "Annotation Fields"));
2 26 Feb 07 jari 691             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 692
2 26 Feb 07 jari 693             fileLoaderPanel = new JPanel();
2 26 Feb 07 jari 694             fileLoaderPanel.setLayout(new GridBagLayout());
2 26 Feb 07 jari 695
2 26 Feb 07 jari 696             //jcb add list panel
2 26 Feb 07 jari 697             availableList = new JList(new DefaultListModel());
2 26 Feb 07 jari 698             availableList.setSelectionMode(DefaultListSelectionModel.SINGLE_SELECTION);
2 26 Feb 07 jari 699             availableList.setCellRenderer(new ListRenderer());
2 26 Feb 07 jari 700             availableList.addListSelectionListener(new ListListener());
2 26 Feb 07 jari 701             availableScrollPane = new JScrollPane(availableList);
2 26 Feb 07 jari 702
2 26 Feb 07 jari 703             JPanel filePanel = new JPanel(new GridBagLayout());
2 26 Feb 07 jari 704             filePanel.setPreferredSize(new Dimension(10, 100));
2 26 Feb 07 jari 705             filePanel.setBorder(new TitledBorder(new EtchedBorder(), "Available Files (*.txt)"));
2 26 Feb 07 jari 706             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 707             /*
2 26 Feb 07 jari 708             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 709             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 710             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 711             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 712             */
2 26 Feb 07 jari 713             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 714             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 715             gba.add(fileLoaderPanel, fileDataParamsPanel, 1, 1, 1, 1, 3, 0, GBA.H, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 716             gba.add(fileLoaderPanel, tablePanel, 1, 2, 1, 2, 3, 1, GBA.B, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 717             gba.add(fileLoaderPanel, fieldsPanel, 1, 4, 1, 1, 3, 0, GBA.H, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 718
2 26 Feb 07 jari 719             //jcb
2 26 Feb 07 jari 720             splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, fileTreePane, fileLoaderPanel);
2 26 Feb 07 jari 721             splitPane.setPreferredSize(new java.awt.Dimension(600, 600));
2 26 Feb 07 jari 722             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 723             splitPane.setDividerLocation(0.50);
2 26 Feb 07 jari 724
2 26 Feb 07 jari 725         }
2 26 Feb 07 jari 726
2 26 Feb 07 jari 727         public void openDataPath() {
2 26 Feb 07 jari 728             fileTreePane.openDataPath();
2 26 Feb 07 jari 729         }
2 26 Feb 07 jari 730
2 26 Feb 07 jari 731         public JTable getTable() {
2 26 Feb 07 jari 732             return expressionTable;
2 26 Feb 07 jari 733         }
2 26 Feb 07 jari 734
2 26 Feb 07 jari 735         public int getXColumn() {
2 26 Feb 07 jari 736             return xColumn;
2 26 Feb 07 jari 737         }
2 26 Feb 07 jari 738
2 26 Feb 07 jari 739         public int getXRow() {
2 26 Feb 07 jari 740             return xRow;
2 26 Feb 07 jari 741         }
2 26 Feb 07 jari 742         
2 26 Feb 07 jari 743         public int getXSpecies() {
2 26 Feb 07 jari 744           if(this.speciesHsButton.isSelected()) xSpecies = TMEV.CGH_SPECIES_HS;
2 26 Feb 07 jari 745           else if (this.speciesMmButton.isSelected()) xSpecies = TMEV.CGH_SPECIES_MM;
2 26 Feb 07 jari 746           else xSpecies = TMEV.CGH_SPECIES_Undef;
2 26 Feb 07 jari 747             return xSpecies;
2 26 Feb 07 jari 748         }
2 26 Feb 07 jari 749         
2 26 Feb 07 jari 750         public boolean getXLog2Status() {
2 26 Feb 07 jari 751           if(this.log2RatioButton.isSelected()) 
2 26 Feb 07 jari 752             isLog2 = true;
2 26 Feb 07 jari 753           if(this.justRatioButton.isSelected()) 
2 26 Feb 07 jari 754             isLog2 = false;
2 26 Feb 07 jari 755           return isLog2;
2 26 Feb 07 jari 756         }
2 26 Feb 07 jari 757         public void selectStanfordFile() {
2 26 Feb 07 jari 758             JFileChooser jfc = new JFileChooser(SuperExpressionFileLoader.DATA_PATH);
2 26 Feb 07 jari 759             jfc.setFileFilter(getFileFilter());
2 26 Feb 07 jari 760             int activityCode = jfc.showDialog(this, "Select");
2 26 Feb 07 jari 761
2 26 Feb 07 jari 762             if (activityCode == JFileChooser.APPROVE_OPTION) {
2 26 Feb 07 jari 763                 File target = jfc.getSelectedFile();
2 26 Feb 07 jari 764                 processStanfordFile(target);
2 26 Feb 07 jari 765             }
2 26 Feb 07 jari 766         }
2 26 Feb 07 jari 767
2 26 Feb 07 jari 768         public void setFileName(String fileName) {
2 26 Feb 07 jari 769             fileNameTextField.setText(fileName);
2 26 Feb 07 jari 770         }
2 26 Feb 07 jari 771
2 26 Feb 07 jari 772         public void setTableModel(TableModel model) {
2 26 Feb 07 jari 773             expressionTable.setModel(model);
2 26 Feb 07 jari 774             int numCols = expressionTable.getColumnCount();
2 26 Feb 07 jari 775             for(int i = 0; i < numCols; i++){
2 26 Feb 07 jari 776                 expressionTable.getColumnModel().getColumn(i).setMinWidth(75);
2 26 Feb 07 jari 777             }
2 26 Feb 07 jari 778         }
2 26 Feb 07 jari 779
2 26 Feb 07 jari 780         public void setFieldsText(String fieldsText) {
2 26 Feb 07 jari 781             fieldsTextField.setText(fieldsText);
2 26 Feb 07 jari 782         }
2 26 Feb 07 jari 783
2 26 Feb 07 jari 784
2 26 Feb 07 jari 785         private class ListRenderer extends DefaultListCellRenderer {
2 26 Feb 07 jari 786             public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
2 26 Feb 07 jari 787                 super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
2 26 Feb 07 jari 788                 File file = (File) value;
2 26 Feb 07 jari 789                 setText(file.getName());
2 26 Feb 07 jari 790                 return this;
2 26 Feb 07 jari 791             }
2 26 Feb 07 jari 792         }
2 26 Feb 07 jari 793
2 26 Feb 07 jari 794
2 26 Feb 07 jari 795
2 26 Feb 07 jari 796         private class ListListener implements javax.swing.event.ListSelectionListener {
2 26 Feb 07 jari 797
2 26 Feb 07 jari 798             public void valueChanged(ListSelectionEvent lse) {
2 26 Feb 07 jari 799
2 26 Feb 07 jari 800                 File file = (File)(availableList.getSelectedValue());
2 26 Feb 07 jari 801
2 26 Feb 07 jari 802                 if(file == null || !(file.exists()))
2 26 Feb 07 jari 803                     return;
2 26 Feb 07 jari 804
2 26 Feb 07 jari 805                 processStanfordFile(file);
2 26 Feb 07 jari 806             }
2 26 Feb 07 jari 807         }
2 26 Feb 07 jari 808
2 26 Feb 07 jari 809
2 26 Feb 07 jari 810         private class FileTreePaneEventHandler implements FileTreePaneListener {
2 26 Feb 07 jari 811
2 26 Feb 07 jari 812             public void nodeSelected(FileTreePaneEvent event) {
2 26 Feb 07 jari 813
2 26 Feb 07 jari 814                 String filePath = (String) event.getValue("Path");
2 26 Feb 07 jari 815                 Vector fileNames = (Vector) event.getValue("Filenames");
2 26 Feb 07 jari 816
2 26 Feb 07 jari 817                 if(fileNames.size() < 1)
2 26 Feb 07 jari 818                     return;
2 26 Feb 07 jari 819
2 26 Feb 07 jari 820                 String fileName = (String)(fileNames.elementAt(0));
2 26 Feb 07 jari 821
2 26 Feb 07 jari 822                 ((DefaultListModel)(availableList.getModel())).clear();
2 26 Feb 07 jari 823
2 26 Feb 07 jari 824
2 26 Feb 07 jari 825                 for (int i = 0; i < fileNames.size(); i++) {
2 26 Feb 07 jari 826
2 26 Feb 07 jari 827                     File targetFile = new File((String) fileNames.elementAt(i));
2 26 Feb 07 jari 828
2 26 Feb 07 jari 829                     FileFilter stanfordFileFilter = getFileFilter();
2 26 Feb 07 jari 830
2 26 Feb 07 jari 831                     if (stanfordFileFilter.accept(targetFile)) {
2 26 Feb 07 jari 832                         ((DefaultListModel)(availableList.getModel())).addElement(new File((String) fileNames.elementAt(i)));
2 26 Feb 07 jari 833                     }
2 26 Feb 07 jari 834                 }
2 26 Feb 07 jari 835             }
2 26 Feb 07 jari 836
2 26 Feb 07 jari 837             public void nodeCollapsed(FileTreePaneEvent event) {}
2 26 Feb 07 jari 838             public void nodeExpanded(FileTreePaneEvent event) {}
2 26 Feb 07 jari 839         }
2 26 Feb 07 jari 840     }
2 26 Feb 07 jari 841 }