mev-4.0.01/source/org/tigr/microarray/mev/file/TavFileLoader.java

Code
Comments
Other
Rev Date Author Line
2 26 Feb 07 jari 1 /*
2 26 Feb 07 jari 2 Copyright @ 1999-2003, 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: TavFileLoader.java,v $
2 26 Feb 07 jari 7  * $Revision: 1.6 $
2 26 Feb 07 jari 8  * $Date: 2006/03/28 18:42:25 $
2 26 Feb 07 jari 9  * $Author: wwang67 $
2 26 Feb 07 jari 10  * $State: Exp $
2 26 Feb 07 jari 11  */
2 26 Feb 07 jari 12
2 26 Feb 07 jari 13 package org.tigr.microarray.mev.file;
2 26 Feb 07 jari 14
2 26 Feb 07 jari 15 import java.awt.Color;
2 26 Feb 07 jari 16 import java.awt.Component;
2 26 Feb 07 jari 17 import java.awt.Dimension;
2 26 Feb 07 jari 18 import java.awt.Font;
2 26 Feb 07 jari 19 import java.awt.GridBagLayout;
2 26 Feb 07 jari 20 import java.awt.Insets;
2 26 Feb 07 jari 21 import java.awt.event.ActionEvent;
2 26 Feb 07 jari 22 import java.awt.event.ActionListener;
2 26 Feb 07 jari 23 import java.io.BufferedReader;
2 26 Feb 07 jari 24 import java.io.File;
2 26 Feb 07 jari 25 import java.io.FileReader;
2 26 Feb 07 jari 26 import java.io.IOException;
2 26 Feb 07 jari 27 import java.util.Vector;
2 26 Feb 07 jari 28
2 26 Feb 07 jari 29 import javax.swing.DefaultListCellRenderer;
2 26 Feb 07 jari 30 import javax.swing.DefaultListModel;
2 26 Feb 07 jari 31 import javax.swing.JButton;
2 26 Feb 07 jari 32 import javax.swing.JFileChooser;
2 26 Feb 07 jari 33 import javax.swing.JLabel;
2 26 Feb 07 jari 34 import javax.swing.JList;
2 26 Feb 07 jari 35 import javax.swing.JPanel;
2 26 Feb 07 jari 36 import javax.swing.JScrollPane;
2 26 Feb 07 jari 37 import javax.swing.JSplitPane;
2 26 Feb 07 jari 38 import javax.swing.JTabbedPane;
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.event.ChangeEvent;
2 26 Feb 07 jari 43 import javax.swing.event.ChangeListener;
2 26 Feb 07 jari 44 import javax.swing.filechooser.FileFilter;
2 26 Feb 07 jari 45
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.ISlideDataElement;
2 26 Feb 07 jari 49 import org.tigr.microarray.mev.ISlideMetaData;
2 26 Feb 07 jari 50 import org.tigr.microarray.mev.SlideData;
2 26 Feb 07 jari 51 import org.tigr.microarray.mev.SlideDataElement;
2 26 Feb 07 jari 52 import org.tigr.microarray.mev.TMEV;
2 26 Feb 07 jari 53
2 26 Feb 07 jari 54 public class TavFileLoader extends ExpressionFileLoader {
2 26 Feb 07 jari 55     
2 26 Feb 07 jari 56     private GBA gba;
2 26 Feb 07 jari 57     private TavFileLoaderPanel tflp;
2 26 Feb 07 jari 58     
2 26 Feb 07 jari 59     private boolean loadEnabled = false;
2 26 Feb 07 jari 60     private boolean stop = false;
2 26 Feb 07 jari 61     private ISlideMetaData meta;
2 26 Feb 07 jari 62     private boolean fillMissingSpots = false;
2 26 Feb 07 jari 63     private static final int BUFFER_SIZE = 1024*128;
2 26 Feb 07 jari 64     
2 26 Feb 07 jari 65     public TavFileLoader(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         tflp = new TavFileLoaderPanel();
2 26 Feb 07 jari 69     }
2 26 Feb 07 jari 70     
2 26 Feb 07 jari 71     public Vector loadExpressionFiles() throws IOException {
2 26 Feb 07 jari 72         
2 26 Feb 07 jari 73         Object [] tavFiles = tflp.getTavSelectedListModel().toArray();
2 26 Feb 07 jari 74         Vector data = new Vector(tavFiles.length); 
2 26 Feb 07 jari 75         ISlideData slideData;
2 26 Feb 07 jari 76         
2 26 Feb 07 jari 77         if(tavFiles.length < 1)
2 26 Feb 07 jari 78             return null;
2 26 Feb 07 jari 79         
2 26 Feb 07 jari 80         setFilesCount(tavFiles.length);
2 26 Feb 07 jari 81         int countOfLines = getCountOfLines((File)tavFiles[0]);
2 26 Feb 07 jari 82         for (int i = 0; i < tavFiles.length; i++) {
2 26 Feb 07 jari 83             //data.add(loadExpressionFile((File) tavFiles[i]));
2 26 Feb 07 jari 84             if (stop) {
2 26 Feb 07 jari 85                 return null;
2 26 Feb 07 jari 86             }
2 26 Feb 07 jari 87             setFilesProgress(i);
2 26 Feb 07 jari 88             setRemain(tavFiles.length-i);
2 26 Feb 07 jari 89             setFileName(((File)tavFiles[i]).getPath());
2 26 Feb 07 jari 90             if (i == 0) {                
2 26 Feb 07 jari 91                 setLinesCount(countOfLines);
2 26 Feb 07 jari 92                 if (meta == null) {
2 26 Feb 07 jari 93                     if(fillMissingSpots)
2 26 Feb 07 jari 94                         slideData = loadSlideDataFillAllSpots((File)tavFiles[i]);
2 26 Feb 07 jari 95                     else
2 26 Feb 07 jari 96                         slideData = loadSlideData((File)tavFiles[i]);
2 26 Feb 07 jari 97                     meta = slideData.getSlideMetaData();
2 26 Feb 07 jari 98                 } else {
2 26 Feb 07 jari 99                     slideData = loadFloatSlideData((File)tavFiles[i], countOfLines, meta);
2 26 Feb 07 jari 100                 }
2 26 Feb 07 jari 101             } else {
2 26 Feb 07 jari 102                 slideData = loadFloatSlideData((File)tavFiles[i], countOfLines, meta);
2 26 Feb 07 jari 103             }
2 26 Feb 07 jari 104             data.add(slideData);            
2 26 Feb 07 jari 105         }
2 26 Feb 07 jari 106         return data;
2 26 Feb 07 jari 107     }
2 26 Feb 07 jari 108     
2 26 Feb 07 jari 109     
2 26 Feb 07 jari 110     
2 26 Feb 07 jari 111     public ISlideData loadExpressionFile(File currentFile) throws IOException {   
2 26 Feb 07 jari 112         return null;
2 26 Feb 07 jari 113     }
2 26 Feb 07 jari 114     
2 26 Feb 07 jari 115     
2 26 Feb 07 jari 116     /**
2 26 Feb 07 jari 117      * Loads full a microarray data from a specified file.
2 26 Feb 07 jari 118      * Skips missing spots.
2 26 Feb 07 jari 119      */
2 26 Feb 07 jari 120     
2 26 Feb 07 jari 121     private ISlideData loadSlideData(final File file) throws IOException {
2 26 Feb 07 jari 122         
2 26 Feb 07 jari 123         ISlideDataElement slideDataElement;
2 26 Feb 07 jari 124         String currentLine;
2 26 Feb 07 jari 125         
2 26 Feb 07 jari 126         //Adjusts index values to make it consistent
2 26 Feb 07 jari 127         if (TMEV.indicesAdjusted() == false) {
2 26 Feb 07 jari 128             TMEV.setUniqueIDIndex(TMEV.getUniqueIDIndex() - 9);
2 26 Feb 07 jari 129             TMEV.setNameIndex(TMEV.getNameIndex() - 9);
2 26 Feb 07 jari 130             TMEV.setIndicesAdjusted(true);
2 26 Feb 07 jari 131         }
2 26 Feb 07 jari 132         
2 26 Feb 07 jari 133         int maxRows = 0, maxColumns = 0;
2 26 Feb 07 jari 134         String avoidNullString;
2 26 Feb 07 jari 135         int p, q;
2 26 Feb 07 jari 136         int coordinatePairCount = 3; //TMEV.getCoordinatePairCount();
2 26 Feb 07 jari 137         int intensityCount = 2; //TMEV.getIntensityCount();
2 26 Feb 07 jari 138         final int preSpotRows = 0; //TMEV.getHeaderRowCount();
2 26 Feb 07 jari 139         
2 26 Feb 07 jari 140         int[] rows = new int[coordinatePairCount];
2 26 Feb 07 jari 141         int[] columns = new int[coordinatePairCount];
2 26 Feb 07 jari 142         float[] intensities = new float[intensityCount];
2 26 Feb 07 jari 143         Vector moreFields = new Vector();
2 26 Feb 07 jari 144         
2 26 Feb 07 jari 145         BufferedReader reader = new BufferedReader(new FileReader(file), BUFFER_SIZE);
2 26 Feb 07 jari 146         StringSplitter ss = new StringSplitter((char)0x09);
2 26 Feb 07 jari 147         int currentRow, currentColumn;
2 26 Feb 07 jari 148         int header_row = 0;
2 26 Feb 07 jari 149         while ((currentLine = reader.readLine()) != null) {
2 26 Feb 07 jari 150             if (header_row < preSpotRows) {
2 26 Feb 07 jari 151                 header_row++;
2 26 Feb 07 jari 152                 continue;
2 26 Feb 07 jari 153             }
2 26 Feb 07 jari 154             ss.init(currentLine);
2 26 Feb 07 jari 155             currentRow = ss.nextIntToken();
2 26 Feb 07 jari 156             currentColumn = ss.nextIntToken();
2 26 Feb 07 jari 157             if (currentRow > maxRows) maxRows = currentRow;
2 26 Feb 07 jari 158             if (currentColumn > maxColumns) maxColumns = currentColumn;
2 26 Feb 07 jari 159         }
2 26 Feb 07 jari 160         SlideData slideData = new SlideData(maxRows, maxColumns);
2 26 Feb 07 jari 161         reader.close();
2 26 Feb 07 jari 162         reader = new BufferedReader(new FileReader(file));
2 26 Feb 07 jari 163         header_row = 0;
2 26 Feb 07 jari 164         int curpos = 0;
2 26 Feb 07 jari 165         while ((currentLine = reader.readLine()) != null) {
2 26 Feb 07 jari 166             if (header_row < preSpotRows) {
2 26 Feb 07 jari 167                 header_row++;
2 26 Feb 07 jari 168                 continue;
2 26 Feb 07 jari 169             }
2 26 Feb 07 jari 170             setFileProgress(curpos++);
2 26 Feb 07 jari 171             ss.init(currentLine);
2 26 Feb 07 jari 172             for (int j = 0; j < coordinatePairCount; j++) {
2 26 Feb 07 jari 173                 rows[j] = ss.nextIntToken();
2 26 Feb 07 jari 174                 columns[j] = ss.nextIntToken();
2 26 Feb 07 jari 175             }
2 26 Feb 07 jari 176             for (int j = 0; j < intensityCount; j++) {
2 26 Feb 07 jari 177                 intensities[j] = ss.nextFloatToken(0.0f);
2 26 Feb 07 jari 178             }
2 26 Feb 07 jari 179             
2 26 Feb 07 jari 180             //EH fieldnames are saved to SlideData rather than TMEV
2 26 Feb 07 jari 181             while(ss.hasMoreTokens()) {
2 26 Feb 07 jari 182                 avoidNullString = ss.nextToken();
2 26 Feb 07 jari 183                 if (avoidNullString.equals("null")) moreFields.add("");
2 26 Feb 07 jari 184                 else moreFields.add(avoidNullString);
2 26 Feb 07 jari 185             }
2 26 Feb 07 jari 186             /*
2 26 Feb 07 jari 187             for (int j = 0; j < TMEV.getFieldNames().length; j++) {
2 26 Feb 07 jari 188                 if (ss.hasMoreTokens()) {
2 26 Feb 07 jari 189                     avoidNullString = ss.nextToken();
2 26 Feb 07 jari 190                     if (avoidNullString.equals("null")) moreFields[j] = "";
2 26 Feb 07 jari 191                     else moreFields[j] = avoidNullString;
2 26 Feb 07 jari 192                 } else {
2 26 Feb 07 jari 193                     moreFields[j] = "";
2 26 Feb 07 jari 194                 }
2 26 Feb 07 jari 195             }
2 26 Feb 07 jari 196             */
2 26 Feb 07 jari 197             String[] allFields = new String[moreFields.size()];
2 26 Feb 07 jari 198             for(int i=0; i<moreFields.size(); i++) {
2 26 Feb 07 jari 199               allFields[i] = (String)moreFields.get(i);
2 26 Feb 07 jari 200             }
2 26 Feb 07 jari 201             slideDataElement = new SlideDataElement(String.valueOf(curpos),rows, columns, intensities, allFields);
2 26 Feb 07 jari 202             //EH end fieldnames loading change
2 26 Feb 07 jari 203             
2 26 Feb 07 jari 204             slideData.addSlideDataElement(slideDataElement);
2 26 Feb 07 jari 205         }
2 26 Feb 07 jari 206         reader.close();
2 26 Feb 07 jari 207         slideData.setSlideDataName(file.getName());
2 26 Feb 07 jari 208         slideData.setSlideFileName(file.getPath());
2 26 Feb 07 jari 209         return slideData;
2 26 Feb 07 jari 210     }
2 26 Feb 07 jari 211     
2 26 Feb 07 jari 212     
2 26 Feb 07 jari 213     /**
2 26 Feb 07 jari 214      * Loads a microarray float values from the specified file.
2 26 Feb 07 jari 215      */
2 26 Feb 07 jari 216     private ISlideData loadFloatSlideData(final File file, final int countOfLines, ISlideMetaData slideMetaData) throws IOException {
2 26 Feb 07 jari 217         final int coordinatePairCount = 6;//TMEV.getCoordinatePairCount()*2;
2 26 Feb 07 jari 218         final int intensityCount = 2;//TMEV.getIntensityCount();
2 26 Feb 07 jari 219         final int preSpotRows = 0; //TMEV.getHeaderRowCount();
2 26 Feb 07 jari 220
2 26 Feb 07 jari 221         //Adjusts index values to make it consistent
2 26 Feb 07 jari 222         if (TMEV.indicesAdjusted() == false) {
2 26 Feb 07 jari 223             TMEV.setUniqueIDIndex(TMEV.getUniqueIDIndex() - 9);
2 26 Feb 07 jari 224             TMEV.setNameIndex(TMEV.getNameIndex() - 9);
2 26 Feb 07 jari 225             TMEV.setIndicesAdjusted(true);
2 26 Feb 07 jari 226         }
2 26 Feb 07 jari 227         
2 26 Feb 07 jari 228         FloatSlideData slideData = new FloatSlideData(slideMetaData);
2 26 Feb 07 jari 229         
2 26 Feb 07 jari 230         BufferedReader reader = new BufferedReader(new FileReader(file), BUFFER_SIZE);
2 26 Feb 07 jari 231         
2 26 Feb 07 jari 232         String currentLine;
2 26 Feb 07 jari 233         StringSplitter ss = new StringSplitter((char)0x09);
2 26 Feb 07 jari 234         float[] intensities = new float[intensityCount];
2 26 Feb 07 jari 235         int header_row = 0;
2 26 Feb 07 jari 236         int index  = 0;
2 26 Feb 07 jari 237         while ((currentLine = reader.readLine()) != null) {
2 26 Feb 07 jari 238             if (header_row < preSpotRows) {
2 26 Feb 07 jari 239                 header_row++;
2 26 Feb 07 jari 240                 continue;
2 26 Feb 07 jari 241             }
2 26 Feb 07 jari 242             setFileProgress(index);
2 26 Feb 07 jari 243             ss.init(currentLine);
2 26 Feb 07 jari 244             ss.passTokens(coordinatePairCount);
2 26 Feb 07 jari 245             for (int j = 0; j < intensityCount; j++) {
2 26 Feb 07 jari 246                 intensities[j] = ss.nextFloatToken(0.0f);
2 26 Feb 07 jari 247             }
2 26 Feb 07 jari 248             slideData.setIntensities(index, intensities[0], intensities[1]);
2 26 Feb 07 jari 249             index++;
2 26 Feb 07 jari 250         }
2 26 Feb 07 jari 251         reader.close();
2 26 Feb 07 jari 252         slideData.setSlideDataName(file.getName());
2 26 Feb 07 jari 253         slideData.setSlideFileName(file.getPath());
2 26 Feb 07 jari 254         return slideData;
2 26 Feb 07 jari 255     }
2 26 Feb 07 jari 256     
2 26 Feb 07 jari 257     
2 26 Feb 07 jari 258     /**
2 26 Feb 07 jari 259      * Loads full a microarray data from a specified file.
2 26 Feb 07 jari 260      * Fills all missing spots with default missing color.
2 26 Feb 07 jari 261      */
2 26 Feb 07 jari 262     private ISlideData loadSlideDataFillAllSpots(final File file) throws IOException {
2 26 Feb 07 jari 263         
2 26 Feb 07 jari 264         ISlideDataElement slideDataElement;
2 26 Feb 07 jari 265         String currentLine;
2 26 Feb 07 jari 266         
2 26 Feb 07 jari 267         //FL
2 26 Feb 07 jari 268         //Adjusts index values to make it consistent
2 26 Feb 07 jari 269         if (TMEV.indicesAdjusted() == false) {
2 26 Feb 07 jari 270             TMEV.setUniqueIDIndex(TMEV.getUniqueIDIndex() - 9);
2 26 Feb 07 jari 271             TMEV.setNameIndex(TMEV.getNameIndex() - 9);
2 26 Feb 07 jari 272             TMEV.setIndicesAdjusted(true);
2 26 Feb 07 jari 273         }
2 26 Feb 07 jari 274         
2 26 Feb 07 jari 275         int maxRows = 0, maxColumns = 0;
2 26 Feb 07 jari 276         String avoidNullString;
2 26 Feb 07 jari 277         int p, q;
2 26 Feb 07 jari 278         int coordinatePairCount = TMEV.getCoordinatePairCount();
2 26 Feb 07 jari 279         int intensityCount = TMEV.getIntensityCount();
2 26 Feb 07 jari 280         final int preSpotRows = TMEV.getHeaderRowCount();
2 26 Feb 07 jari 281         
2 26 Feb 07 jari 282         int[] rows = new int[coordinatePairCount];
2 26 Feb 07 jari 283         int[] columns = new int[coordinatePairCount];
2 26 Feb 07 jari 284         
2 26 Feb 07 jari 285         float[] intensities = new float[intensityCount];
2 26 Feb 07 jari 286         
2 26 Feb 07 jari 287         //EH fieldnames saved to SlideData rather than TMEV
2 26 Feb 07 jari 288         //String[] moreFields = new String[TMEV.getFieldNames().length];
2 26 Feb 07 jari 289         Vector moreFields = new Vector();
2 26 Feb 07 jari 290         
2 26 Feb 07 jari 291         BufferedReader reader = new BufferedReader(new FileReader(file), BUFFER_SIZE);
2 26 Feb 07 jari 292         StringSplitter ss = new StringSplitter((char)0x09);
2 26 Feb 07 jari 293         int currentRow, currentColumn;
2 26 Feb 07 jari 294         int header_row = 0;
2 26 Feb 07 jari 295         while ((currentLine = reader.readLine()) != null) {
2 26 Feb 07 jari 296             if (header_row < preSpotRows) {
2 26 Feb 07 jari 297                 header_row++;
2 26 Feb 07 jari 298                 continue;
2 26 Feb 07 jari 299             }
2 26 Feb 07 jari 300             ss.init(currentLine);
2 26 Feb 07 jari 301             currentRow = ss.nextIntToken();
2 26 Feb 07 jari 302             currentColumn = ss.nextIntToken();
2 26 Feb 07 jari 303             if (currentRow > maxRows) maxRows = currentRow;
2 26 Feb 07 jari 304             if (currentColumn > maxColumns) maxColumns = currentColumn;
2 26 Feb 07 jari 305         }
2 26 Feb 07 jari 306         SlideData slideData = new SlideData(maxRows, maxColumns);
2 26 Feb 07 jari 307         reader.close();
2 26 Feb 07 jari 308         reader = new BufferedReader(new FileReader(file));
2 26 Feb 07 jari 309         header_row = 0;
2 26 Feb 07 jari 310         int curpos = 0;
2 26 Feb 07 jari 311         
2 26 Feb 07 jari 312         boolean [][] realData = new boolean[maxRows][maxColumns];
2 26 Feb 07 jari 313         
2 26 Feb 07 jari 314         while ((currentLine = reader.readLine()) != null) {
2 26 Feb 07 jari 315             
2 26 Feb 07 jari 316             if (header_row < preSpotRows) {
2 26 Feb 07 jari 317                 header_row++;
2 26 Feb 07 jari 318                 continue;
2 26 Feb 07 jari 319             }
2 26 Feb 07 jari 320             setFileProgress(curpos++);
2 26 Feb 07 jari 321             ss.init(currentLine);
2 26 Feb 07 jari 322             for (int j = 0; j < coordinatePairCount; j++) {
2 26 Feb 07 jari 323                 rows[j] = ss.nextIntToken();
2 26 Feb 07 jari 324                 columns[j] = ss.nextIntToken();
2 26 Feb 07 jari 325             }
2 26 Feb 07 jari 326             for (int j = 0; j < intensityCount; j++) {
2 26 Feb 07 jari 327                 intensities[j] = ss.nextFloatToken(0.0f);
2 26 Feb 07 jari 328             }
2 26 Feb 07 jari 329             
2 26 Feb 07 jari 330             //EH loading fieldnames for additional annotation
2 26 Feb 07 jari 331             while(ss.hasMoreTokens()) {
2 26 Feb 07 jari 332                 avoidNullString = ss.nextToken();
2 26 Feb 07 jari 333                 if (avoidNullString.equals("null")) moreFields.add("");
2 26 Feb 07 jari 334                 else moreFields.add(avoidNullString);
2 26 Feb 07 jari 335             }
2 26 Feb 07 jari 336             String[] allFields = new String[moreFields.size()];
2 26 Feb 07 jari 337             for(int i=0; i<moreFields.size(); i++) {
2 26 Feb 07 jari 338               allFields[i] = (String)moreFields.get(i);
2 26 Feb 07 jari 339             }
2 26 Feb 07 jari 340             /*
2 26 Feb 07 jari 341             for (int j = 0; j < TMEV.getFieldNames().length; j++) {
2 26 Feb 07 jari 342                 if (ss.hasMoreTokens()) {
2 26 Feb 07 jari 343                     avoidNullString = ss.nextToken();
2 26 Feb 07 jari 344                     if (avoidNullString.equals("null")) moreFields[j] = "";
2 26 Feb 07 jari 345                     else moreFields[j] = avoidNullString;
2 26 Feb 07 jari 346                 } else {
2 26 Feb 07 jari 347                     moreFields[j] = "";
2 26 Feb 07 jari 348                 }
2 26 Feb 07 jari 349             }
2 26 Feb 07 jari 350             */
2 26 Feb 07 jari 351             realData[rows[0]-1][columns[0]-1] = true;
2 26 Feb 07 jari 352             slideDataElement = new SlideDataElement(String.valueOf(curpos), rows, columns, intensities, allFields);
2 26 Feb 07 jari 353             slideData.addSlideDataElement(slideDataElement);
2 26 Feb 07 jari 354         }
2 26 Feb 07 jari 355         reader.close();
2 26 Feb 07 jari 356         intensities[0] = 0.0f;
2 26 Feb 07 jari 357         intensities[1] = 0.0f;
2 26 Feb 07 jari 358  /*       //EH
2 26 Feb 07 jari 359         String [] dummyString = new String[TMEV.getFieldNames().length];
2 26 Feb 07 jari 360         for(int i = 0; i < dummyString.length; i++)
2 26 Feb 07 jari 361             dummyString[i] = "";
2 26 Feb 07 jari 362 */        
2 26 Feb 07 jari 363         for(int i = 0; i < maxRows ; i++){
2 26 Feb 07 jari 364             for(int j = 0; j < maxColumns; j++){
2 26 Feb 07 jari 365                 if(!realData[i][j]){
2 26 Feb 07 jari 366                     slideDataElement = new SlideDataElement(new int[]{i+1, 1, 1}, new int[]{j+1, 1,1}, intensities, new String[0]);
2 26 Feb 07 jari 367                     slideData.insertElementAt(slideDataElement, i*maxColumns+j);
2 26 Feb 07 jari 368                 }
2 26 Feb 07 jari 369             }
2 26 Feb 07 jari 370         }
2 26 Feb 07 jari 371         slideData.setSlideDataName(file.getName());
2 26 Feb 07 jari 372         slideData.setSlideFileName(file.getPath());
2 26 Feb 07 jari 373         return slideData;
2 26 Feb 07 jari 374     }
2 26 Feb 07 jari 375     
2 26 Feb 07 jari 376     public FileFilter getFileFilter() {
2 26 Feb 07 jari 377         
2 26 Feb 07 jari 378         FileFilter tavFileFilter = new FileFilter() {
2 26 Feb 07 jari 379             
2 26 Feb 07 jari 380             public boolean accept(File f) {
2 26 Feb 07 jari 381                 if (f.isDirectory()) return true;
2 26 Feb 07 jari 382                 if (f.getName().endsWith(".tav")) return true;
2 26 Feb 07 jari 383                 else return false;
2 26 Feb 07 jari 384             }
2 26 Feb 07 jari 385             
2 26 Feb 07 jari 386             public String getDescription() {
2 26 Feb 07 jari 387                 return "TIGR ArrayViewer Expression Files (*.tav)";
2 26 Feb 07 jari 388             }
2 26 Feb 07 jari 389         };
2 26 Feb 07 jari 390         
2 26 Feb 07 jari 391         return tavFileFilter;
2 26 Feb 07 jari 392     }
2 26 Feb 07 jari 393     
2 26 Feb 07 jari 394     public boolean checkLoadEnable() {
2 26 Feb 07 jari 395         setLoadEnabled(loadEnabled);
2 26 Feb 07 jari 396         return this.loadEnabled;
2 26 Feb 07 jari 397     }
2 26 Feb 07 jari 398     
2 26 Feb 07 jari 399     public void markLoadEnabled(boolean state) {
2 26 Feb 07 jari 400         loadEnabled = state;
2 26 Feb 07 jari 401         checkLoadEnable();
2 26 Feb 07 jari 402     }
2 26 Feb 07 jari 403     
2 26 Feb 07 jari 404     public JPanel getFileLoaderPanel() {
2 26 Feb 07 jari 405         return tflp;
2 26 Feb 07 jari 406     }
2 26 Feb 07 jari 407     
2 26 Feb 07 jari 408     public void processFileList(String filePath, Vector fileNames) {
2 26 Feb 07 jari 409         
2 26 Feb 07 jari 410         tflp.setPath(filePath);
2 26 Feb 07 jari 411         
2 26 Feb 07 jari 412         if (fileNames == null) return; // Don't process files if there aren't any
2 26 Feb 07 jari 413         
2 26 Feb 07 jari 414         FileFilter tavFileFilter = getFileFilter();
2 26 Feb 07 jari 415         
2 26 Feb 07 jari 416         tflp.getTavAvailableListModel().clear();
2 26 Feb 07 jari 417         
2 26 Feb 07 jari 418         for (int i = 0; i < fileNames.size(); i++) {
2 26 Feb 07 jari 419             
2 26 Feb 07 jari 420             File targetFile = new File((String) fileNames.elementAt(i));
2 26 Feb 07 jari 421             
2 26 Feb 07 jari 422             if (tavFileFilter.accept(targetFile)) {
2 26 Feb 07 jari 423                 tflp.getTavAvailableListModel().addElement(new File((String) fileNames.elementAt(i)));
2 26 Feb 07 jari 424             }
2 26 Feb 07 jari 425         }
2 26 Feb 07 jari 426     }
2 26 Feb 07 jari 427     
2 26 Feb 07 jari 428     public String getFilePath() {
2 26 Feb 07 jari 429         if(this.tflp.getTavSelectedListModel().getSize() <1)
2 26 Feb 07 jari 430             return null;
2 26 Feb 07 jari 431         return ((File)(tflp.getTavSelectedListModel().getElementAt(0))).getAbsolutePath();
2 26 Feb 07 jari 432     }
2 26 Feb 07 jari 433     
2 26 Feb 07 jari 434     public void openDataPath() {
2 26 Feb 07 jari 435         this.tflp.openDataPath();
2 26 Feb 07 jari 436     }
2 26 Feb 07 jari 437     
2 26 Feb 07 jari 438 /*
2 26 Feb 07 jari 439 //
2 26 Feb 07 jari 440 //  TavFileLoader - Internal Classes
2 26 Feb 07 jari 441 //
2 26 Feb 07 jari 442  */
2 26 Feb 07 jari 443     
2 26 Feb 07 jari 444     private class TavFileLoaderPanel extends JPanel {
2 26 Feb 07 jari 445         
2 26 Feb 07 jari 446         FileTreePane fileTreePane;
2 26 Feb 07 jari 447         JTextField pathTextField;
2 26 Feb 07 jari 448         
2 26 Feb 07 jari 449         JPanel tavSelectionPanel;
2 26 Feb 07 jari 450         JPanel tavListPanel;
2 26 Feb 07 jari 451         JLabel tavAvailableLabel;
2 26 Feb 07 jari 452         JLabel tavSelectedLabel;
2 26 Feb 07 jari 453         JList tavAvailableList;
2 26 Feb 07 jari 454         JList tavSelectedList;
2 26 Feb 07 jari 455         JScrollPane tavAvailableScrollPane;
2 26 Feb 07 jari 456         JScrollPane tavSelectedScrollPane;
2 26 Feb 07 jari 457         JButton tavAddButton;
2 26 Feb 07 jari 458         JButton tavAddAllButton;
2 26 Feb 07 jari 459         JButton tavRemoveButton;
2 26 Feb 07 jari 460         JButton tavRemoveAllButton;
2 26 Feb 07 jari 461         JPanel tavButtonPanel;
2 26 Feb 07 jari 462         
2 26 Feb 07 jari 463         JTextField preferencesTextField;
2 26 Feb 07 jari 464         JButton browseButton;
2 26 Feb 07 jari 465         JPanel preferencesSelectionPanel;
2 26 Feb 07 jari 466         JPanel preferencesPanel;
2 26 Feb 07 jari 467         JPanel manualPanel;
2 26 Feb 07 jari 468         JPanel genericPanel;
2 26 Feb 07 jari 469         JTabbedPane fieldsTabbedPane;
2 26 Feb 07 jari 470         JPanel fieldsPanel;
2 26 Feb 07 jari 471         
2 26 Feb 07 jari 472         JPanel selectionPanel;
2 26 Feb 07 jari 473         JSplitPane splitPane;
2 26 Feb 07 jari 474         JPanel fileLoaderPanel;
2 26 Feb 07 jari 475         
2 26 Feb 07 jari 476         public TavFileLoaderPanel() {
2 26 Feb 07 jari 477             
2 26 Feb 07 jari 478             setLayout(new GridBagLayout());
2 26 Feb 07 jari 479             
2 26 Feb 07 jari 480             fileTreePane = new FileTreePane(SuperExpressionFileLoader.DATA_PATH);
2 26 Feb 07 jari 481             fileTreePane.addFileTreePaneListener(new FileTreePaneEventHandler());
2 26 Feb 07 jari 482             fileTreePane.setPreferredSize(new java.awt.Dimension(200, 50));
2 26 Feb 07 jari 483             
2 26 Feb 07 jari 484             pathTextField = new JTextField();
2 26 Feb 07 jari 485             pathTextField.setEditable(false);
2 26 Feb 07 jari 486             pathTextField.setBorder(new TitledBorder(new EtchedBorder(), "Selected Path"));
2 26 Feb 07 jari 487             pathTextField.setForeground(Color.black);
2 26 Feb 07 jari 488             pathTextField.setFont(new Font("monospaced", Font.BOLD, 12));
2 26 Feb 07 jari 489             
2 26 Feb 07 jari 490             tavSelectionPanel = new JPanel();
2 26 Feb 07 jari 491             tavSelectionPanel.setLayout(new GridBagLayout());
2 26 Feb 07 jari 492             tavSelectionPanel.setBorder(new TitledBorder(new EtchedBorder(), getFileFilter().getDescription()));
2 26 Feb 07 jari 493             
2 26 Feb 07 jari 494             tavAvailableLabel = new JLabel("Available");
2 26 Feb 07 jari 495             tavSelectedLabel = new JLabel("Selected");
2 26 Feb 07 jari 496             tavAvailableList = new JList(new DefaultListModel());
2 26 Feb 07 jari 497             tavAvailableList.setCellRenderer(new ListRenderer());
2 26 Feb 07 jari 498             tavSelectedList = new JList(new DefaultListModel());
2 26 Feb 07 jari 499             tavSelectedList.setCellRenderer(new ListRenderer());
2 26 Feb 07 jari 500             tavAvailableScrollPane = new JScrollPane(tavAvailableList);
2 26 Feb 07 jari 501             tavSelectedScrollPane = new JScrollPane(tavSelectedList);
2 26 Feb 07 jari 502             tavAddButton = new JButton("Add");
2 26 Feb 07 jari 503             tavAddButton.addActionListener(new EventHandler());
2 26 Feb 07 jari 504             tavAddAllButton = new JButton("Add All");
2 26 Feb 07 jari 505             tavAddAllButton.addActionListener(new EventHandler());
2 26 Feb 07 jari 506             tavRemoveButton = new JButton("Remove");
2 26 Feb 07 jari 507             tavRemoveButton.addActionListener(new EventHandler());
2 26 Feb 07 jari 508             tavRemoveAllButton = new JButton("Remove All");
2 26 Feb 07 jari 509             tavRemoveAllButton.addActionListener(new EventHandler());
2 26 Feb 07 jari 510             
2 26 Feb 07 jari 511             Dimension largestTavButtonSize = tavRemoveAllButton.getPreferredSize();
2 26 Feb 07 jari 512             tavAddButton.setPreferredSize(largestTavButtonSize);
2 26 Feb 07 jari 513             tavAddAllButton.setPreferredSize(largestTavButtonSize);
2 26 Feb 07 jari 514             tavRemoveButton.setPreferredSize(largestTavButtonSize);
2 26 Feb 07 jari 515             tavRemoveAllButton.setPreferredSize(largestTavButtonSize);
2 26 Feb 07 jari 516             
2 26 Feb 07 jari 517             tavAddButton.setFocusPainted(false);
2 26 Feb 07 jari 518             tavAddAllButton.setFocusPainted(false);
2 26 Feb 07 jari 519             tavRemoveButton.setFocusPainted(false);
2 26 Feb 07 jari 520             tavRemoveAllButton.setFocusPainted(false);
2 26 Feb 07 jari 521             
2 26 Feb 07 jari 522             tavButtonPanel = new JPanel();
2 26 Feb 07 jari 523             tavButtonPanel.setLayout(new GridBagLayout());
2 26 Feb 07 jari 524             
2 26 Feb 07 jari 525             gba.add(tavButtonPanel, tavAddButton, 0, 0, 1, 1, 0, 0, GBA.N, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 526             gba.add(tavButtonPanel, tavAddAllButton, 0, 1, 1, 1, 0, 0, GBA.N, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 527             gba.add(tavButtonPanel, tavRemoveButton, 0, 2, 1, 1, 0, 0, GBA.N, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 528             gba.add(tavButtonPanel, tavRemoveAllButton, 0, 3, 1, 1, 0, 0, GBA.N, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 529             
2 26 Feb 07 jari 530             tavListPanel = new JPanel();
2 26 Feb 07 jari 531             tavListPanel.setLayout(new GridBagLayout());
2 26 Feb 07 jari 532             
2 26 Feb 07 jari 533             gba.add(tavListPanel, tavAvailableLabel, 0, 0, 1, 1, 0, 0, GBA.N, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 534             gba.add(tavListPanel, tavSelectedLabel, 2, 0, 1, 1, 0, 0, GBA.N, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 535             gba.add(tavListPanel, tavAvailableScrollPane, 0, 1, 1, 4, 1, 1, GBA.B, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 536             gba.add(tavListPanel, tavButtonPanel, 1, 1, 1, 4, 0, 1, GBA.V, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 537             gba.add(tavListPanel, tavSelectedScrollPane, 2, 1, 1, 4, 1, 1, GBA.B, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 538             
2 26 Feb 07 jari 539             gba.add(tavSelectionPanel, tavListPanel, 0, 0, 1, 1, 1, 1, GBA.B, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 540             
2 26 Feb 07 jari 541             preferencesTextField = new JTextField();
2 26 Feb 07 jari 542             preferencesTextField.setEditable(false);
2 26 Feb 07 jari 543             preferencesTextField.setForeground(Color.black);
2 26 Feb 07 jari 544             preferencesTextField.setFont(new Font("monospaced", Font.BOLD, 12));
2 26 Feb 07 jari 545             
2 26 Feb 07 jari 546             browseButton = new JButton("Browse Preferences");
2 26 Feb 07 jari 547             browseButton.addActionListener(new EventHandler());
2 26 Feb 07 jari 548             
2 26 Feb 07 jari 549             preferencesSelectionPanel = new JPanel();
2 26 Feb 07 jari 550             preferencesSelectionPanel.setLayout(new GridBagLayout());
2 26 Feb 07 jari 551             preferencesSelectionPanel.setBorder(new TitledBorder(new EtchedBorder(), "Selected Preferences File"));
2 26 Feb 07 jari 552             gba.add(preferencesSelectionPanel, preferencesTextField, 0, 0, 2, 1, 1, 0, GBA.H, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 553             gba.add(preferencesSelectionPanel, browseButton, 2, 0, 1, 1, 0, 0, GBA.N, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 554             
2 26 Feb 07 jari 555             preferencesPanel = new JPanel();
2 26 Feb 07 jari 556             preferencesPanel.setLayout(new GridBagLayout());
2 26 Feb 07 jari 557             gba.add(preferencesPanel, preferencesSelectionPanel, 0, 0, 1, 1, 1, 1, GBA.B, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 558             
2 26 Feb 07 jari 559             manualPanel = new JPanel();
2 26 Feb 07 jari 560             manualPanel.setLayout(new GridBagLayout());
2 26 Feb 07 jari 561             gba.add(manualPanel, new JPanel(), 0, 0, 1, 1, 1, 1, GBA.B, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 562             
2 26 Feb 07 jari 563             genericPanel = new JPanel();
2 26 Feb 07 jari 564             genericPanel.setLayout(new GridBagLayout());
2 26 Feb 07 jari 565             gba.add(genericPanel, new JPanel(), 0, 0, 1, 1, 1, 1, GBA.B, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 566             
2 26 Feb 07 jari 567             fieldsTabbedPane = new JTabbedPane();
2 26 Feb 07 jari 568             fieldsTabbedPane.addTab("Preferences", preferencesPanel);
2 26 Feb 07 jari 569             fieldsTabbedPane.addTab("Manual", manualPanel);
2 26 Feb 07 jari 570             fieldsTabbedPane.addTab("Generic", genericPanel);
2 26 Feb 07 jari 571             fieldsTabbedPane.setEnabledAt(1, false);
2 26 Feb 07 jari 572             fieldsTabbedPane.setEnabledAt(2, false);
2 26 Feb 07 jari 573             fieldsTabbedPane.addChangeListener(new ChangeListener() {
2 26 Feb 07 jari 574                 public void stateChanged(ChangeEvent event) {
2 26 Feb 07 jari 575                     validateLists();
2 26 Feb 07 jari 576                 }
2 26 Feb 07 jari 577             });
2 26 Feb 07 jari 578             
2 26 Feb 07 jari 579             fieldsPanel = new JPanel();
2 26 Feb 07 jari 580             fieldsPanel.setLayout(new GridBagLayout());
2 26 Feb 07 jari 581             fieldsPanel.setBorder(new TitledBorder(new EtchedBorder(), "Additional Fields Selection"));
2 26 Feb 07 jari 582             gba.add(fieldsPanel, fieldsTabbedPane, 0, 0, 1, 1, 1, 1, GBA.B, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 583             
2 26 Feb 07 jari 584             selectionPanel = new JPanel();
2 26 Feb 07 jari 585             selectionPanel.setLayout(new GridBagLayout());
2 26 Feb 07 jari 586             gba.add(selectionPanel, pathTextField, 0, 0, 1, 1, 1, 0, GBA.H, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 587             gba.add(selectionPanel, tavSelectionPanel, 0, 1, 1, 2, 1, 1, GBA.B, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 588             gba.add(selectionPanel, fieldsPanel, 0, 3, 1, 2, 1, 1, GBA.B, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 589             
2 26 Feb 07 jari 590             splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, fileTreePane, selectionPanel);
2 26 Feb 07 jari 591             splitPane.setPreferredSize(new java.awt.Dimension(600, 600));
2 26 Feb 07 jari 592             fileLoaderPanel = new JPanel();
2 26 Feb 07 jari 593             fileLoaderPanel.setLayout(new GridBagLayout());
2 26 Feb 07 jari 594             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 595             
2 26 Feb 07 jari 596             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 597         }
2 26 Feb 07 jari 598         
2 26 Feb 07 jari 599         public void setPath(String path) {
2 26 Feb 07 jari 600             pathTextField.setText(path);
2 26 Feb 07 jari 601         }
2 26 Feb 07 jari 602
2 26 Feb 07 jari 603         public void openDataPath(){
2 26 Feb 07 jari 604             this.fileTreePane.openDataPath();
2 26 Feb 07 jari 605         }        
2 26 Feb 07 jari 606         
2 26 Feb 07 jari 607         public void validateLists() {
2 26 Feb 07 jari 608             
2 26 Feb 07 jari 609             // Check if at least one tav file has been selected
2 26 Feb 07 jari 610             if (! (((DefaultListModel) tavSelectedList.getModel()).size() > 0)) {
2 26 Feb 07 jari 611                 markLoadEnabled(false);
2 26 Feb 07 jari 612                 return;
2 26 Feb 07 jari 613             }
2 26 Feb 07 jari 614             
2 26 Feb 07 jari 615             // Check the Additional Fields Selection area
2 26 Feb 07 jari 616             
2 26 Feb 07 jari 617             Object tabbedPaneTarget = fieldsTabbedPane.getSelectedComponent();
2 26 Feb 07 jari 618             if (tabbedPaneTarget == preferencesPanel) {
2 26 Feb 07 jari 619                 if (! (preferencesTextField.getText().length() > 0)) {
2 26 Feb 07 jari 620                     markLoadEnabled(false);
2 26 Feb 07 jari 621                     return;
2 26 Feb 07 jari 622                 } else {
2 26 Feb 07 jari 623                     markLoadEnabled(true);
2 26 Feb 07 jari 624                     return;
2 26 Feb 07 jari 625                 }
2 26 Feb 07 jari 626             } else if (tabbedPaneTarget == manualPanel) {
2 26 Feb 07 jari 627                 markLoadEnabled(true);
2 26 Feb 07 jari 628                 return;
2 26 Feb 07 jari 629             } else { // tabbedPaneTarget == genericPanel
2 26 Feb 07 jari 630                 markLoadEnabled(true);
2 26 Feb 07 jari 631                 return;
2 26 Feb 07 jari 632             }
2 26 Feb 07 jari 633         }
2 26 Feb 07 jari 634         
2 26 Feb 07 jari 635         public void onTavAdd() {
2 26 Feb 07 jari 636             int[] chosenIndices = tavAvailableList.getSelectedIndices();
2 26 Feb 07 jari 637             Object[] chosenObjects = new Object[chosenIndices.length];
2 26 Feb 07 jari 638             
2 26 Feb 07 jari 639             for (int i = chosenIndices.length - 1; i >= 0; i--) {
2 26 Feb 07 jari 640                 // For remove-then-add functionality
2 26 Feb 07 jari 641                 //Object addItem = ((DefaultListModel) tavAvailableList.getModel()).remove(chosenIndices[i]);
2 26 Feb 07 jari 642                 // For copy-then-add functionality
2 26 Feb 07 jari 643                 Object addItem = ((DefaultListModel) tavAvailableList.getModel()).getElementAt(chosenIndices[i]);
2 26 Feb 07 jari 644                 chosenObjects[i] = addItem;
2 26 Feb 07 jari 645             }
2 26 Feb 07 jari 646             
2 26 Feb 07 jari 647             for (int i = 0; i < chosenIndices.length; i++) {
2 26 Feb 07 jari 648                 ((DefaultListModel) tavSelectedList.getModel()).addElement(chosenObjects[i]);
2 26 Feb 07 jari 649             }
2 26 Feb 07 jari 650             
2 26 Feb 07 jari 651             validateLists();
2 26 Feb 07 jari 652         }
2 26 Feb 07 jari 653         
2 26 Feb 07 jari 654         public void onTavAddAll() {
2 26 Feb 07 jari 655             int elementCount = ((DefaultListModel) tavAvailableList.getModel()).size();
2 26 Feb 07 jari 656             for (int i = 0; i < elementCount; i++) {
2 26 Feb 07 jari 657                 Object addItem = ((DefaultListModel) tavAvailableList.getModel()).getElementAt(i);
2 26 Feb 07 jari 658                 ((DefaultListModel) tavSelectedList.getModel()).addElement(addItem);
2 26 Feb 07 jari 659             }
2 26 Feb 07 jari 660             
2 26 Feb 07 jari 661             validateLists();
2 26 Feb 07 jari 662         }
2 26 Feb 07 jari 663         
2 26 Feb 07 jari 664         public void onTavRemove() {
2 26 Feb 07 jari 665             int[] chosenIndices = tavSelectedList.getSelectedIndices();
2 26 Feb 07 jari 666             
2 26 Feb 07 jari 667             // Designed with copy-then-add functionality in mind
2 26 Feb 07 jari 668             for (int i = chosenIndices.length - 1; i >= 0; i--) {
2 26 Feb 07 jari 669                 ((DefaultListModel) tavSelectedList.getModel()).remove(chosenIndices[i]);
2 26 Feb 07 jari 670             }
2 26 Feb 07 jari 671             
2 26 Feb 07 jari 672             validateLists();
2 26 Feb 07 jari 673         }
2 26 Feb 07 jari 674         
2 26 Feb 07 jari 675         public void onTavRemoveAll() {
2 26 Feb 07 jari 676             // Designed with copy-then-add functionality in mind
2 26 Feb 07 jari 677             ((DefaultListModel) tavSelectedList.getModel()).removeAllElements();
2 26 Feb 07 jari 678             
2 26 Feb 07 jari 679             validateLists();
2 26 Feb 07 jari 680         }
2 26 Feb 07 jari 681         
2 26 Feb 07 jari 682         public DefaultListModel getTavAvailableListModel() {
2 26 Feb 07 jari 683             return (DefaultListModel) tavAvailableList.getModel();
2 26 Feb 07 jari 684         }
2 26 Feb 07 jari 685         
2 26 Feb 07 jari 686         public DefaultListModel getTavSelectedListModel() {
2 26 Feb 07 jari 687             return (DefaultListModel) tavSelectedList.getModel();
2 26 Feb 07 jari 688         }
2 26 Feb 07 jari 689         
2 26 Feb 07 jari 690         public void processPreferencesFile(File target) {
2 26 Feb 07 jari 691             try {
2 26 Feb 07 jari 692                 BufferedReader br = new BufferedReader(new FileReader(target));
2 26 Feb 07 jari 693                 
2 26 Feb 07 jari 694                 String currentLine;
2 26 Feb 07 jari 695                 StringSplitter ss;
2 26 Feb 07 jari 696                 while ((currentLine = br.readLine()) != null) {
2 26 Feb 07 jari 697                     currentLine.trim();
2 26 Feb 07 jari 698                     if (!(currentLine.startsWith("//") || (currentLine.length() == 0))) {
2 26 Feb 07 jari 699                         if (currentLine.startsWith("Additional Fields")) {
2 26 Feb 07 jari 700                             ss = new StringSplitter('\t');
2 26 Feb 07 jari 701                             ss.init(currentLine);
2 26 Feb 07 jari 702                             ss.nextToken();
2 26 Feb 07 jari 703                             String fieldsString = ss.nextToken();
2 26 Feb 07 jari 704                             
2 26 Feb 07 jari 705                             ss = new StringSplitter(':');
2 26 Feb 07 jari 706                             ss.init(fieldsString);
2 26 Feb 07 jari 707                             String [] fieldNames = new String[ss.countTokens()+1];
2 26 Feb 07 jari 708
2 26 Feb 07 jari 709                             int cnt = 0;
2 26 Feb 07 jari 710                             while (ss.hasMoreTokens()) {
2 26 Feb 07 jari 711                                 fieldNames[cnt] = ss.nextToken();
2 26 Feb 07 jari 712                                 cnt++;
2 26 Feb 07 jari 713                             }
2 26 Feb 07 jari 714                             //TODO this is a problem - can't set field names 
2 26 Feb 07 jari 715                             //for tav files because SlideData isn't accessible
2 26 Feb 07 jari 716 //                            TMEV.setFieldNames(fieldNames);
2 26 Feb 07 jari 717                             preferencesTextField.setText(target.getPath());
2 26 Feb 07 jari 718                         }
2 26 Feb 07 jari 719                     }
2 26 Feb 07 jari 720                 }
2 26 Feb 07 jari 721             } catch (IOException ioe) {
2 26 Feb 07 jari 722                 ioe.printStackTrace();
2 26 Feb 07 jari 723                 return;
2 26 Feb 07 jari 724             }
2 26 Feb 07 jari 725             
2 26 Feb 07 jari 726             validateLists();
2 26 Feb 07 jari 727         }
2 26 Feb 07 jari 728         
2 26 Feb 07 jari 729         public void selectPreferencesFile() {
2 26 Feb 07 jari 730             
2 26 Feb 07 jari 731             JFileChooser jfc = new JFileChooser(TMEV.getFile("preferences/"));
2 26 Feb 07 jari 732             FileFilter ff = new FileFilter() {
2 26 Feb 07 jari 733                 public boolean accept(File file) {
2 26 Feb 07 jari 734                     if (file.isDirectory()) return true;
2 26 Feb 07 jari 735                     String filename = file.getName();
2 26 Feb 07 jari 736                     if (filename.endsWith("Preferences")) return true;
2 26 Feb 07 jari 737                     else if (filename.endsWith("preferences")) return true;
2 26 Feb 07 jari 738                     else if (filename.endsWith(".pref")) return true;
2 26 Feb 07 jari 739                     else return false;
2 26 Feb 07 jari 740                 }
2 26 Feb 07 jari 741                 
2 26 Feb 07 jari 742                 public String getDescription() {
2 26 Feb 07 jari 743                     return "Preference Files";
2 26 Feb 07 jari 744                 }
2 26 Feb 07 jari 745             };
2 26 Feb 07 jari 746             jfc.setFileFilter(ff);
2 26 Feb 07 jari 747             int activityCode = jfc.showDialog(this, "Select");
2 26 Feb 07 jari 748             
2 26 Feb 07 jari 749             if (activityCode == JFileChooser.APPROVE_OPTION) {
2 26 Feb 07 jari 750                 File target = jfc.getSelectedFile();
2 26 Feb 07 jari 751                 processPreferencesFile(target);
2 26 Feb 07 jari 752             }
2 26 Feb 07 jari 753         }
2 26 Feb 07 jari 754         
2 26 Feb 07 jari 755         private class ListRenderer extends DefaultListCellRenderer {
2 26 Feb 07 jari 756             public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
2 26 Feb 07 jari 757                 super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
2 26 Feb 07 jari 758                 File file = (File) value;
2 26 Feb 07 jari 759                 setText(file.getName());
2 26 Feb 07 jari 760                 return this;
2 26 Feb 07 jari 761             }
2 26 Feb 07 jari 762         }
2 26 Feb 07 jari 763         
2 26 Feb 07 jari 764         private class EventHandler implements ActionListener {
2 26 Feb 07 jari 765             public void actionPerformed(ActionEvent event) {
2 26 Feb 07 jari 766                 
2 26 Feb 07 jari 767                 Object source = event.getSource();
2 26 Feb 07 jari 768                 
2 26 Feb 07 jari 769                 if (source == tavAddButton) {
2 26 Feb 07 jari 770                     onTavAdd();
2 26 Feb 07 jari 771                 } else if (source == tavAddAllButton) {
2 26 Feb 07 jari 772                     onTavAddAll();
2 26 Feb 07 jari 773                 } else if (source == tavRemoveButton) {
2 26 Feb 07 jari 774                     onTavRemove();
2 26 Feb 07 jari 775                 } else if (source == tavRemoveAllButton) {
2 26 Feb 07 jari 776                     onTavRemoveAll();
2 26 Feb 07 jari 777                 } else if (source == browseButton) {
2 26 Feb 07 jari 778                     selectPreferencesFile();
2 26 Feb 07 jari 779                 }
2 26 Feb 07 jari 780             }
2 26 Feb 07 jari 781         }
2 26 Feb 07 jari 782         
2 26 Feb 07 jari 783         private class FileTreePaneEventHandler implements FileTreePaneListener {
2 26 Feb 07 jari 784             
2 26 Feb 07 jari 785             public void nodeSelected(FileTreePaneEvent event) {
2 26 Feb 07 jari 786                 
2 26 Feb 07 jari 787                 String filePath = (String) event.getValue("Path");
2 26 Feb 07 jari 788                 Vector fileNames = (Vector) event.getValue("Filenames");
2 26 Feb 07 jari 789                 
2 26 Feb 07 jari 790                 processFileList(filePath, fileNames);
2 26 Feb 07 jari 791             }
2 26 Feb 07 jari 792             
2 26 Feb 07 jari 793             public void nodeCollapsed(FileTreePaneEvent event) {}
2 26 Feb 07 jari 794             public void nodeExpanded(FileTreePaneEvent event) {}
2 26 Feb 07 jari 795         }
2 26 Feb 07 jari 796     }
2 26 Feb 07 jari 797 }