mev-4.0.01/source/org/tigr/microarray/mev/file/Mas5FileLoader.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: Mas5FileLoader.java,v $
2 26 Feb 07 jari 7  * $Revision: 1.5 $
2 26 Feb 07 jari 8  * $Date: 2006/03/28 22:30:33 $
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
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.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.MouseAdapter;
2 26 Feb 07 jari 21 import java.awt.event.MouseEvent;
2 26 Feb 07 jari 22 import java.io.BufferedReader;
2 26 Feb 07 jari 23 import java.io.File;
2 26 Feb 07 jari 24 import java.io.FileNotFoundException;
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.JFileChooser;
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.JScrollPane;
2 26 Feb 07 jari 37 import javax.swing.JSplitPane;
2 26 Feb 07 jari 38 import javax.swing.JTable;
2 26 Feb 07 jari 39 import javax.swing.JTextField;
2 26 Feb 07 jari 40 import javax.swing.ScrollPaneConstants;
2 26 Feb 07 jari 41 import javax.swing.border.EtchedBorder;
2 26 Feb 07 jari 42 import javax.swing.border.TitledBorder;
2 26 Feb 07 jari 43 import javax.swing.event.ListSelectionEvent;
2 26 Feb 07 jari 44 import javax.swing.filechooser.FileFilter;
2 26 Feb 07 jari 45 import javax.swing.table.DefaultTableModel;
2 26 Feb 07 jari 46 import javax.swing.table.TableModel;
2 26 Feb 07 jari 47
2 26 Feb 07 jari 48 import org.tigr.microarray.mev.FloatSlideData;
2 26 Feb 07 jari 49 import org.tigr.microarray.mev.ISlideData;
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 Mas5FileLoader extends ExpressionFileLoader {
2 26 Feb 07 jari 55     
2 26 Feb 07 jari 56     private GBA gba;
2 26 Feb 07 jari 57     private boolean stop = false;
2 26 Feb 07 jari 58     private Mas5FileLoaderPanel sflp;
2 26 Feb 07 jari 59     private int affyDataType = TMEV.DATA_TYPE_AFFY;
2 26 Feb 07 jari 60     
2 26 Feb 07 jari 61     public Mas5FileLoader(SuperExpressionFileLoader superLoader) {
2 26 Feb 07 jari 62         super(superLoader);
2 26 Feb 07 jari 63         gba = new GBA();
2 26 Feb 07 jari 64         sflp = new Mas5FileLoaderPanel();
2 26 Feb 07 jari 65     }
2 26 Feb 07 jari 66     
2 26 Feb 07 jari 67     public Vector loadExpressionFiles() throws IOException {
2 26 Feb 07 jari 68       //System.out.print(this.sflp.pathTextField.getText());
2 26 Feb 07 jari 69         return loadMas5ExpressionFile(new File(this.sflp.pathTextField.getText()),this.sflp.refTextField.getText());
2 26 Feb 07 jari 70     }
2 26 Feb 07 jari 71     
2 26 Feb 07 jari 72     public ISlideData loadExpressionFile(File f){
2 26 Feb 07 jari 73         return null;
2 26 Feb 07 jari 74     }
2 26 Feb 07 jari 75     
2 26 Feb 07 jari 76    
2 26 Feb 07 jari 77     /*
2 26 Feb 07 jari 78      *  Handling of Mas5 data has been altered in version 3.0 to permit loading of
2 26 Feb 07 jari 79      *  "ratio" input without the creation of false cy3 and cy5.  cy5 values in data structures
2 26 Feb 07 jari 80      *  are used to hold the input value.
2 26 Feb 07 jari 81      *
2 26 Feb 07 jari 82      *  getRatio methods are altered to return the value (held in cy5) rather than
2 26 Feb 07 jari 83      *  taking log2(cy5/cy3).
2 26 Feb 07 jari 84      */
2 26 Feb 07 jari 85     
2 26 Feb 07 jari 86    /*by wwang 
2 26 Feb 07 jari 87     * set datatype =DATA_TYPE_AFFY
2 26 Feb 07 jari 88     */ 
2 26 Feb 07 jari 89     
2 26 Feb 07 jari 90     public void setTMEVDataType(){
2 26 Feb 07 jari 91         TMEV.setDataType(TMEV.DATA_TYPE_AFFY);
2 26 Feb 07 jari 92     }
2 26 Feb 07 jari 93     
2 26 Feb 07 jari 94     public int getAffyDataType(){
2 26 Feb 07 jari 95         return this.affyDataType;
2 26 Feb 07 jari 96     }
2 26 Feb 07 jari 97     
2 26 Feb 07 jari 98     public Vector loadMas5ExpressionFile(File f,String callfile) throws IOException {
2 26 Feb 07 jari 99         
2 26 Feb 07 jari 100         final int preSpotRows = this.sflp.getXRow()+1;
2 26 Feb 07 jari 101         final int preExperimentColumns = this.sflp.getXColumn();
2 26 Feb 07 jari 102         this.setTMEVDataType();
2 26 Feb 07 jari 103         int numLines = this.getCountOfLines(f);
2 26 Feb 07 jari 104         
2 26 Feb 07 jari 105         int spotCount = numLines - preSpotRows;
2 26 Feb 07 jari 106
2 26 Feb 07 jari 107         if (spotCount <= 0) {
2 26 Feb 07 jari 108             JOptionPane.showMessageDialog(superLoader.getFrame(),  "There is no spot data available.",  "TDMS Load Error", JOptionPane.INFORMATION_MESSAGE);
2 26 Feb 07 jari 109         }
2 26 Feb 07 jari 110         
2 26 Feb 07 jari 111         int[] rows = new int[] {0, 1, 0};
2 26 Feb 07 jari 112         int[] columns = new int[] {0, 1, 0};
2 26 Feb 07 jari 113         String value;
2 26 Feb 07 jari 114         float cy3, cy5;
2 26 Feb 07 jari 115         String[] moreFields = new String[preExperimentColumns];
2 26 Feb 07 jari 116         
2 26 Feb 07 jari 117         final int rColumns = 1;
2 26 Feb 07 jari 118         final int rRows = spotCount;
2 26 Feb 07 jari 119         
2 26 Feb 07 jari 120         ISlideData[] slideDataArray = null;
2 26 Feb 07 jari 121         SlideDataElement sde;
2 26 Feb 07 jari 122                         
2 26 Feb 07 jari 123         BufferedReader reader = new BufferedReader(new FileReader(f));
2 26 Feb 07 jari 124         StringSplitter ss = new StringSplitter((char)0x09);
2 26 Feb 07 jari 125         String currentLine;
2 26 Feb 07 jari 126         int counter, row, column;
2 26 Feb 07 jari 127         counter = 0;
2 26 Feb 07 jari 128         row = column = 1;
2 26 Feb 07 jari 129         this.setFilesCount(1);
2 26 Feb 07 jari 130         this.setRemain(1);
2 26 Feb 07 jari 131         this.setFilesProgress(0);
2 26 Feb 07 jari 132         this.setLinesCount(numLines);
2 26 Feb 07 jari 133         this.setFileProgress(0);
2 26 Feb 07 jari 134         
2 26 Feb 07 jari 135         
2 26 Feb 07 jari 136         while ((currentLine = reader.readLine()) != null) {
2 26 Feb 07 jari 137             if (stop) {
2 26 Feb 07 jari 138                 return null;
2 26 Feb 07 jari 139             }
2 26 Feb 07 jari 140             ss.init(currentLine);
2 26 Feb 07 jari 141             if (counter == 0) { // parse header
2 26 Feb 07 jari 142                 int experimentCount = ss.countTokens()+2- preExperimentColumns;
2 26 Feb 07 jari 143                 slideDataArray = new ISlideData[experimentCount];
2 26 Feb 07 jari 144                 slideDataArray[0] = new SlideData(rRows, rColumns);
2 26 Feb 07 jari 145                 slideDataArray[0].setSlideFileName(f.getPath());
2 26 Feb 07 jari 146                 for (int i=1; i<slideDataArray.length; i++) {
2 26 Feb 07 jari 147                     slideDataArray[i] = new FloatSlideData(slideDataArray[0].getSlideMetaData(), spotCount);
2 26 Feb 07 jari 148                     slideDataArray[i].setSlideFileName(f.getPath());
2 26 Feb 07 jari 149                 }
2 26 Feb 07 jari 150                 //get Field Names and add one for List 
2 26 Feb 07 jari 151                 String [] fieldNames = new String[preExperimentColumns+1];
2 26 Feb 07 jari 152                 fieldNames[0]="ChipID";
2 26 Feb 07 jari 153                 
2 26 Feb 07 jari 154                 for(int i = 1; i < preExperimentColumns; i++){
2 26 Feb 07 jari 155                     fieldNames[i] = ss.nextToken();
2 26 Feb 07 jari 156                 }               
2 26 Feb 07 jari 157                 fieldNames[preExperimentColumns]=callfile;           
2 26 Feb 07 jari 158                 slideDataArray[0].getSlideMetaData().appendFieldNames(fieldNames);
2 26 Feb 07 jari 159      
2 26 Feb 07 jari 160                 for (int i=0; i<experimentCount; i++) {
2 26 Feb 07 jari 161                     slideDataArray[i].setSlideDataName(ss.nextToken());
2 26 Feb 07 jari 162                 }
2 26 Feb 07 jari 163             } else if (counter >= preSpotRows) { // data rows
2 26 Feb 07 jari 164                 rows[0] = rows[2] = row;
2 26 Feb 07 jari 165                 columns[0] = columns[2] = column;
2 26 Feb 07 jari 166                 if (column == rColumns) {
2 26 Feb 07 jari 167                     column = 1;
2 26 Feb 07 jari 168                     row++;
2 26 Feb 07 jari 169                 } else {
2 26 Feb 07 jari 170                     column++;
2 26 Feb 07 jari 171                 }
2 26 Feb 07 jari 172                 for (int i=0; i<preExperimentColumns; i++) {
2 26 Feb 07 jari 173                     moreFields[i] = ss.nextToken();
2 26 Feb 07 jari 174                 }
2 26 Feb 07 jari 175                 sde = new SlideDataElement(String.valueOf(row+1), rows, columns, new float[2], moreFields);
2 26 Feb 07 jari 176                 slideDataArray[0].addSlideDataElement(sde);
2 26 Feb 07 jari 177                 
2 26 Feb 07 jari 178                 for (int i=0; i<slideDataArray.length; i++) {
2 26 Feb 07 jari 179                     
2 26 Feb 07 jari 180                     cy3 = 1f;  //set cy3 to a default value of 1.
2 26 Feb 07 jari 181                     
2 26 Feb 07 jari 182                     try {
2 26 Feb 07 jari 183                         value = ss.nextToken();
2 26 Feb 07 jari 184                         cy5 = Float.parseFloat(value);  //set cy5 to hold the value
2 26 Feb 07 jari 185                         //getRatio methods will return cy5
2 26 Feb 07 jari 186                         //for Mas5 data type
2 26 Feb 07 jari 187                     } catch (Exception e) {
2 26 Feb 07 jari 188                         cy3 = 0;
2 26 Feb 07 jari 189                         cy5 = Float.NaN;
2 26 Feb 07 jari 190                     }
2 26 Feb 07 jari 191                     slideDataArray[i].setIntensities(counter - preSpotRows, cy3, cy5);
2 26 Feb 07 jari 192                 }
2 26 Feb 07 jari 193             } else {
2 26 Feb 07 jari 194                 //we have additional sample annoation
2 26 Feb 07 jari 195                 
2 26 Feb 07 jari 196                 //advance to sample key
2 26 Feb 07 jari 197                 for(int i = 0; i < preExperimentColumns-1; i++) {
2 26 Feb 07 jari 198                     ss.nextToken();
2 26 Feb 07 jari 199                 }
2 26 Feb 07 jari 200                 String key = ss.nextToken();
2 26 Feb 07 jari 201                 
2 26 Feb 07 jari 202                 for(int j = 0; j < slideDataArray.length; j++) {
2 26 Feb 07 jari 203                     slideDataArray[j].addNewSampleLabel(key, ss.nextToken());
2 26 Feb 07 jari 204                 }
2 26 Feb 07 jari 205             }
2 26 Feb 07 jari 206             
2 26 Feb 07 jari 207             this.setFileProgress(counter);
2 26 Feb 07 jari 208             counter++;
2 26 Feb 07 jari 209         }
2 26 Feb 07 jari 210         reader.close();
2 26 Feb 07 jari 211         
2 26 Feb 07 jari 212         Vector data = new Vector(slideDataArray.length);
2 26 Feb 07 jari 213         
2 26 Feb 07 jari 214         for(int i = 0; i < slideDataArray.length; i++)
2 26 Feb 07 jari 215             data.add(slideDataArray[i]);
2 26 Feb 07 jari 216         
2 26 Feb 07 jari 217         this.setFilesProgress(1);
2 26 Feb 07 jari 218         return data;
2 26 Feb 07 jari 219     }
2 26 Feb 07 jari 220     
2 26 Feb 07 jari 221     
2 26 Feb 07 jari 222     public FileFilter getFileFilter() {
2 26 Feb 07 jari 223         
2 26 Feb 07 jari 224         FileFilter mevFileFilter = new FileFilter() {
2 26 Feb 07 jari 225             
2 26 Feb 07 jari 226             public boolean accept(File f) {
2 26 Feb 07 jari 227                 if (f.isDirectory()) return true;
2 26 Feb 07 jari 228                 if (f.getName().endsWith(".txt")) return true;
2 26 Feb 07 jari 229                 else return false;
2 26 Feb 07 jari 230             }
2 26 Feb 07 jari 231             
2 26 Feb 07 jari 232             public String getDescription() {
2 26 Feb 07 jari 233                 return "Mas5 Files(*.txt)";
2 26 Feb 07 jari 234             }
2 26 Feb 07 jari 235         };
2 26 Feb 07 jari 236         
2 26 Feb 07 jari 237         return mevFileFilter;
2 26 Feb 07 jari 238     }
2 26 Feb 07 jari 239     
2 26 Feb 07 jari 240     public boolean checkLoadEnable() {
2 26 Feb 07 jari 241         
2 26 Feb 07 jari 242         // Currently, the only requirement is that a cell has been highlighted
2 26 Feb 07 jari 243         
2 26 Feb 07 jari 244         int tableRow = sflp.getXRow() + 1; // Adjusted by 1 to account for the table header
2 26 Feb 07 jari 245         int tableColumn = sflp.getXColumn();
2 26 Feb 07 jari 246         //System.out.print(tableColumn);
2 26 Feb 07 jari 247         if (tableColumn < 0) return false;
2 26 Feb 07 jari 248         
2 26 Feb 07 jari 249         TableModel model = sflp.getTable().getModel();
2 26 Feb 07 jari 250         String fieldSummary = "";
2 26 Feb 07 jari 251         for (int i = 0; i < tableColumn; i++) {
2 26 Feb 07 jari 252             // System.out.print(model.getColumnName(i) + (i + 1 == tableColumn ? "\n" : ", "));
2 26 Feb 07 jari 253             fieldSummary += model.getColumnName(i) + (i + 1 == tableColumn ? "" : ", ");
2 26 Feb 07 jari 254         }
2 26 Feb 07 jari 255         
2 26 Feb 07 jari 256         sflp.setFieldsText(fieldSummary);
2 26 Feb 07 jari 257         
2 26 Feb 07 jari 258         if (tableRow >= 1 && tableColumn >= 0) {
2 26 Feb 07 jari 259             setLoadEnabled(true);
2 26 Feb 07 jari 260             return true;
2 26 Feb 07 jari 261         } else {
2 26 Feb 07 jari 262             setLoadEnabled(false);
2 26 Feb 07 jari 263             return false;
2 26 Feb 07 jari 264         }
2 26 Feb 07 jari 265     }
2 26 Feb 07 jari 266     
2 26 Feb 07 jari 267     public boolean validateFile(File targetFile) {
2 26 Feb 07 jari 268         return true; // For now, no validation on Mas5 Files
2 26 Feb 07 jari 269     }
2 26 Feb 07 jari 270     
2 26 Feb 07 jari 271     public JPanel getFileLoaderPanel() {
2 26 Feb 07 jari 272         return sflp;
2 26 Feb 07 jari 273     }
2 26 Feb 07 jari 274     
2 26 Feb 07 jari 275     public void loadCallFile(File targetFile) {
2 26 Feb 07 jari 276        sflp.setCallFileName(targetFile.getAbsolutePath());  
2 26 Feb 07 jari 277     }
2 26 Feb 07 jari 278     public void processMas5File(File targetFile) {
2 26 Feb 07 jari 279         
2 26 Feb 07 jari 280         Vector columnHeaders = new Vector();
2 26 Feb 07 jari 281         Vector dataVector = new Vector();
2 26 Feb 07 jari 282         Vector rowVector = null;
2 26 Feb 07 jari 283         BufferedReader reader = null;
2 26 Feb 07 jari 284         String currentLine = null;
2 26 Feb 07 jari 285         
2 26 Feb 07 jari 286         if (! validateFile(targetFile)) return;
2 26 Feb 07 jari 287         sflp.setDataFileName(targetFile.getAbsolutePath());
2 26 Feb 07 jari 288         DefaultTableModel model = new DefaultTableModel() {
2 26 Feb 07 jari 289             public boolean isCellEditable(int row, int column) {
2 26 Feb 07 jari 290                 return false;
2 26 Feb 07 jari 291             }
2 26 Feb 07 jari 292         };
2 26 Feb 07 jari 293         
2 26 Feb 07 jari 294         try {
2 26 Feb 07 jari 295             reader = new BufferedReader(new FileReader(targetFile), 1024 * 128);
2 26 Feb 07 jari 296         } catch (FileNotFoundException fnfe) {
2 26 Feb 07 jari 297             fnfe.printStackTrace();
2 26 Feb 07 jari 298         }
2 26 Feb 07 jari 299         
2 26 Feb 07 jari 300         try {
2 26 Feb 07 jari 301             StringSplitter ss = new StringSplitter('\t');
2 26 Feb 07 jari 302             currentLine = reader.readLine();
2 26 Feb 07 jari 303             ss.init(currentLine);
2 26 Feb 07 jari 304             columnHeaders.add("ChipID\t");
2 26 Feb 07 jari 305             for (int i = 0; i < ss.countTokens()+1; i++) {
2 26 Feb 07 jari 306                 columnHeaders.add(ss.nextToken());
2 26 Feb 07 jari 307             }
2 26 Feb 07 jari 308             model.setColumnIdentifiers(columnHeaders);
2 26 Feb 07 jari 309             int cnt = 0;
2 26 Feb 07 jari 310             while ((currentLine = reader.readLine()) != null && cnt < 100) {
2 26 Feb 07 jari 311                 cnt++;
2 26 Feb 07 jari 312                 ss.init(currentLine);
2 26 Feb 07 jari 313                 rowVector = new Vector();
2 26 Feb 07 jari 314                 for (int i = 0; i < ss.countTokens()+1; i++) {
2 26 Feb 07 jari 315                     try {
2 26 Feb 07 jari 316                         rowVector.add(ss.nextToken());
2 26 Feb 07 jari 317                     } catch (java.util.NoSuchElementException nsee) {
2 26 Feb 07 jari 318                         rowVector.add(" ");
2 26 Feb 07 jari 319                     }
2 26 Feb 07 jari 320                 }
2 26 Feb 07 jari 321                 
2 26 Feb 07 jari 322                 dataVector.add(rowVector);
2 26 Feb 07 jari 323                 model.addRow(rowVector);
2 26 Feb 07 jari 324             }
2 26 Feb 07 jari 325             
2 26 Feb 07 jari 326             reader.close();
2 26 Feb 07 jari 327         } catch (IOException ioe) {
2 26 Feb 07 jari 328             ioe.printStackTrace();
2 26 Feb 07 jari 329         }
2 26 Feb 07 jari 330         
2 26 Feb 07 jari 331         sflp.setTableModel(model);
2 26 Feb 07 jari 332     }
2 26 Feb 07 jari 333     
2 26 Feb 07 jari 334     
2 26 Feb 07 jari 335     public String getFilePath() {
2 26 Feb 07 jari 336         return this.sflp.pathTextField.getText();
2 26 Feb 07 jari 337     }
2 26 Feb 07 jari 338     
2 26 Feb 07 jari 339     public void openDataPath() {
2 26 Feb 07 jari 340         this.sflp.openDataPath();
2 26 Feb 07 jari 341     }
2 26 Feb 07 jari 342     
2 26 Feb 07 jari 343 /*
2 26 Feb 07 jari 344 //
2 26 Feb 07 jari 345 //  Mas5FileLoader - Internal Classes
2 26 Feb 07 jari 346 //
2 26 Feb 07 jari 347  */
2 26 Feb 07 jari 348     
2 26 Feb 07 jari 349     private class Mas5FileLoaderPanel extends JPanel {
2 26 Feb 07 jari 350       FileTreePane fileTreePane;
2 26 Feb 07 jari 351         
2 26 Feb 07 jari 352       JTextField pathTextField;
2 26 Feb 07 jari 353         JPanel pathPanel;
2 26 Feb 07 jari 354         
2 26 Feb 07 jari 355         JTable expressionTable;
2 26 Feb 07 jari 356         JLabel instructionsLabel;
2 26 Feb 07 jari 357         JScrollPane tableScrollPane;
2 26 Feb 07 jari 358         JPanel tablePanel;
2 26 Feb 07 jari 359         
2 26 Feb 07 jari 360         JPanel mas5ListPanel;
2 26 Feb 07 jari 361         JList mas5AvailableList;
2 26 Feb 07 jari 362         JScrollPane mas5AvailableScrollPane;
2 26 Feb 07 jari 363         
2 26 Feb 07 jari 364         JPanel refListPanel;
2 26 Feb 07 jari 365         JList refAvailableList;
2 26 Feb 07 jari 366         JScrollPane refAvailableScrollPane;
2 26 Feb 07 jari 367         
2 26 Feb 07 jari 368         JTextField refTextField;
2 26 Feb 07 jari 369         JPanel refPanel;
2 26 Feb 07 jari 370         
2 26 Feb 07 jari 371         JTextField annoTextField;
2 26 Feb 07 jari 372         JPanel annoPanel;
2 26 Feb 07 jari 373         
2 26 Feb 07 jari 374         JPanel fileLoaderPanel;
2 26 Feb 07 jari 375         JSplitPane splitPane;
2 26 Feb 07 jari 376  
2 26 Feb 07 jari 377         private int xRow = -1;
2 26 Feb 07 jari 378         private int xColumn = -1;
2 26 Feb 07 jari 379         
2 26 Feb 07 jari 380         
2 26 Feb 07 jari 381         public Mas5FileLoaderPanel() {                
2 26 Feb 07 jari 382                 setLayout(new GridBagLayout());
2 26 Feb 07 jari 383
2 26 Feb 07 jari 384                 fileTreePane = new FileTreePane(SuperExpressionFileLoader.DATA_PATH);
2 26 Feb 07 jari 385                 fileTreePane.addFileTreePaneListener(new FileTreePaneEventHandler());
2 26 Feb 07 jari 386                 fileTreePane.setPreferredSize(new java.awt.Dimension(200, 50));
2 26 Feb 07 jari 387
2 26 Feb 07 jari 388                 pathTextField = new JTextField();
2 26 Feb 07 jari 389                 pathTextField.setEditable(false);
2 26 Feb 07 jari 390                 pathTextField.setBorder(new TitledBorder(new EtchedBorder(), "Selected Path"));
2 26 Feb 07 jari 391                 pathTextField.setForeground(Color.black);
2 26 Feb 07 jari 392                 pathTextField.setFont(new Font("monospaced", Font.BOLD, 12));
2 26 Feb 07 jari 393                 
2 26 Feb 07 jari 394                 pathPanel = new JPanel();
2 26 Feb 07 jari 395                 pathPanel.setLayout(new GridBagLayout());
2 26 Feb 07 jari 396                 pathPanel.setBorder(new TitledBorder(new EtchedBorder(), getFileFilter().getDescription()));
2 26 Feb 07 jari 397                 gba.add(pathPanel, pathTextField, 0, 0, 2, 1, 1, 0, GBA.H, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 398                
2 26 Feb 07 jari 399         
2 26 Feb 07 jari 400                 mas5AvailableList = new JList(new DefaultListModel());
2 26 Feb 07 jari 401                 mas5AvailableList.setCellRenderer(new ListRenderer());
2 26 Feb 07 jari 402                 mas5AvailableList.addListSelectionListener(new ListListener());
2 26 Feb 07 jari 403                 mas5AvailableScrollPane = new JScrollPane(mas5AvailableList);
2 26 Feb 07 jari 404                 mas5ListPanel = new JPanel();
2 26 Feb 07 jari 405                 mas5ListPanel.setLayout(new GridBagLayout());
2 26 Feb 07 jari 406                 mas5ListPanel.setBorder(new TitledBorder(new EtchedBorder(), "Data File Available"));
2 26 Feb 07 jari 407                 gba.add(mas5ListPanel, mas5AvailableScrollPane, 0, 0, 1, 1, 1, 1, GBA.B, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 408                 
2 26 Feb 07 jari 409                 expressionTable = new JTable();
2 26 Feb 07 jari 410                 expressionTable.setCellSelectionEnabled(true);
2 26 Feb 07 jari 411                 expressionTable.setColumnSelectionAllowed(false);
2 26 Feb 07 jari 412                 expressionTable.setRowSelectionAllowed(false);
2 26 Feb 07 jari 413                 expressionTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
2 26 Feb 07 jari 414                 expressionTable.getTableHeader().setReorderingAllowed(false);
2 26 Feb 07 jari 415                 expressionTable.addMouseListener(new MouseAdapter() {
2 26 Feb 07 jari 416                     public void mousePressed(MouseEvent event) {
2 26 Feb 07 jari 417                         xRow = expressionTable.rowAtPoint(event.getPoint());
2 26 Feb 07 jari 418                         xColumn = expressionTable.columnAtPoint(event.getPoint());
2 26 Feb 07 jari 419                         checkLoadEnable();
2 26 Feb 07 jari 420                     }
2 26 Feb 07 jari 421                 });
2 26 Feb 07 jari 422                 
2 26 Feb 07 jari 423                 tableScrollPane = new JScrollPane(expressionTable, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
2 26 Feb 07 jari 424                 instructionsLabel = new JLabel();
2 26 Feb 07 jari 425                 instructionsLabel.setForeground(java.awt.Color.red);
2 26 Feb 07 jari 426                 String instructions = "<html>Click the upper-leftmost expression value. Click the <b>Load</b> button to finish.</html>";
2 26 Feb 07 jari 427                 instructionsLabel.setText(instructions);
2 26 Feb 07 jari 428                 
2 26 Feb 07 jari 429                 tablePanel = new JPanel();
2 26 Feb 07 jari 430                 tablePanel.setLayout(new GridBagLayout());
2 26 Feb 07 jari 431                 tablePanel.setBorder(new TitledBorder(new EtchedBorder(), "Expression Table"));
2 26 Feb 07 jari 432                 gba.add(tablePanel, tableScrollPane, 0, 0, 1, 2, 1, 1, GBA.B, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 433                 gba.add(tablePanel, instructionsLabel, 0, 2, 1, 1, 1, 0, GBA.H, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 434  
2 26 Feb 07 jari 435                 refAvailableList = new JList(new DefaultListModel());
2 26 Feb 07 jari 436                 refAvailableList.setCellRenderer(new ListRenderer());
2 26 Feb 07 jari 437                 refAvailableList.addListSelectionListener(new ListListener());
2 26 Feb 07 jari 438                 refAvailableScrollPane = new JScrollPane(refAvailableList);
2 26 Feb 07 jari 439                 refListPanel = new JPanel();
2 26 Feb 07 jari 440                 refListPanel.setLayout(new GridBagLayout());
2 26 Feb 07 jari 441                 refListPanel.setBorder(new TitledBorder(new EtchedBorder(), "Call File Available"));
2 26 Feb 07 jari 442                 gba.add(refListPanel, refAvailableScrollPane, 0, 0, 1, 1, 1, 1, GBA.B, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 443                 
2 26 Feb 07 jari 444                 refTextField = new JTextField();
2 26 Feb 07 jari 445                 refTextField.setEditable(false);
2 26 Feb 07 jari 446                 refTextField.setBorder(new TitledBorder(new EtchedBorder(), "Selected Call File"));
2 26 Feb 07 jari 447                 refTextField.setForeground(Color.black);
2 26 Feb 07 jari 448                 refTextField.setFont(new Font("monospaced", Font.BOLD, 12));
2 26 Feb 07 jari 449                 
2 26 Feb 07 jari 450                 refPanel = new JPanel();
2 26 Feb 07 jari 451                 refPanel.setLayout(new GridBagLayout());
2 26 Feb 07 jari 452                 refPanel.setBorder(new TitledBorder(new EtchedBorder(), "Call File"));
2 26 Feb 07 jari 453                 gba.add(refPanel, refTextField, 0, 0, 2, 1, 1, 0, GBA.H, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 454                 
2 26 Feb 07 jari 455                 annoTextField = new JTextField();
2 26 Feb 07 jari 456                 annoTextField.setEditable(false);
2 26 Feb 07 jari 457                 annoTextField.setForeground(Color.black);
2 26 Feb 07 jari 458                 annoTextField.setFont(new Font("serif", Font.BOLD, 12));
2 26 Feb 07 jari 459                 
2 26 Feb 07 jari 460                 annoPanel = new JPanel();
2 26 Feb 07 jari 461                 annoPanel.setLayout(new GridBagLayout());
2 26 Feb 07 jari 462                 annoPanel.setBorder(new TitledBorder(new EtchedBorder(), "Annotation Fields"));
2 26 Feb 07 jari 463                 gba.add(annoPanel, annoTextField, 0, 0, 2, 1, 1, 0, GBA.H, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 464                
2 26 Feb 07 jari 465                 fileLoaderPanel = new JPanel();
2 26 Feb 07 jari 466                 fileLoaderPanel.setLayout(new GridBagLayout());
2 26 Feb 07 jari 467                 
2 26 Feb 07 jari 468                 gba.add(fileLoaderPanel,mas5ListPanel, 0, 0, 1, 5, 1, 1, GBA.B, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 469                 gba.add(fileLoaderPanel, refListPanel, 0, 6, 1, 4, 1, 1, GBA.B, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 470                 
2 26 Feb 07 jari 471                 gba.add(fileLoaderPanel, pathPanel, 2, 0, 1, 1, 3, 0, GBA.H, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 472                 gba.add(fileLoaderPanel, tablePanel, 2, 1, 1, 6, 3, 1, GBA.B, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 473                 gba.add(fileLoaderPanel, annoPanel, 2, 7, 1, 1, 3, 0, GBA.H, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 474                 gba.add(fileLoaderPanel, refPanel, 2, 8, 1, 1, 3, 0, GBA.H, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 475                
2 26 Feb 07 jari 476                 
2 26 Feb 07 jari 477                 splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, fileTreePane, fileLoaderPanel);
2 26 Feb 07 jari 478                 splitPane.setPreferredSize(new java.awt.Dimension(600, 600));
2 26 Feb 07 jari 479                 splitPane.setDividerLocation(200);
2 26 Feb 07 jari 480                 gba.add(this,splitPane,0,0,1,1,1,1,GBA.B,GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 481                 
2 26 Feb 07 jari 482         }
2 26 Feb 07 jari 483         
2 26 Feb 07 jari 484         public void openDataPath() {
2 26 Feb 07 jari 485             fileTreePane.openDataPath();
2 26 Feb 07 jari 486         }     
2 26 Feb 07 jari 487  
2 26 Feb 07 jari 488        
2 26 Feb 07 jari 489         public JTable getTable() {
2 26 Feb 07 jari 490             return expressionTable;
2 26 Feb 07 jari 491         }
2 26 Feb 07 jari 492         
2 26 Feb 07 jari 493         public int getXColumn() {
2 26 Feb 07 jari 494             return xColumn;
2 26 Feb 07 jari 495         }
2 26 Feb 07 jari 496         
2 26 Feb 07 jari 497         public int getXRow() {
2 26 Feb 07 jari 498             return xRow;
2 26 Feb 07 jari 499         }
2 26 Feb 07 jari 500         
2 26 Feb 07 jari 501         public void selectMas5File() {
2 26 Feb 07 jari 502             JFileChooser jfc = new JFileChooser(SuperExpressionFileLoader.DATA_PATH);
2 26 Feb 07 jari 503             jfc.setFileFilter(getFileFilter());
2 26 Feb 07 jari 504             int activityCode = jfc.showDialog(this, "Select");
2 26 Feb 07 jari 505             
2 26 Feb 07 jari 506             if (activityCode == JFileChooser.APPROVE_OPTION) {
2 26 Feb 07 jari 507                 File target = jfc.getSelectedFile();
2 26 Feb 07 jari 508                 processMas5File(target);
2 26 Feb 07 jari 509             }
2 26 Feb 07 jari 510         }
2 26 Feb 07 jari 511         
2 26 Feb 07 jari 512         public void setDataFileName(String fileName) {
2 26 Feb 07 jari 513             pathTextField.setText(fileName);
2 26 Feb 07 jari 514         }
2 26 Feb 07 jari 515         public void setCallFileName(String fileName) {
2 26 Feb 07 jari 516             refTextField.setText(fileName);
2 26 Feb 07 jari 517         }
2 26 Feb 07 jari 518         
2 26 Feb 07 jari 519         public void setTableModel(TableModel model) {
2 26 Feb 07 jari 520             expressionTable.setModel(model);
2 26 Feb 07 jari 521             int numCols = expressionTable.getColumnCount();
2 26 Feb 07 jari 522             //System.out.print(numCols);
2 26 Feb 07 jari 523             for(int i = 0; i < numCols; i++){
2 26 Feb 07 jari 524                 expressionTable.getColumnModel().getColumn(i).setMinWidth(75);
2 26 Feb 07 jari 525             }
2 26 Feb 07 jari 526         }
2 26 Feb 07 jari 527         
2 26 Feb 07 jari 528         public void setFieldsText(String fieldsText) {
2 26 Feb 07 jari 529             annoTextField.setText(fieldsText);
2 26 Feb 07 jari 530         }
2 26 Feb 07 jari 531         
2 26 Feb 07 jari 532         
2 26 Feb 07 jari 533         private class ListRenderer extends DefaultListCellRenderer {
2 26 Feb 07 jari 534             public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
2 26 Feb 07 jari 535                 super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
2 26 Feb 07 jari 536                 File file = (File) value;
2 26 Feb 07 jari 537                 setText(file.getName());
2 26 Feb 07 jari 538                 return this;
2 26 Feb 07 jari 539             }
2 26 Feb 07 jari 540         }
2 26 Feb 07 jari 541         
2 26 Feb 07 jari 542         
2 26 Feb 07 jari 543         
2 26 Feb 07 jari 544         private class ListListener implements javax.swing.event.ListSelectionListener {
2 26 Feb 07 jari 545             
2 26 Feb 07 jari 546             public void valueChanged(ListSelectionEvent lse) {
2 26 Feb 07 jari 547               File file;
2 26 Feb 07 jari 548               Object source=lse.getSource();
2 26 Feb 07 jari 549               if(source==mas5AvailableList){
2 26 Feb 07 jari 550                 file = (File)(mas5AvailableList.getSelectedValue());
2 26 Feb 07 jari 551                 if(file == null || !(file.exists()))
2 26 Feb 07 jari 552                   return;
2 26 Feb 07 jari 553                 processMas5File(file);
2 26 Feb 07 jari 554                 return;
2 26 Feb 07 jari 555               }else
2 26 Feb 07 jari 556                 file = (File)(refAvailableList.getSelectedValue());
2 26 Feb 07 jari 557                 loadCallFile(file);
2 26 Feb 07 jari 558             }
2 26 Feb 07 jari 559         }
2 26 Feb 07 jari 560         
2 26 Feb 07 jari 561      
2 26 Feb 07 jari 562         
2 26 Feb 07 jari 563         private class FileTreePaneEventHandler implements FileTreePaneListener {
2 26 Feb 07 jari 564             
2 26 Feb 07 jari 565             public void nodeSelected(FileTreePaneEvent event) {
2 26 Feb 07 jari 566                 
2 26 Feb 07 jari 567                 String filePath = (String) event.getValue("Path");
2 26 Feb 07 jari 568                 Vector fileNames = (Vector) event.getValue("Filenames");
2 26 Feb 07 jari 569                 //System.out.print(filePath);
2 26 Feb 07 jari 570                 
2 26 Feb 07 jari 571                 if(fileNames.size() < 1)
2 26 Feb 07 jari 572                     return;
2 26 Feb 07 jari 573                 
2 26 Feb 07 jari 574                //String fileName = (String)(fileNames.elementAt(0));
2 26 Feb 07 jari 575                 FileFilter Mas5FileFilter = getFileFilter();
2 26 Feb 07 jari 576 //                FileFilter Mas5CallFileFilter = getFileFilter();
2 26 Feb 07 jari 577                 ((DefaultListModel)(mas5AvailableList.getModel())).clear();
2 26 Feb 07 jari 578                 ((DefaultListModel)(refAvailableList.getModel())).clear();
2 26 Feb 07 jari 579                 
2 26 Feb 07 jari 580                 for (int i = 0; i < fileNames.size(); i++) {
2 26 Feb 07 jari 581                     
2 26 Feb 07 jari 582                     File targetFile = new File((String) fileNames.elementAt(i));
2 26 Feb 07 jari 583                       
2 26 Feb 07 jari 584                     if (Mas5FileFilter.accept(targetFile)) {
2 26 Feb 07 jari 585                         ((DefaultListModel)(mas5AvailableList.getModel())).addElement(new File((String) fileNames.elementAt(i)));
2 26 Feb 07 jari 586                     }
2 26 Feb 07 jari 587                     if (Mas5FileFilter.accept(targetFile)) {
2 26 Feb 07 jari 588                         ((DefaultListModel)(refAvailableList.getModel())).addElement(new File((String) fileNames.elementAt(i)));
2 26 Feb 07 jari 589                     }
2 26 Feb 07 jari 590                 }
2 26 Feb 07 jari 591             }
2 26 Feb 07 jari 592             
2 26 Feb 07 jari 593             public void nodeCollapsed(FileTreePaneEvent event) {}
2 26 Feb 07 jari 594             public void nodeExpanded(FileTreePaneEvent event) {}
2 26 Feb 07 jari 595         }
2 26 Feb 07 jari 596     }  
2 26 Feb 07 jari 597     }
2 26 Feb 07 jari 598