mev-4.0.01/source/org/tigr/microarray/mev/file/agilent/AgilentMevFileLoader.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: AgilentMevFileLoader.java,v $
2 26 Feb 07 jari 7  * $Revision: 1.4 $
2 26 Feb 07 jari 8  * $Date: 2006/07/21 17:24:18 $
2 26 Feb 07 jari 9  * $Author: caliente $
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.agilent;
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.File;
2 26 Feb 07 jari 23 import java.io.IOException;
2 26 Feb 07 jari 24 import java.util.Hashtable;
2 26 Feb 07 jari 25 import java.util.Vector;
2 26 Feb 07 jari 26
2 26 Feb 07 jari 27 import javax.swing.ButtonGroup;
2 26 Feb 07 jari 28 import javax.swing.DefaultListCellRenderer;
2 26 Feb 07 jari 29 import javax.swing.DefaultListModel;
2 26 Feb 07 jari 30 import javax.swing.JButton;
2 26 Feb 07 jari 31 import javax.swing.JCheckBox;
2 26 Feb 07 jari 32 import javax.swing.JLabel;
2 26 Feb 07 jari 33 import javax.swing.JList;
2 26 Feb 07 jari 34 import javax.swing.JOptionPane;
2 26 Feb 07 jari 35 import javax.swing.JPanel;
2 26 Feb 07 jari 36 import javax.swing.JRadioButton;
2 26 Feb 07 jari 37 import javax.swing.JScrollPane;
2 26 Feb 07 jari 38 import javax.swing.JSplitPane;
2 26 Feb 07 jari 39 import javax.swing.JTextField;
2 26 Feb 07 jari 40 import javax.swing.border.EtchedBorder;
2 26 Feb 07 jari 41 import javax.swing.border.TitledBorder;
2 26 Feb 07 jari 42 import javax.swing.filechooser.FileFilter;
2 26 Feb 07 jari 43
2 26 Feb 07 jari 44 import org.tigr.microarray.file.AgilentAnnFileParser;
2 26 Feb 07 jari 45 import org.tigr.microarray.file.AgilentMevFileParser;
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.SlideDataElement;
2 26 Feb 07 jari 51 import org.tigr.microarray.mev.SpotInformationData;
2 26 Feb 07 jari 52 import org.tigr.microarray.mev.file.ExpressionFileLoader;
2 26 Feb 07 jari 53 import org.tigr.microarray.mev.file.FileTreePane;
2 26 Feb 07 jari 54 import org.tigr.microarray.mev.file.FileTreePaneEvent;
2 26 Feb 07 jari 55 import org.tigr.microarray.mev.file.FileTreePaneListener;
2 26 Feb 07 jari 56 import org.tigr.microarray.mev.file.GBA;
2 26 Feb 07 jari 57 import org.tigr.microarray.mev.file.SlideLoaderProgressBar;
2 26 Feb 07 jari 58 import org.tigr.microarray.mev.file.SuperExpressionFileLoader;
2 26 Feb 07 jari 59
2 26 Feb 07 jari 60 public class AgilentMevFileLoader extends ExpressionFileLoader {
2 26 Feb 07 jari 61     
2 26 Feb 07 jari 62     private GBA gba;
2 26 Feb 07 jari 63     private AgilentMevFileLoaderPanel amflp;
2 26 Feb 07 jari 64     
2 26 Feb 07 jari 65     private boolean loadEnabled = false;
2 26 Feb 07 jari 66     private String [] uidArray;
2 26 Feb 07 jari 67     
2 26 Feb 07 jari 68     boolean haveSRandSC;
2 26 Feb 07 jari 69     boolean loadMedianIntensities = false;
2 26 Feb 07 jari 70     
2 26 Feb 07 jari 71     private boolean haveAnnMatch = false;
2 26 Feb 07 jari 72     
2 26 Feb 07 jari 73     public AgilentMevFileLoader(SuperExpressionFileLoader superLoader) {
2 26 Feb 07 jari 74         super(superLoader);
2 26 Feb 07 jari 75         gba = new GBA();
2 26 Feb 07 jari 76         amflp = new AgilentMevFileLoaderPanel();
2 26 Feb 07 jari 77         amflp.splitPane.setDividerLocation(0.6);
2 26 Feb 07 jari 78         amflp.validate();
2 26 Feb 07 jari 79     }
2 26 Feb 07 jari 80     
2 26 Feb 07 jari 81     public Vector loadExpressionFiles() throws IOException {
2 26 Feb 07 jari 82
2 26 Feb 07 jari 83         Object[] mevFiles = amflp.getMevSelectedListModel().toArray();
2 26 Feb 07 jari 84         Object[] annFiles = amflp.getAnnSelectedListModel().toArray();
2 26 Feb 07 jari 85         Vector data = new Vector();
2 26 Feb 07 jari 86         ISlideMetaData metaData = null;
2 26 Feb 07 jari 87         ISlideData slideData;
2 26 Feb 07 jari 88         
2 26 Feb 07 jari 89         this.loadMedianIntensities = amflp.loadMedButton.isSelected();
2 26 Feb 07 jari 90         
2 26 Feb 07 jari 91         setFilesCount(mevFiles.length);
2 26 Feb 07 jari 92         setRemain(mevFiles.length);
2 26 Feb 07 jari 93
2 26 Feb 07 jari 94         for (int i = 0; i < mevFiles.length; i++) {
2 26 Feb 07 jari 95             setFileName(((File) mevFiles[i]).getName());
2 26 Feb 07 jari 96             if(i == 0){
2 26 Feb 07 jari 97                 slideData = loadSlideData((File) mevFiles[i]);
2 26 Feb 07 jari 98                 if(slideData == null)
2 26 Feb 07 jari 99                     return null;
2 26 Feb 07 jari 100                 data.add(slideData);
2 26 Feb 07 jari 101                 metaData = slideData.getSlideMetaData();
2 26 Feb 07 jari 102             }
2 26 Feb 07 jari 103             else
2 26 Feb 07 jari 104                 data.add(loadFloatSlideData((File) mevFiles[i], metaData));
2 26 Feb 07 jari 105             
2 26 Feb 07 jari 106             setRemain(mevFiles.length-i-1);
2 26 Feb 07 jari 107             setFilesProgress(i);
2 26 Feb 07 jari 108         }
2 26 Feb 07 jari 109         if(!amflp.noAnnFileBox.isSelected()) {
2 26 Feb 07 jari 110             for (int i = 0; i < annFiles.length; i++){
2 26 Feb 07 jari 111                 loadAnnotationFile((SlideData)data.elementAt(0), (File)annFiles[i]);
2 26 Feb 07 jari 112             }
2 26 Feb 07 jari 113         } else {
2 26 Feb 07 jari 114             loadAnnotationFromMevFile((File)mevFiles[0], (SlideData)data.elementAt(0));
2 26 Feb 07 jari 115         }
2 26 Feb 07 jari 116         
2 26 Feb 07 jari 117         //check for existance of annotation matches, just set to true if ann. is from mev file
2 26 Feb 07 jari 118         //or if no ann. files are selected.  haveAnnMatch is set when loading files to indicate a match
2 26 Feb 07 jari 119         if(amflp.noAnnFileBox.isSelected() || annFiles == null || annFiles.length == 0)
2 26 Feb 07 jari 120             haveAnnMatch = true;
2 26 Feb 07 jari 121         
2 26 Feb 07 jari 122         if(!haveAnnMatch) {
2 26 Feb 07 jari 123             String msg = "The selected annoation file";
2 26 Feb 07 jari 124             if(annFiles != null && annFiles.length > 1)
2 26 Feb 07 jari 125                 msg += "s";
2 26 Feb 07 jari 126             
2 26 Feb 07 jari 127             msg += " did not have have UID's that matched any UID's \n";
2 26 Feb 07 jari 128             msg += "in the selected mev files.";
2 26 Feb 07 jari 129             JOptionPane.showMessageDialog(amflp, msg, "Annotation Mismatch Warning", JOptionPane.WARNING_MESSAGE);
2 26 Feb 07 jari 130         }
2 26 Feb 07 jari 131         
2 26 Feb 07 jari 132         return data;
2 26 Feb 07 jari 133     }
2 26 Feb 07 jari 134     
2 26 Feb 07 jari 135     //not called
2 26 Feb 07 jari 136     public ISlideData loadExpressionFile(File file){
2 26 Feb 07 jari 137         return null;
2 26 Feb 07 jari 138     }
2 26 Feb 07 jari 139     
2 26 Feb 07 jari 140     
2 26 Feb 07 jari 141     public void loadAnnotationFromMevFile(File file, SlideData data) {
2 26 Feb 07 jari 142         AgilentMevFileParser mfp = new AgilentMevFileParser();
2 26 Feb 07 jari 143         mfp.loadFile(file);
2 26 Feb 07 jari 144         
2 26 Feb 07 jari 145         SpotInformationData annot = mfp.getSpotInformation();
2 26 Feb 07 jari 146         int length = annot.getSize();
2 26 Feb 07 jari 147         
2 26 Feb 07 jari 148         String [] header = annot.getSpotInformationHeader();
2 26 Feb 07 jari 149         //EH fieldnames are loaded into SlideData instead of TMEV
2 26 Feb 07 jari 150         data.getSlideMetaData().appendFieldNames(header);
2 26 Feb 07 jari 151 //      Vector v = new Vector();
2 26 Feb 07 jari 152 //      for(int i = 0; i < header.length; i++) {
2 26 Feb 07 jari 153 //          v.add(header[i]);
2 26 Feb 07 jari 154 //      }
2 26 Feb 07 jari 155         //setTMEVFieldNames(v);
2 26 Feb 07 jari 156         
2 26 Feb 07 jari 157         for(int i = 0; i < length; i++){
2 26 Feb 07 jari 158             ((SlideDataElement)data.getSlideDataElement(i)).setExtraFields(annot.getSpotInformationArray(i));
2 26 Feb 07 jari 159         }
2 26 Feb 07 jari 160     }
2 26 Feb 07 jari 161     
2 26 Feb 07 jari 162     public ISlideData loadSlideData(File currentFile) throws IOException {
2 26 Feb 07 jari 163         SlideData slideData = null;
2 26 Feb 07 jari 164         AgilentMevFileParser mfp = new AgilentMevFileParser();
2 26 Feb 07 jari 165         mfp.loadFile(currentFile);
2 26 Feb 07 jari 166         if (mfp.isMevFileLoaded()) {
2 26 Feb 07 jari 167             Vector headers = mfp.getColumnHeaders();
2 26 Feb 07 jari 168             
2 26 Feb 07 jari 169             //locate intensity columns
2 26 Feb 07 jari 170             int i1, i2;
2 26 Feb 07 jari 171             i1 = getIntensityColumn(headers, 1);
2 26 Feb 07 jari 172             i2 = getIntensityColumn(headers, 2);
2 26 Feb 07 jari 173             
2 26 Feb 07 jari 174             //Intensities exist??
2 26 Feb 07 jari 175             if(i1 == -1 || i2 == -1) {
2 26 Feb 07 jari 176                 if(loadMedianIntensities)
2 26 Feb 07 jari 177                     JOptionPane.showMessageDialog(amflp, "Error loading "+currentFile.getName()+"\n"
2 26 Feb 07 jari 178                     + "The file was missing median intensity columns indicated by\n"
2 26 Feb 07 jari 179                     + "the header names MedA and MedB", "Load Error", JOptionPane.ERROR_MESSAGE);
2 26 Feb 07 jari 180                 else
2 26 Feb 07 jari 181                     JOptionPane.showMessageDialog(amflp, "Error loading "+currentFile.getName()+"\n"
2 26 Feb 07 jari 182                     + "The file was missing intensity columns indicated by\n"
2 26 Feb 07 jari 183                     + "the header names IA and IB", "Load Error", JOptionPane.ERROR_MESSAGE);
2 26 Feb 07 jari 184                 return null;
2 26 Feb 07 jari 185             }
2 26 Feb 07 jari 186             
2 26 Feb 07 jari 187             //test for optional SR and SC
2 26 Feb 07 jari 188             haveSRandSC = false;
2 26 Feb 07 jari 189             if(headers.size() > 7) {
2 26 Feb 07 jari 190                 String possibleSR = (String)(headers.elementAt(7));
2 26 Feb 07 jari 191                 String possibleSC = (String)(headers.elementAt(8));
2 26 Feb 07 jari 192                 if(possibleSR.equals("SR") && possibleSC.equals("SC"))
2 26 Feb 07 jari 193                     haveSRandSC = true;
2 26 Feb 07 jari 194             }
2 26 Feb 07 jari 195             
2 26 Feb 07 jari 196             String [][] data = mfp.getDataMatrix();
2 26 Feb 07 jari 197             SlideDataElement sde;
2 26 Feb 07 jari 198             int [] rows;
2 26 Feb 07 jari 199             int [] cols;
2 26 Feb 07 jari 200             float [] intensities;
2 26 Feb 07 jari 201             String uid;
2 26 Feb 07 jari 202             String [][] spotData;
2 26 Feb 07 jari 203             uidArray = new String[data.length];
2 26 Feb 07 jari 204             
2 26 Feb 07 jari 205             int maxRow = 0;
2 26 Feb 07 jari 206             int maxCol = 0;
2 26 Feb 07 jari 207             for(int i = 0; i < data.length; i++){
2 26 Feb 07 jari 208                 maxRow = Math.max(maxRow, Integer.parseInt(data[i][3]));
2 26 Feb 07 jari 209                 maxCol = Math.max(maxCol, Integer.parseInt(data[i][4]));
2 26 Feb 07 jari 210             }
2 26 Feb 07 jari 211             slideData = new SlideData(maxRow, maxCol);
2 26 Feb 07 jari 212             setLinesCount(data.length);
2 26 Feb 07 jari 213             for(int i = 0; i < data.length; i++){
2 26 Feb 07 jari 214                 rows = new int[3];
2 26 Feb 07 jari 215                 cols = new int[3];
2 26 Feb 07 jari 216                 intensities = new float[2];
2 26 Feb 07 jari 217                 
2 26 Feb 07 jari 218                 uidArray[i] = data[i][0];
2 26 Feb 07 jari 219                 
2 26 Feb 07 jari 220                 try {
2 26 Feb 07 jari 221                     intensities[0] = Float.parseFloat(data[i][i1]);
2 26 Feb 07 jari 222                     intensities[1] = Float.parseFloat(data[i][i2]);
2 26 Feb 07 jari 223                     rows[0] = Integer.parseInt(data[i][3]);
2 26 Feb 07 jari 224                     cols[0] = Integer.parseInt(data[i][4]);
2 26 Feb 07 jari 225                     rows[1] = Integer.parseInt(data[i][5]);
2 26 Feb 07 jari 226                     cols[1] = Integer.parseInt(data[i][6]);
2 26 Feb 07 jari 227                     if(haveSRandSC) {
2 26 Feb 07 jari 228                         rows[2] = Integer.parseInt(data[i][7]);
2 26 Feb 07 jari 229                         cols[2] = Integer.parseInt(data[i][8]);
2 26 Feb 07 jari 230                     } else {
2 26 Feb 07 jari 231                         rows[2] = 0;
2 26 Feb 07 jari 232                         cols[2] = 0;
2 26 Feb 07 jari 233                     }
2 26 Feb 07 jari 234                 } catch (NumberFormatException e) {
2 26 Feb 07 jari 235                     final String fileName = currentFile.getName();
2 26 Feb 07 jari 236                     final int loc = i;
2 26 Feb 07 jari 237                     Thread thread = new Thread( new Runnable() {
2 26 Feb 07 jari 238                         public void run() {
2 26 Feb 07 jari 239                             JOptionPane.showConfirmDialog(amflp, "The input file \""+fileName+"\" was missing critical information on line # "+ String.valueOf(loc+1) + "\n" +
2 26 Feb 07 jari 240                             "MeV files require entries for UID, Intensities, and slide location information.", "Loading Aborted/Loading Error", JOptionPane.ERROR_MESSAGE);
2 26 Feb 07 jari 241                         }
2 26 Feb 07 jari 242                     });
2 26 Feb 07 jari 243                     thread.start();
2 26 Feb 07 jari 244                     return null;
2 26 Feb 07 jari 245                 }
2 26 Feb 07 jari 246                 sde = new SlideDataElement(data[i][0], rows, cols, intensities, null);
2 26 Feb 07 jari 247                 slideData.add(sde);
2 26 Feb 07 jari 248                 setFileProgress(i);
2 26 Feb 07 jari 249             }
2 26 Feb 07 jari 250             
2 26 Feb 07 jari 251             if(amflp.saveSpotInfoBox.isSelected() && !amflp.noAnnFileBox.isSelected())
2 26 Feb 07 jari 252                 slideData.setSpotInformationData(mfp.getSpotInformation());
2 26 Feb 07 jari 253             
2 26 Feb 07 jari 254             slideData.setSlideDataName(currentFile.getName());
2 26 Feb 07 jari 255             slideData.setSlideFileName(currentFile.getPath());
2 26 Feb 07 jari 256         }
2 26 Feb 07 jari 257         return slideData;
2 26 Feb 07 jari 258     }
2 26 Feb 07 jari 259     
2 26 Feb 07 jari 260     
2 26 Feb 07 jari 261     private int getIntensityColumn(Vector headers, int index) {
2 26 Feb 07 jari 262         String headerKey;
2 26 Feb 07 jari 263         int col = -1;
2 26 Feb 07 jari 264         
2 26 Feb 07 jari 265         if(loadMedianIntensities) {
2 26 Feb 07 jari 266             if(index == 1)
2 26 Feb 07 jari 267                 headerKey = "MedA";
2 26 Feb 07 jari 268             else
2 26 Feb 07 jari 269                 headerKey = "MedB";
2 26 Feb 07 jari 270             
2 26 Feb 07 jari 271         } else {
2 26 Feb 07 jari 272             if(index == 1)
2 26 Feb 07 jari 273                 headerKey = "IA";
2 26 Feb 07 jari 274             else
2 26 Feb 07 jari 275                 headerKey = "IB";
2 26 Feb 07 jari 276         }
2 26 Feb 07 jari 277         
2 26 Feb 07 jari 278         for(int i = 0; i < headers.size(); i++) {
2 26 Feb 07 jari 279             if(((String)(headers.elementAt(i))).equals(headerKey)) {
2 26 Feb 07 jari 280                 col = i;
2 26 Feb 07 jari 281                 break;
2 26 Feb 07 jari 282             }
2 26 Feb 07 jari 283         }
2 26 Feb 07 jari 284         return col;
2 26 Feb 07 jari 285     }
2 26 Feb 07 jari 286     
2 26 Feb 07 jari 287     
2 26 Feb 07 jari 288     public ISlideData loadFloatSlideData(File currentFile, ISlideMetaData metaData) throws IOException {
2 26 Feb 07 jari 289         
2 26 Feb 07 jari 290       AgilentMevFileParser mfp = new AgilentMevFileParser();
2 26 Feb 07 jari 291         mfp.loadFile(currentFile);
2 26 Feb 07 jari 292         FloatSlideData slideData = new FloatSlideData(metaData);
2 26 Feb 07 jari 293         if (mfp.isMevFileLoaded()) {
2 26 Feb 07 jari 294             
2 26 Feb 07 jari 295             Vector headers = mfp.getColumnHeaders();
2 26 Feb 07 jari 296             
2 26 Feb 07 jari 297             //locate intensity columns
2 26 Feb 07 jari 298             int i1, i2;
2 26 Feb 07 jari 299             i1 = getIntensityColumn(headers, 1);
2 26 Feb 07 jari 300             i2 = getIntensityColumn(headers, 2);
2 26 Feb 07 jari 301             
2 26 Feb 07 jari 302             //Intensities exist??
2 26 Feb 07 jari 303             if(i1 == -1 || i2 == -1) {
2 26 Feb 07 jari 304                 if(loadMedianIntensities)
2 26 Feb 07 jari 305                     JOptionPane.showMessageDialog(amflp, "Error loading "+currentFile.getName()+"\n"
2 26 Feb 07 jari 306                     + "The file was missing median intensity columns indicated by\n"
2 26 Feb 07 jari 307                     + "the header names MedA and MedB", "Load Error", JOptionPane.ERROR_MESSAGE);
2 26 Feb 07 jari 308                 else
2 26 Feb 07 jari 309                     JOptionPane.showMessageDialog(amflp, "Error loading "+currentFile.getName()+"\n"
2 26 Feb 07 jari 310                     + "The file was missing intensity columns indicated by\n"
2 26 Feb 07 jari 311                     + "the header names IA and IB", "Load Error", JOptionPane.ERROR_MESSAGE);
2 26 Feb 07 jari 312                 return null;
2 26 Feb 07 jari 313             }
2 26 Feb 07 jari 314             
2 26 Feb 07 jari 315             String [][] data = mfp.getDataMatrix();
2 26 Feb 07 jari 316             setLinesCount(data.length);
2 26 Feb 07 jari 317             for(int i = 0; i < data.length; i++){
2 26 Feb 07 jari 318                 slideData.setIntensities(i, Float.parseFloat(data[i][i1]), Float.parseFloat(data[i][i2]));
2 26 Feb 07 jari 319                 setFileProgress(i);
2 26 Feb 07 jari 320             }
2 26 Feb 07 jari 321             if(amflp.saveSpotInfoBox.isSelected() && !amflp.noAnnFileBox.isSelected())
2 26 Feb 07 jari 322                 slideData.setSpotInformationData(mfp.getSpotInformation());
2 26 Feb 07 jari 323         }
2 26 Feb 07 jari 324         slideData.setSlideDataName(currentFile.getName());
2 26 Feb 07 jari 325         slideData.setSlideFileName(currentFile.getPath());
2 26 Feb 07 jari 326         return slideData;
2 26 Feb 07 jari 327     }
2 26 Feb 07 jari 328     
2 26 Feb 07 jari 329     public Vector loadAnnotationFile(SlideData targetData, File sourceFile) throws IOException {
2 26 Feb 07 jari 330         
2 26 Feb 07 jari 331       AgilentAnnFileParser parser = new AgilentAnnFileParser();
2 26 Feb 07 jari 332         parser.loadFile(sourceFile);
2 26 Feb 07 jari 333         if(parser.isAnnFileLoaded()){
2 26 Feb 07 jari 334             Vector headers = parser.getColumnHeaders();
2 26 Feb 07 jari 335             
2 26 Feb 07 jari 336             int firstAnnField = 1;
2 26 Feb 07 jari 337             
2 26 Feb 07 jari 338             // If columns 1 and 2 (after UID) are R and C skip over and use the ann. columns that follow.
2 26 Feb 07 jari 339             if(headers.size() >= 3) {
2 26 Feb 07 jari 340                 if( ((String)(headers.get(1))).equalsIgnoreCase("R") &&
2 26 Feb 07 jari 341                     ((String)(headers.get(2))).equalsIgnoreCase("C") )
2 26 Feb 07 jari 342                     firstAnnField = 3;
2 26 Feb 07 jari 343             }
2 26 Feb 07 jari 344             //EH fieldnames are added into SlideData instead of TMEV.java            
2 26 Feb 07 jari 345             String[] annotHeaders = new String[headers.size()-firstAnnField];
2 26 Feb 07 jari 346             for(int i = firstAnnField; i < headers.size(); i++){
2 26 Feb 07 jari 347                 annotHeaders[i-firstAnnField] = (String)headers.elementAt(i);
2 26 Feb 07 jari 348             }
2 26 Feb 07 jari 349             targetData.getSlideMetaData().appendFieldNames(annotHeaders);
2 26 Feb 07 jari 350             
2 26 Feb 07 jari 351             String [][] annMatrix;
2 26 Feb 07 jari 352             //if(amflp.cutQuotesBox.isSelected())
2 26 Feb 07 jari 353                 //annMatrix = parser.getDataMatrixMinusQuotes();
2 26 Feb 07 jari 354             //else
2 26 Feb 07 jari 355                 annMatrix = parser.getDataMatrix();
2 26 Feb 07 jari 356             
2 26 Feb 07 jari 357             Hashtable hash = new Hashtable();
2 26 Feb 07 jari 358             String [] value;
2 26 Feb 07 jari 359             int dataLength = targetData.size();
2 26 Feb 07 jari 360             for(int i = 0; i < annMatrix.length; i++){
2 26 Feb 07 jari 361                 value = new String[annMatrix[i].length-firstAnnField];
2 26 Feb 07 jari 362                 System.arraycopy(annMatrix[i], firstAnnField, value, 0, annMatrix[i].length-firstAnnField);
2 26 Feb 07 jari 363                 hash.put(annMatrix[i][0], value);
2 26 Feb 07 jari 364             }
2 26 Feb 07 jari 365             
2 26 Feb 07 jari 366             SlideDataElement sde;
2 26 Feb 07 jari 367             String [] extraFields;
2 26 Feb 07 jari 368             for(int i = 0; i < dataLength; i++){
2 26 Feb 07 jari 369                 extraFields = (String [])(hash.get(uidArray[i]));
2 26 Feb 07 jari 370                 //if there is a match in the annotation set flag to true
2 26 Feb 07 jari 371                 if(!haveAnnMatch && extraFields != null)
2 26 Feb 07 jari 372                     haveAnnMatch = true;
2 26 Feb 07 jari 373                 ((SlideDataElement)targetData.getSlideDataElement(i)).setExtraFields(extraFields);
2 26 Feb 07 jari 374             }
2 26 Feb 07 jari 375         }
2 26 Feb 07 jari 376         return new Vector();
2 26 Feb 07 jari 377     }
2 26 Feb 07 jari 378     
2 26 Feb 07 jari 379     public FileFilter getFileFilter() {
2 26 Feb 07 jari 380         
2 26 Feb 07 jari 381         FileFilter mevFileFilter = new FileFilter() {
2 26 Feb 07 jari 382             
2 26 Feb 07 jari 383             public boolean accept(File f) {
2 26 Feb 07 jari 384                 if (f.isDirectory()) return true;
2 26 Feb 07 jari 385                 if (f.getName().endsWith(".txt")) return true;
2 26 Feb 07 jari 386                 else return false;
2 26 Feb 07 jari 387             }
2 26 Feb 07 jari 388             
2 26 Feb 07 jari 389             public String getDescription() {
2 26 Feb 07 jari 390                 return "Agilent Feature Extraction Files (*.txt)";
2 26 Feb 07 jari 391             }
2 26 Feb 07 jari 392         };
2 26 Feb 07 jari 393         
2 26 Feb 07 jari 394         return mevFileFilter;
2 26 Feb 07 jari 395     }
2 26 Feb 07 jari 396     
2 26 Feb 07 jari 397     public FileFilter getAnnotationFileFilter() {
2 26 Feb 07 jari 398         
2 26 Feb 07 jari 399         FileFilter annFileFilter = new FileFilter() {
2 26 Feb 07 jari 400             
2 26 Feb 07 jari 401             public boolean accept(File f) {
2 26 Feb 07 jari 402                 if (f.isDirectory()) return true;
2 26 Feb 07 jari 403                 if (f.getName().endsWith(".txt")) return true;
2 26 Feb 07 jari 404                 else return false;
2 26 Feb 07 jari 405             }
2 26 Feb 07 jari 406             
2 26 Feb 07 jari 407             public String getDescription() {
2 26 Feb 07 jari 408                 return "Agilent Design Files (*.txt)";
2 26 Feb 07 jari 409             }
2 26 Feb 07 jari 410         };
2 26 Feb 07 jari 411         
2 26 Feb 07 jari 412         return annFileFilter;
2 26 Feb 07 jari 413     }
2 26 Feb 07 jari 414     
2 26 Feb 07 jari 415     public boolean checkLoadEnable() {
2 26 Feb 07 jari 416         setLoadEnabled(loadEnabled);
2 26 Feb 07 jari 417         return this.loadEnabled;
2 26 Feb 07 jari 418     }
2 26 Feb 07 jari 419     
2 26 Feb 07 jari 420     public void markLoadEnabled(boolean state) {
2 26 Feb 07 jari 421         loadEnabled = state;
2 26 Feb 07 jari 422         checkLoadEnable();
2 26 Feb 07 jari 423     }
2 26 Feb 07 jari 424     
2 26 Feb 07 jari 425     public JPanel getFileLoaderPanel() {
2 26 Feb 07 jari 426         return amflp;
2 26 Feb 07 jari 427     }
2 26 Feb 07 jari 428     
2 26 Feb 07 jari 429     public void processFileList(String filePath, Vector fileNames) {
2 26 Feb 07 jari 430         
2 26 Feb 07 jari 431         amflp.setPath(filePath);
2 26 Feb 07 jari 432         
2 26 Feb 07 jari 433         if (fileNames == null) return; // Don't process files if there aren't any
2 26 Feb 07 jari 434         
2 26 Feb 07 jari 435         FileFilter mevFileFilter = getFileFilter();
2 26 Feb 07 jari 436         FileFilter annFileFilter = getAnnotationFileFilter();
2 26 Feb 07 jari 437         
2 26 Feb 07 jari 438         amflp.getMevAvailableListModel().clear();
2 26 Feb 07 jari 439         amflp.getAnnAvailableListModel().clear();
2 26 Feb 07 jari 440         
2 26 Feb 07 jari 441         for (int i = 0; i < fileNames.size(); i++) {
2 26 Feb 07 jari 442             
2 26 Feb 07 jari 443             File targetFile = new File((String) fileNames.elementAt(i));
2 26 Feb 07 jari 444             
2 26 Feb 07 jari 445             if (mevFileFilter.accept(targetFile)) {
2 26 Feb 07 jari 446                 amflp.getMevAvailableListModel().addElement(new File((String) fileNames.elementAt(i)));
2 26 Feb 07 jari 447             } 
2 26 Feb 07 jari 448             if (annFileFilter.accept(targetFile)) {
2 26 Feb 07 jari 449                 amflp.getAnnAvailableListModel().addElement(new File((String) fileNames.elementAt(i)));
2 26 Feb 07 jari 450             }
2 26 Feb 07 jari 451         }
2 26 Feb 07 jari 452     }
2 26 Feb 07 jari 453     
2 26 Feb 07 jari 454     public String getFilePath() {
2 26 Feb 07 jari 455         if(this.amflp.getMevSelectedListModel().getSize() <1)
2 26 Feb 07 jari 456             return null;
2 26 Feb 07 jari 457         return ((File)(amflp.getMevSelectedListModel().getElementAt(0))).getAbsolutePath();
2 26 Feb 07 jari 458     }
2 26 Feb 07 jari 459     
2 26 Feb 07 jari 460     public void openDataPath() {
2 26 Feb 07 jari 461         this.amflp.splitPane.setDividerLocation(0.3);
2 26 Feb 07 jari 462         this.amflp.openDataPath();
2 26 Feb 07 jari 463     }
2 26 Feb 07 jari 464     
2 26 Feb 07 jari 465     
2 26 Feb 07 jari 466 /*
2 26 Feb 07 jari 467 //
2 26 Feb 07 jari 468 //  MevFileLoader - Internal Classes
2 26 Feb 07 jari 469 //
2 26 Feb 07 jari 470  */
2 26 Feb 07 jari 471     
2 26 Feb 07 jari 472     private class AgilentMevFileLoaderPanel extends JPanel {
2 26 Feb 07 jari 473         
2 26 Feb 07 jari 474         FileTreePane fileTreePane;
2 26 Feb 07 jari 475         JTextField pathTextField;
2 26 Feb 07 jari 476         
2 26 Feb 07 jari 477         JPanel mevSelectionPanel;
2 26 Feb 07 jari 478         JPanel mevListPanel;
2 26 Feb 07 jari 479         JLabel mevAvailableLabel;
2 26 Feb 07 jari 480         JLabel mevSelectedLabel;
2 26 Feb 07 jari 481         JList mevAvailableList;
2 26 Feb 07 jari 482         JList mevSelectedList;
2 26 Feb 07 jari 483         JScrollPane mevAvailableScrollPane;
2 26 Feb 07 jari 484         JScrollPane mevSelectedScrollPane;
2 26 Feb 07 jari 485         JButton mevAddButton;
2 26 Feb 07 jari 486         JButton mevAddAllButton;
2 26 Feb 07 jari 487         JButton mevRemoveButton;
2 26 Feb 07 jari 488         JButton mevRemoveAllButton;
2 26 Feb 07 jari 489         JPanel mevButtonPanel;
2 26 Feb 07 jari 490         
2 26 Feb 07 jari 491         JPanel annSelectionPanel;
2 26 Feb 07 jari 492         JPanel annListPanel;
2 26 Feb 07 jari 493         JLabel annAvailableLabel;
2 26 Feb 07 jari 494         JLabel annSelectedLabel;
2 26 Feb 07 jari 495         JList annAvailableList;
2 26 Feb 07 jari 496         JList annSelectedList;
2 26 Feb 07 jari 497         JScrollPane annAvailableScrollPane;
2 26 Feb 07 jari 498         JScrollPane annSelectedScrollPane;
2 26 Feb 07 jari 499         JButton annAddButton;
2 26 Feb 07 jari 500         JButton annAddAllButton;
2 26 Feb 07 jari 501         JButton annRemoveButton;
2 26 Feb 07 jari 502         JButton annRemoveAllButton;
2 26 Feb 07 jari 503         JPanel annButtonPanel;
2 26 Feb 07 jari 504         JTextField annFieldsTextField;
2 26 Feb 07 jari 505         
2 26 Feb 07 jari 506         JPanel selectionPanel;
2 26 Feb 07 jari 507         JSplitPane splitPane;
2 26 Feb 07 jari 508         JPanel fileLoaderPanel;
2 26 Feb 07 jari 509         
2 26 Feb 07 jari 510         JCheckBox noAnnFileBox;
2 26 Feb 07 jari 511         JCheckBox saveSpotInfoBox;
2 26 Feb 07 jari 512         //JCheckBox cutQuotesBox;
2 26 Feb 07 jari 513         
2 26 Feb 07 jari 514         JRadioButton loadIButton;
2 26 Feb 07 jari 515         JRadioButton loadMedButton;
2 26 Feb 07 jari 516         
2 26 Feb 07 jari 517         public AgilentMevFileLoaderPanel() {
2 26 Feb 07 jari 518             
2 26 Feb 07 jari 519             setLayout(new GridBagLayout());
2 26 Feb 07 jari 520             
2 26 Feb 07 jari 521             fileTreePane = new FileTreePane(SuperExpressionFileLoader.DATA_PATH);
2 26 Feb 07 jari 522             fileTreePane.addFileTreePaneListener(new FileTreePaneEventHandler());
2 26 Feb 07 jari 523             fileTreePane.setPreferredSize(new java.awt.Dimension(200, 50));
2 26 Feb 07 jari 524             
2 26 Feb 07 jari 525             pathTextField = new JTextField();
2 26 Feb 07 jari 526             pathTextField.setEditable(false);
2 26 Feb 07 jari 527             pathTextField.setBorder(new TitledBorder(new EtchedBorder(), "Selected Path"));
2 26 Feb 07 jari 528             pathTextField.setForeground(Color.black);
2 26 Feb 07 jari 529             pathTextField.setFont(new Font("monospaced", Font.BOLD, 12));
2 26 Feb 07 jari 530             
2 26 Feb 07 jari 531             mevSelectionPanel = new JPanel();
2 26 Feb 07 jari 532             mevSelectionPanel.setLayout(new GridBagLayout());
2 26 Feb 07 jari 533             mevSelectionPanel.setBorder(new TitledBorder(new EtchedBorder(), getFileFilter().getDescription()));
2 26 Feb 07 jari 534             
2 26 Feb 07 jari 535             mevAvailableLabel = new JLabel("Available");
2 26 Feb 07 jari 536             mevSelectedLabel = new JLabel("Selected");
2 26 Feb 07 jari 537             mevAvailableList = new JList(new DefaultListModel());
2 26 Feb 07 jari 538             mevAvailableList.setCellRenderer(new ListRenderer());
2 26 Feb 07 jari 539             mevSelectedList = new JList(new DefaultListModel());
2 26 Feb 07 jari 540             mevSelectedList.setCellRenderer(new ListRenderer());
2 26 Feb 07 jari 541             mevAvailableScrollPane = new JScrollPane(mevAvailableList);
2 26 Feb 07 jari 542             mevSelectedScrollPane = new JScrollPane(mevSelectedList);
2 26 Feb 07 jari 543             mevAddButton = new JButton("Add");
2 26 Feb 07 jari 544             mevAddButton.setPreferredSize(new Dimension(100,20));
2 26 Feb 07 jari 545             //mevAddButton.setSize(100,20);
2 26 Feb 07 jari 546             mevAddButton.addActionListener(new EventHandler());
2 26 Feb 07 jari 547             mevAddAllButton = new JButton("Add All");
2 26 Feb 07 jari 548             //mevAddAllButton.setSize(100,20);
2 26 Feb 07 jari 549             mevAddAllButton.setPreferredSize(new Dimension(100,20));
2 26 Feb 07 jari 550             
2 26 Feb 07 jari 551             mevAddAllButton.addActionListener(new EventHandler());
2 26 Feb 07 jari 552             mevRemoveButton = new JButton("Remove");
2 26 Feb 07 jari 553             //mevRemoveButton.setSize(100,20);
2 26 Feb 07 jari 554             mevRemoveButton.setPreferredSize(new Dimension(100,20));
2 26 Feb 07 jari 555             
2 26 Feb 07 jari 556             mevRemoveButton.addActionListener(new EventHandler());
2 26 Feb 07 jari 557             mevRemoveAllButton = new JButton("Remove All");
2 26 Feb 07 jari 558             //mevRemoveAllButton.setSize(100,20);
2 26 Feb 07 jari 559             mevRemoveAllButton.setPreferredSize(new Dimension(100,20));
2 26 Feb 07 jari 560             
2 26 Feb 07 jari 561             mevRemoveAllButton.addActionListener(new EventHandler());
2 26 Feb 07 jari 562             
2 26 Feb 07 jari 563             //  Dimension largestMevButtonSize = mevRemoveAllButton.getPreferredSize();
2 26 Feb 07 jari 564             // mevAddButton.setPreferredSize(largestMevButtonSize);
2 26 Feb 07 jari 565             //   mevAddAllButton.setPreferredSize(largestMevButtonSize);
2 26 Feb 07 jari 566             ////     mevRemoveButton.setPreferredSize(largestMevButtonSize);
2 26 Feb 07 jari 567             //     mevRemoveAllButton.setPreferredSize(largestMevButtonSize);
2 26 Feb 07 jari 568             
2 26 Feb 07 jari 569             mevButtonPanel = new JPanel();
2 26 Feb 07 jari 570             mevButtonPanel.setLayout(new GridBagLayout());
2 26 Feb 07 jari 571             //mevButtonPanel.setSize(110, 150);
2 26 Feb 07 jari 572             //mevButtonPanel.setPreferredSize(new Dimension(110, 150));
2 26 Feb 07 jari 573             
2 26 Feb 07 jari 574             gba.add(mevButtonPanel, mevAddButton, 0, 0, 1, 1, 0, 0, GBA.N, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 575             gba.add(mevButtonPanel, mevAddAllButton, 0, 1, 1, 1, 0, 0, GBA.N, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 576             gba.add(mevButtonPanel, mevRemoveButton, 0, 2, 1, 1, 0, 0, GBA.N, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 577             gba.add(mevButtonPanel, mevRemoveAllButton, 0, 3, 1, 1, 0, 0, GBA.N, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 578             
2 26 Feb 07 jari 579             
2 26 Feb 07 jari 580             //Medians vs. Integrate intensities
2 26 Feb 07 jari 581             loadIButton = new JRadioButton("Load Integrated Spot Intensities", true);
2 26 Feb 07 jari 582             loadIButton.setFocusPainted(false);
2 26 Feb 07 jari 583             loadMedButton = new JRadioButton("Load Median Spot Intensities");
2 26 Feb 07 jari 584             loadMedButton.setFocusPainted(false);
2 26 Feb 07 jari 585             ButtonGroup bg = new ButtonGroup();
2 26 Feb 07 jari 586             bg.add(loadIButton);
2 26 Feb 07 jari 587             bg.add(loadMedButton);
2 26 Feb 07 jari 588             
2 26 Feb 07 jari 589             noAnnFileBox = new JCheckBox("Use Annotation Contained in MeV File (no annotation file)", false);
2 26 Feb 07 jari 590             noAnnFileBox.setFocusPainted(false);
2 26 Feb 07 jari 591             noAnnFileBox.setActionCommand("use-annotation-in-mev-file");
2 26 Feb 07 jari 592             noAnnFileBox.addActionListener(new EventHandler());
2 26 Feb 07 jari 593             
2 26 Feb 07 jari 594             saveSpotInfoBox = new JCheckBox("Load Auxiliary Spot Information", false);
2 26 Feb 07 jari 595             saveSpotInfoBox.setFocusPainted(false);
2 26 Feb 07 jari 596             
2 26 Feb 07 jari 597             //cutQuotesBox = new JCheckBox("Remove Annotation Quotes(\"...\")", false);
2 26 Feb 07 jari 598             //cutQuotesBox.setHorizontalAlignment(JCheckBox.CENTER);
2 26 Feb 07 jari 599             //cutQuotesBox.setFocusPainted(false);
2 26 Feb 07 jari 600             
2 26 Feb 07 jari 601             selectionPanel = new JPanel();
2 26 Feb 07 jari 602             selectionPanel.setLayout(new GridBagLayout());
2 26 Feb 07 jari 603
2 26 Feb 07 jari 604             JPanel buttonPanel = new JPanel();
2 26 Feb 07 jari 605             buttonPanel.setLayout(new GridBagLayout());
2 26 Feb 07 jari 606             
2 26 Feb 07 jari 607             gba.add(buttonPanel, loadIButton, 0, 0, 1, 1, 1, 0, GBA.H, GBA.C, new Insets(0, 20, 0, 5), 0, 0);
2 26 Feb 07 jari 608             gba.add(buttonPanel, saveSpotInfoBox, 1, 0, 1, 1, 1, 0, GBA.H, GBA.C, new Insets(0, 20, 0, 5), 0, 0);
2 26 Feb 07 jari 609             
2 26 Feb 07 jari 610             gba.add(buttonPanel, loadMedButton, 0, 1, 1, 1, 1, 0, GBA.H, GBA.C, new Insets(0, 20, 0, 5), 0, 0);
2 26 Feb 07 jari 611             gba.add(buttonPanel, noAnnFileBox, 1, 1, 1, 1, 1, 0, GBA.H, GBA.C, new Insets(0, 20, 0, 5), 0, 0);            
2 26 Feb 07 jari 612
2 26 Feb 07 jari 613             //gba.add(buttonPanel, cutQuotesBox, 0, 2, 2, 1, 1, 0, GBA.H, GBA.E, new Insets(0, 118, 0, 5), 0, 0);
2 26 Feb 07 jari 614             
2 26 Feb 07 jari 615             mevListPanel = new JPanel();
2 26 Feb 07 jari 616             mevListPanel.setLayout(new GridBagLayout());
2 26 Feb 07 jari 617             
2 26 Feb 07 jari 618             //            gba.add(mevSelectionPanel, selectionPanel, 0, 0, 1, 1, 1, 1, GBA.B, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 619             
2 26 Feb 07 jari 620             gba.add(mevListPanel, mevAvailableLabel, 0, 0, 1, 1, 0, 0, GBA.N, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 621             gba.add(mevListPanel, mevAvailableScrollPane, 0, 1, 1, 4, 5, 1, GBA.B, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 622             gba.add(mevListPanel, new JPanel(), 1, 0, 1, 1, 0, 0, GBA.B, GBA.C, new Insets(0,0,0,0), 0, 0);
2 26 Feb 07 jari 623             gba.add(mevListPanel, mevButtonPanel, 1, 1, 1, 4, 1, 1, GBA.B, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 624             gba.add(mevListPanel, mevSelectedLabel, 2, 0, 1, 1, 0, 0, GBA.N, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 625             gba.add(mevListPanel, mevSelectedScrollPane, 2, 1, 1, 4, 5, 1, GBA.B, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 626             
2 26 Feb 07 jari 627                         
2 26 Feb 07 jari 628             gba.add(mevSelectionPanel, buttonPanel, 0, 0, 1, 1, 1, 1, GBA.B, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 629             gba.add(mevSelectionPanel, mevListPanel, 0, 1, 1, 1, 1, 1, GBA.B, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 630  
2 26 Feb 07 jari 631             gba.add(selectionPanel, pathTextField, 0, 0, 2, 1, 1, 0, GBA.H, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 632             gba.add(selectionPanel, mevSelectionPanel, 0, 1, 2, 2, 1, 1, GBA.B, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 633             
2 26 Feb 07 jari 634             
2 26 Feb 07 jari 635           /*
2 26 Feb 07 jari 636            
2 26 Feb 07 jari 637                 gba.add(mevListPanel, mevAvailableLabel, 0, 0, 1, 1, 0, 0, GBA.N, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 638             gba.add(mevListPanel, mevSelectedLabel, 2, 0, 1, 1, 0, 0, GBA.N, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 639             gba.add(mevListPanel, mevAvailableScrollPane, 0, 1, 1, 4, 1, 1, GBA.B, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 640             gba.add(mevListPanel, mevButtonPanel, 1, 1, 1, 4, 0, 1, GBA.V, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 641             gba.add(mevListPanel, mevSelectedScrollPane, 2, 1, 1, 4, 1, 1, GBA.B, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 642            
2 26 Feb 07 jari 643             gba.add(mevSelectionPanel, mevListPanel, 0, 0, 1, 1, 1, 1, GBA.B, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 644            */
2 26 Feb 07 jari 645             
2 26 Feb 07 jari 646             
2 26 Feb 07 jari 647             annSelectionPanel = new JPanel();
2 26 Feb 07 jari 648             annSelectionPanel.setLayout(new GridBagLayout());
2 26 Feb 07 jari 649             annSelectionPanel.setBorder(new TitledBorder(new EtchedBorder(), getAnnotationFileFilter().getDescription()));
2 26 Feb 07 jari 650             
2 26 Feb 07 jari 651             annAvailableLabel = new JLabel("Available");
2 26 Feb 07 jari 652             annSelectedLabel = new JLabel("Selected");
2 26 Feb 07 jari 653             annAvailableList = new JList(new DefaultListModel());
2 26 Feb 07 jari 654             annAvailableList.setCellRenderer(new ListRenderer());
2 26 Feb 07 jari 655             annSelectedList = new JList(new DefaultListModel());
2 26 Feb 07 jari 656             annSelectedList.setCellRenderer(new ListRenderer());
2 26 Feb 07 jari 657             annAvailableScrollPane = new JScrollPane(annAvailableList);
2 26 Feb 07 jari 658             annSelectedScrollPane = new JScrollPane(annSelectedList);
2 26 Feb 07 jari 659             annAddButton = new JButton("Add");
2 26 Feb 07 jari 660             annAddButton.addActionListener(new EventHandler());
2 26 Feb 07 jari 661             annAddAllButton = new JButton("Add All");
2 26 Feb 07 jari 662             annAddAllButton.addActionListener(new EventHandler());
2 26 Feb 07 jari 663             annRemoveButton = new JButton("Remove");
2 26 Feb 07 jari 664             annRemoveButton.addActionListener(new EventHandler());
2 26 Feb 07 jari 665             annRemoveAllButton = new JButton("Remove All");
2 26 Feb 07 jari 666             annRemoveAllButton.addActionListener(new EventHandler());
2 26 Feb 07 jari 667             
2 26 Feb 07 jari 668             Dimension buttonSize = new Dimension(100, 20);
2 26 Feb 07 jari 669             
2 26 Feb 07 jari 670             Dimension largestAnnButtonSize = annRemoveAllButton.getPreferredSize();
2 26 Feb 07 jari 671             annAddButton.setPreferredSize(buttonSize);
2 26 Feb 07 jari 672             annAddAllButton.setPreferredSize(buttonSize);
2 26 Feb 07 jari 673             annRemoveButton.setPreferredSize(buttonSize);
2 26 Feb 07 jari 674             annRemoveAllButton.setPreferredSize(buttonSize);
2 26 Feb 07 jari 675             
2 26 Feb 07 jari 676             this.mevAddAllButton.setFocusPainted(false);
2 26 Feb 07 jari 677             this.mevAddButton.setFocusPainted(false);
2 26 Feb 07 jari 678             this.mevRemoveAllButton.setFocusPainted(false);
2 26 Feb 07 jari 679             this.mevRemoveButton.setFocusPainted(false);
2 26 Feb 07 jari 680             
2 26 Feb 07 jari 681             this.annAddAllButton.setFocusPainted(false);
2 26 Feb 07 jari 682             this.annAddButton.setFocusPainted(false);
2 26 Feb 07 jari 683             this.annRemoveAllButton.setFocusPainted(false);
2 26 Feb 07 jari 684             this.annRemoveButton.setFocusPainted(false);
2 26 Feb 07 jari 685             
2 26 Feb 07 jari 686             annButtonPanel = new JPanel();
2 26 Feb 07 jari 687             annButtonPanel.setLayout(new GridBagLayout());
2 26 Feb 07 jari 688             
2 26 Feb 07 jari 689             gba.add(annButtonPanel, annAddButton, 0, 0, 1, 1, 0, 0, GBA.N, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 690             gba.add(annButtonPanel, annAddAllButton, 0, 1, 1, 1, 0, 0, GBA.N, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 691             gba.add(annButtonPanel, annRemoveButton, 0, 2, 1, 1, 0, 0, GBA.N, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 692             gba.add(annButtonPanel, annRemoveAllButton, 0, 3, 1, 1, 0, 0, GBA.N, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 693             
2 26 Feb 07 jari 694             annListPanel = new JPanel();
2 26 Feb 07 jari 695             annListPanel.setLayout(new GridBagLayout());
2 26 Feb 07 jari 696             
2 26 Feb 07 jari 697             gba.add(annListPanel, annAvailableLabel, 0, 0, 1, 1, 0, 0, GBA.N, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 698             gba.add(annListPanel, annSelectedLabel, 2, 0, 1, 1, 0, 0, GBA.N, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 699             gba.add(annListPanel, annAvailableScrollPane, 0, 1, 1, 4, 5, 1, GBA.B, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 700             gba.add(annListPanel, new JPanel(), 1, 0, 1, 1, 0, 0, GBA.B, GBA.C, new Insets(0, 0, 0, 0), 0, 0); 
2 26 Feb 07 jari 701             gba.add(annListPanel, annButtonPanel, 1, 1, 1, 4, 1, 1, GBA.B, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 702             gba.add(annListPanel, annSelectedScrollPane, 2, 1, 1, 4, 5, 1, GBA.B, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 703             
2 26 Feb 07 jari 704             annFieldsTextField = new JTextField();
2 26 Feb 07 jari 705             annFieldsTextField.setEditable(false);
2 26 Feb 07 jari 706             annFieldsTextField.setBorder(new TitledBorder(new EtchedBorder(), "Annotation Fields"));
2 26 Feb 07 jari 707             annFieldsTextField.setForeground(Color.black);
2 26 Feb 07 jari 708             annFieldsTextField.setFont(new Font("serif", Font.BOLD, 12));
2 26 Feb 07 jari 709             
2 26 Feb 07 jari 710             gba.add(annSelectionPanel, annListPanel, 0, 0, 1, 2, 1, 1, GBA.B, GBA.C, new Insets(5, 5, 0, 5), 0, 0);
2 26 Feb 07 jari 711             gba.add(annSelectionPanel, annFieldsTextField, 0, 2, 1, 1, 1, 0, GBA.H, GBA.C, new Insets(0, 5, 0, 5), 0, 0);
2 26 Feb 07 jari 712             
2 26 Feb 07 jari 713             gba.add(selectionPanel, annSelectionPanel, 0, 3, 2, 2, 1, 1, GBA.B, GBA.C, new Insets(0, 5, 0, 5), 0, 0);
2 26 Feb 07 jari 714             
2 26 Feb 07 jari 715             splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, fileTreePane, selectionPanel);
2 26 Feb 07 jari 716
2 26 Feb 07 jari 717             fileLoaderPanel = new JPanel();
2 26 Feb 07 jari 718             fileLoaderPanel.setLayout(new GridBagLayout());
2 26 Feb 07 jari 719             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 720             
2 26 Feb 07 jari 721             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 722             splitPane.setDividerLocation(0.6);     
2 26 Feb 07 jari 723             
2 26 Feb 07 jari 724         }
2 26 Feb 07 jari 725         
2 26 Feb 07 jari 726         public void setPath(String path) {
2 26 Feb 07 jari 727             pathTextField.setText(path);
2 26 Feb 07 jari 728         }
2 26 Feb 07 jari 729         
2 26 Feb 07 jari 730         public void openDataPath(){
2 26 Feb 07 jari 731             this.fileTreePane.openDataPath();
2 26 Feb 07 jari 732         }
2 26 Feb 07 jari 733         
2 26 Feb 07 jari 734         
2 26 Feb 07 jari 735         public void validateLists() {
2 26 Feb 07 jari 736             
2 26 Feb 07 jari 737             // Currently, a minimum of one mev file must be selected to enable loading
2 26 Feb 07 jari 738             
2 26 Feb 07 jari 739             if (((DefaultListModel) mevSelectedList.getModel()).size() > 0) {
2 26 Feb 07 jari 740                 markLoadEnabled(true);
2 26 Feb 07 jari 741             } else {
2 26 Feb 07 jari 742                 markLoadEnabled(false);
2 26 Feb 07 jari 743             }
2 26 Feb 07 jari 744         }
2 26 Feb 07 jari 745         
2 26 Feb 07 jari 746         public void onMevAdd() {
2 26 Feb 07 jari 747             int[] chosenIndices = mevAvailableList.getSelectedIndices();
2 26 Feb 07 jari 748             Object[] chosenObjects = new Object[chosenIndices.length];
2 26 Feb 07 jari 749             
2 26 Feb 07 jari 750             for (int i = chosenIndices.length - 1; i >= 0; i--) {
2 26 Feb 07 jari 751                 // For remove-then-add functionality
2 26 Feb 07 jari 752                 //Object addItem = ((DefaultListModel) mevAvailableList.getModel()).remove(chosenIndices[i]);
2 26 Feb 07 jari 753                 // For copy-then-add functionality
2 26 Feb 07 jari 754                 Object addItem = ((DefaultListModel) mevAvailableList.getModel()).getElementAt(chosenIndices[i]);
2 26 Feb 07 jari 755                 chosenObjects[i] = addItem;
2 26 Feb 07 jari 756             }
2 26 Feb 07 jari 757             
2 26 Feb 07 jari 758             for (int i = 0; i < chosenIndices.length; i++) {
2 26 Feb 07 jari 759                 ((DefaultListModel) mevSelectedList.getModel()).addElement(chosenObjects[i]);
2 26 Feb 07 jari 760             }
2 26 Feb 07 jari 761             
2 26 Feb 07 jari 762             validateLists();
2 26 Feb 07 jari 763         }
2 26 Feb 07 jari 764         
2 26 Feb 07 jari 765         public void onMevAddAll() {
2 26 Feb 07 jari 766             int elementCount = ((DefaultListModel) mevAvailableList.getModel()).size();
2 26 Feb 07 jari 767             for (int i = 0; i < elementCount; i++) {
2 26 Feb 07 jari 768                 Object addItem = ((DefaultListModel) mevAvailableList.getModel()).getElementAt(i);
2 26 Feb 07 jari 769                 ((DefaultListModel) mevSelectedList.getModel()).addElement(addItem);
2 26 Feb 07 jari 770             }
2 26 Feb 07 jari 771             
2 26 Feb 07 jari 772             validateLists();
2 26 Feb 07 jari 773         }
2 26 Feb 07 jari 774         
2 26 Feb 07 jari 775         public void onMevRemove() {
2 26 Feb 07 jari 776             int[] chosenIndices = mevSelectedList.getSelectedIndices();
2 26 Feb 07 jari 777             
2 26 Feb 07 jari 778             // Designed with copy-then-add functionality in mind
2 26 Feb 07 jari 779             for (int i = chosenIndices.length - 1; i >= 0; i--) {
2 26 Feb 07 jari 780                 ((DefaultListModel) mevSelectedList.getModel()).remove(chosenIndices[i]);
2 26 Feb 07 jari 781             }
2 26 Feb 07 jari 782             
2 26 Feb 07 jari 783             validateLists();
2 26 Feb 07 jari 784         }
2 26 Feb 07 jari 785         
2 26 Feb 07 jari 786         public void onMevRemoveAll() {
2 26 Feb 07 jari 787             // Designed with copy-then-add functionality in mind
2 26 Feb 07 jari 788             ((DefaultListModel) mevSelectedList.getModel()).removeAllElements();
2 26 Feb 07 jari 789             
2 26 Feb 07 jari 790             validateLists();
2 26 Feb 07 jari 791         }
2 26 Feb 07 jari 792         
2 26 Feb 07 jari 793         public void onAnnAdd() {
2 26 Feb 07 jari 794             int[] chosenIndices = annAvailableList.getSelectedIndices();
2 26 Feb 07 jari 795             Object[] chosenObjects = new Object[chosenIndices.length];
2 26 Feb 07 jari 796             
2 26 Feb 07 jari 797             for (int i = chosenIndices.length - 1; i >= 0; i--) {
2 26 Feb 07 jari 798                 // For remove-then-add functionality
2 26 Feb 07 jari 799                 //Object addItem = ((DefaultListModel) annAvailableList.getModel()).remove(chosenIndices[i]);
2 26 Feb 07 jari 800                 // For copy-then-add functionality
2 26 Feb 07 jari 801                 Object addItem = ((DefaultListModel) annAvailableList.getModel()).getElementAt(chosenIndices[i]);
2 26 Feb 07 jari 802                 chosenObjects[i] = addItem;
2 26 Feb 07 jari 803             }
2 26 Feb 07 jari 804             
2 26 Feb 07 jari 805             for (int i = 0; i < chosenIndices.length; i++) {
2 26 Feb 07 jari 806                 ((DefaultListModel) annSelectedList.getModel()).addElement(chosenObjects[i]);
2 26 Feb 07 jari 807             }
2 26 Feb 07 jari 808             
2 26 Feb 07 jari 809             validateLists();
2 26 Feb 07 jari 810             updateAnnFieldTextField();
2 26 Feb 07 jari 811         }
2 26 Feb 07 jari 812         
2 26 Feb 07 jari 813         public void onAnnAddAll() {
2 26 Feb 07 jari 814             int elementCount = ((DefaultListModel) annAvailableList.getModel()).size();
2 26 Feb 07 jari 815             for (int i = 0; i < elementCount; i++) {
2 26 Feb 07 jari 816                 Object addItem = ((DefaultListModel) annAvailableList.getModel()).getElementAt(i);
2 26 Feb 07 jari 817                 ((DefaultListModel) annSelectedList.getModel()).addElement(addItem);
2 26 Feb 07 jari 818             }
2 26 Feb 07 jari 819             
2 26 Feb 07 jari 820             validateLists();
2 26 Feb 07 jari 821             updateAnnFieldTextField();
2 26 Feb 07 jari 822         }
2 26 Feb 07 jari 823         
2 26 Feb 07 jari 824         public void onAnnRemove() {
2 26 Feb 07 jari 825             int[] chosenIndices = annSelectedList.getSelectedIndices();
2 26 Feb 07 jari 826             
2 26 Feb 07 jari 827             // Designed with copy-then-add functionality in mind
2 26 Feb 07 jari 828             for (int i = chosenIndices.length - 1; i >= 0; i--) {
2 26 Feb 07 jari 829                 ((DefaultListModel) annSelectedList.getModel()).remove(chosenIndices[i]);
2 26 Feb 07 jari 830             }
2 26 Feb 07 jari 831             
2 26 Feb 07 jari 832             validateLists();
2 26 Feb 07 jari 833             updateAnnFieldTextField();
2 26 Feb 07 jari 834         }
2 26 Feb 07 jari 835         
2 26 Feb 07 jari 836         public void onAnnRemoveAll() {
2 26 Feb 07 jari 837             // Designed with copy-then-add functionality in mind
2 26 Feb 07 jari 838             ((DefaultListModel) annSelectedList.getModel()).removeAllElements();
2 26 Feb 07 jari 839             
2 26 Feb 07 jari 840             validateLists();
2 26 Feb 07 jari 841             updateAnnFieldTextField();
2 26 Feb 07 jari 842         }
2 26 Feb 07 jari 843         
2 26 Feb 07 jari 844         public void updateAnnFieldTextField() {
2 26 Feb 07 jari 845             DefaultListModel model = (DefaultListModel) annSelectedList.getModel();
2 26 Feb 07 jari 846             AgilentAnnFileParser parser = new AgilentAnnFileParser();
2 26 Feb 07 jari 847             Vector annVector;
2 26 Feb 07 jari 848             String text = "";
2 26 Feb 07 jari 849             for(int i = 0; i < model.getSize(); i++) {
2 26 Feb 07 jari 850                 File annFile = (File)(model.get(i));
2 26 Feb 07 jari 851                 parser.loadFile(annFile);
2 26 Feb 07 jari 852                 if(parser.isAnnFileLoaded()) {
2 26 Feb 07 jari 853                     annVector = parser.getColumnHeaders();
2 26 Feb 07 jari 854                     
2 26 Feb 07 jari 855                     if(i > 0 && annVector.size() > 3)
2 26 Feb 07 jari 856                         text+= ", ";
2 26 Feb 07 jari 857                     
2 26 Feb 07 jari 858                     for(int j = 3; j < annVector.size()-1; j++){
2 26 Feb 07 jari 859                         text += (((String)annVector.elementAt(j)))+", ";
2 26 Feb 07 jari 860                     }
2 26 Feb 07 jari 861                     text += ((String)annVector.elementAt(annVector.size()-1));
2 26 Feb 07 jari 862                 }
2 26 Feb 07 jari 863             }
2 26 Feb 07 jari 864             this.annFieldsTextField.setText(text);
2 26 Feb 07 jari 865         }
2 26 Feb 07 jari 866         
2 26 Feb 07 jari 867         public void onUseMevAnn() {
2 26 Feb 07 jari 868             if(this.noAnnFileBox.isSelected())
2 26 Feb 07 jari 869                 enableAnnotationPanel(false);
2 26 Feb 07 jari 870             else {
2 26 Feb 07 jari 871                 enableAnnotationPanel(true);
2 26 Feb 07 jari 872             }
2 26 Feb 07 jari 873         }
2 26 Feb 07 jari 874         
2 26 Feb 07 jari 875         public void enableAnnotationPanel(boolean enable) {
2 26 Feb 07 jari 876             this.annAddAllButton.setEnabled(enable);
2 26 Feb 07 jari 877             this.annAddButton.setEnabled(enable);
2 26 Feb 07 jari 878             this.annRemoveAllButton.setEnabled(enable);
2 26 Feb 07 jari 879             this.annRemoveButton.setEnabled(enable);
2 26 Feb 07 jari 880             this.annAvailableLabel.setEnabled(enable);
2 26 Feb 07 jari 881             this.annSelectedLabel.setEnabled(enable);
2 26 Feb 07 jari 882             this.annAvailableList.setEnabled(enable);
2 26 Feb 07 jari 883             this.annSelectedList.setEnabled(enable);
2 26 Feb 07 jari 884             this.annFieldsTextField.setEnabled(enable);
2 26 Feb 07 jari 885             
2 26 Feb 07 jari 886             if(!enable){
2 26 Feb 07 jari 887                 this.annAvailableList.setBackground(Color.lightGray);
2 26 Feb 07 jari 888                 this.annSelectedList.setBackground(Color.lightGray);
2 26 Feb 07 jari 889             } else {
2 26 Feb 07 jari 890                 this.annAvailableList.setBackground(Color.white);
2 26 Feb 07 jari 891                 this.annSelectedList.setBackground(Color.white);
2 26 Feb 07 jari 892             }
2 26 Feb 07 jari 893         }
2 26 Feb 07 jari 894         
2 26 Feb 07 jari 895         public DefaultListModel getMevAvailableListModel() {
2 26 Feb 07 jari 896             return (DefaultListModel) mevAvailableList.getModel();
2 26 Feb 07 jari 897         }
2 26 Feb 07 jari 898         
2 26 Feb 07 jari 899         public DefaultListModel getAnnAvailableListModel() {
2 26 Feb 07 jari 900             return (DefaultListModel) annAvailableList.getModel();
2 26 Feb 07 jari 901         }
2 26 Feb 07 jari 902         
2 26 Feb 07 jari 903         public DefaultListModel getMevSelectedListModel() {
2 26 Feb 07 jari 904             return (DefaultListModel) mevSelectedList.getModel();
2 26 Feb 07 jari 905         }
2 26 Feb 07 jari 906         
2 26 Feb 07 jari 907         public DefaultListModel getAnnSelectedListModel() {
2 26 Feb 07 jari 908             return (DefaultListModel) annSelectedList.getModel();
2 26 Feb 07 jari 909         }
2 26 Feb 07 jari 910         
2 26 Feb 07 jari 911         private class ListRenderer extends DefaultListCellRenderer {
2 26 Feb 07 jari 912             public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
2 26 Feb 07 jari 913                 super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
2 26 Feb 07 jari 914                 File file = (File) value;
2 26 Feb 07 jari 915                 setText(file.getName());
2 26 Feb 07 jari 916                 return this;
2 26 Feb 07 jari 917             }
2 26 Feb 07 jari 918         }
2 26 Feb 07 jari 919         
2 26 Feb 07 jari 920         private class EventHandler implements ActionListener {
2 26 Feb 07 jari 921             public void actionPerformed(ActionEvent event) {
2 26 Feb 07 jari 922                 
2 26 Feb 07 jari 923                 Object source = event.getSource();
2 26 Feb 07 jari 924                 
2 26 Feb 07 jari 925                 if (source == mevAddButton) {
2 26 Feb 07 jari 926                     onMevAdd();
2 26 Feb 07 jari 927                 } else if (source == mevAddAllButton) {
2 26 Feb 07 jari 928                     onMevAddAll();
2 26 Feb 07 jari 929                 } else if (source == mevRemoveButton) {
2 26 Feb 07 jari 930                     onMevRemove();
2 26 Feb 07 jari 931                 } else if (source == mevRemoveAllButton) {
2 26 Feb 07 jari 932                     onMevRemoveAll();
2 26 Feb 07 jari 933                 } else if (source == annAddButton) {
2 26 Feb 07 jari 934                     onAnnAdd();
2 26 Feb 07 jari 935                 } else if (source == annAddAllButton) {
2 26 Feb 07 jari 936                     onAnnAddAll();
2 26 Feb 07 jari 937                 } else if (source == annRemoveButton) {
2 26 Feb 07 jari 938                     onAnnRemove();
2 26 Feb 07 jari 939                 } else if (source == annRemoveAllButton) {
2 26 Feb 07 jari 940                     onAnnRemoveAll();
2 26 Feb 07 jari 941                 } else if (source == noAnnFileBox) {
2 26 Feb 07 jari 942                     onUseMevAnn();
2 26 Feb 07 jari 943                 }
2 26 Feb 07 jari 944             }
2 26 Feb 07 jari 945         }
2 26 Feb 07 jari 946         
2 26 Feb 07 jari 947         private class FileTreePaneEventHandler implements FileTreePaneListener {
2 26 Feb 07 jari 948             
2 26 Feb 07 jari 949             public void nodeSelected(FileTreePaneEvent event) {
2 26 Feb 07 jari 950                 
2 26 Feb 07 jari 951                 String filePath = (String) event.getValue("Path");
2 26 Feb 07 jari 952                 Vector fileNames = (Vector) event.getValue("Filenames");
2 26 Feb 07 jari 953                 
2 26 Feb 07 jari 954                 processFileList(filePath, fileNames);
2 26 Feb 07 jari 955             }
2 26 Feb 07 jari 956             
2 26 Feb 07 jari 957             public void nodeCollapsed(FileTreePaneEvent event) {}
2 26 Feb 07 jari 958             public void nodeExpanded(FileTreePaneEvent event) {}
2 26 Feb 07 jari 959         }
2 26 Feb 07 jari 960     }
2 26 Feb 07 jari 961     
2 26 Feb 07 jari 962         public class ProgressRunner implements Runnable {
2 26 Feb 07 jari 963         
2 26 Feb 07 jari 964         
2 26 Feb 07 jari 965         public void run() {
2 26 Feb 07 jari 966             progress = new SlideLoaderProgressBar(superLoader.getFrame());
2 26 Feb 07 jari 967         }
2 26 Feb 07 jari 968         
2 26 Feb 07 jari 969     }
2 26 Feb 07 jari 970 }