mev-4.0.01/source/org/tigr/microarray/mev/file/DFCI_CoreFileLoader.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: DFCI_CoreFileLoader.java,v $
2 26 Feb 07 jari 7  * $Revision: 1.5 $
2 26 Feb 07 jari 8  * $Date: 2006/03/24 15:52:17 $
2 26 Feb 07 jari 9  * $Author: eleanorahowe $
2 26 Feb 07 jari 10  * $Revision: 1.5 $
2 26 Feb 07 jari 11  * $Date: 2006/03/24 15:52:17 $
2 26 Feb 07 jari 12  * $Author: eleanorahowe $
2 26 Feb 07 jari 13  * $State: Exp $
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.ActionEvent;
2 26 Feb 07 jari 24 import java.awt.event.ActionListener;
2 26 Feb 07 jari 25 import java.awt.event.MouseAdapter;
2 26 Feb 07 jari 26 import java.awt.event.MouseEvent;
2 26 Feb 07 jari 27 import java.io.BufferedReader;
2 26 Feb 07 jari 28 import java.io.File;
2 26 Feb 07 jari 29 import java.io.FileReader;
2 26 Feb 07 jari 30 import java.io.IOException;
2 26 Feb 07 jari 31 import java.util.ArrayList;
2 26 Feb 07 jari 32 import java.util.Collections;
2 26 Feb 07 jari 33 import java.util.Vector;
2 26 Feb 07 jari 34
2 26 Feb 07 jari 35 import javax.swing.ButtonGroup;
2 26 Feb 07 jari 36 import javax.swing.DefaultListCellRenderer;
2 26 Feb 07 jari 37 import javax.swing.DefaultListModel;
2 26 Feb 07 jari 38 import javax.swing.JButton;
2 26 Feb 07 jari 39 import javax.swing.JLabel;
2 26 Feb 07 jari 40 import javax.swing.JList;
2 26 Feb 07 jari 41 import javax.swing.JPanel;
2 26 Feb 07 jari 42 import javax.swing.JRadioButton;
2 26 Feb 07 jari 43 import javax.swing.JScrollPane;
2 26 Feb 07 jari 44 import javax.swing.JSplitPane;
2 26 Feb 07 jari 45 import javax.swing.JTable;
2 26 Feb 07 jari 46 import javax.swing.JTextField;
2 26 Feb 07 jari 47 import javax.swing.border.EtchedBorder;
2 26 Feb 07 jari 48 import javax.swing.border.TitledBorder;
2 26 Feb 07 jari 49 import javax.swing.filechooser.FileFilter;
2 26 Feb 07 jari 50 import org.tigr.microarray.mev.AffySlideDataElement;
2 26 Feb 07 jari 51 import org.tigr.microarray.mev.FloatSlideData;
2 26 Feb 07 jari 52 //import org.tigr.microarray.mev.GCOSSlideDataElement;
2 26 Feb 07 jari 53 import org.tigr.microarray.mev.ISlideData;
2 26 Feb 07 jari 54 import org.tigr.microarray.mev.ISlideMetaData;
2 26 Feb 07 jari 55 import org.tigr.microarray.mev.SlideData;
2 26 Feb 07 jari 56 import org.tigr.microarray.mev.TMEV;
2 26 Feb 07 jari 57 import org.tigr.microarray.mev.cluster.gui.IData;
2 26 Feb 07 jari 58
2 26 Feb 07 jari 59 public class DFCI_CoreFileLoader extends ExpressionFileLoader {
2 26 Feb 07 jari 60
2 26 Feb 07 jari 61     private GBA gba;
2 26 Feb 07 jari 62     private DFCI_CoreFileLoaderPanel aflp;
2 26 Feb 07 jari 63
2 26 Feb 07 jari 64     private boolean loadEnabled = false;
2 26 Feb 07 jari 65     private File refChipFile;// = new File(".", "Data/");
2 26 Feb 07 jari 66     private String mode = "";
2 26 Feb 07 jari 67     private File [] files;
2 26 Feb 07 jari 68     private int affyDataType = IData.DATA_TYPE_AFFY_ABS;
2 26 Feb 07 jari 69
2 26 Feb 07 jari 70     public DFCI_CoreFileLoader(SuperExpressionFileLoader superLoader) {
2 26 Feb 07 jari 71         super(superLoader);
2 26 Feb 07 jari 72         gba = new GBA();
2 26 Feb 07 jari 73         aflp = new DFCI_CoreFileLoaderPanel();
2 26 Feb 07 jari 74     }
2 26 Feb 07 jari 75
2 26 Feb 07 jari 76     public Vector loadExpressionFiles() throws IOException {
2 26 Feb 07 jari 77
2 26 Feb 07 jari 78         Object[] affymetrixFiles = aflp.getAffymetrixSelectedListModel().toArray();
2 26 Feb 07 jari 79         Object[] refFiles = aflp.getRefSelectedListModel().toArray();
2 26 Feb 07 jari 80         String [] fieldNames = new String[3];
2 26 Feb 07 jari 81         fieldNames[0] = "Affy_ID";
2 26 Feb 07 jari 82         fieldNames[1] = "Detection";
2 26 Feb 07 jari 83         fieldNames[2] = "P-value";
2 26 Feb 07 jari 84         
2 26 Feb 07 jari 85         ISlideData [] data = null;
2 26 Feb 07 jari 86         files = new File[affymetrixFiles.length];
2 26 Feb 07 jari 87         for(int j = 0; j < affymetrixFiles.length ; j++)
2 26 Feb 07 jari 88             files[j] = (File)affymetrixFiles[j];
2 26 Feb 07 jari 89
2 26 Feb 07 jari 90         if(aflp.absoluteRadioButton.isSelected()){
2 26 Feb 07 jari 91             data = loadAffyAbsolute(files);
2 26 Feb 07 jari 92             this.affyDataType = IData.DATA_TYPE_AFFY_ABS;
2 26 Feb 07 jari 93         } else if (aflp.absMeanRadioButton.isSelected()){
2 26 Feb 07 jari 94               data = loadAffyAbsMean(files);
2 26 Feb 07 jari 95               this.affyDataType = IData.DATA_TYPE_AFFY_MEAN;
2 26 Feb 07 jari 96         } else if ( aflp.referenceRadioButton.isSelected()){
2 26 Feb 07 jari 97             DefaultListModel list = aflp.getRefSelectedListModel();
2 26 Feb 07 jari 98             DefaultListModel dataList = aflp.getAffymetrixSelectedListModel();
2 26 Feb 07 jari 99             if(list.getSize() < 1)
2 26 Feb 07 jari 100                 return null;
2 26 Feb 07 jari 101             if(list.getSize() >= 1){
2 26 Feb 07 jari 102                 if(dataList.size() < 1)
2 26 Feb 07 jari 103                     return null;
2 26 Feb 07 jari 104                 File refFile = (File)(list.get(0));
2 26 Feb 07 jari 105                 File [] dataFiles = toFileArray(dataList.toArray());
2 26 Feb 07 jari 106                 data = loadAffyReference(refFile, dataFiles);
2 26 Feb 07 jari 107                 this.affyDataType = IData.DATA_TYPE_AFFY_REF;
2 26 Feb 07 jari 108             }
2 26 Feb 07 jari 109         }
2 26 Feb 07 jari 110         data[0].getSlideMetaData().setFieldNames(fieldNames);
2 26 Feb 07 jari 111         Vector carrier = new Vector();
2 26 Feb 07 jari 112         if(data != null){
2 26 Feb 07 jari 113             TMEV.setDataType(TMEV.DATA_TYPE_AFFY);
2 26 Feb 07 jari 114             for(int i = 0; i < data.length; i++)
2 26 Feb 07 jari 115                 carrier.add(data[i]);
2 26 Feb 07 jari 116         }
2 26 Feb 07 jari 117         return carrier;
2 26 Feb 07 jari 118     }
2 26 Feb 07 jari 119
2 26 Feb 07 jari 120     // converter
2 26 Feb 07 jari 121     private File [] toFileArray(Object [] files){
2 26 Feb 07 jari 122         File [] dataFiles = new File[files.length];
2 26 Feb 07 jari 123         for(int i = 0; i < files.length; i++)
2 26 Feb 07 jari 124             dataFiles[i] = (File)files[i];
2 26 Feb 07 jari 125         return dataFiles;
2 26 Feb 07 jari 126     }
2 26 Feb 07 jari 127
2 26 Feb 07 jari 128     // Affy_ID:Detection:Description
2 26 Feb 07 jari 129
2 26 Feb 07 jari 130     public ISlideData loadExpressionFile(File currentFile) throws IOException {
2 26 Feb 07 jari 131
2 26 Feb 07 jari 132         return null;
2 26 Feb 07 jari 133     }
2 26 Feb 07 jari 134
2 26 Feb 07 jari 135     public Vector loadReferenceFile(File currentFile) throws IOException {
2 26 Feb 07 jari 136
2 26 Feb 07 jari 137         return new Vector();
2 26 Feb 07 jari 138     }
2 26 Feb 07 jari 139
2 26 Feb 07 jari 140     private void setAffyDataType(int type){
2 26 Feb 07 jari 141         this.affyDataType = type;
2 26 Feb 07 jari 142     }
2 26 Feb 07 jari 143
2 26 Feb 07 jari 144     public int getAffyDataType(){
2 26 Feb 07 jari 145         return this.affyDataType;
2 26 Feb 07 jari 146     }
2 26 Feb 07 jari 147
2 26 Feb 07 jari 148
2 26 Feb 07 jari 149     /**
2 26 Feb 07 jari 150      * Loads microarrays data compared to a specified ref chip
2 26 Feb 07 jari 151      */
2 26 Feb 07 jari 152     private ISlideData[] loadAffyReference(File refFile, File [] files) throws IOException {
2 26 Feb 07 jari 153         if (files.length < 1) {
2 26 Feb 07 jari 154             return null;
2 26 Feb 07 jari 155         }
2 26 Feb 07 jari 156
2 26 Feb 07 jari 157         BufferedReader reader = new BufferedReader(new FileReader(refFile));
2 26 Feb 07 jari 158         int numTokens = 0;
2 26 Feb 07 jari 159         String[] headfields=new String[4];
2 26 Feb 07 jari 160         headfields[0]="Probe Set Name";
2 26 Feb 07 jari 161         headfields[1]="Signal";
2 26 Feb 07 jari 162         headfields[2]="Detection";
2 26 Feb 07 jari 163         headfields[3]="Detection p-value";
2 26 Feb 07 jari 164         int[] tag=new int[4];
2 26 Feb 07 jari 165         
2 26 Feb 07 jari 166         StringSplitter ss = new StringSplitter((char)'\t');
2 26 Feb 07 jari 167         int countOfLines = getCountOfLines(refFile)-3;//two headers and one empty line
2 26 Feb 07 jari 168
2 26 Feb 07 jari 169         // ref values
2 26 Feb 07 jari 170         float[] refSignals = new float[countOfLines];
2 26 Feb 07 jari 171         String currentLine;
2 26 Feb 07 jari 172         int index  = 0;
2 26 Feb 07 jari 173         currentLine = reader.readLine();
2 26 Feb 07 jari 174         currentLine = reader.readLine();
2 26 Feb 07 jari 175         currentLine = reader.readLine();
2 26 Feb 07 jari 176         
2 26 Feb 07 jari 177         ss.init(currentLine);
2 26 Feb 07 jari 178         
2 26 Feb 07 jari 179         //countTokens returns the number of delimiters, not neccessarily num of fields
2 26 Feb 07 jari 180         numTokens = ss.countTokens();
2 26 Feb 07 jari 181         int m=0,k=0;
2 26 Feb 07 jari 182        
2 26 Feb 07 jari 183         for(k=0;k<numTokens;k++){  
2 26 Feb 07 jari 184           if(m<4){
2 26 Feb 07 jari 185             if(ss.nextToken().equals(headfields[m])){
2 26 Feb 07 jari 186               tag[m]=k;
2 26 Feb 07 jari 187               m++;       
2 26 Feb 07 jari 188             }
2 26 Feb 07 jari 189           }
2 26 Feb 07 jari 190         }
2 26 Feb 07 jari 191         
2 26 Feb 07 jari 192         while ((currentLine = reader.readLine()) != null) {
2 26 Feb 07 jari 193           setFileProgress(index);
2 26 Feb 07 jari 194             ss.init(currentLine);
2 26 Feb 07 jari 195             m=0;
2 26 Feb 07 jari 196             
2 26 Feb 07 jari 197             String tmp="";
2 26 Feb 07 jari 198             for(int j=0;j<tag[3]+1;j++){
2 26 Feb 07 jari 199               tmp=ss.nextToken();
2 26 Feb 07 jari 200               if(j==tag[m]){
2 26 Feb 07 jari 201                 if(m==1){
2 26 Feb 07 jari 202                         refSignals[index] = (new Float(tmp)).floatValue();
2 26 Feb 07 jari 203                         index++;
2 26 Feb 07 jari 204                 }
2 26 Feb 07 jari 205                 m++;
2 26 Feb 07 jari 206               }
2 26 Feb 07 jari 207             }
2 26 Feb 07 jari 208           
2 26 Feb 07 jari 209         }
2 26 Feb 07 jari 210         reader.close();
2 26 Feb 07 jari 211
2 26 Feb 07 jari 212         ISlideData[] slideData = new ISlideData[files.length];
2 26 Feb 07 jari 213         countOfLines = 0;
2 26 Feb 07 jari 214         int numOfProbesets = 0;
2 26 Feb 07 jari 215         setFilesCount(files.length);
2 26 Feb 07 jari 216         for (int i = 0; i < files.length; i++) {
2 26 Feb 07 jari 217             if (stop) {
2 26 Feb 07 jari 218                 return null;
2 26 Feb 07 jari 219             }
2 26 Feb 07 jari 220             setFilesProgress(i);
2 26 Feb 07 jari 221             setRemain(files.length-i);
2 26 Feb 07 jari 222             setFileName(files[i].getPath());
2 26 Feb 07 jari 223
2 26 Feb 07 jari 224             if (i == 0) {
2 26 Feb 07 jari 225                 countOfLines = getCountOfLines(files[i]);
2 26 Feb 07 jari 226                 setLinesCount(countOfLines);
2 26 Feb 07 jari 227                 numOfProbesets = countOfLines-3;
2 26 Feb 07 jari 228             }
2 26 Feb 07 jari 229
2 26 Feb 07 jari 230             if (meta == null) {
2 26 Feb 07 jari 231                 slideData[i] = loadAffySlideData(files[i]);
2 26 Feb 07 jari 232                 meta = slideData[i].getSlideMetaData();
2 26 Feb 07 jari 233             }
2 26 Feb 07 jari 234             else {
2 26 Feb 07 jari 235                 slideData[i] = loadAffyFloatSlideData(files[i], numOfProbesets, meta);
2 26 Feb 07 jari 236             }
2 26 Feb 07 jari 237         }
2 26 Feb 07 jari 238
2 26 Feb 07 jari 239         // set ref values
2 26 Feb 07 jari 240         for (int i = 0; i < files.length; i++){
2 26 Feb 07 jari 241             for (int j = 0; j < numOfProbesets; j++){
2 26 Feb 07 jari 242                 slideData[i].setIntensities(j, refSignals[j],  slideData[i].getCY5(j));
2 26 Feb 07 jari 243             }
2 26 Feb 07 jari 244         }
2 26 Feb 07 jari 245         return slideData;
2 26 Feb 07 jari 246     }
2 26 Feb 07 jari 247
2 26 Feb 07 jari 248     // loads abs/(mean of all probesets)
2 26 Feb 07 jari 249     private ISlideData[] loadAffyAbsMean(File [] files) throws IOException {
2 26 Feb 07 jari 250
2 26 Feb 07 jari 251        if (files.length < 1) {
2 26 Feb 07 jari 252            return null;
2 26 Feb 07 jari 253        }
2 26 Feb 07 jari 254
2 26 Feb 07 jari 255        // each element is an ongoing total of the signal for that probeset
2 26 Feb 07 jari 256        //float totalOfSignals = 0;
2 26 Feb 07 jari 257        //float[] mean_signal = new float[files.length];
2 26 Feb 07 jari 258
2 26 Feb 07 jari 259        //float big_mean = 0;
2 26 Feb 07 jari 260
2 26 Feb 07 jari 261        ISlideData[] slideData = new ISlideData[files.length];
2 26 Feb 07 jari 262        int countOfLines = 0;
2 26 Feb 07 jari 263        int numOfProbesets = 0;
2 26 Feb 07 jari 264        countOfLines = getCountOfLines(files[0]);
2 26 Feb 07 jari 265        setLinesCount(countOfLines);
2 26 Feb 07 jari 266        numOfProbesets = countOfLines-3; // two headers and one empty line
2 26 Feb 07 jari 267        float[] totalOfSignals=new float[numOfProbesets];
2 26 Feb 07 jari 268        
2 26 Feb 07 jari 269        setFilesCount(files.length);
2 26 Feb 07 jari 270        for (int i = 0; i < files.length; i++) {
2 26 Feb 07 jari 271            if (stop) {
2 26 Feb 07 jari 272                return null;
2 26 Feb 07 jari 273            }
2 26 Feb 07 jari 274
2 26 Feb 07 jari 275            setFilesProgress(i);
2 26 Feb 07 jari 276            setRemain(files.length-i);
2 26 Feb 07 jari 277            setFileName(files[i].getPath());
2 26 Feb 07 jari 278
2 26 Feb 07 jari 279            if (meta == null) {
2 26 Feb 07 jari 280                slideData[i] = loadAffySlideData(files[i]);
2 26 Feb 07 jari 281                meta = slideData[i].getSlideMetaData();
2 26 Feb 07 jari 282
2 26 Feb 07 jari 283                for (int j = 0; j < numOfProbesets; j++){
2 26 Feb 07 jari 284                    totalOfSignals[j] += slideData[i].getCY5(j);
2 26 Feb 07 jari 285                }
2 26 Feb 07 jari 286            }
2 26 Feb 07 jari 287            else {
2 26 Feb 07 jari 288                slideData[i] = loadAffyFloatSlideData(files[i], numOfProbesets, meta);//countOfLines, meta);
2 26 Feb 07 jari 289                for (int j = 0; j < numOfProbesets; j++){
2 26 Feb 07 jari 290                    totalOfSignals[j] += slideData[i].getCY5(j);
2 26 Feb 07 jari 291                }
2 26 Feb 07 jari 292            }          
2 26 Feb 07 jari 293        }
2 26 Feb 07 jari 294
2 26 Feb 07 jari 295        for (int i = 0; i <numOfProbesets ; i++){
2 26 Feb 07 jari 296      totalOfSignals[i]= totalOfSignals[i]/files.length;
2 26 Feb 07 jari 297        }
2 26 Feb 07 jari 298        
2 26 Feb 07 jari 299        // for each slidedataelement setCY5(totalofSignals[j]/numOfFiles)
2 26 Feb 07 jari 300        // this will screw up data displayed if files are loaded one-by-one
2 26 Feb 07 jari 301        // assumptions include probesets present (not MAS (P)resent, just that it exists)  in all datafiles among many others
2 26 Feb 07 jari 302        for (int i = 0; i < files.length; i++){
2 26 Feb 07 jari 303            for (int j = 0; j < numOfProbesets; j++){
2 26 Feb 07 jari 304                slideData[i].setIntensities(j, totalOfSignals[j],  slideData[i].getCY5(j));
2 26 Feb 07 jari 305      }
2 26 Feb 07 jari 306        }
2 26 Feb 07 jari 307        return slideData;
2 26 Feb 07 jari 308    }
2 26 Feb 07 jari 309
2 26 Feb 07 jari 310
2 26 Feb 07 jari 311     /**
2 26 Feb 07 jari 312      * Loads microarrays data.
2 26 Feb 07 jari 313      */
2 26 Feb 07 jari 314     private ISlideData[] loadAffyAbsolute(File [] files) throws IOException {
2 26 Feb 07 jari 315
2 26 Feb 07 jari 316         if (files.length < 1) {
2 26 Feb 07 jari 317             return null;
2 26 Feb 07 jari 318         }
2 26 Feb 07 jari 319
2 26 Feb 07 jari 320         ISlideData[] slideData = new ISlideData[files.length];
2 26 Feb 07 jari 321         int countOfLines = 0;
2 26 Feb 07 jari 322         int numOfProbesets = 0;
2 26 Feb 07 jari 323         setFilesCount(files.length);
2 26 Feb 07 jari 324         for (int i = 0; i < files.length; i++) {
2 26 Feb 07 jari 325             if (stop) {
2 26 Feb 07 jari 326                 return null;
2 26 Feb 07 jari 327             }
2 26 Feb 07 jari 328             setFilesProgress(i);
2 26 Feb 07 jari 329             setRemain(files.length-i);
2 26 Feb 07 jari 330             setFileName(files[i].getPath());
2 26 Feb 07 jari 331
2 26 Feb 07 jari 332             if (i == 0) {
2 26 Feb 07 jari 333                 countOfLines = getCountOfLines(files[i]);
2 26 Feb 07 jari 334                 setLinesCount(countOfLines);
2 26 Feb 07 jari 335                 numOfProbesets = countOfLines-3;//two headers and one empty line
2 26 Feb 07 jari 336             }
2 26 Feb 07 jari 337
2 26 Feb 07 jari 338
2 26 Feb 07 jari 339             if (meta == null) {
2 26 Feb 07 jari 340                 slideData[i] = loadAffySlideData(files[i]);
2 26 Feb 07 jari 341                 meta = slideData[i].getSlideMetaData();
2 26 Feb 07 jari 342             }
2 26 Feb 07 jari 343             else {
2 26 Feb 07 jari 344                 slideData[i] = loadAffyFloatSlideData(files[i], numOfProbesets, meta);
2 26 Feb 07 jari 345             }
2 26 Feb 07 jari 346         }
2 26 Feb 07 jari 347         return slideData;
2 26 Feb 07 jari 348     }
2 26 Feb 07 jari 349
2 26 Feb 07 jari 350
2 26 Feb 07 jari 351     private ISlideData loadAffySlideData(final File file) throws IOException {
2 26 Feb 07 jari 352
2 26 Feb 07 jari 353         AffySlideDataElement slideDataElement;
2 26 Feb 07 jari 354         String currentLine;
2 26 Feb 07 jari 355         
2 26 Feb 07 jari 356         String[] headfields=new String[4];
2 26 Feb 07 jari 357         headfields[0]="Probe Set Name";
2 26 Feb 07 jari 358         headfields[1]="Signal";
2 26 Feb 07 jari 359         headfields[2]="Detection";
2 26 Feb 07 jari 360         headfields[3]="Detection p-value";
2 26 Feb 07 jari 361         int[] tag=new int[4];
2 26 Feb 07 jari 362         
2 26 Feb 07 jari 363         if (TMEV.indicesAdjusted() == false) {
2 26 Feb 07 jari 364             TMEV.setUniqueIDIndex(0);
2 26 Feb 07 jari 365             TMEV.setNameIndex(3);
2 26 Feb 07 jari 366             TMEV.setIndicesAdjusted(true);
2 26 Feb 07 jari 367         }
2 26 Feb 07 jari 368
2 26 Feb 07 jari 369         int[] rows = new int[] {0, 1, 0};
2 26 Feb 07 jari 370         int[] columns = new int[] {0, 1, 0};
2 26 Feb 07 jari 371         float cy3, cy5;
2 26 Feb 07 jari 372         
2 26 Feb 07 jari 373         String[] moreFields  = new String[3];
2 26 Feb 07 jari 374         String detection="";
2 26 Feb 07 jari 375    
2 26 Feb 07 jari 376         float[] intensities = new float[2];
2 26 Feb 07 jari 377
2 26 Feb 07 jari 378         int maxRows = getCountOfLines(this.files[0]);
2 26 Feb 07 jari 379         int maxColumns = 1;
2 26 Feb 07 jari 380
2 26 Feb 07 jari 381         SlideData slideData = new SlideData(maxRows, maxColumns);
2 26 Feb 07 jari 382         BufferedReader reader = new BufferedReader(new FileReader(file));
2 26 Feb 07 jari 383         int curpos = 0;
2 26 Feb 07 jari 384         int row = 1;
2 26 Feb 07 jari 385         int column = 1;
2 26 Feb 07 jari 386
2 26 Feb 07 jari 387         int numTokens = 0;
2 26 Feb 07 jari 388
2 26 Feb 07 jari 389         StringSplitter ss = new StringSplitter((char)'\t');
2 26 Feb 07 jari 390         
2 26 Feb 07 jari 391         currentLine = reader.readLine();
2 26 Feb 07 jari 392         currentLine = reader.readLine();
2 26 Feb 07 jari 393         currentLine = reader.readLine();
2 26 Feb 07 jari 394         
2 26 Feb 07 jari 395         ss.init(currentLine);
2 26 Feb 07 jari 396         
2 26 Feb 07 jari 397         //countTokens returns the number of delimiters, not neccessarily num of fields
2 26 Feb 07 jari 398         numTokens = ss.countTokens();
2 26 Feb 07 jari 399         int m=0,k=0;
2 26 Feb 07 jari 400         for(k=0;k<numTokens;k++){  
2 26 Feb 07 jari 401           if(m<4){
2 26 Feb 07 jari 402             if(ss.nextToken().equals(headfields[m])){
2 26 Feb 07 jari 403               tag[m]=k;
2 26 Feb 07 jari 404               m++;       
2 26 Feb 07 jari 405             }
2 26 Feb 07 jari 406           }
2 26 Feb 07 jari 407         }
2 26 Feb 07 jari 408         while ((currentLine = reader.readLine()) != null) {
2 26 Feb 07 jari 409            
2 26 Feb 07 jari 410             setFileProgress(curpos++);
2 26 Feb 07 jari 411             ss = new StringSplitter((char)'\t');
2 26 Feb 07 jari 412             ss.init(currentLine);
2 26 Feb 07 jari 413             rows[0] = rows[2] = row++;
2 26 Feb 07 jari 414             columns[0] = columns[2] = column;
2 26 Feb 07 jari 415             m=0;
2 26 Feb 07 jari 416             String tmp="";
2 26 Feb 07 jari 417             for(int i=0;i<tag[3]+1;i++){
2 26 Feb 07 jari 418               tmp=ss.nextToken();
2 26 Feb 07 jari 419               if(i==tag[m]){
2 26 Feb 07 jari 420                 if(m==0)
2 26 Feb 07 jari 421                     moreFields[0]=tmp;
2 26 Feb 07 jari 422                 else if(m==1){
2 26 Feb 07 jari 423                     intensities[0] = 1.0f;
2 26 Feb 07 jari 424                     intensities[1] = (new Float(tmp)).floatValue();
2 26 Feb 07 jari 425                 }else if(m==2){
2 26 Feb 07 jari 426                     detection = tmp;
2 26 Feb 07 jari 427                     moreFields[1]=tmp;
2 26 Feb 07 jari 428                 }else if(m==3){
2 26 Feb 07 jari 429                     moreFields[2]=tmp;
2 26 Feb 07 jari 430                 }
2 26 Feb 07 jari 431                 m++;
2 26 Feb 07 jari 432                 }
2 26 Feb 07 jari 433               
2 26 Feb 07 jari 434             }
2 26 Feb 07 jari 435           
2 26 Feb 07 jari 436             slideDataElement = new AffySlideDataElement(String.valueOf(curpos), rows, columns, intensities, moreFields);
2 26 Feb 07 jari 437
2 26 Feb 07 jari 438             slideDataElement.setDetection(detection);
2 26 Feb 07 jari 439             slideDataElement.setPvalue(new Float(moreFields[2]).floatValue());
2 26 Feb 07 jari 440             slideData.addSlideDataElement(slideDataElement);
2 26 Feb 07 jari 441
2 26 Feb 07 jari 442         }
2 26 Feb 07 jari 443         reader.close();
2 26 Feb 07 jari 444         slideData.setSlideDataName(file.getName());
2 26 Feb 07 jari 445         slideData.setSlideFileName(file.getPath());
2 26 Feb 07 jari 446         return slideData;
2 26 Feb 07 jari 447     }
2 26 Feb 07 jari 448
2 26 Feb 07 jari 449
2 26 Feb 07 jari 450
2 26 Feb 07 jari 451     private ISlideData loadAffyFloatSlideData(final File file, final int countOfLines, ISlideMetaData slideMetaData) throws IOException {
2 26 Feb 07 jari 452
2 26 Feb 07 jari 453         //final int coordinatePairCount = TMEV.getCoordinatePairCount()*2;
2 26 Feb 07 jari 454         final int intensityCount = 2; //TMEV.getIntensityCount();
2 26 Feb 07 jari 455         int numTokens = 0;
2 26 Feb 07 jari 456         String[] headfields=new String[4];
2 26 Feb 07 jari 457         headfields[0]="Probe Set Name";
2 26 Feb 07 jari 458         headfields[1]="Signal";
2 26 Feb 07 jari 459         headfields[2]="Detection";
2 26 Feb 07 jari 460         headfields[3]="Detection p-value";
2 26 Feb 07 jari 461         float pvalue=0.0f;
2 26 Feb 07 jari 462         int[] tag=new int[4];
2 26 Feb 07 jari 463         
2 26 Feb 07 jari 464         if (TMEV.indicesAdjusted() == false) {
2 26 Feb 07 jari 465             TMEV.setUniqueIDIndex(0);
2 26 Feb 07 jari 466             TMEV.setNameIndex(3);
2 26 Feb 07 jari 467             TMEV.setIndicesAdjusted(true);
2 26 Feb 07 jari 468         }
2 26 Feb 07 jari 469         FloatSlideData slideData;               
2 26 Feb 07 jari 470
2 26 Feb 07 jari 471         slideData = new FloatSlideData(slideMetaData);
2 26 Feb 07 jari 472         BufferedReader reader = new BufferedReader(new FileReader(file), BUFFER_SIZE);
2 26 Feb 07 jari 473
2 26 Feb 07 jari 474         String currentLine;
2 26 Feb 07 jari 475         StringSplitter ss = new StringSplitter((char)0x09);
2 26 Feb 07 jari 476         float[] intensities = new float[2];
2 26 Feb 07 jari 477         String detection="";
2 26 Feb 07 jari 478         int index  = 0;
2 26 Feb 07 jari 479         
2 26 Feb 07 jari 480         currentLine = reader.readLine();
2 26 Feb 07 jari 481         currentLine = reader.readLine();
2 26 Feb 07 jari 482         currentLine = reader.readLine();
2 26 Feb 07 jari 483         
2 26 Feb 07 jari 484         ss.init(currentLine);
2 26 Feb 07 jari 485         
2 26 Feb 07 jari 486         //countTokens returns the number of delimiters, not neccessarily num of fields
2 26 Feb 07 jari 487         numTokens = ss.countTokens();
2 26 Feb 07 jari 488         int m=0,k=0;
2 26 Feb 07 jari 489         for(k=0;k<numTokens;k++){
2 26 Feb 07 jari 490           if(m<4){
2 26 Feb 07 jari 491             if(ss.nextToken().equals(headfields[m])){
2 26 Feb 07 jari 492               tag[m]=k;
2 26 Feb 07 jari 493               m++;
2 26 Feb 07 jari 494             }
2 26 Feb 07 jari 495           }
2 26 Feb 07 jari 496         }
2 26 Feb 07 jari 497         
2 26 Feb 07 jari 498         while ((currentLine = reader.readLine()) != null) {
2 26 Feb 07 jari 499             
2 26 Feb 07 jari 500             setFileProgress(index);
2 26 Feb 07 jari 501             ss.init(currentLine);
2 26 Feb 07 jari 502             m=0;
2 26 Feb 07 jari 503             
2 26 Feb 07 jari 504             String tmp="";
2 26 Feb 07 jari 505             for(int j=0;j<tag[3]+1;j++){
2 26 Feb 07 jari 506               tmp=ss.nextToken();
2 26 Feb 07 jari 507               if(j==tag[m]){
2 26 Feb 07 jari 508                 if(m==1){
2 26 Feb 07 jari 509                   intensities[0] = 1.0f;
2 26 Feb 07 jari 510                         intensities[1] = (new Float(tmp)).floatValue();
2 26 Feb 07 jari 511                 }else if(m==2){
2 26 Feb 07 jari 512                   detection = tmp;
2 26 Feb 07 jari 513                 }else if(m==3){
2 26 Feb 07 jari 514                   pvalue=(new Float(tmp)).floatValue();
2 26 Feb 07 jari 515                 }
2 26 Feb 07 jari 516                 m++;
2 26 Feb 07 jari 517               }
2 26 Feb 07 jari 518             }
2 26 Feb 07 jari 519             
2 26 Feb 07 jari 520             slideData.setIntensities(index, intensities[0], intensities[1]);
2 26 Feb 07 jari 521             slideData.setDetection(index, detection);
2 26 Feb 07 jari 522             slideData.setPvalue(index,pvalue);
2 26 Feb 07 jari 523             index++;
2 26 Feb 07 jari 524         }
2 26 Feb 07 jari 525         reader.close();
2 26 Feb 07 jari 526         slideData.setSlideDataName(file.getName());
2 26 Feb 07 jari 527         slideData.setSlideFileName(file.getPath());
2 26 Feb 07 jari 528         return slideData;
2 26 Feb 07 jari 529     }
2 26 Feb 07 jari 530
2 26 Feb 07 jari 531     public float get_Median( ArrayList float_array ) {
2 26 Feb 07 jari 532
2 26 Feb 07 jari 533         Collections.sort(float_array);
2 26 Feb 07 jari 534
2 26 Feb 07 jari 535         Float median;
2 26 Feb 07 jari 536
2 26 Feb 07 jari 537         if (float_array.size() == 1){
2 26 Feb 07 jari 538             return ( (Float) float_array.get(0)).floatValue();
2 26 Feb 07 jari 539         }
2 26 Feb 07 jari 540
2 26 Feb 07 jari 541         int center = float_array.size() / 2;
2 26 Feb 07 jari 542
2 26 Feb 07 jari 543         if (float_array.size() % 2 == 0) {
2 26 Feb 07 jari 544             Float a, b;
2 26 Feb 07 jari 545             a = (Float) float_array.get(center);
2 26 Feb 07 jari 546             b = (Float) float_array.get(center - 1);
2 26 Feb 07 jari 547             median = new Float(( a.floatValue() + b.floatValue() )/2);
2 26 Feb 07 jari 548         }
2 26 Feb 07 jari 549         else {
2 26 Feb 07 jari 550             median = (Float)float_array.get( center );
2 26 Feb 07 jari 551         }
2 26 Feb 07 jari 552         return median.floatValue();
2 26 Feb 07 jari 553     }
2 26 Feb 07 jari 554
2 26 Feb 07 jari 555
2 26 Feb 07 jari 556
2 26 Feb 07 jari 557     public FileFilter getFileFilter() {
2 26 Feb 07 jari 558
2 26 Feb 07 jari 559         FileFilter affymetrixFileFilter = new FileFilter() {
2 26 Feb 07 jari 560
2 26 Feb 07 jari 561             public boolean accept(File f) {
2 26 Feb 07 jari 562                 if (f.isDirectory()) return true;
2 26 Feb 07 jari 563                 if (f.getName().endsWith(".txt") || f.getName().endsWith(".TXT") ) return true;
2 26 Feb 07 jari 564                 else return false;
2 26 Feb 07 jari 565             }
2 26 Feb 07 jari 566
2 26 Feb 07 jari 567             public String getDescription() {
2 26 Feb 07 jari 568                 return "Affymetrix Data Files (*.txt)";
2 26 Feb 07 jari 569             }
2 26 Feb 07 jari 570         };
2 26 Feb 07 jari 571
2 26 Feb 07 jari 572         return affymetrixFileFilter;
2 26 Feb 07 jari 573     }
2 26 Feb 07 jari 574
2 26 Feb 07 jari 575     public boolean checkLoadEnable() {
2 26 Feb 07 jari 576         setLoadEnabled(loadEnabled);
2 26 Feb 07 jari 577         return this.loadEnabled;
2 26 Feb 07 jari 578     }
2 26 Feb 07 jari 579
2 26 Feb 07 jari 580     public void markLoadEnabled(boolean state) {
2 26 Feb 07 jari 581         loadEnabled = state;
2 26 Feb 07 jari 582         setLoadEnabled(loadEnabled);
2 26 Feb 07 jari 583         // checkLoadEnable();
2 26 Feb 07 jari 584     }
2 26 Feb 07 jari 585
2 26 Feb 07 jari 586     public JPanel getFileLoaderPanel() {
2 26 Feb 07 jari 587         return aflp;
2 26 Feb 07 jari 588     }
2 26 Feb 07 jari 589
2 26 Feb 07 jari 590     public void processFileList(String filePath, Vector fileNames) {
2 26 Feb 07 jari 591
2 26 Feb 07 jari 592         aflp.setPath(filePath);
2 26 Feb 07 jari 593
2 26 Feb 07 jari 594         if (fileNames == null) return; // Don't process files if there aren't any
2 26 Feb 07 jari 595
2 26 Feb 07 jari 596         FileFilter affymetrixFileFilter = getFileFilter();
2 26 Feb 07 jari 597
2 26 Feb 07 jari 598         aflp.getAffymetrixAvailableListModel().clear();
2 26 Feb 07 jari 599         aflp.getRefAvailableListModel().clear();
2 26 Feb 07 jari 600
2 26 Feb 07 jari 601         for (int i = 0; i < fileNames.size(); i++) {
2 26 Feb 07 jari 602
2 26 Feb 07 jari 603             File targetFile = new File((String) fileNames.elementAt(i));
2 26 Feb 07 jari 604
2 26 Feb 07 jari 605             if (affymetrixFileFilter.accept(targetFile)) {
2 26 Feb 07 jari 606                 aflp.getAffymetrixAvailableListModel().addElement(new File((String) fileNames.elementAt(i)));
2 26 Feb 07 jari 607                 aflp.getRefAvailableListModel().addElement(new File((String) fileNames.elementAt(i)));
2 26 Feb 07 jari 608             }
2 26 Feb 07 jari 609         }
2 26 Feb 07 jari 610     }
2 26 Feb 07 jari 611
2 26 Feb 07 jari 612     public String getFilePath() {
2 26 Feb 07 jari 613         if(this.aflp.getAffymetrixSelectedListModel().getSize() <1)
2 26 Feb 07 jari 614             return null;
2 26 Feb 07 jari 615         return ((File)(aflp.getAffymetrixSelectedListModel().getElementAt(0))).getAbsolutePath();
2 26 Feb 07 jari 616     }
2 26 Feb 07 jari 617     
2 26 Feb 07 jari 618     public void openDataPath() {
2 26 Feb 07 jari 619         this.aflp.openDataPath();
2 26 Feb 07 jari 620     }
2 26 Feb 07 jari 621     
2 26 Feb 07 jari 622 /*
2 26 Feb 07 jari 623 //
2 26 Feb 07 jari 624 //  DFCI_CoreFileLoader - Internal Classes
2 26 Feb 07 jari 625 //
2 26 Feb 07 jari 626  */
2 26 Feb 07 jari 627
2 26 Feb 07 jari 628     private class DFCI_CoreFileLoaderPanel extends JPanel {
2 26 Feb 07 jari 629
2 26 Feb 07 jari 630         FileTreePane fileTreePane;
2 26 Feb 07 jari 631         JTextField pathTextField;
2 26 Feb 07 jari 632
2 26 Feb 07 jari 633         JPanel affymetrixSelectionPanel;
2 26 Feb 07 jari 634         JPanel affymetrixListPanel;
2 26 Feb 07 jari 635         JLabel affymetrixAvailableLabel;
2 26 Feb 07 jari 636         JLabel affymetrixSelectedLabel;
2 26 Feb 07 jari 637         JList affymetrixAvailableList;
2 26 Feb 07 jari 638         JList affymetrixSelectedList;
2 26 Feb 07 jari 639         JScrollPane affymetrixAvailableScrollPane;
2 26 Feb 07 jari 640         JScrollPane affymetrixSelectedScrollPane;
2 26 Feb 07 jari 641         JButton affymetrixAddButton;
2 26 Feb 07 jari 642         JButton affymetrixAddAllButton;
2 26 Feb 07 jari 643         JButton affymetrixRemoveButton;
2 26 Feb 07 jari 644         JButton affymetrixRemoveAllButton;
2 26 Feb 07 jari 645         JPanel affymetrixButtonPanel;
2 26 Feb 07 jari 646
2 26 Feb 07 jari 647         JPanel refSelectionPanel;
2 26 Feb 07 jari 648         ButtonGroup optionsButtonGroup;
2 26 Feb 07 jari 649         JRadioButton absoluteRadioButton;
2 26 Feb 07 jari 650
2 26 Feb 07 jari 651         /*
2 26 Feb 07 jari 652         JRadioButton meanRadioButton;
2 26 Feb 07 jari 653         JRadioButton medianRadioButton;
2 26 Feb 07 jari 654         */
2 26 Feb 07 jari 655
2 26 Feb 07 jari 656         JRadioButton absMeanRadioButton;
2 26 Feb 07 jari 657
2 26 Feb 07 jari 658         JRadioButton referenceRadioButton;
2 26 Feb 07 jari 659         JPanel refListPanel;
2 26 Feb 07 jari 660         JLabel refAvailableLabel;
2 26 Feb 07 jari 661         JLabel refSelectedLabel;
2 26 Feb 07 jari 662         JList refAvailableList;
2 26 Feb 07 jari 663         JList refSelectedList;
2 26 Feb 07 jari 664         JScrollPane refAvailableScrollPane;
2 26 Feb 07 jari 665         JScrollPane refSelectedScrollPane;
2 26 Feb 07 jari 666         JButton refAddButton;
2 26 Feb 07 jari 667         JButton refAddAllButton;
2 26 Feb 07 jari 668         JButton refRemoveButton;
2 26 Feb 07 jari 669         JButton refRemoveAllButton;
2 26 Feb 07 jari 670         JPanel refButtonPanel;
2 26 Feb 07 jari 671         JTextField refFieldsTextField;
2 26 Feb 07 jari 672
2 26 Feb 07 jari 673         JPanel selectionPanel;
2 26 Feb 07 jari 674         JSplitPane splitPane;
2 26 Feb 07 jari 675         JPanel fileLoaderPanel;
2 26 Feb 07 jari 676
2 26 Feb 07 jari 677         public DFCI_CoreFileLoaderPanel() {
2 26 Feb 07 jari 678
2 26 Feb 07 jari 679             setLayout(new GridBagLayout());
2 26 Feb 07 jari 680
2 26 Feb 07 jari 681             fileTreePane = new FileTreePane(SuperExpressionFileLoader.DATA_PATH);
2 26 Feb 07 jari 682             fileTreePane.addFileTreePaneListener(new FileTreePaneEventHandler());
2 26 Feb 07 jari 683             fileTreePane.setPreferredSize(new java.awt.Dimension(200, 50));
2 26 Feb 07 jari 684
2 26 Feb 07 jari 685             pathTextField = new JTextField();
2 26 Feb 07 jari 686             pathTextField.setEditable(false);
2 26 Feb 07 jari 687             pathTextField.setBorder(new TitledBorder(new EtchedBorder(), "Selected Path"));
2 26 Feb 07 jari 688             pathTextField.setForeground(Color.black);
2 26 Feb 07 jari 689             pathTextField.setFont(new Font("monospaced", Font.BOLD, 12));
2 26 Feb 07 jari 690
2 26 Feb 07 jari 691             affymetrixSelectionPanel = new JPanel();
2 26 Feb 07 jari 692             affymetrixSelectionPanel.setLayout(new GridBagLayout());
2 26 Feb 07 jari 693             affymetrixSelectionPanel.setBorder(new TitledBorder(new EtchedBorder(), getFileFilter().getDescription()));
2 26 Feb 07 jari 694
2 26 Feb 07 jari 695             affymetrixAvailableLabel = new JLabel("Available");
2 26 Feb 07 jari 696             affymetrixSelectedLabel = new JLabel("Selected");
2 26 Feb 07 jari 697             affymetrixAvailableList = new JList(new DefaultListModel());
2 26 Feb 07 jari 698             affymetrixAvailableList.setCellRenderer(new ListRenderer());
2 26 Feb 07 jari 699             affymetrixSelectedList = new JList(new DefaultListModel());
2 26 Feb 07 jari 700             affymetrixSelectedList.setCellRenderer(new ListRenderer());
2 26 Feb 07 jari 701             affymetrixAvailableScrollPane = new JScrollPane(affymetrixAvailableList);
2 26 Feb 07 jari 702             affymetrixSelectedScrollPane = new JScrollPane(affymetrixSelectedList);
2 26 Feb 07 jari 703             affymetrixAddButton = new JButton("Add");
2 26 Feb 07 jari 704             affymetrixAddButton.addActionListener(new EventHandler());
2 26 Feb 07 jari 705             affymetrixAddAllButton = new JButton("Add All");
2 26 Feb 07 jari 706             affymetrixAddAllButton.addActionListener(new EventHandler());
2 26 Feb 07 jari 707             affymetrixRemoveButton = new JButton("Remove");
2 26 Feb 07 jari 708             affymetrixRemoveButton.addActionListener(new EventHandler());
2 26 Feb 07 jari 709             affymetrixRemoveAllButton = new JButton("Remove All");
2 26 Feb 07 jari 710             affymetrixRemoveAllButton.addActionListener(new EventHandler());
2 26 Feb 07 jari 711
2 26 Feb 07 jari 712             Dimension largestAffymetrixButtonSize = affymetrixRemoveAllButton.getPreferredSize();
2 26 Feb 07 jari 713             affymetrixAddButton.setPreferredSize(largestAffymetrixButtonSize);
2 26 Feb 07 jari 714             affymetrixAddAllButton.setPreferredSize(largestAffymetrixButtonSize);
2 26 Feb 07 jari 715             affymetrixRemoveButton.setPreferredSize(largestAffymetrixButtonSize);
2 26 Feb 07 jari 716             affymetrixRemoveAllButton.setPreferredSize(largestAffymetrixButtonSize);
2 26 Feb 07 jari 717
2 26 Feb 07 jari 718             affymetrixButtonPanel = new JPanel();
2 26 Feb 07 jari 719             affymetrixButtonPanel.setLayout(new GridBagLayout());
2 26 Feb 07 jari 720
2 26 Feb 07 jari 721             gba.add(affymetrixButtonPanel, affymetrixAddButton, 0, 0, 1, 1, 0, 0, GBA.N, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 722             gba.add(affymetrixButtonPanel, affymetrixAddAllButton, 0, 1, 1, 1, 0, 0, GBA.N, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 723             gba.add(affymetrixButtonPanel, affymetrixRemoveButton, 0, 2, 1, 1, 0, 0, GBA.N, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 724             gba.add(affymetrixButtonPanel, affymetrixRemoveAllButton, 0, 3, 1, 1, 0, 0, GBA.N, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 725
2 26 Feb 07 jari 726             affymetrixListPanel = new JPanel();
2 26 Feb 07 jari 727             affymetrixListPanel.setLayout(new GridBagLayout());
2 26 Feb 07 jari 728
2 26 Feb 07 jari 729             gba.add(affymetrixListPanel, affymetrixAvailableLabel, 0, 0, 1, 1, 0, 0, GBA.N, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 730             gba.add(affymetrixListPanel, affymetrixSelectedLabel, 2, 0, 1, 1, 0, 0, GBA.N, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 731             gba.add(affymetrixListPanel, affymetrixAvailableScrollPane, 0, 1, 1, 4, 1, 1, GBA.B, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 732             gba.add(affymetrixListPanel, affymetrixButtonPanel, 1, 1, 1, 4, 0, 1, GBA.V, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 733             gba.add(affymetrixListPanel, affymetrixSelectedScrollPane, 2, 1, 1, 4, 1, 1, GBA.B, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 734
2 26 Feb 07 jari 735             gba.add(affymetrixSelectionPanel, affymetrixListPanel, 0, 0, 1, 1, 1, 1, GBA.B, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 736
2 26 Feb 07 jari 737             refSelectionPanel = new JPanel();
2 26 Feb 07 jari 738             refSelectionPanel.setLayout(new GridBagLayout());
2 26 Feb 07 jari 739             refSelectionPanel.setBorder(new TitledBorder(new EtchedBorder(), "Affymetrix Data Options"));
2 26 Feb 07 jari 740
2 26 Feb 07 jari 741             optionsButtonGroup = new ButtonGroup();
2 26 Feb 07 jari 742
2 26 Feb 07 jari 743             absoluteRadioButton = new JRadioButton("Absolute", true);
2 26 Feb 07 jari 744             absoluteRadioButton.addActionListener(new EventHandler());
2 26 Feb 07 jari 745             optionsButtonGroup.add(absoluteRadioButton);
2 26 Feb 07 jari 746
2 26 Feb 07 jari 747             /* pcahan -- move functions to adjust data menu
2 26 Feb 07 jari 748             meanRadioButton = new JRadioButton("Mean Intensity");
2 26 Feb 07 jari 749             meanRadioButton.addActionListener(new EventHandler());
2 26 Feb 07 jari 750             optionsButtonGroup.add(meanRadioButton);
2 26 Feb 07 jari 751             medianRadioButton = new JRadioButton("Median Intensity");
2 26 Feb 07 jari 752             medianRadioButton.addActionListener(new EventHandler());
2 26 Feb 07 jari 753             optionsButtonGroup.add(medianRadioButton);
2 26 Feb 07 jari 754             */
2 26 Feb 07 jari 755
2 26 Feb 07 jari 756             absMeanRadioButton = new JRadioButton("Absolute/Mean Intensity");
2 26 Feb 07 jari 757             absMeanRadioButton.addActionListener(new EventHandler());
2 26 Feb 07 jari 758             optionsButtonGroup.add(absMeanRadioButton);
2 26 Feb 07 jari 759
2 26 Feb 07 jari 760             referenceRadioButton = new JRadioButton("Reference (Select reference files below)");
2 26 Feb 07 jari 761             referenceRadioButton.addActionListener(new EventHandler());
2 26 Feb 07 jari 762             optionsButtonGroup.add(referenceRadioButton);
2 26 Feb 07 jari 763
2 26 Feb 07 jari 764             refAvailableLabel = new JLabel("Available");
2 26 Feb 07 jari 765             refSelectedLabel = new JLabel("Selected");
2 26 Feb 07 jari 766             refAvailableList = new JList(new DefaultListModel());
2 26 Feb 07 jari 767             refAvailableList.setCellRenderer(new ListRenderer());
2 26 Feb 07 jari 768             refSelectedList = new JList(new DefaultListModel());
2 26 Feb 07 jari 769             refSelectedList.setCellRenderer(new ListRenderer());
2 26 Feb 07 jari 770             refAvailableScrollPane = new JScrollPane(refAvailableList);
2 26 Feb 07 jari 771             refSelectedScrollPane = new JScrollPane(refSelectedList);
2 26 Feb 07 jari 772             refAddButton = new JButton("Add");
2 26 Feb 07 jari 773             refAddButton.addActionListener(new EventHandler());
2 26 Feb 07 jari 774             refAddAllButton = new JButton("Add All");
2 26 Feb 07 jari 775             refAddAllButton.addActionListener(new EventHandler());
2 26 Feb 07 jari 776             refRemoveButton = new JButton("Remove");
2 26 Feb 07 jari 777             refRemoveButton.addActionListener(new EventHandler());
2 26 Feb 07 jari 778             refRemoveAllButton = new JButton("Remove All");
2 26 Feb 07 jari 779             refRemoveAllButton.addActionListener(new EventHandler());
2 26 Feb 07 jari 780
2 26 Feb 07 jari 781             Dimension largestRefButtonSize = refRemoveAllButton.getPreferredSize();
2 26 Feb 07 jari 782             refAddButton.setPreferredSize(largestRefButtonSize);
2 26 Feb 07 jari 783             refAddAllButton.setPreferredSize(largestRefButtonSize);
2 26 Feb 07 jari 784             refRemoveButton.setPreferredSize(largestRefButtonSize);
2 26 Feb 07 jari 785             refRemoveAllButton.setPreferredSize(largestRefButtonSize);
2 26 Feb 07 jari 786
2 26 Feb 07 jari 787             refButtonPanel = new JPanel();
2 26 Feb 07 jari 788             refButtonPanel.setLayout(new GridBagLayout());
2 26 Feb 07 jari 789
2 26 Feb 07 jari 790             this.affymetrixAddAllButton.setFocusPainted(false);
2 26 Feb 07 jari 791             this.affymetrixAddButton.setFocusPainted(false);
2 26 Feb 07 jari 792             this.affymetrixRemoveAllButton.setFocusPainted(false);
2 26 Feb 07 jari 793             this.affymetrixRemoveButton.setFocusPainted(false);
2 26 Feb 07 jari 794
2 26 Feb 07 jari 795             this.refAddAllButton.setFocusPainted(false);
2 26 Feb 07 jari 796             this.refAddButton.setFocusPainted(false);
2 26 Feb 07 jari 797             this.refRemoveAllButton.setFocusPainted(false);
2 26 Feb 07 jari 798             this.refRemoveButton.setFocusPainted(false);
2 26 Feb 07 jari 799
2 26 Feb 07 jari 800             this.referenceRadioButton.setFocusPainted(false);
2 26 Feb 07 jari 801             this.absoluteRadioButton.setFocusPainted(false);
2 26 Feb 07 jari 802             this.absMeanRadioButton.setFocusPainted(false);
2 26 Feb 07 jari 803
2 26 Feb 07 jari 804             /* pc
2 26 Feb 07 jari 805             this.meanRadioButton.setFocusPainted(false);
2 26 Feb 07 jari 806             this.medianRadioButton.setFocusPainted(false);
2 26 Feb 07 jari 807            */
2 26 Feb 07 jari 808
2 26 Feb 07 jari 809             gba.add(refButtonPanel, refAddButton, 0, 0, 1, 1, 0, 0, GBA.N, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 810             gba.add(refButtonPanel, refAddAllButton, 0, 1, 1, 1, 0, 0, GBA.N, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 811             gba.add(refButtonPanel, refRemoveButton, 0, 2, 1, 1, 0, 0, GBA.N, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 812             gba.add(refButtonPanel, refRemoveAllButton, 0, 3, 1, 1, 0, 0, GBA.N, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 813
2 26 Feb 07 jari 814             refListPanel = new JPanel();
2 26 Feb 07 jari 815             refListPanel.setLayout(new GridBagLayout());
2 26 Feb 07 jari 816             refListPanel.setBorder(new TitledBorder(new EtchedBorder(), "Select Reference Files"));
2 26 Feb 07 jari 817
2 26 Feb 07 jari 818             gba.add(refListPanel, refAvailableLabel, 0, 0, 1, 1, 0, 0, GBA.N, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 819             gba.add(refListPanel, refSelectedLabel, 2, 0, 1, 1, 0, 0, GBA.N, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 820             gba.add(refListPanel, refAvailableScrollPane, 0, 1, 1, 4, 1, 1, GBA.B, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 821             gba.add(refListPanel, refButtonPanel, 1, 1, 1, 4, 0, 1, GBA.V, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 822             gba.add(refListPanel, refSelectedScrollPane, 2, 1, 1, 4, 1, 1, GBA.B, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 823
2 26 Feb 07 jari 824             gba.add(refSelectionPanel, absoluteRadioButton, 0, 0, 1, 1, 1, 0, GBA.H, GBA.C, new Insets(5, 50, 0, 5), 0, 0);
2 26 Feb 07 jari 825             gba.add(refSelectionPanel, referenceRadioButton, 0, 1, 1, 1, 1, 0, GBA.H, GBA.C, new Insets(5, 50, 0, 5), 0, 0);
2 26 Feb 07 jari 826             gba.add(refSelectionPanel, absMeanRadioButton, 1, 0, 1, 1, 1, 0, GBA.H, GBA.C, new Insets(5, 5, 0, 5), 0, 0);
2 26 Feb 07 jari 827
2 26 Feb 07 jari 828             /* pc
2 26 Feb 07 jari 829             gba.add(refSelectionPanel, meanRadioButton, 1, 0, 1, 1, 1, 0, GBA.H, GBA.C, new Insets(5, 5, 0, 5), 0, 0);
2 26 Feb 07 jari 830             gba.add(refSelectionPanel, medianRadioButton, 1, 1, 1, 1, 1, 0, GBA.H, GBA.C, new Insets(5, 5, 0, 5), 0, 0);
2 26 Feb 07 jari 831             */
2 26 Feb 07 jari 832
2 26 Feb 07 jari 833           gba.add(refSelectionPanel, refListPanel, 0, 4, 2, 2, 1, 1, GBA.B, GBA.C, new Insets(5, 5, 0, 5), 0, 0);
2 26 Feb 07 jari 834
2 26 Feb 07 jari 835             selectionPanel = new JPanel();
2 26 Feb 07 jari 836             selectionPanel.setLayout(new GridBagLayout());
2 26 Feb 07 jari 837             gba.add(selectionPanel, pathTextField, 0, 0, 1, 1, 1, 0, GBA.H, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 838             gba.add(selectionPanel, affymetrixSelectionPanel, 0, 1, 1, 2, 1, 1, GBA.B, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 839             gba.add(selectionPanel, refSelectionPanel, 0, 3, 1, 2, 1, 1, GBA.B, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 840
2 26 Feb 07 jari 841             splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, fileTreePane, selectionPanel);
2 26 Feb 07 jari 842
2 26 Feb 07 jari 843             fileLoaderPanel = new JPanel();
2 26 Feb 07 jari 844             fileLoaderPanel.setLayout(new GridBagLayout());
2 26 Feb 07 jari 845             gba.add(fileLoaderPanel, splitPane, 0, 0, 1, 1, 1, 1, GBA.B, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 846
2 26 Feb 07 jari 847             gba.add(this, fileLoaderPanel, 0, 0, 1, 1, 1, 1, GBA.B, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 848         }
2 26 Feb 07 jari 849
2 26 Feb 07 jari 850         public void setPath(String path) {
2 26 Feb 07 jari 851             pathTextField.setText(path);
2 26 Feb 07 jari 852         }
2 26 Feb 07 jari 853         
2 26 Feb 07 jari 854         public void openDataPath(){
2 26 Feb 07 jari 855            this.fileTreePane.openDataPath();
2 26 Feb 07 jari 856         }
2 26 Feb 07 jari 857         
2 26 Feb 07 jari 858         public void validateLists() {
2 26 Feb 07 jari 859
2 26 Feb 07 jari 860             // Currently, a minimum of one Affymetrix file must be selected to enable loading.
2 26 Feb 07 jari 861             // If the reference option is selected, a minimum of one Affymetrix file must also
2 26 Feb 07 jari 862             // be chosen as a reference.
2 26 Feb 07 jari 863
2 26 Feb 07 jari 864             if (((DefaultListModel) affymetrixSelectedList.getModel()).size() > 0) {
2 26 Feb 07 jari 865                 if (referenceRadioButton.isSelected()) {
2 26 Feb 07 jari 866                     if (((DefaultListModel) refSelectedList.getModel()).size() > 0) {
2 26 Feb 07 jari 867                         markLoadEnabled(true);
2 26 Feb 07 jari 868                     } else {
2 26 Feb 07 jari 869                         markLoadEnabled(false);
2 26 Feb 07 jari 870                     }
2 26 Feb 07 jari 871                 } else {
2 26 Feb 07 jari 872                     markLoadEnabled(true);
2 26 Feb 07 jari 873                 }
2 26 Feb 07 jari 874             } else {
2 26 Feb 07 jari 875                 markLoadEnabled(false);
2 26 Feb 07 jari 876             }
2 26 Feb 07 jari 877         }
2 26 Feb 07 jari 878
2 26 Feb 07 jari 879         public void onAffymetrixAdd() {
2 26 Feb 07 jari 880             int[] chosenIndices = affymetrixAvailableList.getSelectedIndices();
2 26 Feb 07 jari 881             Object[] chosenObjects = new Object[chosenIndices.length];
2 26 Feb 07 jari 882
2 26 Feb 07 jari 883             for (int i = chosenIndices.length - 1; i >= 0; i--) {
2 26 Feb 07 jari 884                 // For remove-then-add functionality
2 26 Feb 07 jari 885                 //Object addItem = ((DefaultListModel) affymetrixAvailableList.getModel()).remove(chosenIndices[i]);
2 26 Feb 07 jari 886                 // For copy-then-add functionality
2 26 Feb 07 jari 887                 Object addItem = ((DefaultListModel) affymetrixAvailableList.getModel()).getElementAt(chosenIndices[i]);
2 26 Feb 07 jari 888                 chosenObjects[i] = addItem;
2 26 Feb 07 jari 889             }
2 26 Feb 07 jari 890
2 26 Feb 07 jari 891             for (int i = 0; i < chosenIndices.length; i++) {
2 26 Feb 07 jari 892                 ((DefaultListModel) affymetrixSelectedList.getModel()).addElement(chosenObjects[i]);
2 26 Feb 07 jari 893             }
2 26 Feb 07 jari 894
2 26 Feb 07 jari 895             validateLists();
2 26 Feb 07 jari 896         }
2 26 Feb 07 jari 897
2 26 Feb 07 jari 898         public void onAffymetrixAddAll() {
2 26 Feb 07 jari 899             int elementCount = ((DefaultListModel) affymetrixAvailableList.getModel()).size();
2 26 Feb 07 jari 900             for (int i = 0; i < elementCount; i++) {
2 26 Feb 07 jari 901                 Object addItem = ((DefaultListModel) affymetrixAvailableList.getModel()).getElementAt(i);
2 26 Feb 07 jari 902                 ((DefaultListModel) affymetrixSelectedList.getModel()).addElement(addItem);
2 26 Feb 07 jari 903             }
2 26 Feb 07 jari 904
2 26 Feb 07 jari 905             validateLists();
2 26 Feb 07 jari 906         }
2 26 Feb 07 jari 907
2 26 Feb 07 jari 908         public void onAffymetrixRemove() {
2 26 Feb 07 jari 909             int[] chosenIndices = affymetrixSelectedList.getSelectedIndices();
2 26 Feb 07 jari 910
2 26 Feb 07 jari 911             // Designed with copy-then-add functionality in mind
2 26 Feb 07 jari 912             for (int i = chosenIndices.length - 1; i >= 0; i--) {
2 26 Feb 07 jari 913                 ((DefaultListModel) affymetrixSelectedList.getModel()).remove(chosenIndices[i]);
2 26 Feb 07 jari 914             }
2 26 Feb 07 jari 915
2 26 Feb 07 jari 916             validateLists();
2 26 Feb 07 jari 917         }
2 26 Feb 07 jari 918
2 26 Feb 07 jari 919         public void onAffymetrixRemoveAll() {
2 26 Feb 07 jari 920             // Designed with copy-then-add functionality in mind
2 26 Feb 07 jari 921             ((DefaultListModel) affymetrixSelectedList.getModel()).removeAllElements();
2 26 Feb 07 jari 922
2 26 Feb 07 jari 923             validateLists();
2 26 Feb 07 jari 924         }
2 26 Feb 07 jari 925
2 26 Feb 07 jari 926         public void onRefAdd() {
2 26 Feb 07 jari 927             int[] chosenIndices = refAvailableList.getSelectedIndices();
2 26 Feb 07 jari 928             Object[] chosenObjects = new Object[chosenIndices.length];
2 26 Feb 07 jari 929
2 26 Feb 07 jari 930             for (int i = chosenIndices.length - 1; i >= 0; i--) {
2 26 Feb 07 jari 931                 // For remove-then-add functionality
2 26 Feb 07 jari 932                 //Object addItem = ((DefaultListModel) refAvailableList.getModel()).remove(chosenIndices[i]);
2 26 Feb 07 jari 933                 // For copy-then-add functionality
2 26 Feb 07 jari 934                 Object addItem = ((DefaultListModel) refAvailableList.getModel()).getElementAt(chosenIndices[i]);
2 26 Feb 07 jari 935                 chosenObjects[i] = addItem;
2 26 Feb 07 jari 936             }
2 26 Feb 07 jari 937
2 26 Feb 07 jari 938             for (int i = 0; i < chosenIndices.length; i++) {
2 26 Feb 07 jari 939                 ((DefaultListModel) refSelectedList.getModel()).addElement(chosenObjects[i]);
2 26 Feb 07 jari 940             }
2 26 Feb 07 jari 941
2 26 Feb 07 jari 942             validateLists();
2 26 Feb 07 jari 943         }
2 26 Feb 07 jari 944
2 26 Feb 07 jari 945         public void onRefAddAll() {
2 26 Feb 07 jari 946             int elementCount = ((DefaultListModel) refAvailableList.getModel()).size();
2 26 Feb 07 jari 947             for (int i = 0; i < elementCount; i++) {
2 26 Feb 07 jari 948                 Object addItem = ((DefaultListModel) refAvailableList.getModel()).getElementAt(i);
2 26 Feb 07 jari 949                 ((DefaultListModel) refSelectedList.getModel()).addElement(addItem);
2 26 Feb 07 jari 950             }
2 26 Feb 07 jari 951
2 26 Feb 07 jari 952             validateLists();
2 26 Feb 07 jari 953         }
2 26 Feb 07 jari 954
2 26 Feb 07 jari 955         public void onRefRemove() {
2 26 Feb 07 jari 956             int[] chosenIndices = refSelectedList.getSelectedIndices();
2 26 Feb 07 jari 957
2 26 Feb 07 jari 958             // Designed with copy-then-add functionality in mind
2 26 Feb 07 jari 959             for (int i = chosenIndices.length - 1; i >= 0; i--) {
2 26 Feb 07 jari 960                 ((DefaultListModel) refSelectedList.getModel()).remove(chosenIndices[i]);
2 26 Feb 07 jari 961             }
2 26 Feb 07 jari 962
2 26 Feb 07 jari 963             validateLists();
2 26 Feb 07 jari 964         }
2 26 Feb 07 jari 965
2 26 Feb 07 jari 966         public void onRefRemoveAll() {
2 26 Feb 07 jari 967             // Designed with copy-then-add functionality in mind
2 26 Feb 07 jari 968             ((DefaultListModel) refSelectedList.getModel()).removeAllElements();
2 26 Feb 07 jari 969
2 26 Feb 07 jari 970             validateLists();
2 26 Feb 07 jari 971         }
2 26 Feb 07 jari 972
2 26 Feb 07 jari 973         public DefaultListModel getAffymetrixAvailableListModel() {
2 26 Feb 07 jari 974             return (DefaultListModel) affymetrixAvailableList.getModel();
2 26 Feb 07 jari 975         }
2 26 Feb 07 jari 976
2 26 Feb 07 jari 977         public DefaultListModel getRefAvailableListModel() {
2 26 Feb 07 jari 978             return (DefaultListModel) refAvailableList.getModel();
2 26 Feb 07 jari 979         }
2 26 Feb 07 jari 980
2 26 Feb 07 jari 981         public DefaultListModel getAffymetrixSelectedListModel() {
2 26 Feb 07 jari 982             return (DefaultListModel) affymetrixSelectedList.getModel();
2 26 Feb 07 jari 983         }
2 26 Feb 07 jari 984
2 26 Feb 07 jari 985         public DefaultListModel getRefSelectedListModel() {
2 26 Feb 07 jari 986             return (DefaultListModel) refSelectedList.getModel();
2 26 Feb 07 jari 987         }
2 26 Feb 07 jari 988
2 26 Feb 07 jari 989         private class ListRenderer extends DefaultListCellRenderer {
2 26 Feb 07 jari 990             public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
2 26 Feb 07 jari 991                 super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
2 26 Feb 07 jari 992                 File file = (File) value;
2 26 Feb 07 jari 993                 setText(file.getName());
2 26 Feb 07 jari 994                 return this;
2 26 Feb 07 jari 995             }
2 26 Feb 07 jari 996         }
2 26 Feb 07 jari 997
2 26 Feb 07 jari 998         private class EventHandler implements ActionListener {
2 26 Feb 07 jari 999             public void actionPerformed(ActionEvent event) {
2 26 Feb 07 jari 1000
2 26 Feb 07 jari 1001                 Object source = event.getSource();
2 26 Feb 07 jari 1002
2 26 Feb 07 jari 1003                 if (source == affymetrixAddButton) {
2 26 Feb 07 jari 1004                     onAffymetrixAdd();
2 26 Feb 07 jari 1005                 } else if (source == affymetrixAddAllButton) {
2 26 Feb 07 jari 1006                     onAffymetrixAddAll();
2 26 Feb 07 jari 1007                 } else if (source == affymetrixRemoveButton) {
2 26 Feb 07 jari 1008                     onAffymetrixRemove();
2 26 Feb 07 jari 1009                 } else if (source == affymetrixRemoveAllButton) {
2 26 Feb 07 jari 1010                     onAffymetrixRemoveAll();
2 26 Feb 07 jari 1011                 } else if (source == refAddButton) {
2 26 Feb 07 jari 1012                     onRefAdd();
2 26 Feb 07 jari 1013                 } else if (source == refAddAllButton) {
2 26 Feb 07 jari 1014                     onRefAddAll();
2 26 Feb 07 jari 1015                 } else if (source == refRemoveButton) {
2 26 Feb 07 jari 1016                     onRefRemove();
2 26 Feb 07 jari 1017                 } else if (source == refRemoveAllButton) {
2 26 Feb 07 jari 1018                     onRefRemoveAll();
2 26 Feb 07 jari 1019                 } else if (source instanceof JRadioButton){
2 26 Feb 07 jari 1020                     aflp.validateLists();  //check state
2 26 Feb 07 jari 1021                 }
2 26 Feb 07 jari 1022             }
2 26 Feb 07 jari 1023         }
2 26 Feb 07 jari 1024
2 26 Feb 07 jari 1025         private class FileTreePaneEventHandler implements FileTreePaneListener {
2 26 Feb 07 jari 1026
2 26 Feb 07 jari 1027             public void nodeSelected(FileTreePaneEvent event) {
2 26 Feb 07 jari 1028
2 26 Feb 07 jari 1029                 String filePath = (String) event.getValue("Path");
2 26 Feb 07 jari 1030                 Vector fileNames = (Vector) event.getValue("Filenames");
2 26 Feb 07 jari 1031
2 26 Feb 07 jari 1032                 processFileList(filePath, fileNames);
2 26 Feb 07 jari 1033             }
2 26 Feb 07 jari 1034
2 26 Feb 07 jari 1035             public void nodeCollapsed(FileTreePaneEvent event) {}
2 26 Feb 07 jari 1036             public void nodeExpanded(FileTreePaneEvent event) {}
2 26 Feb 07 jari 1037         }
2 26 Feb 07 jari 1038     }
2 26 Feb 07 jari 1039 }