mev-4.0.01/source/org/tigr/microarray/mev/cluster/gui/impl/svm/SVMClassificationEditor.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: SVMClassificationEditor.java,v $
2 26 Feb 07 jari 7  * $Revision: 1.8 $
2 26 Feb 07 jari 8  * $Date: 2006/02/23 20:59:55 $
2 26 Feb 07 jari 9  * $Author: caliente $
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.cluster.gui.impl.svm;
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.Dimension;
2 26 Feb 07 jari 16 import java.awt.FontMetrics;
2 26 Feb 07 jari 17 import java.awt.Graphics;
2 26 Feb 07 jari 18 import java.awt.event.ActionEvent;
2 26 Feb 07 jari 19 import java.awt.event.ActionListener;
2 26 Feb 07 jari 20 import java.io.BufferedReader;
2 26 Feb 07 jari 21 import java.io.BufferedWriter;
2 26 Feb 07 jari 22 import java.io.File;
2 26 Feb 07 jari 23 import java.io.FileNotFoundException;
2 26 Feb 07 jari 24 import java.io.IOException;
2 26 Feb 07 jari 25 import java.io.PrintWriter;
2 26 Feb 07 jari 26 import java.util.Arrays;
2 26 Feb 07 jari 27 import java.util.StringTokenizer;
2 26 Feb 07 jari 28 import java.util.Vector;
2 26 Feb 07 jari 29
2 26 Feb 07 jari 30 import javax.swing.Icon;
2 26 Feb 07 jari 31 import javax.swing.JFileChooser;
2 26 Feb 07 jari 32 import javax.swing.JFrame;
2 26 Feb 07 jari 33 import javax.swing.JMenuItem;
2 26 Feb 07 jari 34 import javax.swing.JOptionPane;
2 26 Feb 07 jari 35 import javax.swing.JRadioButton;
2 26 Feb 07 jari 36 import javax.swing.JTable;
2 26 Feb 07 jari 37 import javax.swing.event.TableModelEvent;
2 26 Feb 07 jari 38 import javax.swing.event.TableModelListener;
2 26 Feb 07 jari 39 import javax.swing.table.AbstractTableModel;
2 26 Feb 07 jari 40 import javax.swing.table.DefaultTableCellRenderer;
2 26 Feb 07 jari 41 import javax.swing.table.DefaultTableModel;
2 26 Feb 07 jari 42 import javax.swing.table.TableColumn;
2 26 Feb 07 jari 43 import javax.swing.table.TableColumnModel;
2 26 Feb 07 jari 44 import javax.swing.table.TableModel;
2 26 Feb 07 jari 45
2 26 Feb 07 jari 46 import org.tigr.microarray.mev.TMEV;
2 26 Feb 07 jari 47 import org.tigr.microarray.mev.cluster.gui.Experiment;
2 26 Feb 07 jari 48 import org.tigr.microarray.mev.cluster.gui.IData;
2 26 Feb 07 jari 49 import org.tigr.microarray.mev.cluster.gui.IFramework;
2 26 Feb 07 jari 50 import org.tigr.microarray.mev.cluster.gui.impl.GUIFactory;
2 26 Feb 07 jari 51
2 26 Feb 07 jari 52
2 26 Feb 07 jari 53 public class SVMClassificationEditor extends javax.swing.JDialog {//javax.swing.JFrame {
2 26 Feb 07 jari 54     
2 26 Feb 07 jari 55     IFramework framework;
2 26 Feb 07 jari 56     IData data;
2 26 Feb 07 jari 57     Experiment experiment;
2 26 Feb 07 jari 58     String [] fieldNames;
2 26 Feb 07 jari 59     File currentFile;
2 26 Feb 07 jari 60     SVMSearchDialog searchDialog;
2 26 Feb 07 jari 61     SortListener sorter;
2 26 Feb 07 jari 62     SVMTableModel svmTableModel;
2 26 Feb 07 jari 63     boolean classifyGenes;
2 26 Feb 07 jari 64     boolean cancelForm = false;
2 26 Feb 07 jari 65     /** Creates new form SVMClassificationEditor
2 26 Feb 07 jari 66      * @param Framework <CODE>Framework</CODE> object to supply initial data to editor
2 26 Feb 07 jari 67      */
2 26 Feb 07 jari 68     public SVMClassificationEditor(IFramework Framework, boolean classifyGenes){
2 26 Feb 07 jari 69         super(new JFrame(), "SVM Classification Editor", true);
2 26 Feb 07 jari 70         this.classifyGenes = classifyGenes;
2 26 Feb 07 jari 71         initComponents();
2 26 Feb 07 jari 72         
2 26 Feb 07 jari 73        // if(!classifyGenes){
2 26 Feb 07 jari 74             //remove these options for later inclusion
2 26 Feb 07 jari 75             this.editMenu.remove(2); //gene cluster
2 26 Feb 07 jari 76             this.editMenu.remove(1); //gene list
2 26 Feb 07 jari 77             this.editMenu.validate();
2 26 Feb 07 jari 78         //}
2 26 Feb 07 jari 79         
2 26 Feb 07 jari 80         inClassButton.setIcon(GUIFactory.getIcon("in_class.gif"));
2 26 Feb 07 jari 81         outClassButton.setIcon(GUIFactory.getIcon("out_class.gif"));
2 26 Feb 07 jari 82         neutralButton.setIcon(GUIFactory.getIcon("neutral_class.gif"));
2 26 Feb 07 jari 83         searchButton.setIcon(GUIFactory.getIcon("search.gif"));
2 26 Feb 07 jari 84         runButton.setIcon(GUIFactory.getIcon("go.gif"));
2 26 Feb 07 jari 85         svcApplyMenuItem.setIcon(GUIFactory.getIcon("svcfileicon.gif"));
2 26 Feb 07 jari 86         saveAsMenuItem.setIcon(GUIFactory.getIcon("svcfileicon.gif"));
2 26 Feb 07 jari 87         this.tcListMenuItem.setIcon(null);
2 26 Feb 07 jari 88         
2 26 Feb 07 jari 89         currentFile = null;
2 26 Feb 07 jari 90         this.framework = Framework;
2 26 Feb 07 jari 91         this.data = framework.getData();
2 26 Feb 07 jari 92         this.experiment = this.data.getExperiment();
2 26 Feb 07 jari 93         this.table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
2 26 Feb 07 jari 94         TableColumnModel tcm = table.getColumnModel();
2 26 Feb 07 jari 95         
2 26 Feb 07 jari 96         this.jScrollPane1.setBackground(Color.black);
2 26 Feb 07 jari 97         loadTable();  //create and build table
2 26 Feb 07 jari 98         
2 26 Feb 07 jari 99         searchDialog = new SVMSearchDialog(new JFrame(), table, false); //persistent search dialog
2 26 Feb 07 jari 100         
2 26 Feb 07 jari 101         sorter = new SortListener(svmTableModel);  //listener to fire sorting events
2 26 Feb 07 jari 102         indexSortMenuItem.addActionListener(sorter);
2 26 Feb 07 jari 103         classSortMenuItem.addActionListener(sorter);
2 26 Feb 07 jari 104         
2 26 Feb 07 jari 105         for(int i = 0; i < this.fieldNames.length ; i++){  //add listener to menu items
2 26 Feb 07 jari 106             JMenuItem item = new JMenuItem(fieldNames[i]);
2 26 Feb 07 jari 107             item.addActionListener(sorter);
2 26 Feb 07 jari 108             this.sortByMenu.add(item);
2 26 Feb 07 jari 109         }
2 26 Feb 07 jari 110         //table.setDefaultRenderer(Boolean.class, new ClassificationCellRenderer()); //render as radiobuttons
2 26 Feb 07 jari 111     }
2 26 Feb 07 jari 112     
2 26 Feb 07 jari 113     
2 26 Feb 07 jari 114     /**
2 26 Feb 07 jari 115      * Loads data into the table array object in the default model
2 26 Feb 07 jari 116      */
2 26 Feb 07 jari 117     private void loadTable(){
2 26 Feb 07 jari 118         
2 26 Feb 07 jari 119         if(data == null) return;
2 26 Feb 07 jari 120         
2 26 Feb 07 jari 121         int numGenes = experiment.getNumberOfGenes();
2 26 Feb 07 jari 122         int numSamples = experiment.getNumberOfSamples();
2 26 Feb 07 jari 123         
2 26 Feb 07 jari 124         if(classifyGenes){
2 26 Feb 07 jari 125             fieldNames =  data.getFieldNames();     //get all field names
2 26 Feb 07 jari 126         }
2 26 Feb 07 jari 127         else{
2 26 Feb 07 jari 128             fieldNames = new String[1];
2 26 Feb 07 jari 129             fieldNames[0] = "Sample/Experiment Name";
2 26 Feb 07 jari 130         }
2 26 Feb 07 jari 131         String [] headerNames = new String[fieldNames.length + 4];  //create header names
2 26 Feb 07 jari 132         headerNames[0] = "Index";
2 26 Feb 07 jari 133         headerNames[1] = "In Class";
2 26 Feb 07 jari 134         headerNames[2] = "Out of Class";
2 26 Feb 07 jari 135         headerNames[3] = "Neutral";
2 26 Feb 07 jari 136         
2 26 Feb 07 jari 137         for(int i = 4; i < fieldNames.length + 4 ; i++){
2 26 Feb 07 jari 138             headerNames[i] = fieldNames[i-4];
2 26 Feb 07 jari 139         }
2 26 Feb 07 jari 140         
2 26 Feb 07 jari 141         //create a Default TM and an SVM TM.
2 26 Feb 07 jari 142         DefaultTableModel model;
2 26 Feb 07 jari 143         
2 26 Feb 07 jari 144         if(classifyGenes)
2 26 Feb 07 jari 145             model = new DefaultTableModel(new Object [numGenes][fieldNames.length + 4], headerNames);
2 26 Feb 07 jari 146         else
2 26 Feb 07 jari 147             model = new DefaultTableModel(new Object [numSamples][fieldNames.length + 4], headerNames);
2 26 Feb 07 jari 148         
2 26 Feb 07 jari 149         svmTableModel = new SVMTableModel(headerNames, model);
2 26 Feb 07 jari 150         this.table.setModel(svmTableModel);
2 26 Feb 07 jari 151         
2 26 Feb 07 jari 152         String annot;
2 26 Feb 07 jari 153         
2 26 Feb 07 jari 154         if(classifyGenes){
2 26 Feb 07 jari 155             for(int row = 0; row < numGenes; row++){
2 26 Feb 07 jari 156                 this.table.setValueAt( new Integer(row), row, 0);
2 26 Feb 07 jari 157                 this.table.setValueAt( new Boolean(false), row, 1);
2 26 Feb 07 jari 158                 this.table.setValueAt( new Boolean(true), row, 2);
2 26 Feb 07 jari 159                 this.table.setValueAt( new Boolean(false), row, 3);
2 26 Feb 07 jari 160                 
2 26 Feb 07 jari 161                 for(int j = 4; j < headerNames.length ; j++){
2 26 Feb 07 jari 162                     annot = data.getElementAttribute(row, j - 4);
2 26 Feb 07 jari 163                     this.table.setValueAt( annot, row, j );
2 26 Feb 07 jari 164                 }
2 26 Feb 07 jari 165             }
2 26 Feb 07 jari 166         }
2 26 Feb 07 jari 167         else{
2 26 Feb 07 jari 168             for(int row = 0; row < numSamples; row++){
2 26 Feb 07 jari 169                 this.table.setValueAt( new Integer(row), row, 0);
2 26 Feb 07 jari 170                 this.table.setValueAt( new Boolean(false), row, 1);
2 26 Feb 07 jari 171                 this.table.setValueAt( new Boolean(true), row, 2);
2 26 Feb 07 jari 172                 this.table.setValueAt( new Boolean(false), row, 3);
2 26 Feb 07 jari 173                 
2 26 Feb 07 jari 174                 this.table.setValueAt( data.getFullSampleName(experiment.getSampleIndex(row)), row, 4);
2 26 Feb 07 jari 175             }
2 26 Feb 07 jari 176         }
2 26 Feb 07 jari 177         
2 26 Feb 07 jari 178         
2 26 Feb 07 jari 179         int W = 75;
2 26 Feb 07 jari 180         
2 26 Feb 07 jari 181         TableColumn col = this.table.getColumn("In Class");
2 26 Feb 07 jari 182         setWidth(col, W, true);
2 26 Feb 07 jari 183         col = this.table.getColumn("Out of Class");
2 26 Feb 07 jari 184         setWidth(col, W, true);
2 26 Feb 07 jari 185         col = this.table.getColumn("Neutral");
2 26 Feb 07 jari 186         setWidth(col, W, true);
2 26 Feb 07 jari 187         
2 26 Feb 07 jari 188         col = this.table.getColumn("Index");
2 26 Feb 07 jari 189         W = getIndexColumnWidth();
2 26 Feb 07 jari 190         setWidth(col, W, true);
2 26 Feb 07 jari 191         
2 26 Feb 07 jari 192         for(int i = 0; i < fieldNames.length; i++){
2 26 Feb 07 jari 193             col = this.table.getColumn(fieldNames[i]);
2 26 Feb 07 jari 194             W = getColumnTextWidth(i + 4);
2 26 Feb 07 jari 195             W = Math.min( W, 300);
2 26 Feb 07 jari 196             setWidth(col, W, false);
2 26 Feb 07 jari 197         }
2 26 Feb 07 jari 198         
2 26 Feb 07 jari 199         table.getModel().addTableModelListener(new ClassSelectionListener());
2 26 Feb 07 jari 200         table.setColumnModel(new SVMTableColumnModel(table.getColumnModel()));
2 26 Feb 07 jari 201     }
2 26 Feb 07 jari 202     
2 26 Feb 07 jari 203     /*
2 26 Feb 07 jari 204      * Returns the max width of the contents of a column
2 26 Feb 07 jari 205      */
2 26 Feb 07 jari 206     
2 26 Feb 07 jari 207     private int getColumnTextWidth(int col){
2 26 Feb 07 jari 208         Graphics g = table.getGraphics();
2 26 Feb 07 jari 209         FontMetrics fm = g.getFontMetrics();
2 26 Feb 07 jari 210         int columnWidth = fm.stringWidth( table.getColumnName(col) );
2 26 Feb 07 jari 211         int numRows = table.getRowCount();
2 26 Feb 07 jari 212         
2 26 Feb 07 jari 213         for(int i = 0; i < numRows; i++){
2 26 Feb 07 jari 214             if( fm.stringWidth((String)table.getValueAt(i, col)) > columnWidth)
2 26 Feb 07 jari 215                 columnWidth = fm.stringWidth((String)table.getValueAt(i, col));
2 26 Feb 07 jari 216         }
2 26 Feb 07 jari 217         return columnWidth + 10;
2 26 Feb 07 jari 218     }
2 26 Feb 07 jari 219     
2 26 Feb 07 jari 220     
2 26 Feb 07 jari 221     private int getIndexColumnWidth(){
2 26 Feb 07 jari 222         Graphics g = table.getGraphics();
2 26 Feb 07 jari 223         FontMetrics fm = g.getFontMetrics();
2 26 Feb 07 jari 224         int columnWidth = fm.stringWidth( "Index" );
2 26 Feb 07 jari 225         int numRows = table.getRowCount();
2 26 Feb 07 jari 226         
2 26 Feb 07 jari 227         for(int i = 0; i < numRows; i++){
2 26 Feb 07 jari 228             if( fm.stringWidth( ((Integer)table.getValueAt(i, 0)).toString() ) > columnWidth)
2 26 Feb 07 jari 229                 columnWidth = fm.stringWidth(((Integer)table.getValueAt(i, 0)).toString());
2 26 Feb 07 jari 230         }
2 26 Feb 07 jari 231         return columnWidth + 10;
2 26 Feb 07 jari 232     }
2 26 Feb 07 jari 233     
2 26 Feb 07 jari 234     
2 26 Feb 07 jari 235     private void setWidth(TableColumn col, int width, boolean setAll){
2 26 Feb 07 jari 236         col.setWidth(width);
2 26 Feb 07 jari 237         col.setPreferredWidth(width);
2 26 Feb 07 jari 238         if(setAll){
2 26 Feb 07 jari 239             col.setMaxWidth(width);
2 26 Feb 07 jari 240             col.setMinWidth(width);
2 26 Feb 07 jari 241         }
2 26 Feb 07 jari 242     }
2 26 Feb 07 jari 243     
2 26 Feb 07 jari 244     private void applySVCFile(){
2 26 Feb 07 jari 245         File inputFile = null;
2 26 Feb 07 jari 246         
2 26 Feb 07 jari 247         final JFileChooser fc = new JFileChooser(TMEV.getFile("data/svm"));
2 26 Feb 07 jari 248         fc.setFileFilter(new SVCFileFilter());
2 26 Feb 07 jari 249         int returnVal = fc.showOpenDialog( this );
2 26 Feb 07 jari 250         
2 26 Feb 07 jari 251         if (returnVal == JFileChooser.APPROVE_OPTION) {
2 26 Feb 07 jari 252             inputFile = fc.getSelectedFile();
2 26 Feb 07 jari 253         }
2 26 Feb 07 jari 254         readAndApplyFile(inputFile);
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 void readAndApplyFile(File inputFile){
2 26 Feb 07 jari 259         if(inputFile == null)
2 26 Feb 07 jari 260             return;
2 26 Feb 07 jari 261         
2 26 Feb 07 jari 262         int [] fileClassification;
2 26 Feb 07 jari 263         
2 26 Feb 07 jari 264         try{
2 26 Feb 07 jari 265             
2 26 Feb 07 jari 266             BufferedReader br = new BufferedReader(new java.io.FileReader(inputFile));
2 26 Feb 07 jari 267             
2 26 Feb 07 jari 268             String line = new String();
2 26 Feb 07 jari 269             int currClass = 0;
2 26 Feb 07 jari 270             
2 26 Feb 07 jari 271             StringTokenizer stok;
2 26 Feb 07 jari 272             Vector values = new Vector();
2 26 Feb 07 jari 273             
2 26 Feb 07 jari 274             br.readLine(); //skip header
2 26 Feb 07 jari 275             while( (line = br.readLine()) != null){
2 26 Feb 07 jari 276                 stok = new StringTokenizer(line, "\t");
2 26 Feb 07 jari 277                 if(stok.hasMoreTokens())
2 26 Feb 07 jari 278                     stok.nextToken();
2 26 Feb 07 jari 279                 if(stok.hasMoreElements()){
2 26 Feb 07 jari 280                     values.add(stok.nextToken());
2 26 Feb 07 jari 281                 }
2 26 Feb 07 jari 282             }
2 26 Feb 07 jari 283             if(values.size() != table.getRowCount()){
2 26 Feb 07 jari 284                 //send message out
2 26 Feb 07 jari 285                 if(this.classifyGenes)
2 26 Feb 07 jari 286                     JOptionPane.showMessageDialog(this.framework.getFrame(), "Number of classification indices provided does not match the number of genes in the data set!","Classification Input Error", JOptionPane.ERROR_MESSAGE);
2 26 Feb 07 jari 287                 else
2 26 Feb 07 jari 288                     JOptionPane.showMessageDialog(this.framework.getFrame(), "Number of classification indices provided does not match the number of experiments in the data set!","Classification Input Error", JOptionPane.ERROR_MESSAGE);
2 26 Feb 07 jari 289                 return;
2 26 Feb 07 jari 290             }
2 26 Feb 07 jari 291                         
2 26 Feb 07 jari 292             applyClassArrayToTable(values);
2 26 Feb 07 jari 293             
2 26 Feb 07 jari 294         } catch (FileNotFoundException e){
2 26 Feb 07 jari 295             JOptionPane.showMessageDialog(this.framework.getFrame(), "Classification file not found.","Classification Input Error", JOptionPane.ERROR_MESSAGE);
2 26 Feb 07 jari 296             return;
2 26 Feb 07 jari 297         } catch (IOException e1){
2 26 Feb 07 jari 298             JOptionPane.showMessageDialog(this.framework.getFrame(), "File Input Error, please check format.","Classification Input Error", JOptionPane.ERROR_MESSAGE);
2 26 Feb 07 jari 299             return;
2 26 Feb 07 jari 300         } catch (NumberFormatException e2){
2 26 Feb 07 jari 301                     JOptionPane.showMessageDialog(this.framework.getFrame(), "File Input Error, please check number format format.","Classification Input Error", JOptionPane.ERROR_MESSAGE);
2 26 Feb 07 jari 302             return;
2 26 Feb 07 jari 303         }
2 26 Feb 07 jari 304         
2 26 Feb 07 jari 305         
2 26 Feb 07 jari 306     }
2 26 Feb 07 jari 307     
2 26 Feb 07 jari 308     
2 26 Feb 07 jari 309     public void applyClassArrayToTable(Vector values) throws NumberFormatException{
2 26 Feb 07 jari 310         
2 26 Feb 07 jari 311         if(values == null)
2 26 Feb 07 jari 312             return;
2 26 Feb 07 jari 313         
2 26 Feb 07 jari 314         svmTableModel.sort(0);
2 26 Feb 07 jari 315         int n = values.size();
2 26 Feb 07 jari 316         int classification = 0;
2 26 Feb 07 jari 317         
2 26 Feb 07 jari 318         for(int i = 0; i < n ; i++){
2 26 Feb 07 jari 319             if(! ((Boolean)(table.getValueAt(i, 1))).booleanValue()){  //only alter if not in class
2 26 Feb 07 jari 320                 
2 26 Feb 07 jari 321                 classification = Integer.parseInt((String)(values.elementAt(i)));
2 26 Feb 07 jari 322                 
2 26 Feb 07 jari 323                 if(classification == 1){
2 26 Feb 07 jari 324                     table.setValueAt( new Boolean(true),i, 1);
2 26 Feb 07 jari 325                 }
2 26 Feb 07 jari 326                 else if(classification == -1){
2 26 Feb 07 jari 327                     table.setValueAt( new Boolean(true),i, 2);
2 26 Feb 07 jari 328                 }
2 26 Feb 07 jari 329                 else {
2 26 Feb 07 jari 330                     table.setValueAt( new Boolean(true),i, 3);
2 26 Feb 07 jari 331                 }
2 26 Feb 07 jari 332             }
2 26 Feb 07 jari 333         }
2 26 Feb 07 jari 334     }
2 26 Feb 07 jari 335     
2 26 Feb 07 jari 336     
2 26 Feb 07 jari 337     
2 26 Feb 07 jari 338     private void applyStoredCluster(){
2 26 Feb 07 jari 339         
2 26 Feb 07 jari 340     }
2 26 Feb 07 jari 341     
2 26 Feb 07 jari 342     private void sortBy(int col){
2 26 Feb 07 jari 343         
2 26 Feb 07 jari 344     }
2 26 Feb 07 jari 345     
2 26 Feb 07 jari 346     private void setClassificationForRange(int startRow, int endRow, int col){
2 26 Feb 07 jari 347         for( int row = startRow ; row <= endRow; row++){
2 26 Feb 07 jari 348             table.setValueAt(new Boolean(true), row, col);
2 26 Feb 07 jari 349         }
2 26 Feb 07 jari 350         //svmTableModel.fireTableDataChanged();
2 26 Feb 07 jari 351         table.repaint();
2 26 Feb 07 jari 352     }
2 26 Feb 07 jari 353     
2 26 Feb 07 jari 354     private void setClassificationForSet(int [] indices, int col){
2 26 Feb 07 jari 355         
2 26 Feb 07 jari 356         for(int row = 0; row < indices.length ; row++){
2 26 Feb 07 jari 357             table.setValueAt(new Boolean(true), indices[row] , col);
2 26 Feb 07 jari 358         }
2 26 Feb 07 jari 359         table.repaint();
2 26 Feb 07 jari 360         //  svmTableModel.fireTableDataChanged();
2 26 Feb 07 jari 361     }
2 26 Feb 07 jari 362     
2 26 Feb 07 jari 363     private void saveTableAsSVC() throws IOException{
2 26 Feb 07 jari 364         
2 26 Feb 07 jari 365         final JFileChooser fc = new JFileChooser(TMEV.getFile("data/svm"));
2 26 Feb 07 jari 366         fc.addChoosableFileFilter(new SVCFileFilter());
2 26 Feb 07 jari 367         fc.setFileView(new SVCFileView());             
2 26 Feb 07 jari 368         if(currentFile != null)
2 26 Feb 07 jari 369             fc.setSelectedFile(currentFile);           
2 26 Feb 07 jari 370         int result = fc.showSaveDialog(this);        
2 26 Feb 07 jari 371         if(result == JFileChooser.CANCEL_OPTION)
2 26 Feb 07 jari 372             return;        
2 26 Feb 07 jari 373         else{
2 26 Feb 07 jari 374             currentFile = fc.getSelectedFile();
2 26 Feb 07 jari 375             writeToFile( currentFile );
2 26 Feb 07 jari 376             this.saveMenuItem.setEnabled(true);
2 26 Feb 07 jari 377         }        
2 26 Feb 07 jari 378         return;
2 26 Feb 07 jari 379     }
2 26 Feb 07 jari 380     
2 26 Feb 07 jari 381     
2 26 Feb 07 jari 382     private void writeToFile( File file ) throws IOException{        
2 26 Feb 07 jari 383         BufferedWriter bw = new java.io.BufferedWriter( new java.io.FileWriter(file) );
2 26 Feb 07 jari 384         PrintWriter pw = new java.io.PrintWriter( bw );
2 26 Feb 07 jari 385         String TAB = "\t";
2 26 Feb 07 jari 386         String annot;        
2 26 Feb 07 jari 387         int numRows = table.getRowCount();        
2 26 Feb 07 jari 388         pw.print("Index"+TAB+"Classification"+TAB);
2 26 Feb 07 jari 389         for(int col = 0; col < fieldNames.length; col++){
2 26 Feb 07 jari 390             pw.print(fieldNames[col] + TAB);
2 26 Feb 07 jari 391         }
2 26 Feb 07 jari 392         pw.print("\n");        
2 26 Feb 07 jari 393         
2 26 Feb 07 jari 394         for(int row = 0; row < numRows ; row++){            
2 26 Feb 07 jari 395             pw.print(table.getValueAt(row, 0)+TAB+getClassificationString(row)+TAB);
2 26 Feb 07 jari 396             annot = getRowAnnotationString(row);            
2 26 Feb 07 jari 397             if(!annot.equals(""))
2 26 Feb 07 jari 398                 pw.print(annot);
2 26 Feb 07 jari 399             pw.print("\n");
2 26 Feb 07 jari 400         }        
2 26 Feb 07 jari 401         pw.close();
2 26 Feb 07 jari 402         bw.close();
2 26 Feb 07 jari 403     }
2 26 Feb 07 jari 404     
2 26 Feb 07 jari 405     
2 26 Feb 07 jari 406     private void saveTableToCurrentSVC() throws IOException{
2 26 Feb 07 jari 407         if( currentFile != null){
2 26 Feb 07 jari 408             writeToFile(currentFile);
2 26 Feb 07 jari 409         }
2 26 Feb 07 jari 410         
2 26 Feb 07 jari 411     }
2 26 Feb 07 jari 412     
2 26 Feb 07 jari 413     private String getClassificationString(int row){
2 26 Feb 07 jari 414         
2 26 Feb 07 jari 415         if( ((Boolean)table.getValueAt(row, 2)).booleanValue() == true )
2 26 Feb 07 jari 416             return "-1";
2 26 Feb 07 jari 417         else if( ((Boolean)table.getValueAt(row, 1)).booleanValue() == true )
2 26 Feb 07 jari 418             return "1";
2 26 Feb 07 jari 419         else
2 26 Feb 07 jari 420             return "0";
2 26 Feb 07 jari 421     }
2 26 Feb 07 jari 422     
2 26 Feb 07 jari 423     private String getRowAnnotationString(int row){
2 26 Feb 07 jari 424         
2 26 Feb 07 jari 425         String annot = new String("");
2 26 Feb 07 jari 426         int numCol = table.getColumnCount();
2 26 Feb 07 jari 427         String TAB = "\t";
2 26 Feb 07 jari 428         
2 26 Feb 07 jari 429         for(int col = 4; col < numCol ; col++){
2 26 Feb 07 jari 430             annot += (String)(table.getValueAt(row, col));
2 26 Feb 07 jari 431             annot += TAB;
2 26 Feb 07 jari 432         }
2 26 Feb 07 jari 433         return annot;
2 26 Feb 07 jari 434     }
2 26 Feb 07 jari 435     
2 26 Feb 07 jari 436     
2 26 Feb 07 jari 437     private void searchTable(){
2 26 Feb 07 jari 438         
2 26 Feb 07 jari 439         searchDialog.setVisible(true);
2 26 Feb 07 jari 440         searchDialog.toFront();
2 26 Feb 07 jari 441         searchDialog.setLocation(this.getLocation().x + 100, this.getLocation().y +100);
2 26 Feb 07 jari 442         
2 26 Feb 07 jari 443     }
2 26 Feb 07 jari 444     
2 26 Feb 07 jari 445     /**
2 26 Feb 07 jari 446      *  Returns the classification provided in the editor.  The classification array
2 26 Feb 07 jari 447      *  will only have values that are in the current matrix of the analysis
2 26 Feb 07 jari 448      */
2 26 Feb 07 jari 449     
2 26 Feb 07 jari 450     public int [] getClassification(){
2 26 Feb 07 jari 451         if(classifyGenes)
2 26 Feb 07 jari 452             return getGeneClassification();
2 26 Feb 07 jari 453         else
2 26 Feb 07 jari 454             return getSampleClassification();
2 26 Feb 07 jari 455     }
2 26 Feb 07 jari 456     
2 26 Feb 07 jari 457     
2 26 Feb 07 jari 458     private int [] getGeneClassification(){
2 26 Feb 07 jari 459         this.svmTableModel.sort(0);
2 26 Feb 07 jari 460         
2 26 Feb 07 jari 461         int numberOfExperimentRows = experiment.getNumberOfGenes();
2 26 Feb 07 jari 462         int numberOfClassificationRows = table.getRowCount();
2 26 Feb 07 jari 463         int currentIndex;
2 26 Feb 07 jari 464         int experimentRowCnt = 0;
2 26 Feb 07 jari 465         int [] classification = new int[numberOfExperimentRows];
2 26 Feb 07 jari 466         
2 26 Feb 07 jari 467         currentIndex = experiment.getGeneIndexMappedToData(experimentRowCnt);
2 26 Feb 07 jari 468         
2 26 Feb 07 jari 469         for(int row = 0; row < numberOfClassificationRows; row++){
2 26 Feb 07 jari 470             
2 26 Feb 07 jari 471             //if the currentIndex (in data) is the current row in editor
2 26 Feb 07 jari 472             if(currentIndex == row){
2 26 Feb 07 jari 473                 if( ((Boolean)(table.getValueAt(row, 1))).booleanValue() )
2 26 Feb 07 jari 474                     classification[experimentRowCnt] = 1;
2 26 Feb 07 jari 475                 else if( ((Boolean)(table.getValueAt(row, 2))).booleanValue() )
2 26 Feb 07 jari 476                     classification[experimentRowCnt] = -1;
2 26 Feb 07 jari 477                 else
2 26 Feb 07 jari 478                     classification[experimentRowCnt] = 0;  //eventually it will be neutral
2 26 Feb 07 jari 479                 experimentRowCnt++;
2 26 Feb 07 jari 480                 currentIndex = experiment.getGeneIndexMappedToData(experimentRowCnt);
2 26 Feb 07 jari 481             }
2 26 Feb 07 jari 482         }
2 26 Feb 07 jari 483         return classification;
2 26 Feb 07 jari 484     }
2 26 Feb 07 jari 485     
2 26 Feb 07 jari 486     private int [] getSampleClassification(){
2 26 Feb 07 jari 487         this.svmTableModel.sort(0);
2 26 Feb 07 jari 488         int numRows = table.getRowCount();
2 26 Feb 07 jari 489         int [] classification = new int[numRows];
2 26 Feb 07 jari 490         
2 26 Feb 07 jari 491         for(int row = 0; row < numRows ; row++){
2 26 Feb 07 jari 492             if( ((Boolean)(table.getValueAt(row, 1))).booleanValue() )
2 26 Feb 07 jari 493                 classification[row] = 1;
2 26 Feb 07 jari 494             else if( ((Boolean)(table.getValueAt(row, 2))).booleanValue() )
2 26 Feb 07 jari 495                 classification[row] = -1;
2 26 Feb 07 jari 496             else
2 26 Feb 07 jari 497                 classification[row] = -1;  //eventually it will be neutral
2 26 Feb 07 jari 498         }
2 26 Feb 07 jari 499         return classification;
2 26 Feb 07 jari 500     }
2 26 Feb 07 jari 501     
2 26 Feb 07 jari 502     /**
2 26 Feb 07 jari 503      * Return the editor close status, returns true if window closed by "X" excape button
2 26 Feb 07 jari 504      */
2 26 Feb 07 jari 505     public boolean formCanceled(){
2 26 Feb 07 jari 506         return this.cancelForm;
2 26 Feb 07 jari 507     }
2 26 Feb 07 jari 508     
2 26 Feb 07 jari 509     /** This method is called from within the constructor to
2 26 Feb 07 jari 510      * initialize the form.
2 26 Feb 07 jari 511      * WARNING: Do NOT modify this code. The content of this method is
2 26 Feb 07 jari 512      * always regenerated by the Form Editor.
2 26 Feb 07 jari 513      */
2 26 Feb 07 jari 514     private void initComponents() {//GEN-BEGIN:initComponents
2 26 Feb 07 jari 515         java.awt.GridBagConstraints gridBagConstraints;
2 26 Feb 07 jari 516
2 26 Feb 07 jari 517         jToolBar1 = new javax.swing.JToolBar();
2 26 Feb 07 jari 518         inClassButton = new javax.swing.JButton();
2 26 Feb 07 jari 519         outClassButton = new javax.swing.JButton();
2 26 Feb 07 jari 520         neutralButton = new javax.swing.JButton();
2 26 Feb 07 jari 521         searchButton = new javax.swing.JButton();
2 26 Feb 07 jari 522         runButton = new javax.swing.JButton();
2 26 Feb 07 jari 523         jScrollPane1 = new javax.swing.JScrollPane();
2 26 Feb 07 jari 524         table = new javax.swing.JTable();
2 26 Feb 07 jari 525         jMenuBar2 = new javax.swing.JMenuBar();
2 26 Feb 07 jari 526         fileMenu = new javax.swing.JMenu();
2 26 Feb 07 jari 527         saveMenuItem = new javax.swing.JMenuItem();
2 26 Feb 07 jari 528         saveAsMenuItem = new javax.swing.JMenuItem();
2 26 Feb 07 jari 529         jSeparator2 = new javax.swing.JSeparator();
2 26 Feb 07 jari 530         closeMenuItem = new javax.swing.JMenuItem();
2 26 Feb 07 jari 531         editMenu = new javax.swing.JMenu();
2 26 Feb 07 jari 532         svcApplyMenuItem = new javax.swing.JMenuItem();
2 26 Feb 07 jari 533         storedClusterMenuItem = new javax.swing.JMenuItem();
2 26 Feb 07 jari 534         tcListMenuItem = new javax.swing.JMenuItem();
2 26 Feb 07 jari 535         jSeparator3 = new javax.swing.JSeparator();
2 26 Feb 07 jari 536         selectAllMenuItem = new javax.swing.JMenuItem();
2 26 Feb 07 jari 537         toolsMenu = new javax.swing.JMenu();
2 26 Feb 07 jari 538         searchMenuItem = new javax.swing.JMenuItem();
2 26 Feb 07 jari 539         sortByMenu = new javax.swing.JMenu();
2 26 Feb 07 jari 540         indexSortMenuItem = new javax.swing.JMenuItem();
2 26 Feb 07 jari 541         classSortMenuItem = new javax.swing.JMenuItem();
2 26 Feb 07 jari 542
2 26 Feb 07 jari 543         getContentPane().setLayout(new java.awt.GridBagLayout());
2 26 Feb 07 jari 544
2 26 Feb 07 jari 545         setTitle("SVM Classification Editor");
2 26 Feb 07 jari 546         addWindowListener(new java.awt.event.WindowAdapter() {
2 26 Feb 07 jari 547             public void windowClosing(java.awt.event.WindowEvent evt) {
2 26 Feb 07 jari 548                 exitForm(evt);
2 26 Feb 07 jari 549             }
2 26 Feb 07 jari 550         });
2 26 Feb 07 jari 551
2 26 Feb 07 jari 552         jToolBar1.setAlignmentX(0.0F);
2 26 Feb 07 jari 553         jToolBar1.setMaximumSize(new java.awt.Dimension(18, 50));
2 26 Feb 07 jari 554         jToolBar1.setMinimumSize(new java.awt.Dimension(18, 35));
2 26 Feb 07 jari 555         jToolBar1.setPreferredSize(new java.awt.Dimension(18, 35));
2 26 Feb 07 jari 556         inClassButton.setToolTipText(" move into class");
2 26 Feb 07 jari 557         inClassButton.setMaximumSize(new java.awt.Dimension(32, 32));
2 26 Feb 07 jari 558         inClassButton.setMinimumSize(new java.awt.Dimension(32, 32));
2 26 Feb 07 jari 559         inClassButton.setPreferredSize(new java.awt.Dimension(32, 32));
2 26 Feb 07 jari 560         inClassButton.addActionListener(new java.awt.event.ActionListener() {
2 26 Feb 07 jari 561             public void actionPerformed(java.awt.event.ActionEvent evt) {
2 26 Feb 07 jari 562                 inClassButtonActionPerformed(evt);
2 26 Feb 07 jari 563             }
2 26 Feb 07 jari 564         });
2 26 Feb 07 jari 565
2 26 Feb 07 jari 566         jToolBar1.add(inClassButton);
2 26 Feb 07 jari 567
2 26 Feb 07 jari 568         outClassButton.setToolTipText("move out of class");
2 26 Feb 07 jari 569         outClassButton.setMaximumSize(new java.awt.Dimension(32, 32));
2 26 Feb 07 jari 570         outClassButton.setMinimumSize(new java.awt.Dimension(32, 32));
2 26 Feb 07 jari 571         outClassButton.setPreferredSize(new java.awt.Dimension(32, 32));
2 26 Feb 07 jari 572         outClassButton.addActionListener(new java.awt.event.ActionListener() {
2 26 Feb 07 jari 573             public void actionPerformed(java.awt.event.ActionEvent evt) {
2 26 Feb 07 jari 574                 outClassButtonActionPerformed(evt);
2 26 Feb 07 jari 575             }
2 26 Feb 07 jari 576         });
2 26 Feb 07 jari 577
2 26 Feb 07 jari 578         jToolBar1.add(outClassButton);
2 26 Feb 07 jari 579
2 26 Feb 07 jari 580         neutralButton.setToolTipText("move to neutal status");
2 26 Feb 07 jari 581         neutralButton.setMaximumSize(new java.awt.Dimension(32, 32));
2 26 Feb 07 jari 582         neutralButton.setMinimumSize(new java.awt.Dimension(32, 32));
2 26 Feb 07 jari 583         neutralButton.setPreferredSize(new java.awt.Dimension(32, 32));
2 26 Feb 07 jari 584         neutralButton.addActionListener(new java.awt.event.ActionListener() {
2 26 Feb 07 jari 585             public void actionPerformed(java.awt.event.ActionEvent evt) {
2 26 Feb 07 jari 586                 neutralButtonActionPerformed(evt);
2 26 Feb 07 jari 587             }
2 26 Feb 07 jari 588         });
2 26 Feb 07 jari 589
2 26 Feb 07 jari 590         jToolBar1.add(neutralButton);
2 26 Feb 07 jari 591
2 26 Feb 07 jari 592         searchButton.setToolTipText("search (Ctrl - s)");
2 26 Feb 07 jari 593         searchButton.setMaximumSize(new java.awt.Dimension(32, 32));
2 26 Feb 07 jari 594         searchButton.setMinimumSize(new java.awt.Dimension(32, 32));
2 26 Feb 07 jari 595         searchButton.setPreferredSize(new java.awt.Dimension(32, 32));
2 26 Feb 07 jari 596         jToolBar1.addSeparator(new Dimension(20,32));
2 26 Feb 07 jari 597         searchButton.addActionListener(new java.awt.event.ActionListener() {
2 26 Feb 07 jari 598             public void actionPerformed(java.awt.event.ActionEvent evt) {
2 26 Feb 07 jari 599                 searchButtonActionPerformed(evt);
2 26 Feb 07 jari 600             }
2 26 Feb 07 jari 601         });
2 26 Feb 07 jari 602
2 26 Feb 07 jari 603         jToolBar1.add(searchButton);
2 26 Feb 07 jari 604
2 26 Feb 07 jari 605         runButton.setToolTipText("Run SVM on current classification...");
2 26 Feb 07 jari 606         runButton.setMaximumSize(new java.awt.Dimension(32, 32));
2 26 Feb 07 jari 607         runButton.setMinimumSize(new java.awt.Dimension(32, 32));
2 26 Feb 07 jari 608         runButton.setPreferredSize(new java.awt.Dimension(32, 32));
2 26 Feb 07 jari 609         jToolBar1.addSeparator(new Dimension(20,32));
2 26 Feb 07 jari 610         runButton.addActionListener(new java.awt.event.ActionListener() {
2 26 Feb 07 jari 611             public void actionPerformed(java.awt.event.ActionEvent evt) {
2 26 Feb 07 jari 612                 runButtonActionPerformed(evt);
2 26 Feb 07 jari 613             }
2 26 Feb 07 jari 614         });
2 26 Feb 07 jari 615
2 26 Feb 07 jari 616         jToolBar1.add(runButton);
2 26 Feb 07 jari 617
2 26 Feb 07 jari 618         gridBagConstraints = new java.awt.GridBagConstraints();
2 26 Feb 07 jari 619         gridBagConstraints.gridx = 0;
2 26 Feb 07 jari 620         gridBagConstraints.gridy = 0;
2 26 Feb 07 jari 621         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
2 26 Feb 07 jari 622         gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
2 26 Feb 07 jari 623         gridBagConstraints.weightx = 1.0;
2 26 Feb 07 jari 624         getContentPane().add(jToolBar1, gridBagConstraints);
2 26 Feb 07 jari 625
2 26 Feb 07 jari 626         jScrollPane1.setVerticalScrollBarPolicy(javax.swing.JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
2 26 Feb 07 jari 627         jScrollPane1.setViewportView(table);
2 26 Feb 07 jari 628
2 26 Feb 07 jari 629         gridBagConstraints = new java.awt.GridBagConstraints();
2 26 Feb 07 jari 630         gridBagConstraints.gridx = 0;
2 26 Feb 07 jari 631         gridBagConstraints.gridy = 1;
2 26 Feb 07 jari 632         gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
2 26 Feb 07 jari 633         gridBagConstraints.weightx = 1.0;
2 26 Feb 07 jari 634         gridBagConstraints.weighty = 1.0;
2 26 Feb 07 jari 635         getContentPane().add(jScrollPane1, gridBagConstraints);
2 26 Feb 07 jari 636
2 26 Feb 07 jari 637         fileMenu.setMnemonic('F');
2 26 Feb 07 jari 638         fileMenu.setText("File");
2 26 Feb 07 jari 639         fileMenu.addActionListener(new java.awt.event.ActionListener() {
2 26 Feb 07 jari 640             public void actionPerformed(java.awt.event.ActionEvent evt) {
2 26 Feb 07 jari 641                 fileMenuActionPerformed(evt);
2 26 Feb 07 jari 642             }
2 26 Feb 07 jari 643         });
2 26 Feb 07 jari 644
2 26 Feb 07 jari 645         saveMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_S, java.awt.event.InputEvent.CTRL_MASK));
2 26 Feb 07 jari 646         saveMenuItem.setText("Save");
2 26 Feb 07 jari 647         saveMenuItem.setEnabled(false);
2 26 Feb 07 jari 648         saveMenuItem.addActionListener(new java.awt.event.ActionListener() {
2 26 Feb 07 jari 649             public void actionPerformed(java.awt.event.ActionEvent evt) {
2 26 Feb 07 jari 650                 saveMenuItemActionPerformed(evt);
2 26 Feb 07 jari 651             }
2 26 Feb 07 jari 652         });
2 26 Feb 07 jari 653
2 26 Feb 07 jari 654         fileMenu.add(saveMenuItem);
2 26 Feb 07 jari 655         saveAsMenuItem.setText("Save as...");
2 26 Feb 07 jari 656         saveAsMenuItem.addActionListener(new java.awt.event.ActionListener() {
2 26 Feb 07 jari 657             public void actionPerformed(java.awt.event.ActionEvent evt) {
2 26 Feb 07 jari 658                 saveAsMenuItemActionPerformed(evt);
2 26 Feb 07 jari 659             }
2 26 Feb 07 jari 660         });
2 26 Feb 07 jari 661
2 26 Feb 07 jari 662         fileMenu.add(saveAsMenuItem);
2 26 Feb 07 jari 663         fileMenu.add(jSeparator2);
2 26 Feb 07 jari 664         closeMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_R, java.awt.event.InputEvent.CTRL_MASK));
2 26 Feb 07 jari 665         closeMenuItem.setText("Run");
2 26 Feb 07 jari 666         closeMenuItem.setToolTipText("Applies current classification");
2 26 Feb 07 jari 667         closeMenuItem.addActionListener(new java.awt.event.ActionListener() {
2 26 Feb 07 jari 668             public void actionPerformed(java.awt.event.ActionEvent evt) {
2 26 Feb 07 jari 669                 closeMenuItemActionPerformed(evt);
2 26 Feb 07 jari 670             }
2 26 Feb 07 jari 671         });
2 26 Feb 07 jari 672
2 26 Feb 07 jari 673         fileMenu.add(closeMenuItem);
2 26 Feb 07 jari 674         jMenuBar2.add(fileMenu);
2 26 Feb 07 jari 675         editMenu.setMnemonic('E');
2 26 Feb 07 jari 676         editMenu.setText("Edit");
2 26 Feb 07 jari 677         svcApplyMenuItem.setText("Apply SVC File");
2 26 Feb 07 jari 678         svcApplyMenuItem.addActionListener(new java.awt.event.ActionListener() {
2 26 Feb 07 jari 679             public void actionPerformed(java.awt.event.ActionEvent evt) {
2 26 Feb 07 jari 680                 svcApplyMenuItemActionPerformed(evt);
2 26 Feb 07 jari 681             }
2 26 Feb 07 jari 682         });
2 26 Feb 07 jari 683
2 26 Feb 07 jari 684         editMenu.add(svcApplyMenuItem);
2 26 Feb 07 jari 685         storedClusterMenuItem.setText("Apply Stored Cluster");
2 26 Feb 07 jari 686         storedClusterMenuItem.addActionListener(new java.awt.event.ActionListener() {
2 26 Feb 07 jari 687             public void actionPerformed(java.awt.event.ActionEvent evt) {
2 26 Feb 07 jari 688                 storedClusterMenuItemActionPerformed(evt);
2 26 Feb 07 jari 689             }
2 26 Feb 07 jari 690         });
2 26 Feb 07 jari 691
2 26 Feb 07 jari 692         editMenu.add(storedClusterMenuItem);
2 26 Feb 07 jari 693         tcListMenuItem.setText("Apply Gene Index List");
2 26 Feb 07 jari 694         tcListMenuItem.addActionListener(new java.awt.event.ActionListener() {
2 26 Feb 07 jari 695             public void actionPerformed(java.awt.event.ActionEvent evt) {
2 26 Feb 07 jari 696                 tcListMenuItemActionPerformed(evt);
2 26 Feb 07 jari 697             }
2 26 Feb 07 jari 698         });
2 26 Feb 07 jari 699
2 26 Feb 07 jari 700         editMenu.add(tcListMenuItem);
2 26 Feb 07 jari 701         editMenu.add(jSeparator3);
2 26 Feb 07 jari 702         selectAllMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_A, java.awt.event.InputEvent.CTRL_MASK));
2 26 Feb 07 jari 703         selectAllMenuItem.setText("Select All");
2 26 Feb 07 jari 704         selectAllMenuItem.addActionListener(new java.awt.event.ActionListener() {
2 26 Feb 07 jari 705             public void actionPerformed(java.awt.event.ActionEvent evt) {
2 26 Feb 07 jari 706                 selectAllMenuItemActionPerformed(evt);
2 26 Feb 07 jari 707             }
2 26 Feb 07 jari 708         });
2 26 Feb 07 jari 709
2 26 Feb 07 jari 710         editMenu.add(selectAllMenuItem);
2 26 Feb 07 jari 711         jMenuBar2.add(editMenu);
2 26 Feb 07 jari 712         toolsMenu.setMnemonic('T');
2 26 Feb 07 jari 713         toolsMenu.setText("Tools");
2 26 Feb 07 jari 714         searchMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_S, java.awt.event.InputEvent.CTRL_MASK));
2 26 Feb 07 jari 715         searchMenuItem.setText("Search ");
2 26 Feb 07 jari 716         searchMenuItem.addActionListener(new java.awt.event.ActionListener() {
2 26 Feb 07 jari 717             public void actionPerformed(java.awt.event.ActionEvent evt) {
2 26 Feb 07 jari 718                 searchMenuItemActionPerformed(evt);
2 26 Feb 07 jari 719             }
2 26 Feb 07 jari 720         });
2 26 Feb 07 jari 721
2 26 Feb 07 jari 722         toolsMenu.add(searchMenuItem);
2 26 Feb 07 jari 723         sortByMenu.setText("Sort by...");
2 26 Feb 07 jari 724         indexSortMenuItem.setText("index");
2 26 Feb 07 jari 725         indexSortMenuItem.addActionListener(new java.awt.event.ActionListener() {
2 26 Feb 07 jari 726             public void actionPerformed(java.awt.event.ActionEvent evt) {
2 26 Feb 07 jari 727                 indexSortMenuItemActionPerformed(evt);
2 26 Feb 07 jari 728             }
2 26 Feb 07 jari 729         });
2 26 Feb 07 jari 730
2 26 Feb 07 jari 731         sortByMenu.add(indexSortMenuItem);
2 26 Feb 07 jari 732         classSortMenuItem.setText("classification");
2 26 Feb 07 jari 733         classSortMenuItem.setToolTipText("in->out->neutral");
2 26 Feb 07 jari 734         classSortMenuItem.addActionListener(new java.awt.event.ActionListener() {
2 26 Feb 07 jari 735             public void actionPerformed(java.awt.event.ActionEvent evt) {
2 26 Feb 07 jari 736                 classSortMenuItemActionPerformed(evt);
2 26 Feb 07 jari 737             }
2 26 Feb 07 jari 738         });
2 26 Feb 07 jari 739
2 26 Feb 07 jari 740         sortByMenu.add(classSortMenuItem);
2 26 Feb 07 jari 741         toolsMenu.add(sortByMenu);
2 26 Feb 07 jari 742         jMenuBar2.add(toolsMenu);
2 26 Feb 07 jari 743         setJMenuBar(jMenuBar2);
2 26 Feb 07 jari 744
2 26 Feb 07 jari 745         pack();
2 26 Feb 07 jari 746     }//GEN-END:initComponents
2 26 Feb 07 jari 747
2 26 Feb 07 jari 748     private void runButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_runButtonActionPerformed
2 26 Feb 07 jari 749         setVisible(false);
2 26 Feb 07 jari 750     }//GEN-LAST:event_runButtonActionPerformed
2 26 Feb 07 jari 751     
2 26 Feb 07 jari 752     private void classSortMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_classSortMenuItemActionPerformed
2 26 Feb 07 jari 753         // Add your handling code here:
2 26 Feb 07 jari 754     }//GEN-LAST:event_classSortMenuItemActionPerformed
2 26 Feb 07 jari 755     
2 26 Feb 07 jari 756     private void selectAllMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_selectAllMenuItemActionPerformed
2 26 Feb 07 jari 757         table.selectAll();
2 26 Feb 07 jari 758     }//GEN-LAST:event_selectAllMenuItemActionPerformed
2 26 Feb 07 jari 759     
2 26 Feb 07 jari 760     private void indexSortMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_indexSortMenuItemActionPerformed
2 26 Feb 07 jari 761         // Add your handling code here:
2 26 Feb 07 jari 762     }//GEN-LAST:event_indexSortMenuItemActionPerformed
2 26 Feb 07 jari 763     
2 26 Feb 07 jari 764     private void svcApplyMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_svcApplyMenuItemActionPerformed
2 26 Feb 07 jari 765         this.applySVCFile();
2 26 Feb 07 jari 766     }//GEN-LAST:event_svcApplyMenuItemActionPerformed
2 26 Feb 07 jari 767     
2 26 Feb 07 jari 768     private void tcListMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tcListMenuItemActionPerformed
2 26 Feb 07 jari 769         // Add your handling code here:
2 26 Feb 07 jari 770     }//GEN-LAST:event_tcListMenuItemActionPerformed
2 26 Feb 07 jari 771     
2 26 Feb 07 jari 772     private void searchButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_searchButtonActionPerformed
2 26 Feb 07 jari 773         searchTable();
2 26 Feb 07 jari 774     }//GEN-LAST:event_searchButtonActionPerformed
2 26 Feb 07 jari 775     
2 26 Feb 07 jari 776     private void hideOutClassCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_hideOutClassCheckBoxActionPerformed
2 26 Feb 07 jari 777         // Add your handling code here:
2 26 Feb 07 jari 778     }//GEN-LAST:event_hideOutClassCheckBoxActionPerformed
2 26 Feb 07 jari 779     
2 26 Feb 07 jari 780     private void searchMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_searchMenuItemActionPerformed
2 26 Feb 07 jari 781         searchTable();
2 26 Feb 07 jari 782     }//GEN-LAST:event_searchMenuItemActionPerformed
2 26 Feb 07 jari 783     
2 26 Feb 07 jari 784     private void neutralButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_neutralButtonActionPerformed
2 26 Feb 07 jari 785         int [] selectedRows = table.getSelectedRows();
2 26 Feb 07 jari 786         setClassificationForSet(selectedRows, 3);
2 26 Feb 07 jari 787     }//GEN-LAST:event_neutralButtonActionPerformed
2 26 Feb 07 jari 788     
2 26 Feb 07 jari 789     private void outClassButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_outClassButtonActionPerformed
2 26 Feb 07 jari 790         int [] selectedRows = table.getSelectedRows();
2 26 Feb 07 jari 791         setClassificationForSet(selectedRows, 2);
2 26 Feb 07 jari 792     }//GEN-LAST:event_outClassButtonActionPerformed
2 26 Feb 07 jari 793     
2 26 Feb 07 jari 794     private void inClassButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_inClassButtonActionPerformed
2 26 Feb 07 jari 795         int [] selectedRows = table.getSelectedRows();
2 26 Feb 07 jari 796         setClassificationForSet(selectedRows, 1);
2 26 Feb 07 jari 797     }//GEN-LAST:event_inClassButtonActionPerformed
2 26 Feb 07 jari 798     
2 26 Feb 07 jari 799     private void saveMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_saveMenuItemActionPerformed
2 26 Feb 07 jari 800         try{
2 26 Feb 07 jari 801             this.saveTableToCurrentSVC();
2 26 Feb 07 jari 802         } catch (IOException e){
2 26 Feb 07 jari 803             
2 26 Feb 07 jari 804         }
2 26 Feb 07 jari 805     }//GEN-LAST:event_saveMenuItemActionPerformed
2 26 Feb 07 jari 806     
2 26 Feb 07 jari 807     private void saveAsMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_saveAsMenuItemActionPerformed
2 26 Feb 07 jari 808         try{
2 26 Feb 07 jari 809             this.saveTableAsSVC();
2 26 Feb 07 jari 810         } catch (IOException e){
2 26 Feb 07 jari 811             
2 26 Feb 07 jari 812         }
2 26 Feb 07 jari 813     }//GEN-LAST:event_saveAsMenuItemActionPerformed
2 26 Feb 07 jari 814     
2 26 Feb 07 jari 815     private void fileMenuActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_fileMenuActionPerformed
2 26 Feb 07 jari 816         // Add your handling code here:
2 26 Feb 07 jari 817     }//GEN-LAST:event_fileMenuActionPerformed
2 26 Feb 07 jari 818     
2 26 Feb 07 jari 819     private void storedClusterMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_storedClusterMenuItemActionPerformed
2 26 Feb 07 jari 820         // Add your handling code here:
2 26 Feb 07 jari 821     }//GEN-LAST:event_storedClusterMenuItemActionPerformed
2 26 Feb 07 jari 822     
2 26 Feb 07 jari 823     private void closeMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_closeMenuItemActionPerformed
2 26 Feb 07 jari 824         setVisible(false);
2 26 Feb 07 jari 825     }//GEN-LAST:event_closeMenuItemActionPerformed
2 26 Feb 07 jari 826     
2 26 Feb 07 jari 827     /** Exit the Application */
2 26 Feb 07 jari 828     private void exitForm(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_exitForm
2 26 Feb 07 jari 829         cancelForm = true;
2 26 Feb 07 jari 830         setVisible(false);
2 26 Feb 07 jari 831     }//GEN-LAST:event_exitForm
2 26 Feb 07 jari 832     
2 26 Feb 07 jari 833     //   /**
2 26 Feb 07 jari 834     //    * @param args the command line arguments
2 26 Feb 07 jari 835     //     */
2 26 Feb 07 jari 836     //  public static void main(String args[]) {
2 26 Feb 07 jari 837     //  new SVMClassificationEditor(null).show();
2 26 Feb 07 jari 838     //    }
2 26 Feb 07 jari 839     
2 26 Feb 07 jari 840     
2 26 Feb 07 jari 841     // Variables declaration - do not modify//GEN-BEGIN:variables
2 26 Feb 07 jari 842     private javax.swing.JTable table;
2 26 Feb 07 jari 843     private javax.swing.JButton searchButton;
2 26 Feb 07 jari 844     private javax.swing.JSeparator jSeparator2;
2 26 Feb 07 jari 845     private javax.swing.JScrollPane jScrollPane1;
2 26 Feb 07 jari 846     private javax.swing.JMenuBar jMenuBar2;
2 26 Feb 07 jari 847     private javax.swing.JMenu fileMenu;
2 26 Feb 07 jari 848     private javax.swing.JButton inClassButton;
2 26 Feb 07 jari 849     private javax.swing.JMenuItem indexSortMenuItem;
2 26 Feb 07 jari 850     private javax.swing.JButton outClassButton;
2 26 Feb 07 jari 851     private javax.swing.JMenuItem svcApplyMenuItem;
2 26 Feb 07 jari 852     private javax.swing.JMenuItem saveAsMenuItem;
2 26 Feb 07 jari 853     private javax.swing.JMenuItem saveMenuItem;
2 26 Feb 07 jari 854     private javax.swing.JMenu sortByMenu;
2 26 Feb 07 jari 855     private javax.swing.JButton runButton;
2 26 Feb 07 jari 856     private javax.swing.JToolBar jToolBar1;
2 26 Feb 07 jari 857     private javax.swing.JMenuItem classSortMenuItem;
2 26 Feb 07 jari 858     private javax.swing.JButton neutralButton;
2 26 Feb 07 jari 859     private javax.swing.JMenu editMenu;
2 26 Feb 07 jari 860     private javax.swing.JMenuItem storedClusterMenuItem;
2 26 Feb 07 jari 861     private javax.swing.JMenu toolsMenu;
2 26 Feb 07 jari 862     private javax.swing.JMenuItem tcListMenuItem;
2 26 Feb 07 jari 863     private javax.swing.JMenuItem closeMenuItem;
2 26 Feb 07 jari 864     private javax.swing.JMenuItem selectAllMenuItem;
2 26 Feb 07 jari 865     private javax.swing.JSeparator jSeparator3;
2 26 Feb 07 jari 866     private javax.swing.JMenuItem searchMenuItem;
2 26 Feb 07 jari 867     // End of variables declaration//GEN-END:variables
2 26 Feb 07 jari 868     
2 26 Feb 07 jari 869     public class SVMTableModel extends AbstractTableModel{
2 26 Feb 07 jari 870         
2 26 Feb 07 jari 871         private Class [] types;
2 26 Feb 07 jari 872         private boolean [] canEdit;
2 26 Feb 07 jari 873         private TableModel tableModel;
2 26 Feb 07 jari 874         private Row [] rows;
2 26 Feb 07 jari 875         private int colToSort;
2 26 Feb 07 jari 876         private String [] headerNames;
2 26 Feb 07 jari 877         
2 26 Feb 07 jari 878         /** Constructs a new instance of SVMTableModel
2 26 Feb 07 jari 879          * @param HeaderNames <CODE>String</CODE> array of column names
2 26 Feb 07 jari 880          * @param Model <CODE>TableModel</CODE> to set as core TableModel for SVMTableModel
2 26 Feb 07 jari 881          */
2 26 Feb 07 jari 882         public SVMTableModel(String [] HeaderNames, TableModel Model){
2 26 Feb 07 jari 883             super();
2 26 Feb 07 jari 884             
2 26 Feb 07 jari 885             tableModel = Model;
2 26 Feb 07 jari 886             headerNames = HeaderNames;
2 26 Feb 07 jari 887             
2 26 Feb 07 jari 888             //create and init row objects
2 26 Feb 07 jari 889             rows = new Row[tableModel.getRowCount()];
2 26 Feb 07 jari 890             
2 26 Feb 07 jari 891             for(int i = 0; i < rows.length; i++){
2 26 Feb 07 jari 892                 rows[i] = new Row();
2 26 Feb 07 jari 893                 rows[i].index = i;
2 26 Feb 07 jari 894             }
2 26 Feb 07 jari 895             
2 26 Feb 07 jari 896             types = new Class[headerNames.length];
2 26 Feb 07 jari 897             
2 26 Feb 07 jari 898             canEdit = new boolean[types.length];
2 26 Feb 07 jari 899             
2 26 Feb 07 jari 900             for(int i = 0; i < types.length ; i++){
2 26 Feb 07 jari 901                 if(i == 1 || i == 2 || i == 3){
2 26 Feb 07 jari 902                     types[i] = java.lang.Boolean.class;
2 26 Feb 07 jari 903                     canEdit[i] = true;
2 26 Feb 07 jari 904                 }
2 26 Feb 07 jari 905                 else{
2 26 Feb 07 jari 906                     types[i] = java.lang.Object.class;
2 26 Feb 07 jari 907                     canEdit[i] = false;
2 26 Feb 07 jari 908                 }
2 26 Feb 07 jari 909             }
2 26 Feb 07 jari 910         }
2 26 Feb 07 jari 911         
2 26 Feb 07 jari 912         
2 26 Feb 07 jari 913         /** Sorts table rows based on column index.
2 26 Feb 07 jari 914          * @param c Column to use as sort key when sorting columns
2 26 Feb 07 jari 915          */
2 26 Feb 07 jari 916         public void sort(int c){
2 26 Feb 07 jari 917             colToSort = c;
2 26 Feb 07 jari 918             Arrays.sort(rows);
2 26 Feb 07 jari 919             table.repaint();
2 26 Feb 07 jari 920         }
2 26 Feb 07 jari 921         
2 26 Feb 07 jari 922         /** Sorts table rows by column header key.
2 26 Feb 07 jari 923          * @param key <CODE>String</CODE> key to identify sort column.
2 26 Feb 07 jari 924          */
2 26 Feb 07 jari 925         public void sortBy(String key){
2 26 Feb 07 jari 926             int col = getColumnIndex(key);
2 26 Feb 07 jari 927             
2 26 Feb 07 jari 928             if(col >= 0){
2 26 Feb 07 jari 929                 sort(col);
2 26 Feb 07 jari 930                 colToSort = col;
2 26 Feb 07 jari 931             }
2 26 Feb 07 jari 932         }
2 26 Feb 07 jari 933         
2 26 Feb 07 jari 934         
2 26 Feb 07 jari 935         private int getColumnIndex(String key){
2 26 Feb 07 jari 936             int i;
2 26 Feb 07 jari 937             
2 26 Feb 07 jari 938             for(i = 0; i < headerNames.length; i++){
2 26 Feb 07 jari 939                 if(headerNames[i].equals(key))
2 26 Feb 07 jari 940                     break;
2 26 Feb 07 jari 941             }
2 26 Feb 07 jari 942             if(i < headerNames.length)
2 26 Feb 07 jari 943                 return i;
2 26 Feb 07 jari 944             else
2 26 Feb 07 jari 945                 return -1;
2 26 Feb 07 jari 946         }
2 26 Feb 07 jari 947         
2 26 Feb 07 jari 948         
2 26 Feb 07 jari 949         /** Accesses column class information.
2 26 Feb 07 jari 950          * @param columnIndex int column index
2 26 Feb 07 jari 951          * @return Returns the class associated with the column index.
2 26 Feb 07 jari 952          */
2 26 Feb 07 jari 953         public Class getColumnClass(int columnIndex) {
2 26 Feb 07 jari 954             return types [columnIndex];
2 26 Feb 07 jari 955         }
2 26 Feb 07 jari 956         
2 26 Feb 07 jari 957         public boolean isCellEditable(int rowIndex, int columnIndex) {
2 26 Feb 07 jari 958             return canEdit [columnIndex];
2 26 Feb 07 jari 959         }
2 26 Feb 07 jari 960         
2 26 Feb 07 jari 961         
2 26 Feb 07 jari 962         public java.lang.Object getValueAt(int row, int col) {
2 26 Feb 07 jari 963             return tableModel.getValueAt(rows[row].index, col);
2 26 Feb 07 jari 964         }
2 26 Feb 07 jari 965         
2 26 Feb 07 jari 966         public void setValueAt(Object obj, int row, int col){
2 26 Feb 07 jari 967             tableModel.setValueAt(obj, rows[row].index, col);
2 26 Feb 07 jari 968             this.fireTableChanged(new TableModelEvent(this, row, row, col));
2 26 Feb 07 jari 969         }
2 26 Feb 07 jari 970         
2 26 Feb 07 jari 971         public int getRowCount() {
2 26 Feb 07 jari 972             return tableModel.getRowCount();
2 26 Feb 07 jari 973         }
2 26 Feb 07 jari 974         
2 26 Feb 07 jari 975         public int getColumnCount() {
2 26 Feb 07 jari 976             return tableModel.getColumnCount();
2 26 Feb 07 jari 977         }
2 26 Feb 07 jari 978         
2 26 Feb 07 jari 979         public String getColumnName(int col){
2 26 Feb 07 jari 980             return tableModel.getColumnName(col);
2 26 Feb 07 jari 981         }
2 26 Feb 07 jari 982         
2 26 Feb 07 jari 983         public int convertToViewerRow(int row){
2 26 Feb 07 jari 984             if(row > -1 && row < rows.length)
2 26 Feb 07 jari 985                 return rows[row].index;
2 26 Feb 07 jari 986             else
2 26 Feb 07 jari 987                 return -1;
2 26 Feb 07 jari 988         }
2 26 Feb 07 jari 989         
2 26 Feb 07 jari 990         
2 26 Feb 07 jari 991         private class Row implements Comparable{
2 26 Feb 07 jari 992             public int index;
2 26 Feb 07 jari 993             
2 26 Feb 07 jari 994             public int compareTo(Object other){
2 26 Feb 07 jari 995                 Row otherRow = (Row)other;
2 26 Feb 07 jari 996                 Object myObject = tableModel.getValueAt(index, colToSort);
2 26 Feb 07 jari 997                 Object otherObject = tableModel.getValueAt(otherRow.index, colToSort);
2 26 Feb 07 jari 998                 if( myObject instanceof Comparable )
2 26 Feb 07 jari 999                     return ((Comparable)myObject).compareTo(otherObject);
2 26 Feb 07 jari 1000                 
2 26 Feb 07 jari 1001                 else if(myObject instanceof Boolean){
2 26 Feb 07 jari 1002                     boolean myValue = ((Boolean)myObject).booleanValue();
2 26 Feb 07 jari 1003                     boolean otherValue = ((Boolean)otherObject).booleanValue();
2 26 Feb 07 jari 1004                     if(otherValue && !myValue)
2 26 Feb 07 jari 1005                         return 1;
2 26 Feb 07 jari 1006                     else if(!otherValue && myValue)
2 26 Feb 07 jari 1007                         return -1;
2 26 Feb 07 jari 1008                     else
2 26 Feb 07 jari 1009                         return 0;
2 26 Feb 07 jari 1010                 }
2 26 Feb 07 jari 1011                 else return index - otherRow.index;
2 26 Feb 07 jari 1012             }
2 26 Feb 07 jari 1013         }
2 26 Feb 07 jari 1014     }
2 26 Feb 07 jari 1015     
2 26 Feb 07 jari 1016     
2 26 Feb 07 jari 1017     public class SortListener implements ActionListener{
2 26 Feb 07 jari 1018         
2 26 Feb 07 jari 1019         private SVMTableModel model;
2 26 Feb 07 jari 1020         
2 26 Feb 07 jari 1021         public SortListener(TableModel Model){
2 26 Feb 07 jari 1022             model = (SVMTableModel)Model;
2 26 Feb 07 jari 1023         }
2 26 Feb 07 jari 1024         
2 26 Feb 07 jari 1025         public void actionPerformed(ActionEvent ae){
2 26 Feb 07 jari 1026             Object source = ae.getSource();
2 26 Feb 07 jari 1027             
2 26 Feb 07 jari 1028             if(source instanceof JMenuItem){
2 26 Feb 07 jari 1029                 String key = ((JMenuItem)source).getText();
2 26 Feb 07 jari 1030                 
2 26 Feb 07 jari 1031                 if(key.equals("index"))
2 26 Feb 07 jari 1032                     model.sort(0);
2 26 Feb 07 jari 1033                 else if(key.equals("classification"))
2 26 Feb 07 jari 1034                     model.sort(1);
2 26 Feb 07 jari 1035                 else
2 26 Feb 07 jari 1036                     model.sortBy(key);
2 26 Feb 07 jari 1037             }
2 26 Feb 07 jari 1038         }
2 26 Feb 07 jari 1039     }
2 26 Feb 07 jari 1040     
2 26 Feb 07 jari 1041     
2 26 Feb 07 jari 1042     public class ClassificationCellRenderer extends DefaultTableCellRenderer implements javax.swing.table.TableCellRenderer{
2 26 Feb 07 jari 1043         
2 26 Feb 07 jari 1044         private JRadioButton button;
2 26 Feb 07 jari 1045         private Color selectionBackgroundColor;
2 26 Feb 07 jari 1046         private Color selectionForegroundColor;
2 26 Feb 07 jari 1047         
2 26 Feb 07 jari 1048         
2 26 Feb 07 jari 1049         public ClassificationCellRenderer(JTable table){
2 26 Feb 07 jari 1050             button = new JRadioButton();
2 26 Feb 07 jari 1051             button.setBackground(Color.white);
2 26 Feb 07 jari 1052             
2 26 Feb 07 jari 1053             selectionBackgroundColor = table.getSelectionBackground();
2 26 Feb 07 jari 1054             selectionForegroundColor = table.getForeground();
2 26 Feb 07 jari 1055             
2 26 Feb 07 jari 1056         }
2 26 Feb 07 jari 1057         
2 26 Feb 07 jari 1058         public java.awt.Component getTableCellRendererComponent(javax.swing.JTable jTable, java.lang.Object obj, boolean param, boolean param3, int row, int col) {
2 26 Feb 07 jari 1059             button.setSelected( ((Boolean)obj).booleanValue() );
2 26 Feb 07 jari 1060             
2 26 Feb 07 jari 1061             return  button;
2 26 Feb 07 jari 1062         }
2 26 Feb 07 jari 1063     }
2 26 Feb 07 jari 1064     
2 26 Feb 07 jari 1065     
2 26 Feb 07 jari 1066     
2 26 Feb 07 jari 1067     public class ClassSelectionListener implements TableModelListener{
2 26 Feb 07 jari 1068         
2 26 Feb 07 jari 1069         
2 26 Feb 07 jari 1070         public void tableChanged( TableModelEvent tme){
2 26 Feb 07 jari 1071             
2 26 Feb 07 jari 1072             tme.getSource();
2 26 Feb 07 jari 1073             
2 26 Feb 07 jari 1074             int selectedCol = tme.getColumn(); //
2 26 Feb 07 jari 1075             int selectedRow = tme.getFirstRow(); //
2 26 Feb 07 jari 1076             
2 26 Feb 07 jari 1077             if(selectedCol < 1 || selectedCol > 3)
2 26 Feb 07 jari 1078                 return;
2 26 Feb 07 jari 1079             
2 26 Feb 07 jari 1080             if( verifySelected(selectedRow, selectedCol)){
2 26 Feb 07 jari 1081                 changeNeighbors(selectedRow, selectedCol);
2 26 Feb 07 jari 1082             }
2 26 Feb 07 jari 1083         }
2 26 Feb 07 jari 1084         
2 26 Feb 07 jari 1085         
2 26 Feb 07 jari 1086         private void changeNeighbors(int first, int col){
2 26 Feb 07 jari 1087             
2 26 Feb 07 jari 1088             if(col == 1){
2 26 Feb 07 jari 1089                 table.setValueAt(new Boolean(false), first, 2);
2 26 Feb 07 jari 1090                 table.setValueAt(new Boolean(false), first, 3);
2 26 Feb 07 jari 1091             }
2 26 Feb 07 jari 1092             else if(col == 2){
2 26 Feb 07 jari 1093                 table.setValueAt(new Boolean(false), first, 1);
2 26 Feb 07 jari 1094                 table.setValueAt(new Boolean(false), first, 3);
2 26 Feb 07 jari 1095                 
2 26 Feb 07 jari 1096             }
2 26 Feb 07 jari 1097             else if(col == 3){
2 26 Feb 07 jari 1098                 table.setValueAt(new Boolean(false), first, 1);
2 26 Feb 07 jari 1099                 table.setValueAt(new Boolean(false), first, 2);
2 26 Feb 07 jari 1100             }
2 26 Feb 07 jari 1101         }
2 26 Feb 07 jari 1102         
2 26 Feb 07 jari 1103         
2 26 Feb 07 jari 1104         private boolean verifySelected(int row, int col){
2 26 Feb 07 jari 1105             
2 26 Feb 07 jari 1106             boolean selVal = ((Boolean)table.getValueAt(row,col)).booleanValue();
2 26 Feb 07 jari 1107             boolean value1, value2;
2 26 Feb 07 jari 1108             
2 26 Feb 07 jari 1109             if(selVal == true){
2 26 Feb 07 jari 1110                 return true;
2 26 Feb 07 jari 1111             }
2 26 Feb 07 jari 1112             else if(col == 1){
2 26 Feb 07 jari 1113                 value1 = ((Boolean)table.getValueAt(row,2)).booleanValue();
2 26 Feb 07 jari 1114                 value2 = ((Boolean)table.getValueAt(row,3)).booleanValue();
2 26 Feb 07 jari 1115                 if(!value1 && !value2)
2 26 Feb 07 jari 1116                     table.setValueAt(new Boolean(true), row, col);
2 26 Feb 07 jari 1117                 
2 26 Feb 07 jari 1118             }
2 26 Feb 07 jari 1119             else if(col == 2){
2 26 Feb 07 jari 1120                 value1 = ((Boolean)table.getValueAt(row,1)).booleanValue();
2 26 Feb 07 jari 1121                 value2 = ((Boolean)table.getValueAt(row,3)).booleanValue();
2 26 Feb 07 jari 1122                 if(!value1 && !value2)
2 26 Feb 07 jari 1123                     table.setValueAt(new Boolean(true), row, col);
2 26 Feb 07 jari 1124             }
2 26 Feb 07 jari 1125             else if(col == 3){
2 26 Feb 07 jari 1126                 value1 = ((Boolean)table.getValueAt(row,1)).booleanValue();
2 26 Feb 07 jari 1127                 value2 = ((Boolean)table.getValueAt(row,2)).booleanValue();
2 26 Feb 07 jari 1128                 if(!value1 && !value2)
2 26 Feb 07 jari 1129                     table.setValueAt(new Boolean(true), row, col);
2 26 Feb 07 jari 1130             }
2 26 Feb 07 jari 1131             return false;
2 26 Feb 07 jari 1132         }
2 26 Feb 07 jari 1133     }
2 26 Feb 07 jari 1134     
2 26 Feb 07 jari 1135     
2 26 Feb 07 jari 1136     
2 26 Feb 07 jari 1137     
2 26 Feb 07 jari 1138     public class SVMTableColumnModel implements TableColumnModel{
2 26 Feb 07 jari 1139         
2 26 Feb 07 jari 1140         TableColumnModel tcm;
2 26 Feb 07 jari 1141         
2 26 Feb 07 jari 1142         public SVMTableColumnModel(TableColumnModel TCM){
2 26 Feb 07 jari 1143             tcm = TCM;
2 26 Feb 07 jari 1144         }
2 26 Feb 07 jari 1145         
2 26 Feb 07 jari 1146         public int getColumnMargin() {
2 26 Feb 07 jari 1147             return tcm.getColumnMargin();
2 26 Feb 07 jari 1148         }
2 26 Feb 07 jari 1149         
2 26 Feb 07 jari 1150         public int[] getSelectedColumns() {
2 26 Feb 07 jari 1151             return tcm.getSelectedColumns();
2 26 Feb 07 jari 1152         }
2 26 Feb 07 jari 1153         
2 26 Feb 07 jari 1154         public int getColumnIndex(java.lang.Object obj) {
2 26 Feb 07 jari 1155             return tcm.getColumnIndex(obj);
2 26 Feb 07 jari 1156         }
2 26 Feb 07 jari 1157         
2 26 Feb 07 jari 1158         public void setColumnSelectionAllowed(boolean param) {
2 26 Feb 07 jari 1159             tcm.setColumnSelectionAllowed(param);
2 26 Feb 07 jari 1160         }
2 26 Feb 07 jari 1161         
2 26 Feb 07 jari 1162         public javax.swing.ListSelectionModel getSelectionModel() {
2 26 Feb 07 jari 1163             return tcm.getSelectionModel();
2 26 Feb 07 jari 1164         }
2 26 Feb 07 jari 1165         
2 26 Feb 07 jari 1166         public void moveColumn(int from, int to) {
2 26 Feb 07 jari 1167             if(from < 4 || to < 4)
2 26 Feb 07 jari 1168                 return;
2 26 Feb 07 jari 1169             else
2 26 Feb 07 jari 1170                 tcm.moveColumn(from, to);
2 26 Feb 07 jari 1171         }
2 26 Feb 07 jari 1172         
2 26 Feb 07 jari 1173         public void setColumnMargin(int param) {
2 26 Feb 07 jari 1174             tcm.setColumnMargin(param);
2 26 Feb 07 jari 1175         }
2 26 Feb 07 jari 1176         
2 26 Feb 07 jari 1177         public boolean getColumnSelectionAllowed() {
2 26 Feb 07 jari 1178             return tcm.getColumnSelectionAllowed();
2 26 Feb 07 jari 1179         }
2 26 Feb 07 jari 1180         
2 26 Feb 07 jari 1181         public java.util.Enumeration getColumns() {
2 26 Feb 07 jari 1182             return tcm.getColumns();
2 26 Feb 07 jari 1183         }
2 26 Feb 07 jari 1184         
2 26 Feb 07 jari 1185         public void removeColumnModelListener(javax.swing.event.TableColumnModelListener tableColumnModelListener) {
2 26 Feb 07 jari 1186             tcm.removeColumnModelListener(tableColumnModelListener);
2 26 Feb 07 jari 1187         }
2 26 Feb 07 jari 1188         
2 26 Feb 07 jari 1189         public void removeColumn(javax.swing.table.TableColumn tableColumn) {
2 26 Feb 07 jari 1190             return;
2 26 Feb 07 jari 1191         }
2 26 Feb 07 jari 1192         
2 26 Feb 07 jari 1193         public int getColumnIndexAtX(int param) {
2 26 Feb 07 jari 1194             return tcm.getColumnIndexAtX(param);
2 26 Feb 07 jari 1195         }
2 26 Feb 07 jari 1196         
2 26 Feb 07 jari 1197         public int getSelectedColumnCount() {
2 26 Feb 07 jari 1198             return tcm.getSelectedColumnCount();
2 26 Feb 07 jari 1199         }
2 26 Feb 07 jari 1200         
2 26 Feb 07 jari 1201         public int getTotalColumnWidth() {
2 26 Feb 07 jari 1202             return tcm.getTotalColumnWidth();
2 26 Feb 07 jari 1203         }
2 26 Feb 07 jari 1204         
2 26 Feb 07 jari 1205         public void addColumnModelListener(javax.swing.event.TableColumnModelListener tableColumnModelListener) {
2 26 Feb 07 jari 1206             tcm.addColumnModelListener(tableColumnModelListener);
2 26 Feb 07 jari 1207         }
2 26 Feb 07 jari 1208         
2 26 Feb 07 jari 1209         public void addColumn(javax.swing.table.TableColumn tableColumn) {
2 26 Feb 07 jari 1210             tcm.addColumn(tableColumn);
2 26 Feb 07 jari 1211         }
2 26 Feb 07 jari 1212         
2 26 Feb 07 jari 1213         public void setSelectionModel(javax.swing.ListSelectionModel listSelectionModel) {
2 26 Feb 07 jari 1214             tcm.setSelectionModel(listSelectionModel);
2 26 Feb 07 jari 1215         }
2 26 Feb 07 jari 1216         
2 26 Feb 07 jari 1217         public javax.swing.table.TableColumn getColumn(int param) {
2 26 Feb 07 jari 1218             return tcm.getColumn(param);
2 26 Feb 07 jari 1219         }
2 26 Feb 07 jari 1220         
2 26 Feb 07 jari 1221         public int getColumnCount() {
2 26 Feb 07 jari 1222             return tcm.getColumnCount();
2 26 Feb 07 jari 1223         }
2 26 Feb 07 jari 1224     }
2 26 Feb 07 jari 1225     
2 26 Feb 07 jari 1226     
2 26 Feb 07 jari 1227     
2 26 Feb 07 jari 1228     public class SVCFileFilter extends javax.swing.filechooser.FileFilter{
2 26 Feb 07 jari 1229         
2 26 Feb 07 jari 1230         public boolean accept(File f){
2 26 Feb 07 jari 1231             return (f.getName().toLowerCase().endsWith(".svc") ||
2 26 Feb 07 jari 1232             f.isDirectory() );
2 26 Feb 07 jari 1233         }
2 26 Feb 07 jari 1234         
2 26 Feb 07 jari 1235         public String getDescription(){
2 26 Feb 07 jari 1236             return "SVC File";
2 26 Feb 07 jari 1237         }
2 26 Feb 07 jari 1238     }
2 26 Feb 07 jari 1239     
2 26 Feb 07 jari 1240     public class SVCFileView extends javax.swing.filechooser.FileView{
2 26 Feb 07 jari 1241         private Icon SVMIcon = GUIFactory.getIcon("svcfileicon.gif");
2 26 Feb 07 jari 1242         
2 26 Feb 07 jari 1243         public String getName(File f) {
2 26 Feb 07 jari 1244             return null; // let the L&F FileView figure this out
2 26 Feb 07 jari 1245         }
2 26 Feb 07 jari 1246         
2 26 Feb 07 jari 1247         public String getDescription(File f) {
2 26 Feb 07 jari 1248             return null; // let the L&F FileView figure this out
2 26 Feb 07 jari 1249         }
2 26 Feb 07 jari 1250         
2 26 Feb 07 jari 1251         public Boolean isTraversable(File f) {
2 26 Feb 07 jari 1252             return null; // let the L&F FileView figure this out
2 26 Feb 07 jari 1253         }
2 26 Feb 07 jari 1254         
2 26 Feb 07 jari 1255         public String getTypeDescription(File f) {
2 26 Feb 07 jari 1256             String extension = getExtension(f);
2 26 Feb 07 jari 1257             String type = null;
2 26 Feb 07 jari 1258             
2 26 Feb 07 jari 1259             if (extension != null) {
2 26 Feb 07 jari 1260                 if (extension.equals("svc")) {
2 26 Feb 07 jari 1261                     type = "SVC File";
2 26 Feb 07 jari 1262                 }
2 26 Feb 07 jari 1263             }
2 26 Feb 07 jari 1264             return type;
2 26 Feb 07 jari 1265         }
2 26 Feb 07 jari 1266         
2 26 Feb 07 jari 1267         public Icon getIcon(File f) {
2 26 Feb 07 jari 1268             String extension = getExtension(f);
2 26 Feb 07 jari 1269             Icon icon = null;
2 26 Feb 07 jari 1270             if (extension != null) {
2 26 Feb 07 jari 1271                 if (extension.equals("svc")) {
2 26 Feb 07 jari 1272                     icon = SVMIcon;
2 26 Feb 07 jari 1273                 }
2 26 Feb 07 jari 1274             }
2 26 Feb 07 jari 1275             return icon;
2 26 Feb 07 jari 1276         }
2 26 Feb 07 jari 1277         
2 26 Feb 07 jari 1278         /**
2 26 Feb 07 jari 1279          * Get the extension of a file.
2 26 Feb 07 jari 1280          */
2 26 Feb 07 jari 1281         private String getExtension(File f) {
2 26 Feb 07 jari 1282             String ext = null;
2 26 Feb 07 jari 1283             String s = f.getName();
2 26 Feb 07 jari 1284             int i = s.lastIndexOf('.');
2 26 Feb 07 jari 1285             if (i > 0 &&  i < s.length() - 1) {
2 26 Feb 07 jari 1286                 ext = s.substring(i+1).toLowerCase();
2 26 Feb 07 jari 1287             }
2 26 Feb 07 jari 1288             return ext;
2 26 Feb 07 jari 1289         }
2 26 Feb 07 jari 1290     }
2 26 Feb 07 jari 1291 }