mev-4.0.01/source/org/tigr/microarray/mev/cluster/gui/impl/dam/DAMClassificationEditor.java

Code
Comments
Other
Rev Date Author Line
2 26 Feb 07 jari 1 /*
2 26 Feb 07 jari 2 Copyright @ 1999-2005, The Institute for Genomic Research (TIGR).
2 26 Feb 07 jari 3 All rights reserved.
2 26 Feb 07 jari 4 */
2 26 Feb 07 jari 5 /*
2 26 Feb 07 jari 6  * DAMClassificationEditor.java
2 26 Feb 07 jari 7  *
2 26 Feb 07 jari 8  */
2 26 Feb 07 jari 9
2 26 Feb 07 jari 10 package org.tigr.microarray.mev.cluster.gui.impl.dam;
2 26 Feb 07 jari 11
2 26 Feb 07 jari 12 import java.awt.Color;
2 26 Feb 07 jari 13 import java.awt.Dimension;
2 26 Feb 07 jari 14 import java.awt.GridBagConstraints;
2 26 Feb 07 jari 15 import java.awt.GridBagLayout;
2 26 Feb 07 jari 16 import java.awt.Toolkit;
2 26 Feb 07 jari 17 import java.awt.event.ActionEvent;
2 26 Feb 07 jari 18 import java.awt.event.ActionListener;
2 26 Feb 07 jari 19 import java.awt.event.WindowAdapter;
2 26 Feb 07 jari 20 import java.awt.event.WindowEvent;
2 26 Feb 07 jari 21 import java.io.BufferedReader;
2 26 Feb 07 jari 22 import java.io.File;
2 26 Feb 07 jari 23 import java.io.FileOutputStream;
2 26 Feb 07 jari 24 import java.io.FileReader;
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.Vector;
2 26 Feb 07 jari 28
2 26 Feb 07 jari 29 import javax.swing.ButtonGroup;
2 26 Feb 07 jari 30 import javax.swing.JButton;
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.JMenu;
2 26 Feb 07 jari 34 import javax.swing.JMenuBar;
2 26 Feb 07 jari 35 import javax.swing.JMenuItem;
2 26 Feb 07 jari 36 import javax.swing.JOptionPane;
2 26 Feb 07 jari 37 import javax.swing.JPanel;
2 26 Feb 07 jari 38 import javax.swing.JRadioButton;
2 26 Feb 07 jari 39 import javax.swing.JScrollPane;
2 26 Feb 07 jari 40 import javax.swing.JTable;
2 26 Feb 07 jari 41 import javax.swing.JTextArea;
2 26 Feb 07 jari 42 import javax.swing.border.EtchedBorder;
2 26 Feb 07 jari 43 import javax.swing.event.TableModelEvent;
2 26 Feb 07 jari 44 import javax.swing.event.TableModelListener;
2 26 Feb 07 jari 45 import javax.swing.table.AbstractTableModel;
2 26 Feb 07 jari 46 import javax.swing.table.TableColumn;
2 26 Feb 07 jari 47 import javax.swing.table.TableColumnModel;
2 26 Feb 07 jari 48
2 26 Feb 07 jari 49 import org.tigr.microarray.mev.cluster.gui.IData;
2 26 Feb 07 jari 50 import org.tigr.microarray.mev.cluster.gui.IFramework;
2 26 Feb 07 jari 51 import org.tigr.util.StringSplitter;
2 26 Feb 07 jari 52
2 26 Feb 07 jari 53 public class DAMClassificationEditor extends 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     boolean classifyGenes;
2 26 Feb 07 jari 58     private boolean stopHere = true;
2 26 Feb 07 jari 59     private boolean nextPressed = false;
2 26 Feb 07 jari 60     private boolean cancelPressed = false;
2 26 Feb 07 jari 61     private boolean incompatible = false;
2 26 Feb 07 jari 62     private boolean fileSaved = false;
2 26 Feb 07 jari 63     private boolean fileOpened = false;
2 26 Feb 07 jari 64     int numberOfClasses;
2 26 Feb 07 jari 65     String[] fieldNames;
2 26 Feb 07 jari 66     int numGenes, numExps;
2 26 Feb 07 jari 67     JTable damClassTable;
2 26 Feb 07 jari 68     DAMClassTableModel damTabModel;
2 26 Feb 07 jari 69     JMenuBar menuBar;
2 26 Feb 07 jari 70     JMenu fileMenu, editMenu, toolsMenu, assignSubMenu, sortAscMenu, sortDescMenu;
2 26 Feb 07 jari 71     JMenuItem openItem, closeItem, selectAllItem, searchItem, sortByClassItem, origOrderItem;
2 26 Feb 07 jari 72     JMenuItem[] classItem, labelsAscItem, labelsDescItem;
2 26 Feb 07 jari 73     JRadioButton saveButton, doNotSaveButton;
2 26 Feb 07 jari 74     JButton nextButton;
2 26 Feb 07 jari 75     JButton cancelButton;
2 26 Feb 07 jari 76     JFrame mainFrame;
2 26 Feb 07 jari 77     
2 26 Feb 07 jari 78     DAMSearchDialog searchDialog;    
2 26 Feb 07 jari 79     
2 26 Feb 07 jari 80     //SortListener sorter;
2 26 Feb 07 jari 81     
2 26 Feb 07 jari 82     Object[][] origData;
2 26 Feb 07 jari 83     
2 26 Feb 07 jari 84     /** Creates a new instance of DAMClassificationEditor */
2 26 Feb 07 jari 85     public DAMClassificationEditor(IFramework framework, boolean classifyGenes, int numberOfClasses) {
2 26 Feb 07 jari 86         this.setTitle("DAM Classification Editor");
2 26 Feb 07 jari 87         mainFrame = (JFrame)(framework.getFrame());
2 26 Feb 07 jari 88         //super((JFrame)(framework.getFrame()), "DAM Classification Editor", true);
2 26 Feb 07 jari 89         setBounds(0, 0, 550, 800);
2 26 Feb 07 jari 90         setBackground(Color.white);
2 26 Feb 07 jari 91
2 26 Feb 07 jari 92         addWindowListener(new WindowAdapter() {
2 26 Feb 07 jari 93             public void windowClosing(WindowEvent evt) {
2 26 Feb 07 jari 94                 closeDialog(evt);
2 26 Feb 07 jari 95             }
2 26 Feb 07 jari 96         });
2 26 Feb 07 jari 97        
2 26 Feb 07 jari 98         setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
2 26 Feb 07 jari 99         this.framework = framework;
2 26 Feb 07 jari 100         this.data = framework.getData();
2 26 Feb 07 jari 101 //        this.numGenes = data.getFeaturesSize();
2 26 Feb 07 jari 102 //        this.numExps = data.getFeaturesCount();
2 26 Feb 07 jari 103         this.numGenes = data.getExperiment().getNumberOfGenes();
2 26 Feb 07 jari 104         this.numExps = data.getExperiment().getNumberOfSamples();
2 26 Feb 07 jari 105         this.fieldNames = data.getFieldNames();
2 26 Feb 07 jari 106         this.classifyGenes = classifyGenes;
2 26 Feb 07 jari 107         this.numberOfClasses = numberOfClasses;
2 26 Feb 07 jari 108         
2 26 Feb 07 jari 109         menuBar = new JMenuBar();
2 26 Feb 07 jari 110         this.setJMenuBar(menuBar);
2 26 Feb 07 jari 111         
2 26 Feb 07 jari 112         GridBagLayout gridbag = new GridBagLayout();
2 26 Feb 07 jari 113         GridBagConstraints constraints = new GridBagConstraints();
2 26 Feb 07 jari 114         constraints.fill = GridBagConstraints.BOTH;
2 26 Feb 07 jari 115         
2 26 Feb 07 jari 116         JPanel pane = new JPanel();
2 26 Feb 07 jari 117         pane.setLayout(gridbag);
2 26 Feb 07 jari 118         
2 26 Feb 07 jari 119         JPanel tablePanel = new JPanel();
2 26 Feb 07 jari 120         GridBagLayout grid1 = new GridBagLayout();
2 26 Feb 07 jari 121         tablePanel.setLayout(grid1);
2 26 Feb 07 jari 122         
2 26 Feb 07 jari 123         damTabModel = new DAMClassTableModel();
2 26 Feb 07 jari 124         damClassTable = new JTable(damTabModel);
2 26 Feb 07 jari 125         damClassTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
2 26 Feb 07 jari 126         TableColumn column = null;
2 26 Feb 07 jari 127         for (int i = 0; i < damTabModel.getColumnCount(); i++) {
2 26 Feb 07 jari 128             column = damClassTable.getColumnModel().getColumn(i);
2 26 Feb 07 jari 129             column.setMinWidth(30);
2 26 Feb 07 jari 130         }
2 26 Feb 07 jari 131         damClassTable.setColumnModel(new DAMClassTableColumnModel(damClassTable.getColumnModel()));
2 26 Feb 07 jari 132         damClassTable.getModel().addTableModelListener(new ClassSelectionListener());
2 26 Feb 07 jari 133         
2 26 Feb 07 jari 134         searchDialog = new DAMSearchDialog(JOptionPane.getFrameForComponent(this), damClassTable, numberOfClasses, false); //persistent search dialog     
2 26 Feb 07 jari 135         
2 26 Feb 07 jari 136         JScrollPane scroll = new JScrollPane(damClassTable);
2 26 Feb 07 jari 137         buildConstraints(constraints, 0, 0, 1, 1, 100, 100);
2 26 Feb 07 jari 138         grid1.setConstraints(scroll, constraints);
2 26 Feb 07 jari 139         tablePanel.add(scroll);
2 26 Feb 07 jari 140         
2 26 Feb 07 jari 141         buildConstraints(constraints, 0, 0, 1, 1, 100, 90);
2 26 Feb 07 jari 142         gridbag.setConstraints(tablePanel, constraints);
2 26 Feb 07 jari 143         pane.add(tablePanel);
2 26 Feb 07 jari 144         
2 26 Feb 07 jari 145         JPanel bottomPanel = new JPanel();
2 26 Feb 07 jari 146         bottomPanel.setBorder(new EtchedBorder());
2 26 Feb 07 jari 147         bottomPanel.setBackground(Color.white);
2 26 Feb 07 jari 148         GridBagLayout grid2 = new GridBagLayout();
2 26 Feb 07 jari 149         bottomPanel.setLayout(grid2);
2 26 Feb 07 jari 150         
2 26 Feb 07 jari 151         saveButton = new JRadioButton("Save classification to file", true);
2 26 Feb 07 jari 152         saveButton.setBackground(Color.white);
2 26 Feb 07 jari 153         doNotSaveButton = new JRadioButton("Do not save classification to file", false);
2 26 Feb 07 jari 154         doNotSaveButton.setBackground(Color.white);
2 26 Feb 07 jari 155         ButtonGroup saveOrNot = new ButtonGroup();
2 26 Feb 07 jari 156         saveOrNot.add(saveButton);
2 26 Feb 07 jari 157         saveOrNot.add(doNotSaveButton);
2 26 Feb 07 jari 158         
2 26 Feb 07 jari 159         final JFileChooser fc = new JFileChooser();
2 26 Feb 07 jari 160         fc.setCurrentDirectory(new File("Data"));
2 26 Feb 07 jari 161         fc.setDialogTitle("Save classification");
2 26 Feb 07 jari 162         
2 26 Feb 07 jari 163
2 26 Feb 07 jari 164         cancelButton = new JButton("Cancel >");
2 26 Feb 07 jari 165         cancelButton.addActionListener(new ActionListener() {
2 26 Feb 07 jari 166             public void actionPerformed(ActionEvent evt) {
2 26 Feb 07 jari 167           dispose();
2 26 Feb 07 jari 168             }
2 26 Feb 07 jari 169         });
2 26 Feb 07 jari 170
2 26 Feb 07 jari 171
2 26 Feb 07 jari 172         nextButton = new JButton("Next >");
2 26 Feb 07 jari 173         nextButton.addActionListener(new ActionListener() {
2 26 Feb 07 jari 174             public void actionPerformed(ActionEvent evt) {
2 26 Feb 07 jari 175                 if (doNotSaveButton.isSelected()) {
2 26 Feb 07 jari 176                     DAMClassificationEditor.this.dispose();
2 26 Feb 07 jari 177                     stopHere = false;
2 26 Feb 07 jari 178                     nextPressed = true;                    
2 26 Feb 07 jari 179                 } else {
2 26 Feb 07 jari 180                     int returnVal = fc.showSaveDialog(DAMClassificationEditor.this);  
2 26 Feb 07 jari 181                     if (returnVal == JFileChooser.APPROVE_OPTION) {
2 26 Feb 07 jari 182                         File file = fc.getSelectedFile();  
2 26 Feb 07 jari 183
2 26 Feb 07 jari 184                         saveToFile(file);
2 26 Feb 07 jari 185
2 26 Feb 07 jari 186                         DAMSecondDialog kSecDialog = new DAMSecondDialog(mainFrame, true);
2 26 Feb 07 jari 187                         kSecDialog.setVisible(true);
2 26 Feb 07 jari 188                         if (!kSecDialog.proceed()) {
2 26 Feb 07 jari 189                             stopHere = true;
2 26 Feb 07 jari 190                         } else {
2 26 Feb 07 jari 191                             stopHere = false;
2 26 Feb 07 jari 192                         }
2 26 Feb 07 jari 193
2 26 Feb 07 jari 194                   incompatible = false;
2 26 Feb 07 jari 195                         fileSaved = true;
2 26 Feb 07 jari 196
2 26 Feb 07 jari 197                         if (stopHere == true) {
2 26 Feb 07 jari 198                             nextPressed = false;                        
2 26 Feb 07 jari 199                             DAMClassificationEditor.this.setVisible(true);
2 26 Feb 07 jari 200                         } else {
2 26 Feb 07 jari 201                             nextPressed = true;                        
2 26 Feb 07 jari 202                             DAMClassificationEditor.this.dispose();
2 26 Feb 07 jari 203                         }
2 26 Feb 07 jari 204
2 26 Feb 07 jari 205 /*
2 26 Feb 07 jari 206                         DAMSecondDialog kSecDialog = new DAMSecondDialog(mainFrame, true);
2 26 Feb 07 jari 207                         kSecDialog.setVisible(true);
2 26 Feb 07 jari 208                         if (!kSecDialog.proceed()) {
2 26 Feb 07 jari 209                             stopHere = true;
2 26 Feb 07 jari 210                         }
2 26 Feb 07 jari 211 */
2 26 Feb 07 jari 212
2 26 Feb 07 jari 213                     }                    
2 26 Feb 07 jari 214                 }
2 26 Feb 07 jari 215             }
2 26 Feb 07 jari 216         });
2 26 Feb 07 jari 217
2 26 Feb 07 jari 218         constraints.fill = GridBagConstraints.NONE;
2 26 Feb 07 jari 219
2 26 Feb 07 jari 220         buildConstraints(constraints, 0, 0, 1, 1, 100, 33);
2 26 Feb 07 jari 221         grid2.setConstraints(saveButton, constraints);
2 26 Feb 07 jari 222         bottomPanel.add(saveButton);
2 26 Feb 07 jari 223         
2 26 Feb 07 jari 224         buildConstraints(constraints, 0, 1, 1, 1, 0, 33);
2 26 Feb 07 jari 225         grid2.setConstraints(doNotSaveButton, constraints);
2 26 Feb 07 jari 226         bottomPanel.add(doNotSaveButton);
2 26 Feb 07 jari 227         
2 26 Feb 07 jari 228         buildConstraints(constraints, 0, 2, 1, 1, 0, 34);
2 26 Feb 07 jari 229         grid2.setConstraints(nextButton, constraints);
2 26 Feb 07 jari 230         bottomPanel.add(nextButton);        
2 26 Feb 07 jari 231         
2 26 Feb 07 jari 232 /*
2 26 Feb 07 jari 233         buildConstraints(constraints, 0, 3, 1, 1, 0, 34);
2 26 Feb 07 jari 234         grid2.setConstraints(cancelButton, constraints);
2 26 Feb 07 jari 235         bottomPanel.add(cancelButton);        
2 26 Feb 07 jari 236 */
2 26 Feb 07 jari 237         
2 26 Feb 07 jari 238         constraints.fill = GridBagConstraints.BOTH;
2 26 Feb 07 jari 239         buildConstraints(constraints, 0, 1, 1, 1, 0, 10);
2 26 Feb 07 jari 240         gridbag.setConstraints(bottomPanel, constraints);
2 26 Feb 07 jari 241         pane.add(bottomPanel);
2 26 Feb 07 jari 242         
2 26 Feb 07 jari 243         this.setContentPane(pane);
2 26 Feb 07 jari 244         
2 26 Feb 07 jari 245         if (classifyGenes) {
2 26 Feb 07 jari 246             labelsAscItem = new JMenuItem[fieldNames.length];
2 26 Feb 07 jari 247             labelsDescItem =  new JMenuItem[fieldNames.length];
2 26 Feb 07 jari 248             for (int i = 0; i < fieldNames.length; i++) {
2 26 Feb 07 jari 249                 labelsAscItem[i] = new JMenuItem(fieldNames[i]);
2 26 Feb 07 jari 250                 labelsDescItem[i] = new JMenuItem(fieldNames[i]);
2 26 Feb 07 jari 251             }
2 26 Feb 07 jari 252         } else {
2 26 Feb 07 jari 253             labelsAscItem = new JMenuItem[1];
2 26 Feb 07 jari 254             labelsAscItem[0] = new JMenuItem("Sample/Experiment Name");
2 26 Feb 07 jari 255             labelsDescItem = new JMenuItem[1];
2 26 Feb 07 jari 256             labelsDescItem[0] = new JMenuItem("Sample/Experiment Name");
2 26 Feb 07 jari 257         }
2 26 Feb 07 jari 258         
2 26 Feb 07 jari 259         for (int i = 0; i < labelsAscItem.length; i++) {
2 26 Feb 07 jari 260             labelsAscItem[i].addActionListener(new SortListener(true, false));
2 26 Feb 07 jari 261             labelsDescItem[i].addActionListener(new SortListener(false, false));
2 26 Feb 07 jari 262         }
2 26 Feb 07 jari 263         
2 26 Feb 07 jari 264         classItem = new JMenuItem[numberOfClasses + 1];
2 26 Feb 07 jari 265         
2 26 Feb 07 jari 266         for (int i = 0; i < numberOfClasses; i++) {
2 26 Feb 07 jari 267             classItem[i] = new JMenuItem("Class " + (i + 1));
2 26 Feb 07 jari 268         }
2 26 Feb 07 jari 269         
2 26 Feb 07 jari 270         classItem[numberOfClasses] = new JMenuItem("Neutral");
2 26 Feb 07 jari 271         
2 26 Feb 07 jari 272         for (int i = 0; i < classItem.length; i++) {
2 26 Feb 07 jari 273             classItem[i].addActionListener(new AssignListener());
2 26 Feb 07 jari 274         }
2 26 Feb 07 jari 275
2 26 Feb 07 jari 276         final JFileChooser fc1 = new JFileChooser();
2 26 Feb 07 jari 277         fc1.setCurrentDirectory(new File("Data"));
2 26 Feb 07 jari 278         fc1.setDialogTitle("Open Classification");
2 26 Feb 07 jari 279         
2 26 Feb 07 jari 280         fileMenu = new JMenu("File");
2 26 Feb 07 jari 281         openItem = new JMenuItem("Apply File");
2 26 Feb 07 jari 282         openItem.addActionListener(new ActionListener() {
2 26 Feb 07 jari 283             public void actionPerformed(ActionEvent evt) {
2 26 Feb 07 jari 284
2 26 Feb 07 jari 285                   int returnVal = fc1.showOpenDialog(DAMClassificationEditor.this);  
2 26 Feb 07 jari 286                   if (returnVal == JFileChooser.APPROVE_OPTION) {
2 26 Feb 07 jari 287                         File file = fc1.getSelectedFile();  
2 26 Feb 07 jari 288                         loadFromFile(file);
2 26 Feb 07 jari 289
2 26 Feb 07 jari 290                         fileOpened = true;
2 26 Feb 07 jari 291                         nextPressed = false;                        
2 26 Feb 07 jari 292
2 26 Feb 07 jari 293                    }
2 26 Feb 07 jari 294             }
2 26 Feb 07 jari 295         });
2 26 Feb 07 jari 296
2 26 Feb 07 jari 297
2 26 Feb 07 jari 298         fileMenu.add(openItem);
2 26 Feb 07 jari 299
2 26 Feb 07 jari 300         menuBar.add(fileMenu);
2 26 Feb 07 jari 301
2 26 Feb 07 jari 302         editMenu = new JMenu("Edit");
2 26 Feb 07 jari 303         selectAllItem = new JMenuItem("Select all rows");
2 26 Feb 07 jari 304         selectAllItem.addActionListener(new ActionListener() {
2 26 Feb 07 jari 305             public void actionPerformed(ActionEvent evt) {
2 26 Feb 07 jari 306                 damClassTable.selectAll();
2 26 Feb 07 jari 307             }
2 26 Feb 07 jari 308         });
2 26 Feb 07 jari 309         editMenu.add(selectAllItem);
2 26 Feb 07 jari 310         assignSubMenu = new JMenu("Assign selected rows to");
2 26 Feb 07 jari 311         for (int i = 0; i < classItem.length; i++) {
2 26 Feb 07 jari 312             assignSubMenu.add(classItem[i]);
2 26 Feb 07 jari 313         }
2 26 Feb 07 jari 314         editMenu.add(assignSubMenu);
2 26 Feb 07 jari 315         menuBar.add(editMenu);
2 26 Feb 07 jari 316         
2 26 Feb 07 jari 317         toolsMenu = new JMenu("Tools");
2 26 Feb 07 jari 318         searchItem = new JMenuItem("Search");
2 26 Feb 07 jari 319         searchItem.addActionListener(new ActionListener() {
2 26 Feb 07 jari 320             public void actionPerformed(ActionEvent evt) {
2 26 Feb 07 jari 321                 searchTable();
2 26 Feb 07 jari 322             }
2 26 Feb 07 jari 323         });
2 26 Feb 07 jari 324         toolsMenu.add(searchItem);
2 26 Feb 07 jari 325         sortAscMenu = new JMenu("Sort ascending by");
2 26 Feb 07 jari 326         for (int i = 0; i < labelsAscItem.length; i++) {
2 26 Feb 07 jari 327             sortAscMenu.add(labelsAscItem[i]);
2 26 Feb 07 jari 328         }
2 26 Feb 07 jari 329         toolsMenu.add(sortAscMenu);
2 26 Feb 07 jari 330         sortDescMenu = new JMenu("Sort descending by");
2 26 Feb 07 jari 331         for (int i = 0; i < labelsDescItem.length; i++) {
2 26 Feb 07 jari 332             sortDescMenu.add(labelsDescItem[i]);
2 26 Feb 07 jari 333         }
2 26 Feb 07 jari 334         toolsMenu.add(sortDescMenu);
2 26 Feb 07 jari 335         sortByClassItem = new JMenuItem("Sort by classification");
2 26 Feb 07 jari 336         sortByClassItem.addActionListener(new ActionListener() {
2 26 Feb 07 jari 337             public void actionPerformed(ActionEvent evt) {
2 26 Feb 07 jari 338                 sortByClassification();
2 26 Feb 07 jari 339             }
2 26 Feb 07 jari 340         });
2 26 Feb 07 jari 341         toolsMenu.add(sortByClassItem);
2 26 Feb 07 jari 342         origOrderItem = new JMenuItem("Restore original ordering");
2 26 Feb 07 jari 343         origOrderItem.addActionListener(new SortListener(true, true));
2 26 Feb 07 jari 344         toolsMenu.add(origOrderItem);
2 26 Feb 07 jari 345         
2 26 Feb 07 jari 346         menuBar.add(toolsMenu);
2 26 Feb 07 jari 347
2 26 Feb 07 jari 348     }
2 26 Feb 07 jari 349     
2 26 Feb 07 jari 350     /** Closes the dialog */
2 26 Feb 07 jari 351     private void closeDialog(WindowEvent evt) {
2 26 Feb 07 jari 352         setVisible(false);
2 26 Feb 07 jari 353         cancelPressed = true;                        
2 26 Feb 07 jari 354         dispose();
2 26 Feb 07 jari 355     }
2 26 Feb 07 jari 356
2 26 Feb 07 jari 357     
2 26 Feb 07 jari 358     void buildConstraints(GridBagConstraints gbc, int gx, int gy,
2 26 Feb 07 jari 359     int gw, int gh, int wx, int wy) {
2 26 Feb 07 jari 360         
2 26 Feb 07 jari 361         gbc.gridx = gx;
2 26 Feb 07 jari 362         gbc.gridy = gy;
2 26 Feb 07 jari 363         gbc.gridwidth = gw;
2 26 Feb 07 jari 364         gbc.gridheight = gh;
2 26 Feb 07 jari 365         gbc.weightx = wx;
2 26 Feb 07 jari 366         gbc.weighty = wy;
2 26 Feb 07 jari 367     }
2 26 Feb 07 jari 368     
2 26 Feb 07 jari 369     public void setVisible(boolean visible) {
2 26 Feb 07 jari 370         Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
2 26 Feb 07 jari 371         setLocation((screenSize.width - getSize().width)/2, (screenSize.height - getSize().height)/2);
2 26 Feb 07 jari 372         
2 26 Feb 07 jari 373         super.setVisible(visible);
2 26 Feb 07 jari 374     }
2 26 Feb 07 jari 375     
2 26 Feb 07 jari 376     class DAMClassifierTable extends JTable {
2 26 Feb 07 jari 377     }
2 26 Feb 07 jari 378     
2 26 Feb 07 jari 379     class DAMClassTableModel extends AbstractTableModel {
2 26 Feb 07 jari 380         String[] columnNames;
2 26 Feb 07 jari 381         Object tableData[][];
2 26 Feb 07 jari 382         int indexLastClass;
2 26 Feb 07 jari 383         
2 26 Feb 07 jari 384         public DAMClassTableModel() {
2 26 Feb 07 jari 385             indexLastClass = numberOfClasses;
2 26 Feb 07 jari 386             if (classifyGenes) {
2 26 Feb 07 jari 387                 columnNames = new String[fieldNames.length + numberOfClasses + 2];
2 26 Feb 07 jari 388                 columnNames[0] = "Index";
2 26 Feb 07 jari 389                 for (int i = 0; i < numberOfClasses; i++) {
2 26 Feb 07 jari 390                     columnNames[i + 1] = "Class " + (i+1);
2 26 Feb 07 jari 391                 }
2 26 Feb 07 jari 392                 columnNames[numberOfClasses + 1] = "Neutral";
2 26 Feb 07 jari 393                 
2 26 Feb 07 jari 394                 for (int i = 0; i < fieldNames.length; i++) {
2 26 Feb 07 jari 395                     columnNames[numberOfClasses + 2 + i] = fieldNames[i];
2 26 Feb 07 jari 396                 }
2 26 Feb 07 jari 397                 
2 26 Feb 07 jari 398                 tableData = new Object[numGenes][columnNames.length];
2 26 Feb 07 jari 399                 //EH changed for loop counters from i,j to row,col for clarity
2 26 Feb 07 jari 400                 for (int row = 0; row < tableData.length; row++) {
2 26 Feb 07 jari 401                     for (int col = 0; col < columnNames.length; col++) {
2 26 Feb 07 jari 402                         if (col == 0) {
2 26 Feb 07 jari 403                             tableData[row][col] = new Integer(row);
2 26 Feb 07 jari 404                         } else if ((col > 0) && (col < (numberOfClasses + 1))) {
2 26 Feb 07 jari 405                             tableData[row][col] = new Boolean(false);
2 26 Feb 07 jari 406                         } else if (col == numberOfClasses + 1) {
2 26 Feb 07 jari 407                             tableData[row][col] = new Boolean(true);
2 26 Feb 07 jari 408                         } else {
2 26 Feb 07 jari 409                             tableData[row][col] = data.getElementAttribute(row, col - (numberOfClasses + 2));
2 26 Feb 07 jari 410                         }
2 26 Feb 07 jari 411                     }
2 26 Feb 07 jari 412                 }
2 26 Feb 07 jari 413                 
2 26 Feb 07 jari 414             } else { // (!classifyGenes)
2 26 Feb 07 jari 415                 columnNames = new String[numberOfClasses + 3];
2 26 Feb 07 jari 416                 columnNames[0] = "Index";
2 26 Feb 07 jari 417                 for (int i = 0; i < numberOfClasses; i++) {
2 26 Feb 07 jari 418                     columnNames[i + 1] = "Class " + (i+1);
2 26 Feb 07 jari 419                 }
2 26 Feb 07 jari 420                 columnNames[numberOfClasses + 1] = "Neutral";
2 26 Feb 07 jari 421                 columnNames[numberOfClasses + 2] = "Sample/Experiment Name";
2 26 Feb 07 jari 422                 tableData = new Object[numExps][columnNames.length];
2 26 Feb 07 jari 423                 
2 26 Feb 07 jari 424                 //EH changed for loop counters from i,j to row,col for clarity
2 26 Feb 07 jari 425                 for (int row = 0; row < tableData.length; row++) {
2 26 Feb 07 jari 426                     for (int col = 0; col < columnNames.length; col++) {
2 26 Feb 07 jari 427                         if (col == 0) {
2 26 Feb 07 jari 428                             tableData[row][col] = new Integer(row);
2 26 Feb 07 jari 429                         } else if ((col > 0) && (col < (numberOfClasses + 1))) {
2 26 Feb 07 jari 430                             tableData[row][col] = new Boolean(false);
2 26 Feb 07 jari 431                         } else if (col == numberOfClasses + 1) {
2 26 Feb 07 jari 432                             tableData[row][col] = new Boolean(true);
2 26 Feb 07 jari 433                         } else if (col == numberOfClasses + 2) {
2 26 Feb 07 jari 434                             tableData[row][col] = data.getFullSampleName(row);
2 26 Feb 07 jari 435                         }
2 26 Feb 07 jari 436                     }
2 26 Feb 07 jari 437                 }
2 26 Feb 07 jari 438             }
2 26 Feb 07 jari 439             
2 26 Feb 07 jari 440             origData = new Object[tableData.length][tableData[0].length];
2 26 Feb 07 jari 441             
2 26 Feb 07 jari 442             for (int i = 0; i < tableData.length; i++) {
2 26 Feb 07 jari 443                 for (int j = 0; j < tableData[0].length; j++) {
2 26 Feb 07 jari 444                     origData[i][j] = tableData[i][j];
2 26 Feb 07 jari 445                 }
2 26 Feb 07 jari 446             }
2 26 Feb 07 jari 447             
2 26 Feb 07 jari 448         }
2 26 Feb 07 jari 449         
2 26 Feb 07 jari 450         public int getColumnCount() {
2 26 Feb 07 jari 451             return columnNames.length;
2 26 Feb 07 jari 452         }
2 26 Feb 07 jari 453         
2 26 Feb 07 jari 454         public int getRowCount() {
2 26 Feb 07 jari 455             return tableData.length;
2 26 Feb 07 jari 456         }
2 26 Feb 07 jari 457         
2 26 Feb 07 jari 458         public String getColumnName(int col) {
2 26 Feb 07 jari 459             return columnNames[col];
2 26 Feb 07 jari 460         }
2 26 Feb 07 jari 461         
2 26 Feb 07 jari 462         public int getColumnIndex(String name) {
2 26 Feb 07 jari 463             int i;
2 26 Feb 07 jari 464             for (i = 0; i < columnNames.length; i++) {
2 26 Feb 07 jari 465                 if (columnNames[i].equals(name)) {
2 26 Feb 07 jari 466                     break;
2 26 Feb 07 jari 467                 }
2 26 Feb 07 jari 468             }
2 26 Feb 07 jari 469             if (i < columnNames.length) {
2 26 Feb 07 jari 470                 return i;
2 26 Feb 07 jari 471             } else {
2 26 Feb 07 jari 472                 return -1;
2 26 Feb 07 jari 473             }
2 26 Feb 07 jari 474         }
2 26 Feb 07 jari 475         
2 26 Feb 07 jari 476         public Object getValueAt(int row, int col) {
2 26 Feb 07 jari 477             return tableData[row][col];
2 26 Feb 07 jari 478         }
2 26 Feb 07 jari 479         
2 26 Feb 07 jari 480         public void setValueAt(Object value, int row, int col) {
2 26 Feb 07 jari 481             tableData[row][col] = value;
2 26 Feb 07 jari 482             //fireTableCellUpdated(row, col);
2 26 Feb 07 jari 483             this.fireTableChanged(new TableModelEvent(this, row, row, col));
2 26 Feb 07 jari 484         }
2 26 Feb 07 jari 485         
2 26 Feb 07 jari 486         
2 26 Feb 07 jari 487         public Class getColumnClass(int c) {
2 26 Feb 07 jari 488             if (c == 0) {
2 26 Feb 07 jari 489                 return java.lang.Integer.class;
2 26 Feb 07 jari 490             } else if ((c > 0) && (c <= (numberOfClasses + 1))) {
2 26 Feb 07 jari 491                 return java.lang.Boolean.class;
2 26 Feb 07 jari 492             } else {
2 26 Feb 07 jari 493                 return getValueAt(0, c).getClass();
2 26 Feb 07 jari 494             }
2 26 Feb 07 jari 495         }
2 26 Feb 07 jari 496         
2 26 Feb 07 jari 497         
2 26 Feb 07 jari 498         public boolean isCellEditable(int row, int col) {
2 26 Feb 07 jari 499             //Note that the data/cell address is constant,
2 26 Feb 07 jari 500             //no matter where the cell appears onscreen.
2 26 Feb 07 jari 501             if ((col > 0) && (col <= (numberOfClasses + 1))) {
2 26 Feb 07 jari 502                 return true;
2 26 Feb 07 jari 503             } else {
2 26 Feb 07 jari 504                 return false;
2 26 Feb 07 jari 505             }
2 26 Feb 07 jari 506         }
2 26 Feb 07 jari 507     }
2 26 Feb 07 jari 508     
2 26 Feb 07 jari 509     
2 26 Feb 07 jari 510     class DAMClassTableColumnModel implements TableColumnModel {
2 26 Feb 07 jari 511         
2 26 Feb 07 jari 512         TableColumnModel tcm;
2 26 Feb 07 jari 513         
2 26 Feb 07 jari 514         public DAMClassTableColumnModel(TableColumnModel TCM) {
2 26 Feb 07 jari 515             this.tcm = TCM;
2 26 Feb 07 jari 516         }
2 26 Feb 07 jari 517         
2 26 Feb 07 jari 518         public void addColumn(javax.swing.table.TableColumn tableColumn) {
2 26 Feb 07 jari 519             tcm.addColumn(tableColumn);
2 26 Feb 07 jari 520         }
2 26 Feb 07 jari 521         
2 26 Feb 07 jari 522         public void addColumnModelListener(javax.swing.event.TableColumnModelListener tableColumnModelListener) {
2 26 Feb 07 jari 523             tcm.addColumnModelListener(tableColumnModelListener);
2 26 Feb 07 jari 524         }
2 26 Feb 07 jari 525         
2 26 Feb 07 jari 526         public javax.swing.table.TableColumn getColumn(int param) {
2 26 Feb 07 jari 527             return tcm.getColumn(param);
2 26 Feb 07 jari 528         }
2 26 Feb 07 jari 529         
2 26 Feb 07 jari 530         public int getColumnCount() {
2 26 Feb 07 jari 531             return tcm.getColumnCount();
2 26 Feb 07 jari 532         }
2 26 Feb 07 jari 533         
2 26 Feb 07 jari 534         public int getColumnIndex(Object obj) {
2 26 Feb 07 jari 535             return tcm.getColumnIndex(obj);
2 26 Feb 07 jari 536         }
2 26 Feb 07 jari 537         
2 26 Feb 07 jari 538         public int getColumnIndexAtX(int param) {
2 26 Feb 07 jari 539             return tcm.getColumnIndexAtX(param);
2 26 Feb 07 jari 540         }
2 26 Feb 07 jari 541         
2 26 Feb 07 jari 542         public int getColumnMargin() {
2 26 Feb 07 jari 543             return tcm.getColumnMargin();
2 26 Feb 07 jari 544         }
2 26 Feb 07 jari 545         
2 26 Feb 07 jari 546         public boolean getColumnSelectionAllowed() {
2 26 Feb 07 jari 547             return tcm.getColumnSelectionAllowed();
2 26 Feb 07 jari 548         }
2 26 Feb 07 jari 549         
2 26 Feb 07 jari 550         public java.util.Enumeration getColumns() {
2 26 Feb 07 jari 551             return tcm.getColumns();
2 26 Feb 07 jari 552         }
2 26 Feb 07 jari 553         
2 26 Feb 07 jari 554         public int getSelectedColumnCount() {
2 26 Feb 07 jari 555             return tcm.getSelectedColumnCount();
2 26 Feb 07 jari 556         }
2 26 Feb 07 jari 557         
2 26 Feb 07 jari 558         public int[] getSelectedColumns() {
2 26 Feb 07 jari 559             return tcm.getSelectedColumns();
2 26 Feb 07 jari 560         }
2 26 Feb 07 jari 561         
2 26 Feb 07 jari 562         public javax.swing.ListSelectionModel getSelectionModel() {
2 26 Feb 07 jari 563             return tcm.getSelectionModel();
2 26 Feb 07 jari 564         }
2 26 Feb 07 jari 565         
2 26 Feb 07 jari 566         public int getTotalColumnWidth() {
2 26 Feb 07 jari 567             return tcm.getTotalColumnWidth();
2 26 Feb 07 jari 568         }
2 26 Feb 07 jari 569         
2 26 Feb 07 jari 570         public void moveColumn(int from, int to) {
2 26 Feb 07 jari 571             if (from <= (numberOfClasses + 1) || to <= (numberOfClasses + 1)) {
2 26 Feb 07 jari 572                 return;
2 26 Feb 07 jari 573             } else {
2 26 Feb 07 jari 574                 tcm.moveColumn(from, to);
2 26 Feb 07 jari 575             }
2 26 Feb 07 jari 576         }
2 26 Feb 07 jari 577         
2 26 Feb 07 jari 578         public void removeColumn(javax.swing.table.TableColumn tableColumn) {
2 26 Feb 07 jari 579             tcm.removeColumn(tableColumn);
2 26 Feb 07 jari 580         }
2 26 Feb 07 jari 581         
2 26 Feb 07 jari 582         public void removeColumnModelListener(javax.swing.event.TableColumnModelListener tableColumnModelListener) {
2 26 Feb 07 jari 583             tcm.removeColumnModelListener(tableColumnModelListener);
2 26 Feb 07 jari 584         }
2 26 Feb 07 jari 585         
2 26 Feb 07 jari 586         public void setColumnMargin(int param) {
2 26 Feb 07 jari 587             tcm.setColumnMargin(param);
2 26 Feb 07 jari 588         }
2 26 Feb 07 jari 589         
2 26 Feb 07 jari 590         public void setColumnSelectionAllowed(boolean param) {
2 26 Feb 07 jari 591             tcm.setColumnSelectionAllowed(param);
2 26 Feb 07 jari 592         }
2 26 Feb 07 jari 593         
2 26 Feb 07 jari 594         public void setSelectionModel(javax.swing.ListSelectionModel listSelectionModel) {
2 26 Feb 07 jari 595             tcm.setSelectionModel(listSelectionModel);
2 26 Feb 07 jari 596         }
2 26 Feb 07 jari 597         
2 26 Feb 07 jari 598     }    
2 26 Feb 07 jari 599     
2 26 Feb 07 jari 600     
2 26 Feb 07 jari 601     class ClassSelectionListener implements TableModelListener {
2 26 Feb 07 jari 602         
2 26 Feb 07 jari 603         public void tableChanged(TableModelEvent tme) {
2 26 Feb 07 jari 604             //TableModel tabMod = (TableModel)tme.getSource();
2 26 Feb 07 jari 605             int selectedCol = tme.getColumn(); //
2 26 Feb 07 jari 606             int selectedRow = tme.getFirstRow(); //
2 26 Feb 07 jari 607             
2 26 Feb 07 jari 608             if ((selectedCol < 1) || (selectedCol > (numberOfClasses + 1) )) {
2 26 Feb 07 jari 609                 return;
2 26 Feb 07 jari 610             }
2 26 Feb 07 jari 611             
2 26 Feb 07 jari 612             if( verifySelected(selectedRow, selectedCol)){
2 26 Feb 07 jari 613                 changeNeighbors(selectedRow, selectedCol);
2 26 Feb 07 jari 614             }
2 26 Feb 07 jari 615             
2 26 Feb 07 jari 616             int origDataRow = ((Integer)(damTabModel.getValueAt(selectedRow, 0))).intValue();
2 26 Feb 07 jari 617             
2 26 Feb 07 jari 618             origData[origDataRow][selectedCol] = new Boolean(true);
2 26 Feb 07 jari 619             
2 26 Feb 07 jari 620             for (int i = 1; i <= (numberOfClasses + 1); i++) {
2 26 Feb 07 jari 621                 if (i != selectedCol) {
2 26 Feb 07 jari 622                     origData[origDataRow][i] = new Boolean(false);
2 26 Feb 07 jari 623                 }
2 26 Feb 07 jari 624             }
2 26 Feb 07 jari 625         }
2 26 Feb 07 jari 626         
2 26 Feb 07 jari 627         private void changeNeighbors(int first, int col){
2 26 Feb 07 jari 628             for (int i = 1; i <= (numberOfClasses + 1); i++) {
2 26 Feb 07 jari 629                 if (i != col) {
2 26 Feb 07 jari 630                     damClassTable.setValueAt(new Boolean(false), first, i);
2 26 Feb 07 jari 631                     //origData[first][i] = new Boolean(false); 
2 26 Feb 07 jari 632                 }
2 26 Feb 07 jari 633             }
2 26 Feb 07 jari 634         }
2 26 Feb 07 jari 635         
2 26 Feb 07 jari 636         private boolean verifySelected(int row, int col){
2 26 Feb 07 jari 637             
2 26 Feb 07 jari 638             boolean selVal = ((Boolean)damClassTable.getValueAt(row,col)).booleanValue();
2 26 Feb 07 jari 639             //boolean value1, value2;
2 26 Feb 07 jari 640             
2 26 Feb 07 jari 641             if(selVal == true){
2 26 Feb 07 jari 642                 return true;
2 26 Feb 07 jari 643             } else {
2 26 Feb 07 jari 644                 Vector truthValues = new Vector();
2 26 Feb 07 jari 645                 for (int i = 1; i <=(numberOfClasses + 1); i++) {
2 26 Feb 07 jari 646                     if (i != col) {
2 26 Feb 07 jari 647                         boolean value = ((Boolean)(damClassTable.getValueAt(row,i))).booleanValue();
2 26 Feb 07 jari 648                         truthValues.add(new Boolean(value));
2 26 Feb 07 jari 649                     }
2 26 Feb 07 jari 650                 }
2 26 Feb 07 jari 651                 boolean val1 = true;
2 26 Feb 07 jari 652                 for (int i = 0; i < truthValues.size(); i++) {
2 26 Feb 07 jari 653                     boolean val2 = ((Boolean)(truthValues.get(i))).booleanValue();
2 26 Feb 07 jari 654                     if (val2 == true) {
2 26 Feb 07 jari 655                         val1 = false;
2 26 Feb 07 jari 656                         break;
2 26 Feb 07 jari 657                     }
2 26 Feb 07 jari 658                 }
2 26 Feb 07 jari 659                 
2 26 Feb 07 jari 660                 if (val1 == true) {
2 26 Feb 07 jari 661                     damClassTable.setValueAt(new Boolean(true), row, col);
2 26 Feb 07 jari 662                     //origData[row][col] = new Boolean(true);
2 26 Feb 07 jari 663                 }
2 26 Feb 07 jari 664                 
2 26 Feb 07 jari 665             }
2 26 Feb 07 jari 666             return false;
2 26 Feb 07 jari 667             
2 26 Feb 07 jari 668             /*else {
2 26 Feb 07 jari 669                 damClassTable.setValueAt(new Boolean(true), selectedRow, selectedCol);
2 26 Feb 07 jari 670              
2 26 Feb 07 jari 671                 for (int i = 1; i <= (numberOfClasses + 1); i++) {
2 26 Feb 07 jari 672                     if (i != selectedCol) {
2 26 Feb 07 jari 673                         damClassTable.setValueAt(new Boolean(false), selectedRow, i);
2 26 Feb 07 jari 674                     }
2 26 Feb 07 jari 675                 }
2 26 Feb 07 jari 676              
2 26 Feb 07 jari 677             }
2 26 Feb 07 jari 678              */
2 26 Feb 07 jari 679             
2 26 Feb 07 jari 680         }
2 26 Feb 07 jari 681         
2 26 Feb 07 jari 682     }
2 26 Feb 07 jari 683     
2 26 Feb 07 jari 684     public void sortByColumn(int column, boolean ascending, boolean originalOrder) {
2 26 Feb 07 jari 685         if (originalOrder) {
2 26 Feb 07 jari 686             //double[] indices = new int[damTabModel.getRowCount()];
2 26 Feb 07 jari 687             //for (int i = 0; i < damTabModel.getRowCount(); i++) {
2 26 Feb 07 jari 688                 //indices[i] = ((Integer)(damTabModel.getValueAt(i, 0))).doubleValue();
2 26 Feb 07 jari 689                 /*
2 26 Feb 07 jari 690                 QSort sortIndices = new QSort(indices);
2 26 Feb 07 jari 691                 int[] sorted = sortIndices.getOrigIndx();
2 26 Feb 07 jari 692                  */
2 26 Feb 07 jari 693             Object[][] sortedData = new Object[damTabModel.getRowCount()][damTabModel.getColumnCount()];
2 26 Feb 07 jari 694             
2 26 Feb 07 jari 695             for (int i = 0; i < sortedData.length; i++) {
2 26 Feb 07 jari 696                 for (int j = 0; j < sortedData[0].length; j++) {
2 26 Feb 07 jari 697                     sortedData[i][j] = origData[i][j];
2 26 Feb 07 jari 698                 }
2 26 Feb 07 jari 699             }
2 26 Feb 07 jari 700             
2 26 Feb 07 jari 701             for (int i = 0; i < sortedData.length; i++) {
2 26 Feb 07 jari 702                 for (int j = 0; j < sortedData[0].length; j++) {
2 26 Feb 07 jari 703                     damTabModel.setValueAt(sortedData[i][j], i, j);
2 26 Feb 07 jari 704                 }
2 26 Feb 07 jari 705                 validateTable(sortedData, i);
2 26 Feb 07 jari 706             }
2 26 Feb 07 jari 707             return;
2 26 Feb 07 jari 708             //}
2 26 Feb 07 jari 709             /*
2 26 Feb 07 jari 710             for (int i = 0; i < damTabModel.getRowCount(); i++) {
2 26 Feb 07 jari 711                 for (int j = 0; j < damTabModel.getColumnCount(); j++) {
2 26 Feb 07 jari 712                     damTabModel.setValueAt(origData[i][j], i, j);
2 26 Feb 07 jari 713                 }
2 26 Feb 07 jari 714                 validateTable(origData, i);
2 26 Feb 07 jari 715             }
2 26 Feb 07 jari 716             return;
2 26 Feb 07 jari 717              */
2 26 Feb 07 jari 718         }
2 26 Feb 07 jari 719         if ((column < 0)|| (column > damTabModel.getColumnCount())) {
2 26 Feb 07 jari 720             return;
2 26 Feb 07 jari 721         }
2 26 Feb 07 jari 722         Object[][] sortedData = new Object[damTabModel.getRowCount()][damTabModel.getColumnCount()];
2 26 Feb 07 jari 723         //float[] origArray = new float[damTabModel.getRowCount()];
2 26 Feb 07 jari 724         SortableField[] sortFields = new SortableField[damTabModel.getRowCount()];
2 26 Feb 07 jari 725         
2 26 Feb 07 jari 726         for (int i = 0; i < sortFields.length; i++) {
2 26 Feb 07 jari 727             int origDataRow = ((Integer)(damTabModel.getValueAt(i, 0))).intValue();
2 26 Feb 07 jari 728             sortFields[i] = new SortableField(origDataRow, column);
2 26 Feb 07 jari 729         }
2 26 Feb 07 jari 730         Arrays.sort(sortFields);
2 26 Feb 07 jari 731         int[] sortedIndices = new int[sortFields.length];
2 26 Feb 07 jari 732         for (int i = 0; i < sortedIndices.length; i++) {
2 26 Feb 07 jari 733             sortedIndices[i] = sortFields[i].getIndex();
2 26 Feb 07 jari 734         }
2 26 Feb 07 jari 735         if (!ascending) {
2 26 Feb 07 jari 736             sortedIndices = reverse(sortedIndices);
2 26 Feb 07 jari 737         }
2 26 Feb 07 jari 738         
2 26 Feb 07 jari 739         for (int i = 0; i < sortedData.length; i++) {
2 26 Feb 07 jari 740             for (int j = 0; j < sortedData[i].length; j++) {
2 26 Feb 07 jari 741                 //sortedData[i][j] = tModel.getValueAt(sortedMeansAIndices[i], j);
2 26 Feb 07 jari 742                 sortedData[i][j] = origData[sortedIndices[i]][j];
2 26 Feb 07 jari 743             }
2 26 Feb 07 jari 744         }
2 26 Feb 07 jari 745         
2 26 Feb 07 jari 746         for (int i = 0; i < sortedData.length; i++) {
2 26 Feb 07 jari 747             for (int j = 0; j < sortedData[i].length; j++) {
2 26 Feb 07 jari 748                 damTabModel.setValueAt(sortedData[i][j], i, j);
2 26 Feb 07 jari 749             }
2 26 Feb 07 jari 750             validateTable(sortedData, i);
2 26 Feb 07 jari 751         }
2 26 Feb 07 jari 752         
2 26 Feb 07 jari 753         damClassTable.removeRowSelectionInterval(0, damClassTable.getRowCount() - 1);
2 26 Feb 07 jari 754     }
2 26 Feb 07 jari 755     
2 26 Feb 07 jari 756     private int[] reverse(int[] arr) {
2 26 Feb 07 jari 757         int[] revArr = new int[arr.length];
2 26 Feb 07 jari 758         int  revCount = 0;
2 26 Feb 07 jari 759         int count = arr.length - 1;
2 26 Feb 07 jari 760         for (int i=0; i < arr.length; i++) {
2 26 Feb 07 jari 761             revArr[revCount] = arr[count];
2 26 Feb 07 jari 762             revCount++;
2 26 Feb 07 jari 763             count--;
2 26 Feb 07 jari 764         }
2 26 Feb 07 jari 765         return revArr;
2 26 Feb 07 jari 766     }
2 26 Feb 07 jari 767     
2 26 Feb 07 jari 768     private void sortByClassification() {
2 26 Feb 07 jari 769         Vector[] classVectors = new Vector[numberOfClasses + 1];
2 26 Feb 07 jari 770         for (int i = 0; i < classVectors.length; i++) {
2 26 Feb 07 jari 771             classVectors[i] = new Vector();
2 26 Feb 07 jari 772         }
2 26 Feb 07 jari 773         
2 26 Feb 07 jari 774         for (int i = 0; i < damTabModel.getRowCount(); i++) {
2 26 Feb 07 jari 775             for (int j = 1; (j <= numberOfClasses + 1); j++) {
2 26 Feb 07 jari 776                 boolean b = ((Boolean)(damTabModel.getValueAt(i, j))).booleanValue();
2 26 Feb 07 jari 777                 if (b) {
2 26 Feb 07 jari 778                     classVectors[j - 1].add(new Integer(i));
2 26 Feb 07 jari 779                     break;
2 26 Feb 07 jari 780                 }
2 26 Feb 07 jari 781             }
2 26 Feb 07 jari 782         }
2 26 Feb 07 jari 783         
2 26 Feb 07 jari 784         int[] sortedIndices = new int[damTabModel.getRowCount()];
2 26 Feb 07 jari 785         int counter = 0;
2 26 Feb 07 jari 786         
2 26 Feb 07 jari 787         for (int i = 0; i < classVectors.length; i++) {
2 26 Feb 07 jari 788             for (int j = 0; j < classVectors[i].size(); j++) {
2 26 Feb 07 jari 789                 sortedIndices[counter] = ((Integer)(classVectors[i].get(j))).intValue();
2 26 Feb 07 jari 790                 counter++;
2 26 Feb 07 jari 791             }
2 26 Feb 07 jari 792         }
2 26 Feb 07 jari 793         
2 26 Feb 07 jari 794         Object sortedData[][] = new Object[damTabModel.getRowCount()][damTabModel.getColumnCount()];
2 26 Feb 07 jari 795         
2 26 Feb 07 jari 796         for (int i = 0; i < sortedData.length; i++) {
2 26 Feb 07 jari 797             for (int j = 0; j < sortedData[0].length; j++) {
2 26 Feb 07 jari 798                 sortedData[i][j] = damTabModel.getValueAt(sortedIndices[i], j);
2 26 Feb 07 jari 799             }
2 26 Feb 07 jari 800         }
2 26 Feb 07 jari 801         
2 26 Feb 07 jari 802         for (int i = 0; i < damTabModel.getRowCount(); i++) {
2 26 Feb 07 jari 803             for (int j = 0; j < damTabModel.getColumnCount(); j++) {
2 26 Feb 07 jari 804                 damTabModel.setValueAt(sortedData[i][j], i, j);
2 26 Feb 07 jari 805             }
2 26 Feb 07 jari 806             validateTable(sortedData, i);
2 26 Feb 07 jari 807         }
2 26 Feb 07 jari 808         
2 26 Feb 07 jari 809         damClassTable.removeRowSelectionInterval(0, damClassTable.getRowCount() - 1);        
2 26 Feb 07 jari 810     }
2 26 Feb 07 jari 811     
2 26 Feb 07 jari 812     private void validateTable(Object[][] tabData, int row) {
2 26 Feb 07 jari 813         for (int i = 1; i <= (numberOfClasses + 1); i++) {
2 26 Feb 07 jari 814             boolean check = ((Boolean)(tabData[row][i])).booleanValue();
2 26 Feb 07 jari 815             if (check) {
2 26 Feb 07 jari 816                 damTabModel.setValueAt(new Boolean(true), row, i);
2 26 Feb 07 jari 817                 break;
2 26 Feb 07 jari 818             }
2 26 Feb 07 jari 819         }
2 26 Feb 07 jari 820     }
2 26 Feb 07 jari 821     
2 26 Feb 07 jari 822     private void searchTable(){
2 26 Feb 07 jari 823         
2 26 Feb 07 jari 824         searchDialog.setVisible(true);
2 26 Feb 07 jari 825         searchDialog.toFront();
2 26 Feb 07 jari 826         //searchDialog.requestFocus();
2 26 Feb 07 jari 827         searchDialog.setLocation(this.getLocation().x + 100, this.getLocation().y +100);
2 26 Feb 07 jari 828         
2 26 Feb 07 jari 829     }    
2 26 Feb 07 jari 830     
2 26 Feb 07 jari 831     private void saveToFile(File file) {
2 26 Feb 07 jari 832         try {
2 26 Feb 07 jari 833             PrintWriter out = new PrintWriter(new FileOutputStream(file));
2 26 Feb 07 jari 834             for (int i = 0; i < damTabModel.getRowCount(); i++) {
2 26 Feb 07 jari 835                 out.print(((Integer)(damTabModel.getValueAt(i, 0))).intValue());
2 26 Feb 07 jari 836                 out.print("\t");
2 26 Feb 07 jari 837                 for (int j = 1; j <= numberOfClasses; j++) {
2 26 Feb 07 jari 838                     if (((Boolean)(damTabModel.getValueAt(i, j))).booleanValue()) {
2 26 Feb 07 jari 839                         out.print(j);
2 26 Feb 07 jari 840                         break;
2 26 Feb 07 jari 841                     }
2 26 Feb 07 jari 842                 }
2 26 Feb 07 jari 843                 if (((Boolean)(damTabModel.getValueAt(i, numberOfClasses + 1))).booleanValue()) {
2 26 Feb 07 jari 844                     out.print(-1);
2 26 Feb 07 jari 845                 }
2 26 Feb 07 jari 846                 //out.print("\t");
2 26 Feb 07 jari 847                 for (int j = numberOfClasses + 2; j < damTabModel.getColumnCount(); j++) {
2 26 Feb 07 jari 848                     out.print("\t");
2 26 Feb 07 jari 849                     out.print(damTabModel.getValueAt(i, j));
2 26 Feb 07 jari 850                 }
2 26 Feb 07 jari 851                 out.print("\r");
2 26 Feb 07 jari 852                 out.print("\n");
2 26 Feb 07 jari 853             }
2 26 Feb 07 jari 854             out.flush();
2 26 Feb 07 jari 855             out.close();            
2 26 Feb 07 jari 856             
2 26 Feb 07 jari 857         } catch (Exception e) {
2 26 Feb 07 jari 858             //e.printStackTrace();
2 26 Feb 07 jari 859         }
2 26 Feb 07 jari 860     }
2 26 Feb 07 jari 861
2 26 Feb 07 jari 862
2 26 Feb 07 jari 863     public void loadFromFile (File file) {
2 26 Feb 07 jari 864         Vector indicesVector = new Vector();
2 26 Feb 07 jari 865         Vector classVector = new Vector();
2 26 Feb 07 jari 866
2 26 Feb 07 jari 867         incompatible = false;
2 26 Feb 07 jari 868
2 26 Feb 07 jari 869         try {
2 26 Feb 07 jari 870            BufferedReader buff = new BufferedReader(new FileReader(file)); 
2 26 Feb 07 jari 871
2 26 Feb 07 jari 872            String line = new String();
2 26 Feb 07 jari 873            StringSplitter st;           
2 26 Feb 07 jari 874            
2 26 Feb 07 jari 875            while ((line = buff.readLine()) != null) {
2 26 Feb 07 jari 876                st = new StringSplitter('\t');
2 26 Feb 07 jari 877                st.init(line);
2 26 Feb 07 jari 878                String currIndex = st.nextToken();
2 26 Feb 07 jari 879                indicesVector.add(new Integer(currIndex));
2 26 Feb 07 jari 880                String currClass = st.nextToken();
2 26 Feb 07 jari 881                classVector.add(new Integer(currClass));
2 26 Feb 07 jari 882            }
2 26 Feb 07 jari 883            
2 26 Feb 07 jari 884            if (indicesVector.size() != damTabModel.getRowCount()) {
2 26 Feb 07 jari 885
2 26 Feb 07 jari 886          JOptionPane.showMessageDialog(framework.getFrame(), "Number of rows mismatch!", "Error", JOptionPane.WARNING_MESSAGE);
2 26 Feb 07 jari 887          incompatible = true;
2 26 Feb 07 jari 888                DAMClassificationEditor.this.setVisible(true);
2 26 Feb 07 jari 889
2 26 Feb 07 jari 890                return;
2 26 Feb 07 jari 891            }
2 26 Feb 07 jari 892
2 26 Feb 07 jari 893            for (int i = 0; i < indicesVector.size(); i++) {
2 26 Feb 07 jari 894                int currCl = ((Integer)(classVector.get(i))).intValue();
2 26 Feb 07 jari 895
2 26 Feb 07 jari 896          if (currCl > numberOfClasses){
2 26 Feb 07 jari 897
2 26 Feb 07 jari 898        JOptionPane.showMessageDialog(framework.getFrame(), "Class index larger than number of classes!", "Error", JOptionPane.WARNING_MESSAGE);
2 26 Feb 07 jari 899        incompatible = true;
2 26 Feb 07 jari 900                    DAMClassificationEditor.this.setVisible(true);
2 26 Feb 07 jari 901
2 26 Feb 07 jari 902        return;
2 26 Feb 07 jari 903          } 
2 26 Feb 07 jari 904            }
2 26 Feb 07 jari 905
2 26 Feb 07 jari 906            for (int i = 0; i < indicesVector.size(); i++) {
2 26 Feb 07 jari 907                int currInd = ((Integer)(indicesVector.get(i))).intValue();
2 26 Feb 07 jari 908                int currCl = ((Integer)(classVector.get(i))).intValue();
2 26 Feb 07 jari 909
2 26 Feb 07 jari 910                if (currCl == (-1)) {
2 26 Feb 07 jari 911                    damTabModel.setValueAt(new Boolean(true), currInd, (numberOfClasses + 1));
2 26 Feb 07 jari 912                    damClassTable.setValueAt(new Boolean(true), currInd, (numberOfClasses+1));
2 26 Feb 07 jari 913                } else {
2 26 Feb 07 jari 914                    damTabModel.setValueAt(new Boolean(true), currInd, currCl);
2 26 Feb 07 jari 915                    damClassTable.setValueAt(new Boolean(true), currInd, currCl);
2 26 Feb 07 jari 916                }
2 26 Feb 07 jari 917            }  
2 26 Feb 07 jari 918            
2 26 Feb 07 jari 919            // DAMClassificationEditor.this.setVisible(true);
2 26 Feb 07 jari 920
2 26 Feb 07 jari 921            //showWarningMessage();
2 26 Feb 07 jari 922
2 26 Feb 07 jari 923         } catch (Exception e) {
2 26 Feb 07 jari 924             JOptionPane.showMessageDialog(framework.getFrame(), "Incompatible file!", "Error", JOptionPane.WARNING_MESSAGE);
2 26 Feb 07 jari 925             incompatible = true;
2 26 Feb 07 jari 926             //DAMClassificationEditor.this.dispose();
2 26 Feb 07 jari 927             //e.printStackTrace();
2 26 Feb 07 jari 928         }
2 26 Feb 07 jari 929
2 26 Feb 07 jari 930     }
2 26 Feb 07 jari 931
2 26 Feb 07 jari 932   
2 26 Feb 07 jari 933     public Vector[] getClassification() {
2 26 Feb 07 jari 934         Vector indicesVector1 = new Vector();
2 26 Feb 07 jari 935         Vector indicesVector2 = new Vector();
2 26 Feb 07 jari 936         Vector classVector = new Vector();
2 26 Feb 07 jari 937         Vector[] classVectorArray = new Vector[3];
2 26 Feb 07 jari 938         
2 26 Feb 07 jari 939         for (int i = 0; i < damTabModel.getRowCount(); i++) {
2 26 Feb 07 jari 940             if (((Boolean)(damTabModel.getValueAt(i, numberOfClasses + 1))).booleanValue()) {
2 26 Feb 07 jari 941                 indicesVector2.add((Integer)(damTabModel.getValueAt(i, 0)));
2 26 Feb 07 jari 942             } else {
2 26 Feb 07 jari 943                 indicesVector1.add((Integer)(damTabModel.getValueAt(i, 0)));
2 26 Feb 07 jari 944                 classVector.add(new Integer(getClass(i)));
2 26 Feb 07 jari 945             }
2 26 Feb 07 jari 946         }
2 26 Feb 07 jari 947         
2 26 Feb 07 jari 948         classVectorArray[0] = indicesVector1;
2 26 Feb 07 jari 949         classVectorArray[1] = classVector;
2 26 Feb 07 jari 950         classVectorArray[2] = indicesVector2;
2 26 Feb 07 jari 951         return classVectorArray;
2 26 Feb 07 jari 952     }
2 26 Feb 07 jari 953
2 26 Feb 07 jari 954     
2 26 Feb 07 jari 955     public boolean isNextPressed() {
2 26 Feb 07 jari 956         return nextPressed;
2 26 Feb 07 jari 957     }
2 26 Feb 07 jari 958
2 26 Feb 07 jari 959     public boolean isCancelPressed() {
2 26 Feb 07 jari 960         return cancelPressed;
2 26 Feb 07 jari 961     }
2 26 Feb 07 jari 962     
2 26 Feb 07 jari 963     
2 26 Feb 07 jari 964     private int getClass(int row) {
2 26 Feb 07 jari 965         int i;
2 26 Feb 07 jari 966         for (i = 1; i <= numberOfClasses + 1; i++) {
2 26 Feb 07 jari 967             if (((Boolean)(damTabModel.getValueAt(row, i))).booleanValue()) {
2 26 Feb 07 jari 968                 break;
2 26 Feb 07 jari 969             }
2 26 Feb 07 jari 970         }
2 26 Feb 07 jari 971         
2 26 Feb 07 jari 972         return i;
2 26 Feb 07 jari 973     }
2 26 Feb 07 jari 974     
2 26 Feb 07 jari 975     public boolean proceed() {
2 26 Feb 07 jari 976         return !(stopHere);
2 26 Feb 07 jari 977     }
2 26 Feb 07 jari 978     
2 26 Feb 07 jari 979     public boolean fileIsIncompatible() {
2 26 Feb 07 jari 980         return incompatible;
2 26 Feb 07 jari 981     }
2 26 Feb 07 jari 982     
2 26 Feb 07 jari 983     public void showWarningMessage() {
2 26 Feb 07 jari 984         JTextArea area = new JTextArea();
2 26 Feb 07 jari 985         area.append("Proceed with this file?");
2 26 Feb 07 jari 986         area.append("\n");
2 26 Feb 07 jari 987         area.setEditable(false);
2 26 Feb 07 jari 988         area.setBackground(Color.gray.brighter());
2 26 Feb 07 jari 989         JOptionPane.showMessageDialog(DAMClassificationEditor.this, area, "Warning", JOptionPane.WARNING_MESSAGE);
2 26 Feb 07 jari 990     }
2 26 Feb 07 jari 991     
2 26 Feb 07 jari 992     private class SortableField implements Comparable {
2 26 Feb 07 jari 993         private String field;
2 26 Feb 07 jari 994         private int index;
2 26 Feb 07 jari 995         
2 26 Feb 07 jari 996         SortableField(int index, int column) {
2 26 Feb 07 jari 997             this.index = index;
2 26 Feb 07 jari 998             this.field = (String)(origData[index][column]);
2 26 Feb 07 jari 999             //System.out.println("SortableField[" + index + "][" + column + "]: index = " + index + ", field = " + field);
2 26 Feb 07 jari 1000         }
2 26 Feb 07 jari 1001         
2 26 Feb 07 jari 1002         public int compareTo(Object other) {
2 26 Feb 07 jari 1003             SortableField otherField = (SortableField)other;
2 26 Feb 07 jari 1004             return this.field.compareTo(otherField.getField());
2 26 Feb 07 jari 1005         }
2 26 Feb 07 jari 1006         
2 26 Feb 07 jari 1007         public int getIndex() {
2 26 Feb 07 jari 1008             return this.index;
2 26 Feb 07 jari 1009         }
2 26 Feb 07 jari 1010         public String getField() {
2 26 Feb 07 jari 1011             return this.field;
2 26 Feb 07 jari 1012         }
2 26 Feb 07 jari 1013     }
2 26 Feb 07 jari 1014     
2 26 Feb 07 jari 1015     public class AssignListener implements ActionListener {
2 26 Feb 07 jari 1016         
2 26 Feb 07 jari 1017         public void actionPerformed(ActionEvent evt) {
2 26 Feb 07 jari 1018             Object source = evt.getSource();
2 26 Feb 07 jari 1019             
2 26 Feb 07 jari 1020             if (source instanceof JMenuItem) {
2 26 Feb 07 jari 1021                 String key = ((JMenuItem)source).getText();
2 26 Feb 07 jari 1022                 int classCol = damTabModel.getColumnIndex(key);
2 26 Feb 07 jari 1023                 int[] selectedRows = damClassTable.getSelectedRows();
2 26 Feb 07 jari 1024                 int[] selectedIndices = new int[selectedRows.length];
2 26 Feb 07 jari 1025                 
2 26 Feb 07 jari 1026                 for (int i = 0; i < selectedRows.length; i++) {
2 26 Feb 07 jari 1027                     damTabModel.setValueAt(new Boolean(true), selectedRows[i], classCol);
2 26 Feb 07 jari 1028                     //int currIndex = ((Integer)(damTabModel.getValueAt(selectedRows[i], 0))).intValue();
2 26 Feb 07 jari 1029                     //origData[currIndex][classCol] = new Boolean(true);
2 26 Feb 07 jari 1030                 }
2 26 Feb 07 jari 1031             }
2 26 Feb 07 jari 1032         }
2 26 Feb 07 jari 1033         
2 26 Feb 07 jari 1034     }
2 26 Feb 07 jari 1035     
2 26 Feb 07 jari 1036     public class SortListener implements ActionListener {
2 26 Feb 07 jari 1037         boolean asc, origOrd;
2 26 Feb 07 jari 1038         public SortListener(boolean asc, boolean origOrd) {
2 26 Feb 07 jari 1039             this.asc = asc;
2 26 Feb 07 jari 1040             this.origOrd = origOrd;
2 26 Feb 07 jari 1041         }
2 26 Feb 07 jari 1042         
2 26 Feb 07 jari 1043         public void actionPerformed(ActionEvent evt) {
2 26 Feb 07 jari 1044             Object source = evt.getSource();
2 26 Feb 07 jari 1045             
2 26 Feb 07 jari 1046             if (source instanceof JMenuItem) {
2 26 Feb 07 jari 1047                 String key = ((JMenuItem)source).getText();
2 26 Feb 07 jari 1048                 int colToSort = damTabModel.getColumnIndex(key);
2 26 Feb 07 jari 1049                 sortByColumn(colToSort, asc, origOrd);
2 26 Feb 07 jari 1050             }
2 26 Feb 07 jari 1051         }
2 26 Feb 07 jari 1052     }
2 26 Feb 07 jari 1053     
2 26 Feb 07 jari 1054 }