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