mev-4.0.01/source/org/tigr/microarray/mev/file/GenePixFileLoader.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: GenePixFileLoader.java,v $
2 26 Feb 07 jari 7  * $Revision: 1.9 $
2 26 Feb 07 jari 8  * $Date: 2006/03/28 18:27:11 $
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 package org.tigr.microarray.mev.file;
2 26 Feb 07 jari 13
2 26 Feb 07 jari 14 import java.awt.Color;
2 26 Feb 07 jari 15 import java.awt.Component;
2 26 Feb 07 jari 16 import java.awt.Dimension;
2 26 Feb 07 jari 17 import java.awt.Font;
2 26 Feb 07 jari 18 import java.awt.GridBagLayout;
2 26 Feb 07 jari 19 import java.awt.Insets;
2 26 Feb 07 jari 20 import java.awt.event.ActionEvent;
2 26 Feb 07 jari 21 import java.awt.event.ActionListener;
2 26 Feb 07 jari 22 import java.io.File;
2 26 Feb 07 jari 23 import java.io.IOException;
2 26 Feb 07 jari 24 import java.util.Vector;
2 26 Feb 07 jari 25
2 26 Feb 07 jari 26 import javax.swing.DefaultListCellRenderer;
2 26 Feb 07 jari 27 import javax.swing.DefaultListModel;
2 26 Feb 07 jari 28 import javax.swing.JButton;
2 26 Feb 07 jari 29 import javax.swing.JLabel;
2 26 Feb 07 jari 30 import javax.swing.JList;
2 26 Feb 07 jari 31 import javax.swing.JPanel;
2 26 Feb 07 jari 32 import javax.swing.JScrollPane;
2 26 Feb 07 jari 33 import javax.swing.JSplitPane;
2 26 Feb 07 jari 34 import javax.swing.JTextField;
2 26 Feb 07 jari 35 import javax.swing.border.EtchedBorder;
2 26 Feb 07 jari 36 import javax.swing.border.TitledBorder;
2 26 Feb 07 jari 37 import javax.swing.filechooser.FileFilter;
2 26 Feb 07 jari 38
2 26 Feb 07 jari 39 import org.tigr.microarray.mev.FloatSlideData;
2 26 Feb 07 jari 40 import org.tigr.microarray.mev.ISlideData;
2 26 Feb 07 jari 41 import org.tigr.microarray.mev.ISlideDataElement;
2 26 Feb 07 jari 42 import org.tigr.microarray.mev.ISlideMetaData;
2 26 Feb 07 jari 43 import org.tigr.microarray.mev.SlideData;
2 26 Feb 07 jari 44 import org.tigr.microarray.mev.SlideDataElement;
2 26 Feb 07 jari 45 import org.tigr.microarray.mev.TMEV;
2 26 Feb 07 jari 46
2 26 Feb 07 jari 47 public class GenePixFileLoader extends ExpressionFileLoader {
2 26 Feb 07 jari 48     
2 26 Feb 07 jari 49     private GBA gba;
2 26 Feb 07 jari 50     private GenePixFileLoaderPanel gpflp;    
2 26 Feb 07 jari 51     private boolean loadEnabled = false;
2 26 Feb 07 jari 52     
2 26 Feb 07 jari 53     public GenePixFileLoader(SuperExpressionFileLoader superLoader) {
2 26 Feb 07 jari 54         super(superLoader);
2 26 Feb 07 jari 55         gba = new GBA();
2 26 Feb 07 jari 56         gpflp = new GenePixFileLoaderPanel();
2 26 Feb 07 jari 57     }
2 26 Feb 07 jari 58     
2 26 Feb 07 jari 59     
2 26 Feb 07 jari 60     public Vector loadExpressionFiles() throws IOException {
2 26 Feb 07 jari 61         Object[] genePixFiles = gpflp.getGenePixSelectedListModel().toArray();
2 26 Feb 07 jari 62         if(genePixFiles == null || genePixFiles.length < 1)
2 26 Feb 07 jari 63             return null;
2 26 Feb 07 jari 64         Vector data = new Vector();
2 26 Feb 07 jari 65         ISlideMetaData meta = null;
2 26 Feb 07 jari 66         setFilesCount(genePixFiles.length);
2 26 Feb 07 jari 67         setRemain(genePixFiles.length);
2 26 Feb 07 jari 68         for (int i = 0; i < genePixFiles.length; i++) {
2 26 Feb 07 jari 69             setFileName(((File)genePixFiles[i]).getName());
2 26 Feb 07 jari 70             if(i == 0){
2 26 Feb 07 jari 71                 data.add( loadSlideData((File)genePixFiles[i]) );
2 26 Feb 07 jari 72                 meta = (ISlideMetaData)(data.elementAt(0));
2 26 Feb 07 jari 73             } else {
2 26 Feb 07 jari 74                 data.add( loadFloatSlideData((File)genePixFiles[i], meta));
2 26 Feb 07 jari 75             }
2 26 Feb 07 jari 76             setFilesProgress(i+1);    
2 26 Feb 07 jari 77             if(i > 0 && i%10 == 0)
2 26 Feb 07 jari 78                 java.lang.Runtime.getRuntime().gc();
2 26 Feb 07 jari 79         }
2 26 Feb 07 jari 80         if(data != null && data.size() > 0){
2 26 Feb 07 jari 81             String [] fieldNames = new String[2];
2 26 Feb 07 jari 82             fieldNames[0] = "Name";
2 26 Feb 07 jari 83             fieldNames[1] = "ID";
2 26 Feb 07 jari 84             //EH fieldnames are not loaded into TMEV anymore
2 26 Feb 07 jari 85             //TMEV.setFieldNames(fieldNames);
2 26 Feb 07 jari 86             meta.setFieldNames(fieldNames);
2 26 Feb 07 jari 87         }
2 26 Feb 07 jari 88         return data;
2 26 Feb 07 jari 89     }
2 26 Feb 07 jari 90     
2 26 Feb 07 jari 91     
2 26 Feb 07 jari 92     public ISlideData loadSlideData(File currentFile){
2 26 Feb 07 jari 93         SlideData slideData = null;
2 26 Feb 07 jari 94         GenepixFileParser parser = new GenepixFileParser(currentFile, false);
2 26 Feb 07 jari 95       //  parser.run();
2 26 Feb 07 jari 96         if(parser.isCompleted()){
2 26 Feb 07 jari 97             Vector data = parser.getTavFile();
2 26 Feb 07 jari 98             Vector spotData;
2 26 Feb 07 jari 99             ISlideDataElement sde;
2 26 Feb 07 jari 100             int [] rows = new int[3];
2 26 Feb 07 jari 101             int [] cols = new int[3];
2 26 Feb 07 jari 102             float [] intensity = new float[2];
2 26 Feb 07 jari 103             String [] moreFields = new String[2];
2 26 Feb 07 jari 104             int numElements = data.size();
2 26 Feb 07 jari 105             
2 26 Feb 07 jari 106             int maxRows = 0;
2 26 Feb 07 jari 107             int maxCols = 0;
2 26 Feb 07 jari 108             int currRow, currCol;
2 26 Feb 07 jari 109             
2 26 Feb 07 jari 110             for(int i = 0; i < numElements; i++){
2 26 Feb 07 jari 111                 spotData = (Vector)(data.elementAt(i));
2 26 Feb 07 jari 112                 maxRows = Math.max(maxRows, ((Integer)spotData.elementAt(2)).intValue());
2 26 Feb 07 jari 113                 maxCols = Math.max(maxCols, ((Integer)spotData.elementAt(3)).intValue());
2 26 Feb 07 jari 114             }
2 26 Feb 07 jari 115                  
2 26 Feb 07 jari 116             slideData = new SlideData(maxRows, maxCols);
2 26 Feb 07 jari 117             this.setLinesCount(numElements);
2 26 Feb 07 jari 118             for(int i = 0; i < numElements; i++){  //start at 1 to pass header
2 26 Feb 07 jari 119                 rows = new int[3];
2 26 Feb 07 jari 120                 cols = new int[3];
2 26 Feb 07 jari 121                 intensity = new float[2];
2 26 Feb 07 jari 122                 moreFields = new String[2];
2 26 Feb 07 jari 123                 spotData = (Vector)(data.elementAt(i));
2 26 Feb 07 jari 124                 intensity[0] = (float)((Integer)spotData.elementAt(0)).intValue();
2 26 Feb 07 jari 125                 intensity[1] = (float)((Integer)spotData.elementAt(1)).intValue();
2 26 Feb 07 jari 126                 rows[0] = ((Integer)spotData.elementAt(2)).intValue();
2 26 Feb 07 jari 127                 cols[0] = ((Integer)spotData.elementAt(3)).intValue();
2 26 Feb 07 jari 128                 rows[1] = 0;  //no slide row or slide column provided
2 26 Feb 07 jari 129                 cols[1] = 0;
2 26 Feb 07 jari 130                 rows[2] = ((Integer)spotData.elementAt(4)).intValue();
2 26 Feb 07 jari 131                 cols[2] = ((Integer)spotData.elementAt(5)).intValue();
2 26 Feb 07 jari 132                 moreFields[0] = (String)spotData.elementAt(6);
2 26 Feb 07 jari 133                 moreFields[1] = (String)spotData.elementAt(7);
2 26 Feb 07 jari 134                 int flag  =((Integer)spotData.elementAt(8)).intValue();
2 26 Feb 07 jari 135                 sde = new SlideDataElement(String.valueOf(i+1), rows, cols, intensity, moreFields);
2 26 Feb 07 jari 136                 sde.setGenePixFlags(((Integer)spotData.elementAt(8)).intValue());
2 26 Feb 07 jari 137                 slideData.add(sde);
2 26 Feb 07 jari 138                 setFileProgress(i);
2 26 Feb 07 jari 139             }
2 26 Feb 07 jari 140             slideData.setSlideDataName(currentFile.getName());
2 26 Feb 07 jari 141             slideData.setSlideFileName(currentFile.getPath());
2 26 Feb 07 jari 142         }
2 26 Feb 07 jari 143         return slideData;
2 26 Feb 07 jari 144     }
2 26 Feb 07 jari 145     
2 26 Feb 07 jari 146     
2 26 Feb 07 jari 147     public ISlideData loadFloatSlideData(File currentFile, ISlideMetaData meta){
2 26 Feb 07 jari 148         FloatSlideData slideData = null;
2 26 Feb 07 jari 149         float cy3, cy5;
2 26 Feb 07 jari 150         Vector spotData;
2 26 Feb 07 jari 151         int m=0;
2 26 Feb 07 jari 152         GenepixFileParser parser = new GenepixFileParser(currentFile, false);
2 26 Feb 07 jari 153      //   parser.run();
2 26 Feb 07 jari 154         if(parser.isCompleted()){
2 26 Feb 07 jari 155             slideData = new FloatSlideData(meta);
2 26 Feb 07 jari 156             Vector data = parser.getTavFile();
2 26 Feb 07 jari 157             int numElements = data.size();
2 26 Feb 07 jari 158             setLinesCount(numElements);
2 26 Feb 07 jari 159             for(int i = 0; i < numElements; i++){
2 26 Feb 07 jari 160                 spotData = (Vector)(data.elementAt(i));  
2 26 Feb 07 jari 161                 cy3 = (float)((Integer)spotData.elementAt(0)).intValue();
2 26 Feb 07 jari 162                 cy5 = (float)((Integer)spotData.elementAt(1)).intValue();
2 26 Feb 07 jari 163                 spotData.elementAt(2);
2 26 Feb 07 jari 164                 spotData.elementAt(6);
2 26 Feb 07 jari 165                 slideData.setIntensities( i, cy3, cy5);
2 26 Feb 07 jari 166                 spotData.elementAt(7);
2 26 Feb 07 jari 167                 m=((Integer)spotData.elementAt(8)).intValue();
2 26 Feb 07 jari 168                 //System.out.print(m);
2 26 Feb 07 jari 169                 slideData.setGenePixFlags(i,m);
2 26 Feb 07 jari 170                 setFileProgress(i);
2 26 Feb 07 jari 171             }
2 26 Feb 07 jari 172             slideData.setSlideDataName(currentFile.getName());
2 26 Feb 07 jari 173             slideData.setSlideFileName(currentFile.getPath());
2 26 Feb 07 jari 174         }
2 26 Feb 07 jari 175         return slideData;
2 26 Feb 07 jari 176     }
2 26 Feb 07 jari 177     
2 26 Feb 07 jari 178     
2 26 Feb 07 jari 179     
2 26 Feb 07 jari 180     public ISlideData loadExpressionFile(File f) throws IOException {
2 26 Feb 07 jari 181         return null;
2 26 Feb 07 jari 182     }
2 26 Feb 07 jari 183     
2 26 Feb 07 jari 184     
2 26 Feb 07 jari 185     public Vector loadAnnotationFile(File f) throws IOException {
2 26 Feb 07 jari 186         return new Vector();
2 26 Feb 07 jari 187     }
2 26 Feb 07 jari 188     
2 26 Feb 07 jari 189     public FileFilter getFileFilter() {
2 26 Feb 07 jari 190         
2 26 Feb 07 jari 191         FileFilter genePixFileFilter = new FileFilter() {
2 26 Feb 07 jari 192             
2 26 Feb 07 jari 193             public boolean accept(File f) {
2 26 Feb 07 jari 194                 if (f.isDirectory()) return true;
2 26 Feb 07 jari 195                 if (f.getName().endsWith(".gpr")) return true;
2 26 Feb 07 jari 196                 else return false;
2 26 Feb 07 jari 197             }
2 26 Feb 07 jari 198             
2 26 Feb 07 jari 199             public String getDescription() {
2 26 Feb 07 jari 200                 return "GenePix Files (*.gpr)";
2 26 Feb 07 jari 201             }
2 26 Feb 07 jari 202         };
2 26 Feb 07 jari 203         
2 26 Feb 07 jari 204         return genePixFileFilter;
2 26 Feb 07 jari 205     }
2 26 Feb 07 jari 206     
2 26 Feb 07 jari 207     public boolean checkLoadEnable() {
2 26 Feb 07 jari 208         setLoadEnabled(loadEnabled);
2 26 Feb 07 jari 209         return this.loadEnabled;
2 26 Feb 07 jari 210     }
2 26 Feb 07 jari 211     
2 26 Feb 07 jari 212     public void markLoadEnabled(boolean state) {
2 26 Feb 07 jari 213         loadEnabled = state;
2 26 Feb 07 jari 214         checkLoadEnable();
2 26 Feb 07 jari 215     }
2 26 Feb 07 jari 216     
2 26 Feb 07 jari 217     public JPanel getFileLoaderPanel() {
2 26 Feb 07 jari 218         return gpflp;
2 26 Feb 07 jari 219     }
2 26 Feb 07 jari 220     
2 26 Feb 07 jari 221     public void processFileList(String filePath, Vector fileNames) {
2 26 Feb 07 jari 222         
2 26 Feb 07 jari 223         gpflp.setPath(filePath);
2 26 Feb 07 jari 224         
2 26 Feb 07 jari 225         if (fileNames == null) return; // Don't process files if there aren't any
2 26 Feb 07 jari 226         
2 26 Feb 07 jari 227         FileFilter genePixFileFilter = getFileFilter();
2 26 Feb 07 jari 228         
2 26 Feb 07 jari 229         gpflp.getGenePixAvailableListModel().clear();
2 26 Feb 07 jari 230         
2 26 Feb 07 jari 231         for (int i = 0; i < fileNames.size(); i++) {
2 26 Feb 07 jari 232             
2 26 Feb 07 jari 233             File targetFile = new File((String) fileNames.elementAt(i));
2 26 Feb 07 jari 234             
2 26 Feb 07 jari 235             if (genePixFileFilter.accept(targetFile)) {
2 26 Feb 07 jari 236                 gpflp.getGenePixAvailableListModel().addElement(new File((String) fileNames.elementAt(i)));
2 26 Feb 07 jari 237             }
2 26 Feb 07 jari 238         }
2 26 Feb 07 jari 239     }
2 26 Feb 07 jari 240     
2 26 Feb 07 jari 241     public String getFilePath() {
2 26 Feb 07 jari 242         if(this.gpflp.getGenePixSelectedListModel().getSize() < 1)
2 26 Feb 07 jari 243             return null;
2 26 Feb 07 jari 244         return ((File)(gpflp.getGenePixSelectedListModel().getElementAt(0))).getAbsolutePath();
2 26 Feb 07 jari 245     }
2 26 Feb 07 jari 246     
2 26 Feb 07 jari 247     public void openDataPath() {
2 26 Feb 07 jari 248         this.gpflp.openDataPath();
2 26 Feb 07 jari 249     }
2 26 Feb 07 jari 250
2 26 Feb 07 jari 251     
2 26 Feb 07 jari 252 /*
2 26 Feb 07 jari 253 //
2 26 Feb 07 jari 254 //  GenePixFileLoader - Internal Classes
2 26 Feb 07 jari 255 //
2 26 Feb 07 jari 256  */
2 26 Feb 07 jari 257     
2 26 Feb 07 jari 258     private class GenePixFileLoaderPanel extends JPanel {
2 26 Feb 07 jari 259         
2 26 Feb 07 jari 260         FileTreePane fileTreePane;
2 26 Feb 07 jari 261         JTextField pathTextField;
2 26 Feb 07 jari 262         
2 26 Feb 07 jari 263         JPanel genePixSelectionPanel;
2 26 Feb 07 jari 264         JPanel genePixListPanel;
2 26 Feb 07 jari 265         JLabel genePixAvailableLabel;
2 26 Feb 07 jari 266         JLabel genePixSelectedLabel;
2 26 Feb 07 jari 267         JList genePixAvailableList;
2 26 Feb 07 jari 268         JList genePixSelectedList;
2 26 Feb 07 jari 269         JScrollPane genePixAvailableScrollPane;
2 26 Feb 07 jari 270         JScrollPane genePixSelectedScrollPane;
2 26 Feb 07 jari 271         JButton genePixAddButton;
2 26 Feb 07 jari 272         JButton genePixAddAllButton;
2 26 Feb 07 jari 273         JButton genePixRemoveButton;
2 26 Feb 07 jari 274         JButton genePixRemoveAllButton;
2 26 Feb 07 jari 275         JPanel genePixButtonPanel;
2 26 Feb 07 jari 276         
2 26 Feb 07 jari 277         JPanel selectionPanel;
2 26 Feb 07 jari 278         JSplitPane splitPane;
2 26 Feb 07 jari 279         JPanel fileLoaderPanel;
2 26 Feb 07 jari 280         
2 26 Feb 07 jari 281         public GenePixFileLoaderPanel() {
2 26 Feb 07 jari 282             
2 26 Feb 07 jari 283             setLayout(new GridBagLayout());
2 26 Feb 07 jari 284             
2 26 Feb 07 jari 285             fileTreePane = new FileTreePane(SuperExpressionFileLoader.DATA_PATH);
2 26 Feb 07 jari 286             fileTreePane.addFileTreePaneListener(new FileTreePaneEventHandler());
2 26 Feb 07 jari 287             fileTreePane.setPreferredSize(new java.awt.Dimension(200, 500));
2 26 Feb 07 jari 288             
2 26 Feb 07 jari 289             pathTextField = new JTextField();
2 26 Feb 07 jari 290             pathTextField.setEditable(false);
2 26 Feb 07 jari 291             pathTextField.setBorder(new TitledBorder(new EtchedBorder(), "Selected Path"));
2 26 Feb 07 jari 292             pathTextField.setForeground(Color.black);
2 26 Feb 07 jari 293             pathTextField.setFont(new Font("monospaced", Font.BOLD, 12));
2 26 Feb 07 jari 294             
2 26 Feb 07 jari 295             genePixSelectionPanel = new JPanel();
2 26 Feb 07 jari 296             genePixSelectionPanel.setLayout(new GridBagLayout());
2 26 Feb 07 jari 297             genePixSelectionPanel.setBorder(new TitledBorder(new EtchedBorder(), getFileFilter().getDescription()));
2 26 Feb 07 jari 298             
2 26 Feb 07 jari 299             genePixAvailableLabel = new JLabel("Available");
2 26 Feb 07 jari 300             genePixSelectedLabel = new JLabel("Selected");
2 26 Feb 07 jari 301             genePixAvailableList = new JList(new DefaultListModel());
2 26 Feb 07 jari 302             genePixAvailableList.setCellRenderer(new ListRenderer());
2 26 Feb 07 jari 303             genePixSelectedList = new JList(new DefaultListModel());
2 26 Feb 07 jari 304             genePixSelectedList.setCellRenderer(new ListRenderer());
2 26 Feb 07 jari 305             genePixAvailableScrollPane = new JScrollPane(genePixAvailableList);
2 26 Feb 07 jari 306             genePixSelectedScrollPane = new JScrollPane(genePixSelectedList);
2 26 Feb 07 jari 307             genePixAddButton = new JButton("Add");
2 26 Feb 07 jari 308             genePixAddButton.addActionListener(new EventHandler());
2 26 Feb 07 jari 309             genePixAddAllButton = new JButton("Add All");
2 26 Feb 07 jari 310             genePixAddAllButton.addActionListener(new EventHandler());
2 26 Feb 07 jari 311             genePixRemoveButton = new JButton("Remove");
2 26 Feb 07 jari 312             genePixRemoveButton.addActionListener(new EventHandler());
2 26 Feb 07 jari 313             genePixRemoveAllButton = new JButton("Remove All");
2 26 Feb 07 jari 314             genePixRemoveAllButton.addActionListener(new EventHandler());
2 26 Feb 07 jari 315             
2 26 Feb 07 jari 316             Dimension largestGenePixButtonSize = genePixRemoveAllButton.getPreferredSize();
2 26 Feb 07 jari 317             genePixAddButton.setPreferredSize(largestGenePixButtonSize);
2 26 Feb 07 jari 318             genePixAddAllButton.setPreferredSize(largestGenePixButtonSize);
2 26 Feb 07 jari 319             genePixRemoveButton.setPreferredSize(largestGenePixButtonSize);
2 26 Feb 07 jari 320             genePixRemoveAllButton.setPreferredSize(largestGenePixButtonSize);
2 26 Feb 07 jari 321             
2 26 Feb 07 jari 322             genePixButtonPanel = new JPanel();
2 26 Feb 07 jari 323             genePixButtonPanel.setLayout(new GridBagLayout());
2 26 Feb 07 jari 324             
2 26 Feb 07 jari 325             gba.add(genePixButtonPanel, genePixAddButton, 0, 0, 1, 1, 0, 0, GBA.N, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 326             gba.add(genePixButtonPanel, genePixAddAllButton, 0, 1, 1, 1, 0, 0, GBA.N, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 327             gba.add(genePixButtonPanel, genePixRemoveButton, 0, 2, 1, 1, 0, 0, GBA.N, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 328             gba.add(genePixButtonPanel, genePixRemoveAllButton, 0, 3, 1, 1, 0, 0, GBA.N, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 329             
2 26 Feb 07 jari 330             genePixListPanel = new JPanel();
2 26 Feb 07 jari 331             genePixListPanel.setLayout(new GridBagLayout());
2 26 Feb 07 jari 332             
2 26 Feb 07 jari 333             gba.add(genePixListPanel, genePixAvailableLabel, 0, 0, 1, 1, 0, 0, GBA.N, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 334             gba.add(genePixListPanel, genePixSelectedLabel, 2, 0, 1, 1, 0, 0, GBA.N, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 335             gba.add(genePixListPanel, genePixAvailableScrollPane, 0, 1, 1, 4, 1, 1, GBA.B, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 336             gba.add(genePixListPanel, genePixButtonPanel, 1, 1, 1, 4, 0, 1, GBA.V, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 337             gba.add(genePixListPanel, genePixSelectedScrollPane, 2, 1, 1, 4, 1, 1, GBA.B, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 338             
2 26 Feb 07 jari 339             gba.add(genePixSelectionPanel, genePixListPanel, 0, 0, 1, 1, 1, 1, GBA.B, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 340             
2 26 Feb 07 jari 341             selectionPanel = new JPanel();
2 26 Feb 07 jari 342             selectionPanel.setLayout(new GridBagLayout());
2 26 Feb 07 jari 343             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 344             gba.add(selectionPanel, genePixSelectionPanel, 0, 1, 1, 2, 1, 1, GBA.B, GBA.C, new Insets(5, 5, 5, 5), 0, 0);
2 26 Feb 07 jari 345             
2 26 Feb 07 jari 346             splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, fileTreePane, selectionPanel);
2 26 Feb 07 jari 347             splitPane.setPreferredSize(new java.awt.Dimension(600, 600));
2 26 Feb 07 jari 348             fileLoaderPanel = new JPanel();
2 26 Feb 07 jari 349             fileLoaderPanel.setLayout(new GridBagLayout());
2 26 Feb 07 jari 350             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 351             
2 26 Feb 07 jari 352             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 353         }
2 26 Feb 07 jari 354         
2 26 Feb 07 jari 355         public void setPath(String path) {
2 26 Feb 07 jari 356             pathTextField.setText(path);
2 26 Feb 07 jari 357         }
2 26 Feb 07 jari 358         
2 26 Feb 07 jari 359         public void openDataPath(){
2 26 Feb 07 jari 360             this.fileTreePane.openDataPath(); 
2 26 Feb 07 jari 361         }
2 26 Feb 07 jari 362                 
2 26 Feb 07 jari 363         public void validateLists() {
2 26 Feb 07 jari 364             
2 26 Feb 07 jari 365             // Currently, a minimum of one GenePix file must be selected to enable loading
2 26 Feb 07 jari 366             
2 26 Feb 07 jari 367             if (((DefaultListModel) genePixSelectedList.getModel()).size() > 0) {
2 26 Feb 07 jari 368                 markLoadEnabled(true);
2 26 Feb 07 jari 369             } else {
2 26 Feb 07 jari 370                 markLoadEnabled(false);
2 26 Feb 07 jari 371             }
2 26 Feb 07 jari 372         }
2 26 Feb 07 jari 373         
2 26 Feb 07 jari 374         public void onGenePixAdd() {
2 26 Feb 07 jari 375             int[] chosenIndices = genePixAvailableList.getSelectedIndices();
2 26 Feb 07 jari 376             Object[] chosenObjects = new Object[chosenIndices.length];
2 26 Feb 07 jari 377             
2 26 Feb 07 jari 378             for (int i = chosenIndices.length - 1; i >= 0; i--) {
2 26 Feb 07 jari 379                 // For remove-then-add functionality
2 26 Feb 07 jari 380                 //Object addItem = ((DefaultListModel) genePixAvailableList.getModel()).remove(chosenIndices[i]);
2 26 Feb 07 jari 381                 // For copy-then-add functionality
2 26 Feb 07 jari 382                 Object addItem = ((DefaultListModel) genePixAvailableList.getModel()).getElementAt(chosenIndices[i]);
2 26 Feb 07 jari 383                 chosenObjects[i] = addItem;
2 26 Feb 07 jari 384             }
2 26 Feb 07 jari 385             
2 26 Feb 07 jari 386             for (int i = 0; i < chosenIndices.length; i++) {
2 26 Feb 07 jari 387                 ((DefaultListModel) genePixSelectedList.getModel()).addElement(chosenObjects[i]);
2 26 Feb 07 jari 388             }
2 26 Feb 07 jari 389             
2 26 Feb 07 jari 390             validateLists();
2 26 Feb 07 jari 391         }
2 26 Feb 07 jari 392         
2 26 Feb 07 jari 393         public void onGenePixAddAll() {
2 26 Feb 07 jari 394             int elementCount = ((DefaultListModel) genePixAvailableList.getModel()).size();
2 26 Feb 07 jari 395             for (int i = 0; i < elementCount; i++) {
2 26 Feb 07 jari 396                 Object addItem = ((DefaultListModel) genePixAvailableList.getModel()).getElementAt(i);
2 26 Feb 07 jari 397                 ((DefaultListModel) genePixSelectedList.getModel()).addElement(addItem);
2 26 Feb 07 jari 398             }
2 26 Feb 07 jari 399             
2 26 Feb 07 jari 400             validateLists();
2 26 Feb 07 jari 401         }
2 26 Feb 07 jari 402         
2 26 Feb 07 jari 403         public void onGenePixRemove() {
2 26 Feb 07 jari 404             int[] chosenIndices = genePixSelectedList.getSelectedIndices();
2 26 Feb 07 jari 405             
2 26 Feb 07 jari 406             // Designed with copy-then-add functionality in mind
2 26 Feb 07 jari 407             for (int i = chosenIndices.length - 1; i >= 0; i--) {
2 26 Feb 07 jari 408                 ((DefaultListModel) genePixSelectedList.getModel()).remove(chosenIndices[i]);
2 26 Feb 07 jari 409             }
2 26 Feb 07 jari 410             
2 26 Feb 07 jari 411             validateLists();
2 26 Feb 07 jari 412         }
2 26 Feb 07 jari 413         
2 26 Feb 07 jari 414         public void onGenePixRemoveAll() {
2 26 Feb 07 jari 415             // Designed with copy-then-add functionality in mind
2 26 Feb 07 jari 416             ((DefaultListModel) genePixSelectedList.getModel()).removeAllElements();
2 26 Feb 07 jari 417             
2 26 Feb 07 jari 418             validateLists();
2 26 Feb 07 jari 419         }
2 26 Feb 07 jari 420         
2 26 Feb 07 jari 421         public DefaultListModel getGenePixAvailableListModel() {
2 26 Feb 07 jari 422             return (DefaultListModel) genePixAvailableList.getModel();
2 26 Feb 07 jari 423         }
2 26 Feb 07 jari 424         
2 26 Feb 07 jari 425         public DefaultListModel getGenePixSelectedListModel() {
2 26 Feb 07 jari 426             return (DefaultListModel) genePixSelectedList.getModel();
2 26 Feb 07 jari 427         }
2 26 Feb 07 jari 428         
2 26 Feb 07 jari 429         private class ListRenderer extends DefaultListCellRenderer {
2 26 Feb 07 jari 430             public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
2 26 Feb 07 jari 431                 super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
2 26 Feb 07 jari 432                 File file = (File) value;
2 26 Feb 07 jari 433                 setText(file.getName());
2 26 Feb 07 jari 434                 return this;
2 26 Feb 07 jari 435             }
2 26 Feb 07 jari 436         }
2 26 Feb 07 jari 437         
2 26 Feb 07 jari 438         private class EventHandler implements ActionListener {
2 26 Feb 07 jari 439             public void actionPerformed(ActionEvent event) {
2 26 Feb 07 jari 440                 
2 26 Feb 07 jari 441                 Object source = event.getSource();
2 26 Feb 07 jari 442                 
2 26 Feb 07 jari 443                 if (source == genePixAddButton) {
2 26 Feb 07 jari 444                     onGenePixAdd();
2 26 Feb 07 jari 445                 } else if (source == genePixAddAllButton) {
2 26 Feb 07 jari 446                     onGenePixAddAll();
2 26 Feb 07 jari 447                 } else if (source == genePixRemoveButton) {
2 26 Feb 07 jari 448                     onGenePixRemove();
2 26 Feb 07 jari 449                 } else if (source == genePixRemoveAllButton) {
2 26 Feb 07 jari 450                     onGenePixRemoveAll();
2 26 Feb 07 jari 451                 }
2 26 Feb 07 jari 452             }
2 26 Feb 07 jari 453         }
2 26 Feb 07 jari 454         
2 26 Feb 07 jari 455         private class FileTreePaneEventHandler implements FileTreePaneListener {
2 26 Feb 07 jari 456             
2 26 Feb 07 jari 457             public void nodeSelected(FileTreePaneEvent event) {
2 26 Feb 07 jari 458                 
2 26 Feb 07 jari 459                 String filePath = (String) event.getValue("Path");
2 26 Feb 07 jari 460                 Vector fileNames = (Vector) event.getValue("Filenames");
2 26 Feb 07 jari 461                 
2 26 Feb 07 jari 462                 processFileList(filePath, fileNames);
2 26 Feb 07 jari 463             }
2 26 Feb 07 jari 464             
2 26 Feb 07 jari 465             public void nodeCollapsed(FileTreePaneEvent event) {}
2 26 Feb 07 jari 466             public void nodeExpanded(FileTreePaneEvent event) {}
2 26 Feb 07 jari 467         }
2 26 Feb 07 jari 468     }
2 26 Feb 07 jari 469 }