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