Autopsy  4.19.1
Graphical digital forensics platform for The Sleuth Kit and other tools.
ExternalViewerGlobalSettingsPanel.java
Go to the documentation of this file.
1 /*
2  * Autopsy Forensic Browser
3  *
4  * Copyright 2011-2021 Basis Technology Corp.
5  * Contact: carrier <at> sleuthkit <dot> org
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  */
19 package org.sleuthkit.autopsy.directorytree;
20 
21 import java.awt.Color;
22 import java.awt.event.ActionListener;
23 import java.io.File;
24 import java.util.ArrayList;
25 import java.util.List;
26 import javax.swing.JFileChooser;
28 import javax.swing.JOptionPane;
29 import javax.swing.ListSelectionModel;
30 import javax.swing.event.ListSelectionEvent;
31 import org.openide.util.NbBundle;
32 import org.netbeans.spi.options.OptionsPanelController;
37 
43 @SuppressWarnings("PMD.SingularField") // UI widgets cause lots of false positives
44 final class ExternalViewerGlobalSettingsPanel extends javax.swing.JPanel implements OptionsPanel {
45 
46  private static final long serialVersionUID = 1L;
47 
48  private ExternalViewerGlobalSettingsTableModel tableModel;
49 
50  private final JFileChooserFactory chooserHelper = new JFileChooserFactory();
51 
52  ExternalViewerGlobalSettingsPanel() {
53  this(new ExternalViewerGlobalSettingsTableModel(new String[] {
54  "Mime type/Extension", "Application"}));
55  }
56 
60  ExternalViewerGlobalSettingsPanel(ExternalViewerGlobalSettingsTableModel tableModel) {
61  initComponents();
62  this.tableModel = tableModel;
63  customizeComponents(tableModel);
64  }
65 
69  private void customizeComponents(ExternalViewerGlobalSettingsTableModel tableModel) {
70  ExternalViewerRulesTable.setModel(tableModel);
71  ExternalViewerRulesTable.setAutoCreateRowSorter(true);
72  ExternalViewerRulesTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
73  ListSelectionModel selectionModel = ExternalViewerRulesTable.getSelectionModel();
74 
75  selectionModel.addListSelectionListener((ListSelectionEvent selection) -> {
76  enableButtons();
77  });
78  }
79 
85  public void deleteRuleButtonClick(int selectedIndex) {
86  setSelectionInterval(selectedIndex, selectedIndex);
87  deleteRuleButton.getListeners(ActionListener.class)[0].actionPerformed(null);
88  }
89 
97  public void setSelectionInterval(int startingIndex, int endIndex) {
98  ExternalViewerRulesTable.getSelectionModel().setSelectionInterval(startingIndex, endIndex);
99  }
100 
107  public boolean isSelected(int index) {
108  return ExternalViewerRulesTable.getSelectionModel().isSelectedIndex(index);
109  }
110 
116  @SuppressWarnings("unchecked")
117  // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
118  private void initComponents() {
119 
120  newRuleButton1 = new javax.swing.JButton();
121  jButton2 = new javax.swing.JButton();
122  jPanel1 = new javax.swing.JPanel();
123  jPanel2 = new javax.swing.JPanel();
124  newRuleButton = new javax.swing.JButton();
125  jScrollPane4 = new javax.swing.JScrollPane();
126  ExternalViewerRulesTable = new javax.swing.JTable();
127  externalViewerTitleLabel = new javax.swing.JLabel();
128  deleteRuleButton = new javax.swing.JButton();
129  editRuleButton = new javax.swing.JButton();
130  jPanel3 = new javax.swing.JPanel();
131  HxDPath = new javax.swing.JTextField();
132  HxDLabel = new javax.swing.JLabel();
133  ContentViewerExtensionLabel = new javax.swing.JLabel();
134  browseHxDDirectory = new javax.swing.JButton();
135 
136  newRuleButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/images/add16.png"))); // NOI18N
137  org.openide.awt.Mnemonics.setLocalizedText(newRuleButton1, org.openide.util.NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class, "ExternalViewerGlobalSettingsPanel.newRuleButton1.text")); // NOI18N
138  newRuleButton1.setMaximumSize(new java.awt.Dimension(111, 25));
139  newRuleButton1.setMinimumSize(new java.awt.Dimension(111, 25));
140 
141  org.openide.awt.Mnemonics.setLocalizedText(jButton2, org.openide.util.NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class, "ExternalViewerGlobalSettingsPanel.jButton2.text")); // NOI18N
142 
143  setPreferredSize(new java.awt.Dimension(701, 453));
144 
145  jPanel1.setPreferredSize(new java.awt.Dimension(701, 453));
146 
147  newRuleButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/images/add16.png"))); // NOI18N
148  org.openide.awt.Mnemonics.setLocalizedText(newRuleButton, org.openide.util.NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class, "ExternalViewerGlobalSettingsPanel.newRuleButton.text")); // NOI18N
149  newRuleButton.setMaximumSize(new java.awt.Dimension(111, 25));
150  newRuleButton.setMinimumSize(new java.awt.Dimension(111, 25));
151  newRuleButton.addActionListener(new java.awt.event.ActionListener() {
152  public void actionPerformed(java.awt.event.ActionEvent evt) {
153  newRuleButtonActionPerformed(evt);
154  }
155  });
156 
157  jScrollPane4.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(204, 204, 204)));
158 
159  jScrollPane4.setViewportView(ExternalViewerRulesTable);
160  if (ExternalViewerRulesTable.getColumnModel().getColumnCount() > 0) {
161  ExternalViewerRulesTable.getColumnModel().getColumn(0).setHeaderValue(org.openide.util.NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class, "ExternalViewerGlobalSettingsPanel.ExternalViewerRulesTable.columnModel.title0")); // NOI18N
162  ExternalViewerRulesTable.getColumnModel().getColumn(1).setHeaderValue(org.openide.util.NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class, "ExternalViewerGlobalSettingsPanel.ExternalViewerRulesTable.columnModel.title1")); // NOI18N
163  }
164 
165  org.openide.awt.Mnemonics.setLocalizedText(externalViewerTitleLabel, org.openide.util.NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class, "ExternalViewerGlobalSettingsPanel.externalViewerTitleLabel.text")); // NOI18N
166 
167  deleteRuleButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/images/delete16.png"))); // NOI18N
168  org.openide.awt.Mnemonics.setLocalizedText(deleteRuleButton, org.openide.util.NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class, "ExternalViewerGlobalSettingsPanel.deleteRuleButton.text")); // NOI18N
169  deleteRuleButton.setMaximumSize(new java.awt.Dimension(111, 25));
170  deleteRuleButton.setMinimumSize(new java.awt.Dimension(111, 25));
171  deleteRuleButton.addActionListener(new java.awt.event.ActionListener() {
172  public void actionPerformed(java.awt.event.ActionEvent evt) {
173  deleteRuleButtonActionPerformed(evt);
174  }
175  });
176 
177  editRuleButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/images/edit16.png"))); // NOI18N
178  org.openide.awt.Mnemonics.setLocalizedText(editRuleButton, org.openide.util.NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class, "ExternalViewerGlobalSettingsPanel.editRuleButton.text")); // NOI18N
179  editRuleButton.setMaximumSize(new java.awt.Dimension(111, 25));
180  editRuleButton.setMinimumSize(new java.awt.Dimension(111, 25));
181  editRuleButton.addActionListener(new java.awt.event.ActionListener() {
182  public void actionPerformed(java.awt.event.ActionEvent evt) {
183  editRuleButtonActionPerformed(evt);
184  }
185  });
186 
187  javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
188  jPanel2.setLayout(jPanel2Layout);
189  jPanel2Layout.setHorizontalGroup(
190  jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
191  .addGroup(jPanel2Layout.createSequentialGroup()
192  .addContainerGap()
193  .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
194  .addComponent(jScrollPane4, javax.swing.GroupLayout.PREFERRED_SIZE, 634, javax.swing.GroupLayout.PREFERRED_SIZE)
195  .addGroup(jPanel2Layout.createSequentialGroup()
196  .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
197  .addComponent(externalViewerTitleLabel)
198  .addGroup(jPanel2Layout.createSequentialGroup()
199  .addComponent(newRuleButton, javax.swing.GroupLayout.PREFERRED_SIZE, 97, javax.swing.GroupLayout.PREFERRED_SIZE)
200  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
201  .addComponent(editRuleButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
202  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
203  .addComponent(deleteRuleButton, javax.swing.GroupLayout.PREFERRED_SIZE, 109, javax.swing.GroupLayout.PREFERRED_SIZE)))
204  .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
205  );
206  jPanel2Layout.setVerticalGroup(
207  jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
208  .addGroup(jPanel2Layout.createSequentialGroup()
209  .addComponent(externalViewerTitleLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
210  .addGap(12, 12, 12)
211  .addComponent(jScrollPane4, javax.swing.GroupLayout.PREFERRED_SIZE, 219, javax.swing.GroupLayout.PREFERRED_SIZE)
212  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
213  .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
214  .addComponent(newRuleButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
215  .addComponent(editRuleButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
216  .addComponent(deleteRuleButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
217  .addContainerGap())
218  );
219 
220  HxDPath.setEditable(false);
221 
222  org.openide.awt.Mnemonics.setLocalizedText(HxDLabel, org.openide.util.NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class, "ExternalViewerGlobalSettingsPanel.HxDLabel.text")); // NOI18N
223 
224  org.openide.awt.Mnemonics.setLocalizedText(ContentViewerExtensionLabel, org.openide.util.NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class, "ExternalViewerGlobalSettingsPanel.ContentViewerExtensionLabel.text")); // NOI18N
225 
226  org.openide.awt.Mnemonics.setLocalizedText(browseHxDDirectory, org.openide.util.NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class, "ExternalViewerGlobalSettingsPanel.browseHxDDirectory.text")); // NOI18N
227  browseHxDDirectory.addActionListener(new java.awt.event.ActionListener() {
228  public void actionPerformed(java.awt.event.ActionEvent evt) {
229  browseHxDDirectoryActionPerformed(evt);
230  }
231  });
232 
233  javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
234  jPanel3.setLayout(jPanel3Layout);
235  jPanel3Layout.setHorizontalGroup(
236  jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
237  .addGroup(jPanel3Layout.createSequentialGroup()
238  .addComponent(ContentViewerExtensionLabel)
239  .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
240  .addGroup(jPanel3Layout.createSequentialGroup()
241  .addGap(21, 21, 21)
242  .addComponent(HxDLabel)
243  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
244  .addComponent(HxDPath, javax.swing.GroupLayout.DEFAULT_SIZE, 441, Short.MAX_VALUE)
245  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
246  .addComponent(browseHxDDirectory, javax.swing.GroupLayout.PREFERRED_SIZE, 82, javax.swing.GroupLayout.PREFERRED_SIZE))
247  );
248  jPanel3Layout.setVerticalGroup(
249  jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
250  .addGroup(jPanel3Layout.createSequentialGroup()
251  .addComponent(ContentViewerExtensionLabel)
252  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
253  .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
254  .addComponent(HxDPath, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
255  .addComponent(HxDLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
256  .addComponent(browseHxDDirectory))
257  .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
258  );
259 
260  browseHxDDirectory.setEnabled(PlatformUtil.isWindowsOS());
261 
262  javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
263  jPanel1.setLayout(jPanel1Layout);
264  jPanel1Layout.setHorizontalGroup(
265  jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
266  .addGroup(jPanel1Layout.createSequentialGroup()
267  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
268  .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
269  .addGroup(jPanel1Layout.createSequentialGroup()
270  .addContainerGap()
271  .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
272  .addGap(547, 547, 547))
273  );
274  jPanel1Layout.setVerticalGroup(
275  jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
276  .addGroup(jPanel1Layout.createSequentialGroup()
277  .addContainerGap()
278  .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
279  .addGap(18, 18, 18)
280  .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
281  .addContainerGap(83, Short.MAX_VALUE))
282  );
283 
284  javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
285  this.setLayout(layout);
286  layout.setHorizontalGroup(
287  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
288  .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, 1191, Short.MAX_VALUE)
289  );
290  layout.setVerticalGroup(
291  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
292  .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
293  );
294  }// </editor-fold>//GEN-END:initComponents
295 
296  private void newRuleButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_newRuleButtonActionPerformed
297  AddExternalViewerRuleDialog dialog = new AddExternalViewerRuleDialog();
298  AddExternalViewerRuleDialog.BUTTON_PRESSED result = dialog.getResult();
299  if (result == AddExternalViewerRuleDialog.BUTTON_PRESSED.OK) {
300  ExternalViewerRule newRule = dialog.getRule();
301  // Only allow one association for each MIME type or extension.
302  if (tableModel.containsRule(newRule)) {
303  JOptionPane.showMessageDialog(this,
304  NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class, "ExternalViewerGlobalSettingsPanel.JOptionPane.ruleAlreadyExists.message"),
305  NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class, "ExternalViewerGlobalSettingsPanel.JOptionPane.ruleAlreadyExists.title"),
306  JOptionPane.ERROR_MESSAGE);
307  } else {
308  tableModel.addRule(newRule);
309  enableButtons();
310  firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
311  }
312  }
313  }//GEN-LAST:event_newRuleButtonActionPerformed
314 
315  private void editRuleButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_editRuleButtonActionPerformed
316  int selectedIndex = ExternalViewerRulesTable.convertRowIndexToModel(ExternalViewerRulesTable.getSelectedRow());
317  ExternalViewerRule selectedRule = tableModel.getRuleAt(selectedIndex);
318  AddExternalViewerRuleDialog dialog = new AddExternalViewerRuleDialog(selectedRule);
319  AddExternalViewerRuleDialog.BUTTON_PRESSED result = dialog.getResult();
320  if (result == AddExternalViewerRuleDialog.BUTTON_PRESSED.OK) {
321  ExternalViewerRule newRule = dialog.getRule();
322  // Only allow one association for each MIME type or extension.
323  if (tableModel.containsRule(newRule)) {
324  JOptionPane.showMessageDialog(this,
325  NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class, "ExternalViewerGlobalSettingsPanel.JOptionPane.ruleAlreadyExists.message"),
326  NbBundle.getMessage(ExternalViewerGlobalSettingsPanel.class, "ExternalViewerGlobalSettingsPanel.JOptionPane.ruleAlreadyExists.title"),
327  JOptionPane.ERROR_MESSAGE);
328  } else {
329  tableModel.setRule(selectedIndex, dialog.getRule());
330  firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
331  }
332  }
333  }//GEN-LAST:event_editRuleButtonActionPerformed
334 
335  private void deleteRuleButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deleteRuleButtonActionPerformed
336  tableModel.removeRule(ExternalViewerRulesTable.convertRowIndexToModel(ExternalViewerRulesTable.getSelectedRow()));
337  ExternalViewerRulesTable.getSelectionModel().clearSelection();
338  enableButtons();
339  firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
340  }//GEN-LAST:event_deleteRuleButtonActionPerformed
341 
342  private void browseHxDDirectoryActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_browseHxDDirectoryActionPerformed
343  JFileChooser fileWindow = chooserHelper.getChooser();
344  fileWindow.setFileSelectionMode(JFileChooser.FILES_ONLY);
345  GeneralFilter exeFilter = new GeneralFilter(GeneralFilter.EXECUTABLE_EXTS, GeneralFilter.EXECUTABLE_DESC);
346  File HxDPathFile = new File(HxDPath.getText());
347  if(HxDPathFile.exists() && HxDPathFile.canExecute()) {
348  fileWindow.setCurrentDirectory(new File(HxDPath.getText()));
349  }
350  fileWindow.setDragEnabled(false);
351  fileWindow.setFileFilter(exeFilter);
352  fileWindow.setMultiSelectionEnabled(false);
353  int returnVal = fileWindow.showSaveDialog(this);
354  if(returnVal == JFileChooser.APPROVE_OPTION) {
355  File HxDExecutable = fileWindow.getSelectedFile();
356  HxDPath.setForeground(Color.BLACK);
357  HxDPath.setText(HxDExecutable.getAbsolutePath());
358  firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
359  }
360  }//GEN-LAST:event_browseHxDDirectoryActionPerformed
361 
362  @Override
363  public void store() {
364  //Dump rules from table model into a list to be stored by the rules manager.
365  List<ExternalViewerRule> rules = new ArrayList<>();
366  for(int i = 0; i < tableModel.getRowCount(); i++) {
367  rules.add(tableModel.getRuleAt(i));
368  }
369  ExternalViewerRulesManager.getInstance().setUserRules(rules);
370  UserPreferences.setExternalHexEditorPath(HxDPath.getText());
371  }
372 
373  @Override
374  public void load() {
375  List<ExternalViewerRule> rules = ExternalViewerRulesManager.getInstance().getUserRules();
376  for(ExternalViewerRule rule : rules) {
377  if(!tableModel.containsRule(rule)) {
378  tableModel.addRule(rule);
379  }
380  }
381  String editorPath = UserPreferences.getExternalHexEditorPath();
382  File HdXExecutable = new File(editorPath);
383  if(HdXExecutable.exists() || HdXExecutable.canExecute()) {
384  HxDPath.setText(editorPath);
385  } else {
386  HxDPath.setForeground(Color.RED);
387  HxDPath.setText(editorPath);
388  }
389  enableButtons();
390  }
391 
395  boolean enableButtons() {
396  boolean ruleIsSelected = ExternalViewerRulesTable.getSelectedRow() >= 0;
397  editRuleButton.setEnabled(ruleIsSelected);
398  deleteRuleButton.setEnabled(ruleIsSelected);
399  return ruleIsSelected;
400  }
401 
402  // Variables declaration - do not modify//GEN-BEGIN:variables
403  private javax.swing.JLabel ContentViewerExtensionLabel;
404  private javax.swing.JTable ExternalViewerRulesTable;
405  private javax.swing.JLabel HxDLabel;
406  private javax.swing.JTextField HxDPath;
407  private javax.swing.JButton browseHxDDirectory;
408  private javax.swing.JButton deleteRuleButton;
409  private javax.swing.JButton editRuleButton;
410  private javax.swing.JLabel externalViewerTitleLabel;
411  private javax.swing.JButton jButton2;
412  private javax.swing.JPanel jPanel1;
413  private javax.swing.JPanel jPanel2;
414  private javax.swing.JPanel jPanel3;
415  private javax.swing.JScrollPane jScrollPane4;
416  private javax.swing.JButton newRuleButton;
417  private javax.swing.JButton newRuleButton1;
418  // End of variables declaration//GEN-END:variables
419 }

Copyright © 2012-2021 Basis Technology. Generated on: Thu Sep 30 2021
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.