NXvalidate  1
 All Classes Namespaces Files Functions Variables
NXvalidateFrame.java
Go to the documentation of this file.
1  /* NeXus - Neutron & X-ray Common Data Format
2  *
3  * NeXus file validation GUI tool.
4  *
5  * Copyright (C) 2010 Stephen Rankin
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with this library; if not, write to the Free Software
19  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20  *
21  * For further information, see <http://www.nexusformat.org/>
22  *
23  * NXvalidateFrame.java
24  *
25  * Created on 02-Jun-2010, 14:17:04
26  */
27 
28 package org.nexusformat.nxvalidate;
29 
30 import java.awt.Dialog.ModalityType;
31 import java.awt.event.MouseListener;
32 import java.io.File;
33 import java.io.FileNotFoundException;
34 import java.io.IOException;
35 import java.util.ArrayList;
36 import java.util.ResourceBundle;
37 import java.util.logging.Level;
38 import java.util.logging.Logger;
39 import javax.help.CSH;
40 import javax.help.HelpBroker;
41 import javax.help.HelpSet;
42 import javax.swing.JOptionPane;
43 import javax.swing.JTextArea;
44 import javax.swing.tree.MutableTreeNode;
45 import javax.swing.tree.TreePath;
46 import javax.xml.parsers.DocumentBuilder;
47 import javax.xml.parsers.DocumentBuilderFactory;
48 import javax.xml.parsers.ParserConfigurationException;
49 import org.w3c.dom.Document;
50 
55 public class NXvalidateFrame extends javax.swing.JFrame {
56 
57  private DocumentBuilderFactory factory = null;
58  private DocumentBuilder builder = null;
59  private NXReducedToTree domTree = null;
60  private NXNodeMapper root = null;
61  private ResourceBundle bundle = null;
62  private File nxsFile = null;
63  private File nxdlFile = null;
64  private File reducedFile = null;
65  private File resultsFile = null;
66  private TreeUtils treeUtils = null;
67  private UserSettings settings = null;
68  private String nxconvertCommand = null;
69  private File saveDirectory = null;
70  private boolean foundNXconvert = false;
71  private MouseListener popupListener = null;
72  private TextPaneStyle txtStyle = null;
73  private FileActions fileLoadingActions = null;
74  private HelpBroker hb = null;
75 
77  public NXvalidateFrame() {
78  initComponents();
79  setup();
80  }
81 
82  private void setup() {
83 
84  factory = DocumentBuilderFactory.newInstance();
85  factory.setNamespaceAware(true);
86 
87  root = new NXNodeMapper("Files");
88 
89  domTree = new NXReducedToTree(root);
90  jTree1.setModel(domTree);
91 
92  try {
93  builder = factory.newDocumentBuilder();
94  } catch (ParserConfigurationException ex) {
95  Logger.getLogger(
96  NXvalidateFrame.class.getName()).log(Level.SEVERE, null, ex);
97  }
98 
99  bundle = ResourceBundle.getBundle(
100  "org/nexusformat/nxvalidate/resources/nxvalidate");
101 
102  treeUtils = new TreeUtils();
103 
104  XMLTreeRenderer rend = new XMLTreeRenderer(
105  "resources/nexus32x32.png", "resources/bad.png",
106  "resources/good.png", "resources/warn.png",
107  "resources/peg-e.png", "resources/info.png",
108  "resources/info-good.png", "resources/info-bad.png",
109  "resources/info-warn.png");
110 
111  jTree1.setCellRenderer(rend);
112 
113  settings = new UserSettings();
114 
115  try {
116  settings.loadUserSettings();
117  nxconvertCommand = settings.getNXconvert();
118 
119  if (!settings.foundNXconvert()) {
121  bundle.getString("nxconvertMissingError"));
122  foundNXconvert = false;
123  } else {
124  foundNXconvert = true;
125  }
126  } catch (FileNotFoundException ex) {
127  Logger.getLogger(
128  NXvalidateFrame.class.getName()).log(Level.SEVERE,
129  "The settings file cannot be found.", ex);
130  } catch (IOException ex) {
131  Logger.getLogger(
132  NXvalidateFrame.class.getName()).log(Level.SEVERE,
133  "The settings file IO error.", ex);
134  }
135 
136  popupListener = new PopupListener(treePopupMenu);
137  jTree1.addMouseListener(popupListener);
138 
139  txtStyle = new TextPaneStyle(jTextPane1);
140 
141  fileLoadingActions = new FileActions(this, jTree1, builder, domTree, root);
142 
143  String helpHS = "help/jhelpset.hs";
144  HelpSet hs = null;
145 
146  try {
147  hs = new HelpSet(null, this.getClass().getResource(helpHS));
148  } catch (Exception ex) {
149  Logger.getLogger(
150  NXvalidateFrame.class.getName()).log(Level.SEVERE,
151  "The setting help file IO error.", ex);
152  return;
153  }
154  // Create a HelpBroker object:
155  hb = hs.createHelpBroker();
156 
157  helpMenuItem.addActionListener(new CSH.DisplayHelpFromSource( hb ));
158 
159  }
160 
166  @SuppressWarnings("unchecked")
167  // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
168  private void initComponents() {
169 
170  dialogReportProblem = new javax.swing.JOptionPane();
171  treePopupMenu = new javax.swing.JPopupMenu();
172  closeFileMenuItem = new javax.swing.JMenuItem();
173  jFileChooser1 = new javax.swing.JFileChooser();
174  jPanel2 = new javax.swing.JPanel();
175  jSplitPane1 = new javax.swing.JSplitPane();
176  jScrollPane1 = new javax.swing.JScrollPane();
177  jTree1 = new javax.swing.JTree();
178  jScrollPane2 = new javax.swing.JScrollPane();
179  jTextPane1 = new javax.swing.JTextPane();
180  jMenuBar1 = new javax.swing.JMenuBar();
181  fileMenu = new javax.swing.JMenu();
182  openFilesMenuItem = new javax.swing.JMenuItem();
183  jSeparator4 = new javax.swing.JPopupMenu.Separator();
184  saveMenuItem = new javax.swing.JMenuItem();
185  jSeparator7 = new javax.swing.JPopupMenu.Separator();
186  closeAllMenuItem = new javax.swing.JMenuItem();
187  jSeparator5 = new javax.swing.JPopupMenu.Separator();
188  exitAppMenuItem = new javax.swing.JMenuItem();
189  toolsMenu = new javax.swing.JMenu();
190  validateSelectedMenuItem = new javax.swing.JMenuItem();
191  jSeparator2 = new javax.swing.JPopupMenu.Separator();
192  filterMenuItem = new javax.swing.JMenuItem();
193  jSeparator1 = new javax.swing.JPopupMenu.Separator();
194  bulkMenuItem = new javax.swing.JMenuItem();
195  jSeparator3 = new javax.swing.JPopupMenu.Separator();
196  settingsMenuItem = new javax.swing.JMenuItem();
197  helpMenu = new javax.swing.JMenu();
198  helpMenuItem = new javax.swing.JMenuItem();
199  jSeparator6 = new javax.swing.JPopupMenu.Separator();
200  aboutMenuItem = new javax.swing.JMenuItem();
201 
202  closeFileMenuItem.setText("Close File");
203  closeFileMenuItem.addActionListener(new java.awt.event.ActionListener() {
204  public void actionPerformed(java.awt.event.ActionEvent evt) {
205  closeFileMenuItemActionPerformed(evt);
206  }
207  });
208  treePopupMenu.add(closeFileMenuItem);
209 
210  setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
211  java.util.ResourceBundle bundle = java.util.ResourceBundle.getBundle("org/nexusformat/nxvalidate/resources/nxvalidate"); // NOI18N
212  setTitle(bundle.getString("applicationTitle")); // NOI18N
213  setMinimumSize(new java.awt.Dimension(400, 400));
214 
215  jPanel2.setBorder(javax.swing.BorderFactory.createCompoundBorder(javax.swing.BorderFactory.createEmptyBorder(5, 5, 5, 5), javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED)));
216  jPanel2.setPreferredSize(new java.awt.Dimension(130, 130));
217 
218  jSplitPane1.setDividerLocation(200);
219  jSplitPane1.setContinuousLayout(true);
220 
221  javax.swing.tree.DefaultMutableTreeNode treeNode1 = new javax.swing.tree.DefaultMutableTreeNode("NXS Files");
222  jTree1.setModel(new javax.swing.tree.DefaultTreeModel(treeNode1));
223  jTree1.addTreeSelectionListener(new javax.swing.event.TreeSelectionListener() {
224  public void valueChanged(javax.swing.event.TreeSelectionEvent evt) {
225  jTree1ValueChanged(evt);
226  }
227  });
228  jScrollPane1.setViewportView(jTree1);
229 
230  jSplitPane1.setLeftComponent(jScrollPane1);
231 
232  jScrollPane2.setViewportView(jTextPane1);
233 
234  jSplitPane1.setRightComponent(jScrollPane2);
235 
236  javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
237  jPanel2.setLayout(jPanel2Layout);
238  jPanel2Layout.setHorizontalGroup(
239  jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
240  .addComponent(jSplitPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 386, Short.MAX_VALUE)
241  );
242  jPanel2Layout.setVerticalGroup(
243  jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
244  .addComponent(jSplitPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 259, Short.MAX_VALUE)
245  );
246 
247  getContentPane().add(jPanel2, java.awt.BorderLayout.CENTER);
248 
249  fileMenu.setText(bundle.getString("fileMenuItem")); // NOI18N
250 
251  openFilesMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F, java.awt.event.InputEvent.CTRL_MASK));
252  openFilesMenuItem.setText("Open Files");
253  openFilesMenuItem.addActionListener(new java.awt.event.ActionListener() {
254  public void actionPerformed(java.awt.event.ActionEvent evt) {
255  openFilesMenuItemActionPerformed(evt);
256  }
257  });
258  fileMenu.add(openFilesMenuItem);
259  fileMenu.add(jSeparator4);
260 
261  saveMenuItem.setText("Save Results");
262  saveMenuItem.setToolTipText("Save results to files.");
263  saveMenuItem.addActionListener(new java.awt.event.ActionListener() {
264  public void actionPerformed(java.awt.event.ActionEvent evt) {
265  saveMenuItemActionPerformed(evt);
266  }
267  });
268  fileMenu.add(saveMenuItem);
269  fileMenu.add(jSeparator7);
270 
271  closeAllMenuItem.setText("Close All Files");
272  closeAllMenuItem.addActionListener(new java.awt.event.ActionListener() {
273  public void actionPerformed(java.awt.event.ActionEvent evt) {
274  closeAllMenuItemActionPerformed(evt);
275  }
276  });
277  fileMenu.add(closeAllMenuItem);
278  fileMenu.add(jSeparator5);
279 
280  exitAppMenuItem.setText("Exit");
281  exitAppMenuItem.addActionListener(new java.awt.event.ActionListener() {
282  public void actionPerformed(java.awt.event.ActionEvent evt) {
283  exitAppMenuItemActionPerformed(evt);
284  }
285  });
286  fileMenu.add(exitAppMenuItem);
287 
288  jMenuBar1.add(fileMenu);
289 
290  toolsMenu.setText("Tools");
291 
292  validateSelectedMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_V, java.awt.event.InputEvent.CTRL_MASK));
293  validateSelectedMenuItem.setText("Validate Selected");
294  validateSelectedMenuItem.addActionListener(new java.awt.event.ActionListener() {
295  public void actionPerformed(java.awt.event.ActionEvent evt) {
296  validateSelectedMenuItemActionPerformed(evt);
297  }
298  });
299  toolsMenu.add(validateSelectedMenuItem);
300  toolsMenu.add(jSeparator2);
301 
302  filterMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_G, java.awt.event.InputEvent.CTRL_MASK));
303  filterMenuItem.setText("Show Failed Nodes");
304  filterMenuItem.addActionListener(new java.awt.event.ActionListener() {
305  public void actionPerformed(java.awt.event.ActionEvent evt) {
306  filterMenuItemActionPerformed(evt);
307  }
308  });
309  toolsMenu.add(filterMenuItem);
310  toolsMenu.add(jSeparator1);
311 
312  bulkMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_B, java.awt.event.InputEvent.CTRL_MASK));
313  bulkMenuItem.setText("Bulk Validation");
314  bulkMenuItem.addActionListener(new java.awt.event.ActionListener() {
315  public void actionPerformed(java.awt.event.ActionEvent evt) {
316  bulkMenuItemActionPerformed(evt);
317  }
318  });
319  toolsMenu.add(bulkMenuItem);
320  toolsMenu.add(jSeparator3);
321 
322  settingsMenuItem.setText("Settings");
323  settingsMenuItem.addActionListener(new java.awt.event.ActionListener() {
324  public void actionPerformed(java.awt.event.ActionEvent evt) {
325  settingsMenuItemActionPerformed(evt);
326  }
327  });
328  toolsMenu.add(settingsMenuItem);
329 
330  jMenuBar1.add(toolsMenu);
331 
332  helpMenu.setText("Help");
333 
334  helpMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_H, java.awt.event.InputEvent.CTRL_MASK));
335  helpMenuItem.setText("Help Content");
336  helpMenu.add(helpMenuItem);
337  helpMenu.add(jSeparator6);
338 
339  aboutMenuItem.setText("About");
340  aboutMenuItem.addActionListener(new java.awt.event.ActionListener() {
341  public void actionPerformed(java.awt.event.ActionEvent evt) {
342  aboutMenuItemActionPerformed(evt);
343  }
344  });
345  helpMenu.add(aboutMenuItem);
346 
347  jMenuBar1.add(helpMenu);
348 
349  setJMenuBar(jMenuBar1);
350 
351  pack();
352  }// </editor-fold>//GEN-END:initComponents
353 
354  public void displayErrorMessage(String message) {
355 
356  JTextArea ta = new JTextArea(message);
357  ta.setEditable(false);
358  ta.setWrapStyleWord(true);
359  ta.setLineWrap(true);
360  ta.setSize(200, 100);
361  dialogReportProblem.showMessageDialog(this, ta);
362 
363  }
364 
365  private boolean loadOpenFilesDialog() {
366 
367  NXLoadFilesDialog loadFile = new NXLoadFilesDialog(this, true);
368  loadFile.setModalityType(ModalityType.APPLICATION_MODAL);
369  loadFile.setVisible(true);
370  nxsFile = loadFile.getNXSFile();
371  nxdlFile = loadFile.getNXDLFile();
372  return loadFile.OKButtonUsed();
373 
374  }
375 
376  private boolean saveResultsFilesDialog() {
377 
378  NXLoadFilesDialog loadFile = new NXLoadFilesDialog(this, true);
379  loadFile.setModalityType(ModalityType.APPLICATION_MODAL);
380  loadFile.setVisible(true);
381  nxsFile = loadFile.getNXSFile();
382  nxdlFile = loadFile.getNXDLFile();
383  return loadFile.OKButtonUsed();
384 
385  }
386 
387  private boolean loadValidatFileDialog() {
388 
389  NXValidateDialog loadValidate = new NXValidateDialog(this, true);
390  loadValidate.setModalityType(ModalityType.APPLICATION_MODAL);
391  if (nxdlFile != null) {
392  loadValidate.setNXDLFile(nxdlFile);
393  }
394  loadValidate.setVisible(true);
395  nxdlFile = loadValidate.getNXDLFile();
396  return loadValidate.OKButtonUsed();
397 
398  }
399 
400  private boolean loadSettingsFileDialog() {
401 
402  NXSettingsDialog loadSettings = new NXSettingsDialog(this, true);
403  loadSettings.setModalityType(ModalityType.APPLICATION_MODAL);
404  if (nxconvertCommand != null) {
405  loadSettings.setNXConvertCommand(nxconvertCommand);
406  }
407  loadSettings.setVisible(true);
408  nxconvertCommand = loadSettings.getNXConvertFile();
409  return loadSettings.OKButtonUsed();
410 
411  }
412 
413  private void openFilesMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_openFilesMenuItemActionPerformed
414 
415  if (evt.getSource() == openFilesMenuItem) {
416  if (!foundNXconvert) {
418  bundle.getString("nxconvertMissingError"));
419  return;
420  }
421 
422  boolean result = loadOpenFilesDialog();
423 
424  if (result) {
425  if (nxsFile != null) {
426  fileLoadingActions.setWhich(1);
427  fileLoadingActions.setNXSFile(nxsFile);
428  fileLoadingActions.setNXConvertFile(nxconvertCommand);
429  fileLoadingActions.setNXDLFile(nxdlFile);
430  (new Thread(fileLoadingActions)).start();
431  } else {
432  dialogReportProblem.showMessageDialog(this,
433  bundle.getString("openNexusFileMessage"));
434  }
435  }
436  }
437 
438  }//GEN-LAST:event_openFilesMenuItemActionPerformed
439 
440  private void jTree1ValueChanged(javax.swing.event.TreeSelectionEvent evt) {//GEN-FIRST:event_jTree1ValueChanged
441 
442  if (evt.getSource() == jTree1) {
443  if (jTree1.getSelectionPath() != null) {
444  NXNodeMapper node =
445  (NXNodeMapper) jTree1.getSelectionPath().getLastPathComponent();
446  txtStyle.updateTextPane(node);
447  }
448  }
449 
450  }//GEN-LAST:event_jTree1ValueChanged
451 
452  private void validateSelectedMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_validateSelectedMenuItemActionPerformed
453 
454  if (evt.getSource() == validateSelectedMenuItem) {
455 
456  //Nothing selected in tree
457  if (jTree1.isSelectionEmpty()) {
458  return;
459  }
460 
461  //Root node selected in tree
462  TreePath selected = jTree1.getSelectionPath();
463  int size = selected.getPath().length;
464  NXNodeMapper endNode = (NXNodeMapper) selected.getPath()[size - 1];
465  if (endNode.isRoot()) {
466  return;
467  }
468 
469  //No nxconvert binary found.
470  if (!foundNXconvert) {
472  bundle.getString("nxconvertMissingError"));
473  return;
474  }
475 
476  Document reducedDoc = null;
477  Document resultsDoc = null;
478 
479  //Check to see if the reduction and validation have not already
480  //been done, i.e. the files and documents already exist for the
481  //current selected tree.
482  if (treeUtils.getNXDLFile(jTree1) != null) {
483  nxdlFile = treeUtils.getNXDLFile(jTree1);
484  }
485 
486  if (treeUtils.getReducedFile(jTree1) != null) {
487  reducedFile = treeUtils.getReducedFile(jTree1);
488  reducedDoc = treeUtils.getReducedDoc(jTree1);
489  }
490 
491  if (treeUtils.getResultsFile(jTree1) != null) {
492  resultsFile = treeUtils.getResultsFile(jTree1);
493  resultsDoc = treeUtils.getResultsDoc(jTree1);
494  }
495 
496  //Show the validate file dialog.
497  boolean result = loadValidatFileDialog();
498 
499  if (result) {
500  if (nxdlFile != null) {
501 
502  fileLoadingActions.setWhich(2);
503  fileLoadingActions.setNXSFile(nxsFile);
504  fileLoadingActions.setNXConvertFile(nxconvertCommand);
505  fileLoadingActions.setNXDLFile(nxdlFile);
506  fileLoadingActions.setReducedFile(reducedFile);
507  fileLoadingActions.setReducedDoc(reducedDoc);
508  fileLoadingActions.setResultsDoc(resultsDoc);
509 
510  Thread thread = new Thread(fileLoadingActions);
511 
512  thread.start();
513 
514  } else {
515  dialogReportProblem.showMessageDialog(this,
516  bundle.getString("openSchemaFileMessage"));
517  }
518  }
519  }
520 
521  }//GEN-LAST:event_validateSelectedMenuItemActionPerformed
522 
523  private void settingsMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_settingsMenuItemActionPerformed
524 
525  if (evt.getSource() == settingsMenuItem) {
526 
527  boolean result = loadSettingsFileDialog();
528 
529  if (result) {
530  if (nxconvertCommand != null) {
531 
532  settings.setNXconvert(nxconvertCommand);
533  settings.saveUserSettings();
534  foundNXconvert = settings.foundNXconvert();
535  }
536  }
537 
538  if (!foundNXconvert) {
540  bundle.getString("nxconvertMissingError"));
541  return;
542  }
543 
544  }
545 
546  }//GEN-LAST:event_settingsMenuItemActionPerformed
547 
548  private void closeFileMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_closeFileMenuItemActionPerformed
549 
550  if (evt.getSource() == closeFileMenuItem) {
551 
552  NXNodeMapper node = treeUtils.getBaseNode(jTree1);
553  if (node != null) {
554  if (!node.isRoot()) {
555  root.remove(node);
556  domTree.removeNodeFromParent((MutableTreeNode) node);
557  domTree.updateTree();
558  }
559  }
560 
561  }
562  }//GEN-LAST:event_closeFileMenuItemActionPerformed
563 
564  private void exitAppMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_exitAppMenuItemActionPerformed
565  if (evt.getSource() == exitAppMenuItem) {
566  this.dispose();
567  }
568  }//GEN-LAST:event_exitAppMenuItemActionPerformed
569 
570  private void closeAllMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_closeAllMenuItemActionPerformed
571  if (evt.getSource() == closeAllMenuItem) {
572 
573  int result = dialogReportProblem.showConfirmDialog(this,
574  bundle.getString("closeAllWarningMessage"), null,
575  JOptionPane.OK_CANCEL_OPTION);
576 
577  if (result == 0) {
578  ArrayList<NXNodeMapper> nodes = root.getOpenNodes();
579  for (int i = 0; i < nodes.size(); ++i) {
580  domTree.removeNodeFromParent((MutableTreeNode) nodes.get(i));
581  }
582  root.removeAllNodes();
583  domTree.updateTree();
584  }
585  }
586  }//GEN-LAST:event_closeAllMenuItemActionPerformed
587 
588  private void bulkMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bulkMenuItemActionPerformed
589 
590  if (evt.getSource() == bulkMenuItem) {
591 
592  fileLoadingActions.setNXConvertFile(nxconvertCommand);
593  BulkLoadFilesFrame bulk = new BulkLoadFilesFrame(fileLoadingActions);
594  bulk.setVisible(true);
595 
596  }
597 
598  }//GEN-LAST:event_bulkMenuItemActionPerformed
599 
600  private void filterMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_filterMenuItemActionPerformed
601 
602  if (evt.getSource() == filterMenuItem) {
603  treeUtils.hideGoodNodes(jTree1);
604  }
605 
606  }//GEN-LAST:event_filterMenuItemActionPerformed
607 
608  private void saveMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_saveMenuItemActionPerformed
609  if (evt.getSource() == saveMenuItem) {
610 
611  jFileChooser1.setMultiSelectionEnabled(false);
612  jFileChooser1.setFileSelectionMode(jFileChooser1.DIRECTORIES_ONLY);
613  jFileChooser1.setApproveButtonText("Save");
614  int returnVal = jFileChooser1.showOpenDialog(this);
615 
616  if (returnVal == jFileChooser1.APPROVE_OPTION) {
617 
618  saveDirectory = jFileChooser1.getSelectedFile();
619 
620  if(!saveDirectory.exists()){
621  saveDirectory.mkdir();
622  }
623 
624  fileLoadingActions.setSaveDirectory(saveDirectory);
625  fileLoadingActions.setWhich(6);
626  Thread thread = new Thread(fileLoadingActions);
627  thread.start();
628 
629  dialogReportProblem.showMessageDialog(
630  this,
631  bundle.getString("savedResultsMessage"));
632 
633  } else {
634  saveDirectory = null;
635  }
636 
637  }
638  }//GEN-LAST:event_saveMenuItemActionPerformed
639 
640  private void aboutMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_aboutMenuItemActionPerformed
641  if (evt.getSource() == aboutMenuItem) {
642  AboutDialog about = new AboutDialog(this,true);
643  about.setVisible(true);
644  }
645  }//GEN-LAST:event_aboutMenuItemActionPerformed
646 
650  public static void main(String args[]) {
651  java.awt.EventQueue.invokeLater(new Runnable() {
652 
653  public void run() {
654  new NXvalidateFrame().setVisible(true);
655  }
656  });
657 
658 
659  }
660  // Variables declaration - do not modify//GEN-BEGIN:variables
661  private javax.swing.JMenuItem aboutMenuItem;
662  private javax.swing.JMenuItem bulkMenuItem;
663  private javax.swing.JMenuItem closeAllMenuItem;
664  private javax.swing.JMenuItem closeFileMenuItem;
665  private javax.swing.JOptionPane dialogReportProblem;
666  private javax.swing.JMenuItem exitAppMenuItem;
667  private javax.swing.JMenu fileMenu;
668  private javax.swing.JMenuItem filterMenuItem;
669  private javax.swing.JMenu helpMenu;
670  private javax.swing.JMenuItem helpMenuItem;
671  private javax.swing.JFileChooser jFileChooser1;
672  private javax.swing.JMenuBar jMenuBar1;
673  private javax.swing.JPanel jPanel2;
674  private javax.swing.JScrollPane jScrollPane1;
675  private javax.swing.JScrollPane jScrollPane2;
676  private javax.swing.JPopupMenu.Separator jSeparator1;
677  private javax.swing.JPopupMenu.Separator jSeparator2;
678  private javax.swing.JPopupMenu.Separator jSeparator3;
679  private javax.swing.JPopupMenu.Separator jSeparator4;
680  private javax.swing.JPopupMenu.Separator jSeparator5;
681  private javax.swing.JPopupMenu.Separator jSeparator6;
682  private javax.swing.JPopupMenu.Separator jSeparator7;
683  private javax.swing.JSplitPane jSplitPane1;
684  private javax.swing.JTextPane jTextPane1;
685  private javax.swing.JTree jTree1;
686  private javax.swing.JMenuItem openFilesMenuItem;
687  private javax.swing.JMenuItem saveMenuItem;
688  private javax.swing.JMenuItem settingsMenuItem;
689  private javax.swing.JMenu toolsMenu;
690  private javax.swing.JPopupMenu treePopupMenu;
691  private javax.swing.JMenuItem validateSelectedMenuItem;
692  // End of variables declaration//GEN-END:variables
693 }