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