Clover coverage report -
Coverage timestamp: Sat Jul 7 2007 16:41:13 CEST
file stats: LOC: 483   Methods: 22
NCLOC: 380   Classes: 1
 
 Source file Conditionals Statements Methods TOTAL
TestResultFrame.java 73.1% 98.1% 90.9% 95.1%
coverage coverage
 1    /*
 2    * TestResultFrame.java
 3    *
 4    * Created on March 13, 2007, 7:56 PM
 5    *
 6    * JTR is free software; you can redistribute it and/or modify it under the
 7    * terms of the GNU General Public License as published by the Free Software
 8    * Foundation; either version 2, or (at your option) any later version.
 9    */
 10   
 11    package jtr.ui.swing;
 12   
 13    import java.io.File;
 14    import java.util.Date;
 15    import java.util.HashMap;
 16    import java.util.List;
 17    import java.util.Map;
 18    import java.util.Set;
 19    import javax.swing.JFileChooser;
 20    import javax.swing.JTable;
 21    import javax.swing.JTree;
 22    import javax.swing.ListSelectionModel;
 23    import javax.swing.filechooser.FileFilter;
 24    import javax.swing.table.DefaultTableModel;
 25    import javax.swing.tree.DefaultMutableTreeNode;
 26    import javax.swing.tree.DefaultTreeModel;
 27    import javax.swing.tree.TreeSelectionModel;
 28    import jtr.config.RegisteredFactories;
 29    import jtr.remote.test.NodeInfo;
 30    import jtr.test.IOutcome;
 31    import jtr.test.TestOutcomeTable;
 32    import jtr.test.results.exporters.ITestResultsExporter;
 33   
 34    /**
 35    * Frame that shows the results of a test organized by JTR-nodes, runner-categories
 36    * and instances.
 37    *
 38    * @author frusso
 39    * @version 4.0
 40    * @since 4.0
 41    */
 42    public class TestResultFrame extends javax.swing.JFrame {
 43   
 44    /**
 45    * Creates new form TestResultFrame
 46    * @param map
 47    */
 48  1 public TestResultFrame(Map<NodeInfo,TestOutcomeTable> map) {
 49  1 System.setProperty("apple.laf.useScreenMenuBar", "true");
 50  1 this.map = map;
 51  1 initComponents();
 52  1 this.setIconImage(IconImageProvider.getIcon());
 53  1 initFilters();
 54    }
 55   
 56    /**
 57    * Initializes all the filters required for JFileChooser instances.
 58    */
 59  1 private void initFilters() {
 60  1 xlsFilter = new FileFilter() {
 61    /**
 62    * Accept or reject a file.
 63    */
 64  144 public boolean accept(File f) {
 65  144 if (f.isDirectory()) {
 66  92 return true;
 67    }
 68  52 String extension = Utils.getExtension(f);
 69  52 if (extension != null) {
 70  32 if (extension.equals(Utils.XLS)) {
 71  0 return true;
 72    } else {
 73  32 return false;
 74    }
 75    }
 76  20 return false;
 77    }
 78   
 79    /**
 80    * Provide a description for the filter.
 81    */
 82  6 public String getDescription() {
 83  6 return "Filter for XLS (Excel) files";
 84    }
 85    };
 86    }
 87   
 88    /** This method is called from within the constructor to
 89    * initialize the form.
 90    * WARNING: Do NOT modify this code. The content of this method is
 91    * always regenerated by the Form Editor.
 92    */
 93    // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents
 94  1 private void initComponents() {
 95  1 testResultsLabel = new javax.swing.JLabel();
 96  1 performanceTableLabel = new javax.swing.JLabel();
 97  1 treeScrollPane = new javax.swing.JScrollPane();
 98  1 DefaultMutableTreeNode root = adjustDataFormat(map);
 99  1 resultsTree = resultsTree = new JTree(root);
 100  1 resultsTree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
 101  1 tableScrollPane = new javax.swing.JScrollPane();
 102  1 tableSorter = new TableSorter();
 103  1 resultsTable = new javax.swing.JTable();
 104  1 resultsTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
 105  1 averageServiceTimeLabel = new javax.swing.JLabel();
 106  1 avgServiceTimeValueLabel = new javax.swing.JLabel();
 107  1 menuBar = new javax.swing.JMenuBar();
 108  1 fileMenu = new javax.swing.JMenu();
 109  1 exit = new javax.swing.JMenuItem();
 110  1 exportMenu = new javax.swing.JMenu();
 111  1 xls = new javax.swing.JMenuItem();
 112  1 windowMenu = new javax.swing.JMenu();
 113  1 briefing = new javax.swing.JMenuItem();
 114  1 helpMenu = new javax.swing.JMenu();
 115  1 about = new javax.swing.JMenuItem();
 116   
 117  1 setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
 118  1 java.util.ResourceBundle bundle = java.util.ResourceBundle.getBundle("jtr/ui/swing/Bundle"); // NOI18N
 119  1 setTitle(bundle.getString("TestResultFrame.title")); // NOI18N
 120  1 setName(bundle.getString("TestResultFrame.name")); // NOI18N
 121  1 setResizable(false);
 122  1 testResultsLabel.setText(bundle.getString("TestResultFrame.testResultsLabel.text")); // NOI18N
 123  1 testResultsLabel.setOpaque(true);
 124   
 125  1 performanceTableLabel.setText(bundle.getString("TestResultFrame.performanceTableLabel.text")); // NOI18N
 126  1 performanceTableLabel.setOpaque(true);
 127   
 128  1 treeScrollPane.setToolTipText(bundle.getString("TestResultFrame.treeScrollPane.toolTipText")); // NOI18N
 129  1 treeScrollPane.setDoubleBuffered(true);
 130  1 treeScrollPane.setMaximumSize(new java.awt.Dimension(2147483647, 2147483647));
 131  1 resultsTree.setToolTipText(bundle.getString("TestResultFrame.resultsTree.toolTipText")); // NOI18N
 132  1 resultsTree.setLargeModel(true);
 133  1 resultsTree.setMaximumSize(new java.awt.Dimension(2147483647, 2147483647));
 134  1 resultsTree.setVisibleRowCount(50);
 135  1 resultsTree.addTreeSelectionListener(new javax.swing.event.TreeSelectionListener() {
 136  38 public void valueChanged(javax.swing.event.TreeSelectionEvent evt) {
 137  38 resultsTreeValueChanged(evt);
 138    }
 139    });
 140   
 141  1 treeScrollPane.setViewportView(resultsTree);
 142   
 143  1 tableScrollPane.setToolTipText(bundle.getString("TestResultFrame.tableScrollPane.toolTipText")); // NOI18N
 144  1 tableScrollPane.setDoubleBuffered(true);
 145  1 tableScrollPane.setMaximumSize(new java.awt.Dimension(2147483647, 2147483647));
 146  1 resultsTable.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_ALL_COLUMNS);
 147  1 resultsTable.setGridColor(new java.awt.Color(204, 204, 204));
 148  1 resultsTable.addMouseListener(new java.awt.event.MouseAdapter() {
 149  12 public void mouseClicked(java.awt.event.MouseEvent evt) {
 150  12 resultsTableMouseClicked(evt);
 151    }
 152    });
 153   
 154  1 tableScrollPane.setViewportView(resultsTable);
 155   
 156  1 averageServiceTimeLabel.setFont(new java.awt.Font("Lucida Grande", 0, 12));
 157  1 averageServiceTimeLabel.setLabelFor(avgServiceTimeValueLabel);
 158  1 averageServiceTimeLabel.setText(bundle.getString("TestResultFrame.averageServiceTimeLabel.text")); // NOI18N
 159  1 averageServiceTimeLabel.setOpaque(true);
 160  1 averageServiceTimeLabel.setVisible(false);
 161   
 162  1 avgServiceTimeValueLabel.setFont(new java.awt.Font("Lucida Grande", 0, 12));
 163  1 avgServiceTimeValueLabel.setText(bundle.getString("TestResultFrame.avgServiceTimeValueLabel.text")); // NOI18N
 164  1 avgServiceTimeValueLabel.setOpaque(true);
 165   
 166  1 fileMenu.setText(bundle.getString("TestResultFrame.fileMenu.text")); // NOI18N
 167  1 fileMenu.setToolTipText(bundle.getString("TestResultFrame.fileMenu.toolTipText")); // NOI18N
 168  1 exit.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_E, java.awt.event.InputEvent.ALT_MASK));
 169  1 exit.setText(bundle.getString("TestResultFrame.exit.text")); // NOI18N
 170  1 exit.setToolTipText(bundle.getString("TestResultFrame.exit.toolTipText")); // NOI18N
 171  1 exit.addActionListener(new java.awt.event.ActionListener() {
 172  0 public void actionPerformed(java.awt.event.ActionEvent evt) {
 173  0 exitViewer(evt);
 174    }
 175    });
 176   
 177  1 fileMenu.add(exit);
 178   
 179  1 menuBar.add(fileMenu);
 180   
 181  1 exportMenu.setText(bundle.getString("TestResultFrame.exportMenu.text")); // NOI18N
 182  1 xls.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_X, java.awt.event.InputEvent.ALT_MASK));
 183  1 xls.setText(bundle.getString("TestResultFrame.xls.text")); // NOI18N
 184  1 xls.setToolTipText(bundle.getString("TestResultFrame.xls.toolTipText")); // NOI18N
 185  1 xls.addActionListener(new java.awt.event.ActionListener() {
 186  2 public void actionPerformed(java.awt.event.ActionEvent evt) {
 187  2 xlsActionPerformed(evt);
 188    }
 189    });
 190   
 191  1 exportMenu.add(xls);
 192   
 193  1 menuBar.add(exportMenu);
 194   
 195  1 windowMenu.setText(bundle.getString("TestResultFrame.windowMenu.text")); // NOI18N
 196  1 briefing.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_B, java.awt.event.InputEvent.ALT_MASK));
 197  1 briefing.setText(bundle.getString("TestResultFrame.briefing.text")); // NOI18N
 198  1 briefing.addActionListener(new java.awt.event.ActionListener() {
 199  2 public void actionPerformed(java.awt.event.ActionEvent evt) {
 200  2 briefingActionPerformed(evt);
 201    }
 202    });
 203   
 204  1 windowMenu.add(briefing);
 205   
 206  1 menuBar.add(windowMenu);
 207   
 208  1 helpMenu.setText(bundle.getString("TestResultFrame.helpMenu.text")); // NOI18N
 209  1 about.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_A, java.awt.event.InputEvent.ALT_MASK));
 210  1 about.setText(bundle.getString("TestResultFrame.about.text")); // NOI18N
 211  1 about.addActionListener(new java.awt.event.ActionListener() {
 212  2 public void actionPerformed(java.awt.event.ActionEvent evt) {
 213  2 aboutActionPerformed(evt);
 214    }
 215    });
 216   
 217  1 helpMenu.add(about);
 218   
 219  1 menuBar.add(helpMenu);
 220   
 221  1 setJMenuBar(menuBar);
 222   
 223  1 org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
 224  1 getContentPane().setLayout(layout);
 225  1 layout.setHorizontalGroup(
 226    layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
 227    .add(layout.createSequentialGroup()
 228    .add(8, 8, 8)
 229    .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
 230    .add(treeScrollPane, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 486, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
 231    .add(testResultsLabel))
 232    .add(12, 12, 12)
 233    .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
 234    .add(layout.createSequentialGroup()
 235    .add(averageServiceTimeLabel)
 236    .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
 237    .add(avgServiceTimeValueLabel, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 99, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
 238    .add(performanceTableLabel, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 250, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
 239    .add(tableScrollPane, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 713, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
 240    .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
 241    );
 242  1 layout.setVerticalGroup(
 243    layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
 244    .add(layout.createSequentialGroup()
 245    .addContainerGap()
 246    .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
 247    .add(performanceTableLabel)
 248    .add(testResultsLabel))
 249    .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
 250    .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
 251    .add(layout.createSequentialGroup()
 252    .add(tableScrollPane, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 506, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
 253    .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
 254    .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
 255    .add(averageServiceTimeLabel)
 256    .add(avgServiceTimeValueLabel, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 15, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)))
 257    .add(treeScrollPane, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 506, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
 258    .addContainerGap(8, Short.MAX_VALUE))
 259    );
 260  1 java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
 261  1 setBounds((screenSize.width-1231)/2, (screenSize.height-626)/2, 1231, 626);
 262    }// </editor-fold>//GEN-END:initComponents
 263   
 264  2 private void xlsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_xlsActionPerformed
 265    // TODO add your handling code here:
 266   
 267  2 JFileChooser jfc = new JFileChooser();
 268  2 jfc.setFileFilter(xlsFilter);
 269  2 int action = jfc.showSaveDialog(this);
 270  2 if(JFileChooser.APPROVE_OPTION==action) {
 271  1 File xlsFile = jfc.getSelectedFile();
 272  1 if(xlsFile!=null) {
 273  1 ITestResultsExporter exporter = (ITestResultsExporter) RegisteredFactories.getFactory(RegisteredFactories.ITEST_RESULTS_EXPORTER);
 274  1 Set<NodeInfo> nodes = map.keySet();
 275  1 for(NodeInfo node : nodes) {
 276  2 TestOutcomeTable outcome = map.get(node);
 277  2 exporter.export(node,outcome);
 278  2 exporter.flush(xlsFile);
 279    }
 280    }
 281    }
 282    }//GEN-LAST:event_xlsActionPerformed
 283   
 284  2 private void aboutActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_aboutActionPerformed
 285    // TODO add your handling code here:
 286  2 AboutFrame jaf = new AboutFrame();
 287  2 jaf.setVisible(true);
 288    }//GEN-LAST:event_aboutActionPerformed
 289   
 290  12 private void resultsTableMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_resultsTableMouseClicked
 291    // TODO add your handling code here:
 292  12 boolean ctrlDown = evt.isControlDown();
 293  12 if(evt.getClickCount()==2 || ctrlDown) {
 294  7 JTable src = (JTable) evt.getSource();
 295  7 int row = src.getSelectedRow();
 296  7 if(row>-1) {
 297  7 Throwable t = (Throwable) src.getModel().getValueAt(row,ERROR_MSG_INDEX);
 298  7 String userMsg = (String) src.getModel().getValueAt(row,USER_MSG_INDEX);
 299  7 if(t!=null || userMsg!=null) {
 300  7 ErrorMessageFrame emf = new ErrorMessageFrame(t,userMsg);
 301  7 emf.setVisible(true);
 302    }
 303    }
 304    }
 305    }//GEN-LAST:event_resultsTableMouseClicked
 306   
 307  2 private void briefingActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_briefingActionPerformed
 308    // TODO add your handling code here:
 309  2 BriefingFrame briefingFrame = new BriefingFrame();
 310  2 Set<NodeInfo> nodes = map.keySet();
 311  2 String briefing = "";
 312  2 for(NodeInfo node : nodes) {
 313  4 briefing += "JTR node: "+node+"\n"+map.get(node).getBriefing() + "\n\n";
 314    }
 315  2 briefingFrame.setText(briefing);
 316  2 briefingFrame.setVisible(true);
 317    }//GEN-LAST:event_briefingActionPerformed
 318   
 319  38 private void resultsTreeValueChanged(javax.swing.event.TreeSelectionEvent evt) {//GEN-FIRST:event_resultsTreeValueChanged
 320    // TODO add your handling code here:
 321  38 DefaultMutableTreeNode node = (DefaultMutableTreeNode) resultsTree.getLastSelectedPathComponent();
 322  38 if (node == null)
 323  11 return;
 324  27 Object nodeInfo = node.getUserObject();
 325  27 if(node.isLeaf()) {
 326  14 String instance = (String)nodeInfo;
 327  14 List<IOutcome> outcomes = outcomesByInstance.get(instance);
 328   
 329  14 DefaultTableModel dtm = new DefaultTableModel() {
 330    Class[] types = new Class [] {
 331    java.lang.Integer.class,
 332    java.lang.Integer.class,
 333    java.lang.String.class,
 334    java.lang.Long.class,
 335    java.lang.String.class,
 336    java.lang.Object.class,
 337    java.lang.Object.class
 338    };
 339   
 340    boolean[] canEdit = new boolean [] {
 341    false, false, false, false, false, false, false
 342    };
 343   
 344  107528 public Class getColumnClass(int columnIndex) {
 345  107528 return types [columnIndex];
 346    };
 347   
 348  14 public boolean isCellEditable(int rowIndex, int columnIndex) {
 349  14 return canEdit [columnIndex];
 350    };
 351    };
 352  14 dtm.addColumn("Epoch");
 353  14 dtm.addColumn("Run");
 354  14 dtm.addColumn("Time Stamp");
 355  14 dtm.addColumn("Elapsed (milliSec)");
 356  14 dtm.addColumn("Status");
 357  14 dtm.addColumn("Custom Msg");
 358  14 dtm.addColumn("Error Msg");
 359   
 360  14 tableSorter.setTableModel(dtm);
 361  14 tableSorter.setTableHeader(resultsTable.getTableHeader());
 362   
 363  14 resultsTable.setModel(tableSorter);
 364  14 resultsTable.getTableHeader().setToolTipText("Press CTRL+click to see full Error Message");
 365  14 resultsTable.getTableHeader().getColumnModel().getColumn(0).setWidth(30);
 366  14 resultsTable.getTableHeader().getColumnModel().getColumn(1).setWidth(30);
 367  14 resultsTable.getTableHeader().getColumnModel().getColumn(2).setWidth(130);
 368  14 resultsTable.getTableHeader().getColumnModel().getColumn(3).setWidth(110);
 369   
 370  14 float totalDuration = 0;
 371  14 int counter = 0;
 372  14 for(IOutcome outcome : outcomes) {
 373    //**********************************************
 374    // let's handle some data that might be null...
 375  9100 String timestamp = "";
 376  9100 Date ts = outcome.getTimeStamp();
 377  9100 if(ts==null) {
 378  0 timestamp = "N.A.";
 379    } else {
 380  9100 timestamp = ts.toString();
 381    }
 382    //**********************************************
 383  9100 dtm.addRow(new Object[] {outcome.getEpoch(),outcome.getRun(),timestamp,outcome.getRunDuration(),outcome.getType(),outcome.getUserObject(),outcome.getException()});
 384  9100 totalDuration += outcome.getRunDuration();
 385  9100 counter++;
 386   
 387    }
 388   
 389  14 tableSorter.setSortingStatus(0,TableSorter.ASCENDING);
 390  14 tableSorter.setSortingStatus(1,TableSorter.ASCENDING);
 391   
 392  14 float avgReqPerTime = totalDuration/counter;
 393  14 averageServiceTimeLabel.setVisible(true);
 394  14 avgServiceTimeValueLabel.setText(Float.toString(avgReqPerTime));
 395  14 avgServiceTimeValueLabel.setVisible(true);
 396  14 resultsTable.setVisible(true);
 397    } else {
 398  13 avgServiceTimeValueLabel.setVisible(false);
 399  13 averageServiceTimeLabel.setVisible(false);
 400  13 resultsTable.setVisible(false);
 401    }
 402    }//GEN-LAST:event_resultsTreeValueChanged
 403   
 404  0 private void exitViewer(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_exitViewer
 405    // TODO add your handling code here:
 406  0 System.exit(0);
 407    }//GEN-LAST:event_exitViewer
 408   
 409  2 private DefaultMutableTreeNode adjustDataFormat(Map<NodeInfo, TestOutcomeTable> map) {
 410  2 outcomesByInstance = new HashMap<String,List<IOutcome>>();
 411  2 DefaultMutableTreeNode data = new DefaultMutableTreeNode("JTR Node(s)");
 412   
 413  2 Set<NodeInfo> nodes = map.keySet();
 414  2 for(NodeInfo node : nodes) {
 415  3 DefaultMutableTreeNode n = new DefaultMutableTreeNode(node);
 416  3 data.add(n);
 417  3 TestOutcomeTable tot = map.get(node);
 418  3 Set<Class> categories = tot.getCategories(node);
 419  3 for(Class cat : categories) {
 420  18 DefaultMutableTreeNode c = new DefaultMutableTreeNode(cat);
 421  18 n.add(c);
 422  18 Set<String> instances = tot.getInstances(cat);
 423  18 for(String inst : instances) {
 424  147 DefaultMutableTreeNode i = new DefaultMutableTreeNode(inst);
 425  147 c.add(i);
 426  147 List<IOutcome> res = tot.getOutcomes(inst);
 427  147 outcomesByInstance.put(inst,res);
 428    }
 429    }
 430    }
 431   
 432  2 return data;
 433    }
 434   
 435  1 public void updateResults(Map<NodeInfo, TestOutcomeTable> outcomes) {
 436  1 updateDataMap(outcomes);
 437  1 DefaultMutableTreeNode root = adjustDataFormat(map);
 438  1 DefaultTreeModel model = new DefaultTreeModel(root);
 439  1 resultsTree.setModel(model);
 440  1 resultsTree.repaint();
 441    }
 442   
 443  1 private void updateDataMap(Map<NodeInfo, TestOutcomeTable> outcomes) {
 444  1 if(outcomes!=null) {
 445  1 Set<NodeInfo> keys = outcomes.keySet();
 446  1 for(NodeInfo key : keys) {
 447  1 TestOutcomeTable value = outcomes.get(key);
 448  1 if(value!=null) {
 449  1 map.put(key,value);
 450    }
 451    }
 452    }
 453    }
 454   
 455    // Variables declaration - do not modify//GEN-BEGIN:variables
 456    private javax.swing.JMenuItem about;
 457    private javax.swing.JLabel averageServiceTimeLabel;
 458    private javax.swing.JLabel avgServiceTimeValueLabel;
 459    private javax.swing.JMenuItem briefing;
 460    private javax.swing.JMenuItem exit;
 461    private javax.swing.JMenu exportMenu;
 462    private javax.swing.JMenu fileMenu;
 463    private javax.swing.JMenu helpMenu;
 464    private javax.swing.JMenuBar menuBar;
 465    private javax.swing.JLabel performanceTableLabel;
 466    private javax.swing.JTable resultsTable;
 467    private javax.swing.JTree resultsTree;
 468    private javax.swing.JScrollPane tableScrollPane;
 469    private javax.swing.JLabel testResultsLabel;
 470    private javax.swing.JScrollPane treeScrollPane;
 471    private javax.swing.JMenu windowMenu;
 472    private javax.swing.JMenuItem xls;
 473    // End of variables declaration//GEN-END:variables
 474   
 475    private TableSorter tableSorter;
 476    private Map<NodeInfo, TestOutcomeTable> map;
 477    private Map<String, List<IOutcome>> outcomesByInstance;
 478   
 479    private FileFilter xlsFilter;
 480   
 481    private static final int ERROR_MSG_INDEX = 6;
 482    private static final int USER_MSG_INDEX = 5;
 483    }