mev-4.0.01/source/org/tigr/microarray/mev/cluster/gui/impl/ptm/PTMExpStatsTableViewer.java

Code
Comments
Other
Rev Date Author Line
2 26 Feb 07 jari 1
2 26 Feb 07 jari 2 /*
2 26 Feb 07 jari 3 Copyright @ 1999-2004, The Institute for Genomic Research (TIGR).
2 26 Feb 07 jari 4 All rights reserved.
2 26 Feb 07 jari 5 */
2 26 Feb 07 jari 6 /*
2 26 Feb 07 jari 7  * PTMExpStatsTableViewer.java
2 26 Feb 07 jari 8  *
2 26 Feb 07 jari 9  * Created on December 2, 2003, 4:07 PM
2 26 Feb 07 jari 10  */
2 26 Feb 07 jari 11
2 26 Feb 07 jari 12 package org.tigr.microarray.mev.cluster.gui.impl.ptm;
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.GridBagConstraints;
2 26 Feb 07 jari 17 import java.awt.GridBagLayout;
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.awt.event.InputEvent;
2 26 Feb 07 jari 21 import java.awt.event.MouseAdapter;
2 26 Feb 07 jari 22 import java.awt.event.MouseEvent;
2 26 Feb 07 jari 23 import java.io.File;
2 26 Feb 07 jari 24 import java.io.FileOutputStream;
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
2 26 Feb 07 jari 28 import javax.swing.JComponent;
2 26 Feb 07 jari 29 import javax.swing.JFileChooser;
2 26 Feb 07 jari 30 import javax.swing.JMenuItem;
2 26 Feb 07 jari 31 import javax.swing.JPanel;
2 26 Feb 07 jari 32 import javax.swing.JPopupMenu;
2 26 Feb 07 jari 33 import javax.swing.JTable;
2 26 Feb 07 jari 34 import javax.swing.table.AbstractTableModel;
2 26 Feb 07 jari 35 import javax.swing.table.JTableHeader;
2 26 Feb 07 jari 36 import javax.swing.table.TableColumn;
2 26 Feb 07 jari 37 import javax.swing.table.TableColumnModel;
2 26 Feb 07 jari 38
2 26 Feb 07 jari 39 import org.tigr.microarray.mev.cluster.gui.Experiment;
2 26 Feb 07 jari 40 import org.tigr.microarray.mev.cluster.gui.IData;
2 26 Feb 07 jari 41 import org.tigr.microarray.mev.cluster.gui.impl.GUIFactory;
2 26 Feb 07 jari 42 import org.tigr.microarray.mev.cluster.gui.impl.ViewerAdapter;
2 26 Feb 07 jari 43 import org.tigr.util.QSort;
2 26 Feb 07 jari 44
2 26 Feb 07 jari 45
2 26 Feb 07 jari 46 /**
2 26 Feb 07 jari 47  *
2 26 Feb 07 jari 48  * @author  nbhagaba
2 26 Feb 07 jari 49  */
2 26 Feb 07 jari 50 public class PTMExpStatsTableViewer extends ViewerAdapter {
2 26 Feb 07 jari 51     
2 26 Feb 07 jari 52     private JComponent header;
2 26 Feb 07 jari 53     private JComponent content;
2 26 Feb 07 jari 54     private Experiment experiment;
2 26 Feb 07 jari 55     private int[][] expClusters;
2 26 Feb 07 jari 56     private boolean sig;
2 26 Feb 07 jari 57     private int[] cols;
2 26 Feb 07 jari 58  
2 26 Feb 07 jari 59     private JTable pAndRValuesTable;
2 26 Feb 07 jari 60     private PAndRValuesTableModel pAndRModel;   
2 26 Feb 07 jari 61     private String[] auxTitles;
2 26 Feb 07 jari 62     private Object[][] auxData;
2 26 Feb 07 jari 63     
2 26 Feb 07 jari 64     private IData data;
2 26 Feb 07 jari 65     private JPopupMenu popup;    
2 26 Feb 07 jari 66     private Object[][] origData;
2 26 Feb 07 jari 67     private boolean sortedAscending[];   
2 26 Feb 07 jari 68     
2 26 Feb 07 jari 69     /** Creates a new instance of PTMExpStatsTableViewer */
2 26 Feb 07 jari 70     public PTMExpStatsTableViewer(Experiment experiment, int[][] expClusters, IData data,  String[] auxTitles, Object[][] auxData, boolean sig) {
2 26 Feb 07 jari 71         this.experiment = experiment;
2 26 Feb 07 jari 72         this.expClusters = expClusters;
2 26 Feb 07 jari 73         this.data = data;  
2 26 Feb 07 jari 74         this.auxTitles = auxTitles;
2 26 Feb 07 jari 75         this.auxData = auxData;
2 26 Feb 07 jari 76         this.sig = sig;
2 26 Feb 07 jari 77         if (sig) {
2 26 Feb 07 jari 78             cols = expClusters[0];
2 26 Feb 07 jari 79         } else {
2 26 Feb 07 jari 80             cols = expClusters[1];
2 26 Feb 07 jari 81         }  
2 26 Feb 07 jari 82         pAndRModel = new PAndRValuesTableModel();
2 26 Feb 07 jari 83         pAndRValuesTable = new JTable(pAndRModel);
2 26 Feb 07 jari 84         origData = new Object[pAndRModel.getRowCount()][pAndRModel.getColumnCount()];
2 26 Feb 07 jari 85         for (int i = 0; i < origData.length; i++) {
2 26 Feb 07 jari 86             for (int j = 0; j < origData[i].length; j++) {
2 26 Feb 07 jari 87                 origData[i][j] = pAndRModel.getValueAt(i, j);
2 26 Feb 07 jari 88             }
2 26 Feb 07 jari 89         }
2 26 Feb 07 jari 90         this.sortedAscending = new boolean[pAndRModel.getColumnCount()];
2 26 Feb 07 jari 91         for (int i = 0; i < sortedAscending.length; i++) {
2 26 Feb 07 jari 92             sortedAscending[i] = false;
2 26 Feb 07 jari 93         }   
2 26 Feb 07 jari 94         
2 26 Feb 07 jari 95         TableColumn column = null;
2 26 Feb 07 jari 96         for (int i = 0; i < pAndRModel.getColumnCount(); i++) {
2 26 Feb 07 jari 97             column = pAndRValuesTable.getColumnModel().getColumn(i);
2 26 Feb 07 jari 98             column.setMinWidth(30);
2 26 Feb 07 jari 99         }
2 26 Feb 07 jari 100         addMouseListenerToHeaderInTable(pAndRValuesTable);
2 26 Feb 07 jari 101         header  = pAndRValuesTable.getTableHeader();
2 26 Feb 07 jari 102         //header.setBackground(Color.white);
2 26 Feb 07 jari 103         //content = createContent();
2 26 Feb 07 jari 104         setMaxWidth(getContentComponent(), getHeaderComponent());          
2 26 Feb 07 jari 105     }
2 26 Feb 07 jari 106     public PTMExpStatsTableViewer(JComponent content, JComponent header){
2 26 Feb 07 jari 107       this.content = content;
2 26 Feb 07 jari 108       this.header = header;
2 26 Feb 07 jari 109         setMaxWidth(getContentComponent(), getHeaderComponent());         
2 26 Feb 07 jari 110     }      
2 26 Feb 07 jari 111     
2 26 Feb 07 jari 112     /**
2 26 Feb 07 jari 113      * Returns component to be inserted into the framework scroll pane.
2 26 Feb 07 jari 114      */
2 26 Feb 07 jari 115     public JComponent getContentComponent() {
2 26 Feb 07 jari 116         JPanel panel = new JPanel();
2 26 Feb 07 jari 117         panel.setBackground(Color.white);
2 26 Feb 07 jari 118         GridBagConstraints constraints = new GridBagConstraints();
2 26 Feb 07 jari 119         GridBagLayout gridbag = new GridBagLayout();
2 26 Feb 07 jari 120         panel.setLayout(gridbag);
2 26 Feb 07 jari 121         constraints.fill = GridBagConstraints.HORIZONTAL;
2 26 Feb 07 jari 122         constraints.anchor = GridBagConstraints.NORTH;
2 26 Feb 07 jari 123         buildConstraints(constraints, 0, 0, 1, 1, 100, 100);
2 26 Feb 07 jari 124         gridbag.setConstraints(pAndRValuesTable, constraints);
2 26 Feb 07 jari 125         panel.add(pAndRValuesTable);
2 26 Feb 07 jari 126         
2 26 Feb 07 jari 127         final JFileChooser fc = new JFileChooser();
2 26 Feb 07 jari 128         fc.setCurrentDirectory(new File("Data"));
2 26 Feb 07 jari 129         fc.setDialogTitle("Save p and R values");
2 26 Feb 07 jari 130         
2 26 Feb 07 jari 131         popup = new JPopupMenu();
2 26 Feb 07 jari 132         JMenuItem menuItem = new JMenuItem("Save p and R values", GUIFactory.getIcon("save16.gif"));
2 26 Feb 07 jari 133         menuItem.addActionListener(new ActionListener() {
2 26 Feb 07 jari 134             public void actionPerformed(ActionEvent evt) {
2 26 Feb 07 jari 135                 int returnVal = fc.showSaveDialog(PTMExpStatsTableViewer.this.getHeaderComponent());
2 26 Feb 07 jari 136                 if (returnVal == JFileChooser.APPROVE_OPTION) {
2 26 Feb 07 jari 137                     File file = fc.getSelectedFile();
2 26 Feb 07 jari 138                     try {
2 26 Feb 07 jari 139                         PrintWriter out = new PrintWriter(new FileOutputStream(file));
2 26 Feb 07 jari 140                         out.print("Sample\t");
2 26 Feb 07 jari 141                         for (int i = 0; i < auxTitles.length; i++) {
2 26 Feb 07 jari 142                             out.print(auxTitles[i]);
2 26 Feb 07 jari 143                             if (i < auxTitles.length - 1) {
2 26 Feb 07 jari 144                                 
2 26 Feb 07 jari 145                                 out.print("\t");
2 26 Feb 07 jari 146                             }
2 26 Feb 07 jari 147                         }
2 26 Feb 07 jari 148                         out.println();                        
2 26 Feb 07 jari 149
2 26 Feb 07 jari 150                         for (int i = 0; i < cols.length; i++) {                           
2 26 Feb 07 jari 151                             out.print(data.getFullSampleName(experiment.getSampleIndex(cols[i])));                        
2 26 Feb 07 jari 152
2 26 Feb 07 jari 153                             for (int j = 0; j < auxData[cols[i]].length; j++) {
2 26 Feb 07 jari 154                                 out.print("\t" + ((Float)(auxData[cols[i]][j])).floatValue());
2 26 Feb 07 jari 155                             }
2 26 Feb 07 jari 156                             out.print("\n");                            
2 26 Feb 07 jari 157                         }
2 26 Feb 07 jari 158                         out.println();
2 26 Feb 07 jari 159                         out.flush();
2 26 Feb 07 jari 160                         out.close();
2 26 Feb 07 jari 161                     } catch (Exception e) {
2 26 Feb 07 jari 162                         e.printStackTrace();
2 26 Feb 07 jari 163                     }
2 26 Feb 07 jari 164                     //this is where a real application would save the file.
2 26 Feb 07 jari 165                     //log.append("Saving: " + file.getName() + "." + newline);
2 26 Feb 07 jari 166                 } else {
2 26 Feb 07 jari 167                     //log.append("Save command cancelled by user." + newline);
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         popup.add(menuItem);
2 26 Feb 07 jari 173         
2 26 Feb 07 jari 174         pAndRValuesTable.addMouseListener(new MouseAdapter() {
2 26 Feb 07 jari 175             public void mousePressed(MouseEvent e) {
2 26 Feb 07 jari 176                 maybeShowPopup(e);
2 26 Feb 07 jari 177             }
2 26 Feb 07 jari 178             
2 26 Feb 07 jari 179             public void mouseReleased(MouseEvent e) {
2 26 Feb 07 jari 180                 maybeShowPopup(e);
2 26 Feb 07 jari 181             }
2 26 Feb 07 jari 182             
2 26 Feb 07 jari 183             private void maybeShowPopup(MouseEvent e) {
2 26 Feb 07 jari 184                 if (e.isPopupTrigger()) {
2 26 Feb 07 jari 185                     popup.show(e.getComponent(),
2 26 Feb 07 jari 186                     e.getX(), e.getY());
2 26 Feb 07 jari 187                 }
2 26 Feb 07 jari 188             }
2 26 Feb 07 jari 189             
2 26 Feb 07 jari 190         });
2 26 Feb 07 jari 191         
2 26 Feb 07 jari 192         return panel;
2 26 Feb 07 jari 193         //return tValuesTable;
2 26 Feb 07 jari 194         //return content;
2 26 Feb 07 jari 195     }  
2 26 Feb 07 jari 196     
2 26 Feb 07 jari 197     /**
2 26 Feb 07 jari 198      * Returns the viewer header.
2 26 Feb 07 jari 199      */
2 26 Feb 07 jari 200     public JComponent getHeaderComponent() {
2 26 Feb 07 jari 201         JPanel panel = new JPanel();
2 26 Feb 07 jari 202         panel.setBackground(Color.white);
2 26 Feb 07 jari 203         GridBagConstraints constraints = new GridBagConstraints();
2 26 Feb 07 jari 204         GridBagLayout gridbag = new GridBagLayout();
2 26 Feb 07 jari 205         panel.setLayout(gridbag);
2 26 Feb 07 jari 206         constraints.fill = GridBagConstraints.HORIZONTAL;
2 26 Feb 07 jari 207         buildConstraints(constraints, 0, 0, 1, 1, 100, 100);
2 26 Feb 07 jari 208         gridbag.setConstraints(header, constraints);
2 26 Feb 07 jari 209         panel.add(header);
2 26 Feb 07 jari 210         return panel;
2 26 Feb 07 jari 211         //return header;
2 26 Feb 07 jari 212     }  
2 26 Feb 07 jari 213     
2 26 Feb 07 jari 214     void buildConstraints(GridBagConstraints gbc, int gx, int gy,
2 26 Feb 07 jari 215     int gw, int gh, int wx, int wy) {
2 26 Feb 07 jari 216         
2 26 Feb 07 jari 217         gbc.gridx = gx;
2 26 Feb 07 jari 218         gbc.gridy = gy;
2 26 Feb 07 jari 219         gbc.gridwidth = gw;
2 26 Feb 07 jari 220         gbc.gridheight = gh;
2 26 Feb 07 jari 221         gbc.weightx = wx;
2 26 Feb 07 jari 222         gbc.weighty = wy;
2 26 Feb 07 jari 223     }   
2 26 Feb 07 jari 224     
2 26 Feb 07 jari 225     class PAndRValuesTableModel extends AbstractTableModel {
2 26 Feb 07 jari 226         String[] columnNames;
2 26 Feb 07 jari 227         Object[][] tableData;
2 26 Feb 07 jari 228         
2 26 Feb 07 jari 229         public PAndRValuesTableModel() {
2 26 Feb 07 jari 230             //else if (design == TtestInitDialog.ONE_CLASS) {
2 26 Feb 07 jari 231             columnNames = new String[1 + auxTitles.length];
2 26 Feb 07 jari 232             //int counter;
2 26 Feb 07 jari 233             columnNames[0] = "Samples";
2 26 Feb 07 jari 234             for (int i = 1; i < columnNames.length; i++) {
2 26 Feb 07 jari 235                 columnNames[i] = auxTitles[i - 1];
2 26 Feb 07 jari 236             }
2 26 Feb 07 jari 237
2 26 Feb 07 jari 238             tableData = new Object[cols.length][columnNames.length];
2 26 Feb 07 jari 239             
2 26 Feb 07 jari 240             //int j;
2 26 Feb 07 jari 241             for(int i = 0; i < tableData.length; i++) {
2 26 Feb 07 jari 242                 //for (j = 0; j < fieldNames.length; j++) {
2 26 Feb 07 jari 243                     
2 26 Feb 07 jari 244                     tableData[i][0] = data.getFullSampleName(experiment.getSampleIndex(cols[i]));
2 26 Feb 07 jari 245                 //}
2 26 Feb 07 jari 246                 
2 26 Feb 07 jari 247                 for (int k = 1; k < tableData[i].length; k++) {
2 26 Feb 07 jari 248                     float f = ((Float)(auxData[cols[i]][k - 1])).floatValue();
2 26 Feb 07 jari 249                     if (Float.isNaN(f)) {
2 26 Feb 07 jari 250                         tableData[i][k] = "N/A";
2 26 Feb 07 jari 251                     } else {
2 26 Feb 07 jari 252                         tableData[i][k] = new Float(f);
2 26 Feb 07 jari 253                     }
2 26 Feb 07 jari 254                 }                
2 26 Feb 07 jari 255             }            
2 26 Feb 07 jari 256             
2 26 Feb 07 jari 257         }
2 26 Feb 07 jari 258         
2 26 Feb 07 jari 259         
2 26 Feb 07 jari 260         public int getColumnCount() {
2 26 Feb 07 jari 261             return columnNames.length;
2 26 Feb 07 jari 262         }
2 26 Feb 07 jari 263         
2 26 Feb 07 jari 264         public int getRowCount() {
2 26 Feb 07 jari 265             return tableData.length;
2 26 Feb 07 jari 266         }
2 26 Feb 07 jari 267         
2 26 Feb 07 jari 268         public String getColumnName(int col) {
2 26 Feb 07 jari 269             return columnNames[col];
2 26 Feb 07 jari 270         }
2 26 Feb 07 jari 271         
2 26 Feb 07 jari 272         public Object getValueAt(int row, int col) {
2 26 Feb 07 jari 273             return tableData[row][col];
2 26 Feb 07 jari 274         }
2 26 Feb 07 jari 275         
2 26 Feb 07 jari 276         public void setValueAt(Object value, int row, int col) {
2 26 Feb 07 jari 277             tableData[row][col] = value;
2 26 Feb 07 jari 278             fireTableCellUpdated(row, col);
2 26 Feb 07 jari 279         }
2 26 Feb 07 jari 280         
2 26 Feb 07 jari 281         /*
2 26 Feb 07 jari 282         public Class getColumnClass(int c) {
2 26 Feb 07 jari 283             if (c < fieldNames.length) {
2 26 Feb 07 jari 284                 return (new String()).getClass();
2 26 Feb 07 jari 285             } else {
2 26 Feb 07 jari 286                 return (new Float(1.0f)).getClass();
2 26 Feb 07 jari 287             }
2 26 Feb 07 jari 288             //return getValueAt(0, c).getClass();
2 26 Feb 07 jari 289         }
2 26 Feb 07 jari 290          */        
2 26 Feb 07 jari 291         
2 26 Feb 07 jari 292     }  
2 26 Feb 07 jari 293     
2 26 Feb 07 jari 294     /**
2 26 Feb 07 jari 295      * Synchronize content and header sizes.
2 26 Feb 07 jari 296      */
2 26 Feb 07 jari 297     private void setMaxWidth(JComponent content, JComponent header) {
2 26 Feb 07 jari 298         int c_width = content.getPreferredSize().width;
2 26 Feb 07 jari 299         int h_width = header.getPreferredSize().width;
2 26 Feb 07 jari 300         if (c_width > h_width) {
2 26 Feb 07 jari 301             header.setPreferredSize(new Dimension(c_width, header.getPreferredSize().height));
2 26 Feb 07 jari 302         } else {
2 26 Feb 07 jari 303             content.setPreferredSize(new Dimension(h_width, content.getPreferredSize().height));
2 26 Feb 07 jari 304         }
2 26 Feb 07 jari 305     }   
2 26 Feb 07 jari 306     
2 26 Feb 07 jari 307     public void addMouseListenerToHeaderInTable(JTable table) {
2 26 Feb 07 jari 308         //final TableSorter sorter = this;
2 26 Feb 07 jari 309         final JTable tableView = table;
2 26 Feb 07 jari 310         tableView.setColumnSelectionAllowed(false);
2 26 Feb 07 jari 311         MouseAdapter listMouseListener = new MouseAdapter() {
2 26 Feb 07 jari 312             public void mouseClicked(MouseEvent e) {
2 26 Feb 07 jari 313                 TableColumnModel columnModel = tableView.getColumnModel();
2 26 Feb 07 jari 314                 int viewColumn = columnModel.getColumnIndexAtX(e.getX());
2 26 Feb 07 jari 315                 int column = tableView.convertColumnIndexToModel(viewColumn);
2 26 Feb 07 jari 316                 if (e.getClickCount() == 1 && column != -1) {
2 26 Feb 07 jari 317                     //System.out.println("Sorting ...");
2 26 Feb 07 jari 318                     int shiftPressed = e.getModifiers()&InputEvent.SHIFT_MASK;
2 26 Feb 07 jari 319                     int controlPressed = e.getModifiers()&InputEvent.CTRL_MASK;
2 26 Feb 07 jari 320                     //boolean ascending = (shiftPressed == 0);
2 26 Feb 07 jari 321                     boolean originalOrder = (controlPressed != 0);
2 26 Feb 07 jari 322                     //sortedAscending[column] = !(sortedAscending[column]);
2 26 Feb 07 jari 323                     //sortByColumn(column, ascending, originalOrder);
2 26 Feb 07 jari 324                     sortByColumn(column, !(sortedAscending[column]), originalOrder);
2 26 Feb 07 jari 325                     sortedAscending[column] = !(sortedAscending[column]);
2 26 Feb 07 jari 326                     //System.out.println("sortedAscending[" + column + "] = " + sortedAscending[column]);
2 26 Feb 07 jari 327                     if (originalOrder) {
2 26 Feb 07 jari 328                         for (int i = 0; i < pAndRModel.getColumnCount(); i++)
2 26 Feb 07 jari 329                         sortedAscending[i] = false;
2 26 Feb 07 jari 330                     } 
2 26 Feb 07 jari 331                     //System.out.println("sortedAscending[" + column + "] = " + sortedAscending[column]);                    
2 26 Feb 07 jari 332                 }
2 26 Feb 07 jari 333             }
2 26 Feb 07 jari 334         };
2 26 Feb 07 jari 335         JTableHeader th = tableView.getTableHeader();
2 26 Feb 07 jari 336         th.addMouseListener(listMouseListener);
2 26 Feb 07 jari 337     }    
2 26 Feb 07 jari 338     
2 26 Feb 07 jari 339     public void sortByColumn(int column, boolean ascending, boolean originalOrder) {
2 26 Feb 07 jari 340         if (originalOrder) {
2 26 Feb 07 jari 341             for (int i = 0; i < pAndRModel.getRowCount(); i++) {
2 26 Feb 07 jari 342                 for (int j = 0; j < pAndRModel.getColumnCount(); j++) {
2 26 Feb 07 jari 343                     pAndRModel.setValueAt(origData[i][j], i, j);
2 26 Feb 07 jari 344                 }
2 26 Feb 07 jari 345             }
2 26 Feb 07 jari 346             //sortedAscending = false;
2 26 Feb 07 jari 347             return;
2 26 Feb 07 jari 348         } /*else {
2 26 Feb 07 jari 349             sortedAscending = !(sortedAscending);
2 26 Feb 07 jari 350         }*/
2 26 Feb 07 jari 351         //int[] sortedIndices;
2 26 Feb 07 jari 352         Object[][] sortedData = new Object[pAndRValuesTable.getRowCount()][pAndRValuesTable.getColumnCount()];
2 26 Feb 07 jari 353         float[] origArray = new float[cols.length];
2 26 Feb 07 jari 354         SortableField[] sortFields = new SortableField[cols.length];
2 26 Feb 07 jari 355         if (column == 0) {
2 26 Feb 07 jari 356             //SortableField[] sortFields = new SortableField[rows.length];
2 26 Feb 07 jari 357             for (int i = 0; i < sortFields.length; i++) {
2 26 Feb 07 jari 358                 sortFields[i] = new SortableField(i, column);
2 26 Feb 07 jari 359                 //Arrays.sort(sortFields);
2 26 Feb 07 jari 360             }
2 26 Feb 07 jari 361             Arrays.sort(sortFields);
2 26 Feb 07 jari 362             //return;
2 26 Feb 07 jari 363         } else {
2 26 Feb 07 jari 364             for (int i = 0; i < origArray.length; i++) {
2 26 Feb 07 jari 365                 origArray[i] = ((Float)(auxData[cols[i]][column - 1])).floatValue();
2 26 Feb 07 jari 366             }
2 26 Feb 07 jari 367         }
2 26 Feb 07 jari 368
2 26 Feb 07 jari 369         //if ( ((ascending) && (!meansASortedAsc)) || ((!ascending) && (!meansASortedDesc)) ) {
2 26 Feb 07 jari 370         int[] sortedIndices = new int[cols.length];
2 26 Feb 07 jari 371         if (column > 0) {
2 26 Feb 07 jari 372             QSort sortArray = new QSort(origArray);
2 26 Feb 07 jari 373             sortedIndices = sortArray.getOrigIndx();
2 26 Feb 07 jari 374         } else if (column == 0) {
2 26 Feb 07 jari 375             for (int i = 0; i < sortedIndices.length; i++) {
2 26 Feb 07 jari 376                 sortedIndices[i] = sortFields[i].getIndex();
2 26 Feb 07 jari 377             }
2 26 Feb 07 jari 378         }
2 26 Feb 07 jari 379         if (!ascending) {
2 26 Feb 07 jari 380             sortedIndices = reverse(sortedIndices);
2 26 Feb 07 jari 381         }
2 26 Feb 07 jari 382         //sortedIndices = sortNaNs(sortedIndices); //QSort does not appear to handle NaN's well, they show up in the middle of the sorted array
2 26 Feb 07 jari 383         for (int i = 0; i < sortedData.length; i++) {
2 26 Feb 07 jari 384             for (int j = 0; j < sortedData[i].length; j++) {
2 26 Feb 07 jari 385                 //sortedData[i][j] = tModel.getValueAt(sortedMeansAIndices[i], j);
2 26 Feb 07 jari 386                 sortedData[i][j] = origData[sortedIndices[i]][j];
2 26 Feb 07 jari 387             }
2 26 Feb 07 jari 388         }
2 26 Feb 07 jari 389         
2 26 Feb 07 jari 390         for (int i = 0; i < sortedData.length; i++) {
2 26 Feb 07 jari 391             for (int j = 0; j < sortedData[i].length; j++) {
2 26 Feb 07 jari 392                 pAndRModel.setValueAt(sortedData[i][j], i, j);
2 26 Feb 07 jari 393             }
2 26 Feb 07 jari 394         }
2 26 Feb 07 jari 395
2 26 Feb 07 jari 396     }  
2 26 Feb 07 jari 397     
2 26 Feb 07 jari 398     private int[] reverse(int[] arr) {
2 26 Feb 07 jari 399         int[] revArr = new int[arr.length];
2 26 Feb 07 jari 400         int  revCount = 0;
2 26 Feb 07 jari 401         int count = arr.length - 1;
2 26 Feb 07 jari 402         for (int i=0; i < arr.length; i++) {
2 26 Feb 07 jari 403             revArr[revCount] = arr[count];
2 26 Feb 07 jari 404             revCount++;
2 26 Feb 07 jari 405             count--;
2 26 Feb 07 jari 406         }
2 26 Feb 07 jari 407         return revArr;
2 26 Feb 07 jari 408     } 
2 26 Feb 07 jari 409     
2 26 Feb 07 jari 410     private class SortableField implements Comparable {
2 26 Feb 07 jari 411         private String field;
2 26 Feb 07 jari 412         private int index;
2 26 Feb 07 jari 413         
2 26 Feb 07 jari 414         SortableField(int index, int column) {
2 26 Feb 07 jari 415             this.index = index;
2 26 Feb 07 jari 416             this.field = (String)(origData[index][column]);
2 26 Feb 07 jari 417             //System.out.println("SortableField[" + index + "][" + column + "]: index = " + index + ", field = " + field);
2 26 Feb 07 jari 418         }
2 26 Feb 07 jari 419         
2 26 Feb 07 jari 420         public int compareTo(Object other) {
2 26 Feb 07 jari 421             SortableField otherField = (SortableField)other;
2 26 Feb 07 jari 422             return this.field.compareTo(otherField.getField());
2 26 Feb 07 jari 423         }
2 26 Feb 07 jari 424         
2 26 Feb 07 jari 425         public int getIndex() {
2 26 Feb 07 jari 426             return this.index;
2 26 Feb 07 jari 427         }
2 26 Feb 07 jari 428         public String getField() {
2 26 Feb 07 jari 429             return this.field;
2 26 Feb 07 jari 430         }
2 26 Feb 07 jari 431     }    
2 26 Feb 07 jari 432     
2 26 Feb 07 jari 433 }
2 26 Feb 07 jari 434
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
2 26 Feb 07 jari 441
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
2 26 Feb 07 jari 447
2 26 Feb 07 jari 448
2 26 Feb 07 jari 449
2 26 Feb 07 jari 450
2 26 Feb 07 jari 451
2 26 Feb 07 jari 452
2 26 Feb 07 jari 453
2 26 Feb 07 jari 454
2 26 Feb 07 jari 455