Autopsy  4.1
Graphical digital forensics platform for The Sleuth Kit and other tools.
InterestingItemDefsPanel.java
Go to the documentation of this file.
1 /*
2  * Autopsy Forensic Browser
3  *
4  * Copyright 2011-2016 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.modules.interestingitems;
20 
21 import java.awt.EventQueue;
22 import java.util.ArrayList;
23 import java.util.HashMap;
24 import java.util.HashSet;
25 import java.util.List;
26 import java.util.Map;
27 import java.util.Set;
28 import java.util.TreeMap;
29 import java.util.logging.Level;
30 import javax.swing.DefaultListModel;
31 import javax.swing.JButton;
32 import javax.swing.JOptionPane;
33 import javax.swing.event.ListSelectionEvent;
34 import javax.swing.event.ListSelectionListener;
35 import org.netbeans.spi.options.OptionsPanelController;
36 import org.openide.util.NbBundle;
42 
46 final class InterestingItemDefsPanel extends IngestModuleGlobalSettingsPanel implements OptionsPanel {
47 
48  @NbBundle.Messages({
49  "InterestingItemDefsPanel.bytes=Bytes",
50  "InterestingItemDefsPanel.kiloBytes=Kilobytes",
51  "InterestingItemDefsPanel.megaBytes=Megabytes",
52  "InterestingItemDefsPanel.gigaBytes=Gigabytes",
53  "InterestingItemsDefsPanel.loadError=Error loading interesting files sets from file.",
54  "InterestingItemsDefsPanel.saveError=Error saving interesting files sets to file."
55  })
56 
57  private final DefaultListModel<FilesSet> setsListModel = new DefaultListModel<>();
58  private final DefaultListModel<FilesSet.Rule> rulesListModel = new DefaultListModel<>();
59  private final Logger logger = Logger.getLogger(InterestingItemDefsPanel.class.getName());
60  private final JButton okButton = new JButton("OK");
61  private final JButton cancelButton = new JButton("Cancel");
62 
63  // The following is a map of interesting files set names to interesting
64  // files set definitions. It is a snapshot of the files set definitions
65  // obtained from the interesting item definitions manager at the time the
66  // the panel is loaded. When the panel saves or stores its settings, these
67  // definitions, possibly changed, are submitted back to the interesting item
68  // definitions manager. Note that it is a tree map to aid in displaying
69  // files sets in sorted order by name.
70  private TreeMap<String, FilesSet> filesSets;
71 
75  InterestingItemDefsPanel() {
76  this.initComponents();
77  this.customInit();
78  this.setsList.setModel(setsListModel);
79  this.setsList.addListSelectionListener(new InterestingItemDefsPanel.SetsListSelectionListener());
80  this.rulesList.setModel(rulesListModel);
81  this.rulesList.addListSelectionListener(new InterestingItemDefsPanel.RulesListSelectionListener());
82  }
83 
84  @NbBundle.Messages({"InterestingItemDefsPanel.Title=Global Interesting Items Settings"})
85  private void customInit() {
86  setName(Bundle.InterestingItemDefsPanel_Title());
87 
88  Set<String> fileTypesCollated = new HashSet<>();
89  for (String mediaType : FileTypeDetector.getStandardDetectedTypes()) {
90  fileTypesCollated.add(mediaType);
91  }
92 
93  FileTypeDetector fileTypeDetector;
94  try {
95  fileTypeDetector = new FileTypeDetector();
96  List<String> userDefinedFileTypes = fileTypeDetector.getUserDefinedTypes();
97  fileTypesCollated.addAll(userDefinedFileTypes);
98 
99  } catch (FileTypeDetector.FileTypeDetectorInitException ex) {
100  logger.log(Level.SEVERE, "Unable to get user defined file types", ex);
101  }
102 
103  List<String> toSort = new ArrayList<>(fileTypesCollated);
104  toSort.sort((String string1, String string2) -> {
105  int result = String.CASE_INSENSITIVE_ORDER.compare(string1, string2);
106  if (result == 0) {
107  result = string1.compareTo(string2);
108  }
109  return result;
110  });
111 
112  for (String file : toSort) {
113  mimeTypeComboBox.addItem(file);
114  }
115  this.fileSizeUnitComboBox.setSelectedIndex(1);
116  this.equalitySignComboBox.setSelectedIndex(2);
117  }
118 
122  @Override
123  public void saveSettings() {
124  try {
125  InterestingItemDefsManager.getInstance().setInterestingFilesSets(this.filesSets);
126  } catch (InterestingItemDefsManager.InterestingItemDefsManagerException ex) {
127  MessageNotifyUtil.Message.error(Bundle.InterestingItemsDefsPanel_saveError());
128  }
129  }
130 
134  @Override
135  public void store() {
136  this.saveSettings();
137  }
138 
142  @Override
143  public void load() {
144  this.resetComponents();
145 
146  try {
147  // Get a working copy of the interesting files set definitions and sort
148  // by set name.
149  this.filesSets = new TreeMap<>(InterestingItemDefsManager.getInstance().getInterestingFilesSets());
150  } catch (InterestingItemDefsManager.InterestingItemDefsManagerException ex) {
151  MessageNotifyUtil.Message.error(Bundle.InterestingItemsDefsPanel_loadError());
152  this.filesSets = new TreeMap<>();
153  }
154 
155  // Populate the list model for the interesting files sets list
156  // component.
157  for (FilesSet set : this.filesSets.values()) {
158  this.setsListModel.addElement(set);
159  }
160 
161  if (!this.filesSets.isEmpty()) {
162  // Select the first files set by default. The list selections
163  // listeners will then populate the other components.
164  EventQueue.invokeLater(() -> {
165  InterestingItemDefsPanel.this.setsList.setSelectedIndex(0);
166  });
167  }
168  }
169 
173  private void resetComponents() {
174  this.resetRuleComponents();
175  this.setsListModel.clear();
176  this.setDescriptionTextArea.setText("");
177  this.ignoreKnownFilesCheckbox.setSelected(true);
178  this.newSetButton.setEnabled(true);
179  this.editSetButton.setEnabled(false);
180  this.deleteSetButton.setEnabled(false);
181  }
182 
187  private void resetRuleComponents() {
188  this.fileNameTextField.setText("");
189  this.fileNameRadioButton.setSelected(true);
190  this.fileNameRegexCheckbox.setSelected(false);
191  this.filesRadioButton.setSelected(true);
192  this.rulePathConditionTextField.setText("");
193  this.rulePathConditionRegexCheckBox.setSelected(false);
194  this.mimeTypeComboBox.setSelectedIndex(0);
195  this.equalitySignComboBox.setSelectedIndex(2);
196  this.fileSizeUnitComboBox.setSelectedIndex(1);
197  this.fileSizeSpinner.setValue(0);
198  this.newRuleButton.setEnabled(!this.setsListModel.isEmpty());
199  this.editRuleButton.setEnabled(false);
200  this.deleteRuleButton.setEnabled(false);
201  }
202 
206  private final class SetsListSelectionListener implements ListSelectionListener {
207 
208  @Override
209  public void valueChanged(ListSelectionEvent e) {
210  if (e.getValueIsAdjusting()) {
211  return;
212  }
213 
214  InterestingItemDefsPanel.this.rulesListModel.clear();
215  InterestingItemDefsPanel.this.resetRuleComponents();
216 
217  // Get the selected interesting files set and populate the set
218  // components.
219  FilesSet selectedSet = InterestingItemDefsPanel.this.setsList.getSelectedValue();
220  if (selectedSet != null) {
221  // Populate the components that display the properties of the
222  // selected files set.
223  InterestingItemDefsPanel.this.setDescriptionTextArea.setText(selectedSet.getDescription());
224  InterestingItemDefsPanel.this.ignoreKnownFilesCheckbox.setSelected(selectedSet.ignoresKnownFiles());
225 
226  // Enable the new, edit and delete set buttons.
227  InterestingItemDefsPanel.this.newSetButton.setEnabled(true);
228  InterestingItemDefsPanel.this.editSetButton.setEnabled(true);
229  InterestingItemDefsPanel.this.deleteSetButton.setEnabled(true);
230 
231  // Populate the rule definitions list, sorted by name.
232  TreeMap<String, FilesSet.Rule> rules = new TreeMap<>(selectedSet.getRules());
233  for (FilesSet.Rule rule : rules.values()) {
234  InterestingItemDefsPanel.this.rulesListModel.addElement(rule);
235  }
236 
237  // Select the first rule by default.
238  if (!InterestingItemDefsPanel.this.rulesListModel.isEmpty()) {
239  InterestingItemDefsPanel.this.rulesList.setSelectedIndex(0);
240  }
241  }
242  }
243 
244  }
245 
250  private final class RulesListSelectionListener implements ListSelectionListener {
251 
252  @Override
253  public void valueChanged(ListSelectionEvent e) {
254  if (e.getValueIsAdjusting()) {
255  return;
256  }
257 
258  // Get the selected rule and populate the rule components.
259  FilesSet.Rule rule = InterestingItemDefsPanel.this.rulesList.getSelectedValue();
260  if (rule != null) {
261  // Get the conditions that make up the rule.
262  FilesSet.Rule.FileNameCondition nameCondition = rule.getFileNameCondition();
263  FilesSet.Rule.MetaTypeCondition typeCondition = rule.getMetaTypeCondition();
264  FilesSet.Rule.ParentPathCondition pathCondition = rule.getPathCondition();
265  FilesSet.Rule.MimeTypeCondition mimeTypeCondition = rule.getMimeTypeCondition();
266  FilesSet.Rule.FileSizeCondition fileSizeCondition = rule.getFileSizeCondition();
267 
268  // Populate the components that display the properties of the
269  // selected rule.
270  if (nameCondition != null) {
271  InterestingItemDefsPanel.this.fileNameTextField.setText(nameCondition.getTextToMatch());
272  InterestingItemDefsPanel.this.fileNameRadioButton.setSelected(nameCondition instanceof FilesSet.Rule.FullNameCondition);
273  InterestingItemDefsPanel.this.fileNameExtensionRadioButton.setSelected(nameCondition instanceof FilesSet.Rule.ExtensionCondition);
274  InterestingItemDefsPanel.this.fileNameRegexCheckbox.setSelected(nameCondition.isRegex());
275  } else {
276  InterestingItemDefsPanel.this.fileNameTextField.setText("");
277  InterestingItemDefsPanel.this.fileNameRadioButton.setSelected(true);
278  InterestingItemDefsPanel.this.fileNameExtensionRadioButton.setSelected(false);
279  InterestingItemDefsPanel.this.fileNameRegexCheckbox.setSelected(false);
280  }
281  switch (typeCondition.getMetaType()) {
282  case FILES:
283  InterestingItemDefsPanel.this.filesRadioButton.setSelected(true);
284  break;
285  case DIRECTORIES:
286  InterestingItemDefsPanel.this.dirsRadioButton.setSelected(true);
287  break;
288  case FILES_AND_DIRECTORIES:
289  InterestingItemDefsPanel.this.bothRadioButton.setSelected(true);
290  break;
291  }
292  if (pathCondition != null) {
293  InterestingItemDefsPanel.this.rulePathConditionTextField.setText(pathCondition.getTextToMatch());
294  InterestingItemDefsPanel.this.rulePathConditionRegexCheckBox.setSelected(pathCondition.isRegex());
295  } else {
296  InterestingItemDefsPanel.this.rulePathConditionTextField.setText("");
297  InterestingItemDefsPanel.this.rulePathConditionRegexCheckBox.setSelected(false);
298  }
299  if (mimeTypeCondition != null) {
300  InterestingItemDefsPanel.this.mimeTypeComboBox.setSelectedItem(mimeTypeCondition.getMimeType());
301  } else {
302  InterestingItemDefsPanel.this.mimeTypeComboBox.setSelectedIndex(0);
303  }
304  if (fileSizeCondition != null) {
305  InterestingItemDefsPanel.this.fileSizeUnitComboBox.setSelectedItem(fileSizeCondition.getUnit().getName());
306  InterestingItemDefsPanel.this.equalitySignComboBox.setSelectedItem(fileSizeCondition.getComparator().getSymbol());
307  InterestingItemDefsPanel.this.fileSizeSpinner.setValue(fileSizeCondition.getSizeValue());
308  } else {
309  InterestingItemDefsPanel.this.fileSizeUnitComboBox.setSelectedIndex(1);
310  InterestingItemDefsPanel.this.equalitySignComboBox.setSelectedIndex(2);
311  InterestingItemDefsPanel.this.fileSizeSpinner.setValue(0);
312  }
313 
314  // Enable the new, edit and delete rule buttons.
315  InterestingItemDefsPanel.this.newRuleButton.setEnabled(true);
316  InterestingItemDefsPanel.this.editRuleButton.setEnabled(true);
317  InterestingItemDefsPanel.this.deleteRuleButton.setEnabled(true);
318  } else {
319  InterestingItemDefsPanel.this.resetRuleComponents();
320  }
321  }
322 
323  }
324 
333  private void doFileSetsDialog(FilesSet selectedSet) {
334  // Create a files set defintion panle.
335  FilesSetPanel panel;
336  if (selectedSet != null) {
337  // Editing an existing set definition.
338  panel = new FilesSetPanel(selectedSet);
339  } else {
340  // Creating a new set definition.
341  panel = new FilesSetPanel();
342  }
343 
344  // Do a dialog box with the files set panel until the user either enters
345  // a valid definition or cancels. Note that the panel gives the user
346  // feedback when isValidDefinition() is called.
347  int option = JOptionPane.OK_OPTION;
348  do {
349  option = JOptionPane.showConfirmDialog(null, panel, NbBundle.getMessage(FilesSetPanel.class, "FilesSetPanel.title"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);
350  } while (option == JOptionPane.OK_OPTION && !panel.isValidDefinition());
351 
352  // While adding new ruleset(selectedSet == null), if rule set with same name already exists, do not add to the filesSets hashMap.
353  // In case of editing an existing ruleset(selectedSet != null), following check is not performed.
354  if (this.filesSets.containsKey(panel.getFilesSetName()) && selectedSet == null) {
355  MessageNotifyUtil.Message.error(NbBundle.getMessage(this.getClass(),
356  "InterestingItemDefsPanel.doFileSetsDialog.duplicateRuleSet.text",
357  panel.getFilesSetName()));
358  return;
359  }
360 
361  if (option == JOptionPane.OK_OPTION) {
362  Map<String, FilesSet.Rule> rules = new HashMap<>();
363  if (selectedSet != null) {
364  // Interesting file sets are immutable for thread safety,
365  // so editing a files set definition is a replacement operation.
366  // Preserve the existing rules from the set being edited.
367  rules.putAll(selectedSet.getRules());
368  }
369  this.replaceFilesSet(selectedSet, panel.getFilesSetName(), panel.getFilesSetDescription(), panel.getFileSetIgnoresKnownFiles(), rules);
370  }
371  }
372 
380  private void doFilesSetRuleDialog(FilesSet.Rule selectedRule) {
381  // Create a files set rule panel.
382  FilesSetRulePanel panel;
383  if (selectedRule != null) {
384  // Editing an existing rule definition.
385  panel = new FilesSetRulePanel(selectedRule, okButton, cancelButton);
386  } else {
387  // Creating a new rule definition.
388  panel = new FilesSetRulePanel(okButton, cancelButton);
389  }
390  // Do a dialog box with the files set panel until the user either enters
391  // a valid definition or cancels. Note that the panel gives the user
392  // feedback when isValidDefinition() is called.
393  int option = JOptionPane.OK_OPTION;
394  do {
395  option = JOptionPane.showOptionDialog(null, panel, NbBundle.getMessage(FilesSetPanel.class, "FilesSetPanel.title"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE, null, new Object[]{okButton, cancelButton}, okButton);
396  } while (option == JOptionPane.OK_OPTION && !panel.isValidRuleDefinition());
397 
398  if (option == JOptionPane.OK_OPTION) {
399  // Interesting file sets are immutable for thread safety,
400  // so editing a files set rule definition is a replacement
401  // operation. Preserve the existing rules from the set being edited.
402  FilesSet selectedSet = this.setsList.getSelectedValue();
403  Map<String, FilesSet.Rule> rules = new HashMap<>(selectedSet.getRules());
404 
405  // Remove the "old" rule definition and add the new/edited
406  // definition.
407  if (selectedRule != null) {
408  rules.remove(selectedRule.getUuid());
409  }
410  FilesSet.Rule newRule = new FilesSet.Rule(panel.getRuleName(), panel.getFileNameCondition(), panel.getMetaTypeCondition(), panel.getPathCondition(), panel.getMimeTypeCondition(), panel.getFileSizeCondition());
411  rules.put(newRule.getUuid(), newRule);
412 
413  // Add the new/edited files set definition, replacing any previous
414  // definition with the same name and refreshing the display.
415  this.replaceFilesSet(selectedSet, selectedSet.getName(), selectedSet.getDescription(), selectedSet.ignoresKnownFiles(), rules);
416 
417  // Select the new/edited rule. Queue it up so it happens after the
418  // selection listeners react to the selection of the "new" files
419  // set.
420  EventQueue.invokeLater(() -> {
421  this.rulesList.setSelectedValue(newRule, true);
422  });
423  }
424  }
425 
439  void replaceFilesSet(FilesSet oldSet, String name, String description, boolean ignoresKnownFiles, Map<String, FilesSet.Rule> rules) {
440  if (oldSet != null) {
441  // Remove the set to be replaced from the working copy if the files
442  // set definitions.
443  this.filesSets.remove(oldSet.getName());
444  }
445 
446  // Make the new/edited set definition and add it to the working copy of
447  // the files set definitions.
448  FilesSet newSet = new FilesSet(name, description, ignoresKnownFiles, rules);
449  this.filesSets.put(newSet.getName(), newSet);
450 
451  // Redo the list model for the files set list component, which will make
452  // everything stays sorted as in the working copy tree set.
453  InterestingItemDefsPanel.this.setsListModel.clear();
454  for (FilesSet set : this.filesSets.values()) {
455  this.setsListModel.addElement(set);
456  }
457 
458  // Select the new/edited files set definition in the set definitions
459  // list. This will cause the selection listeners to repopulate the
460  // subordinate components.
461  this.setsList.setSelectedValue(newSet, true);
462  }
463 
469  @SuppressWarnings("unchecked")
470  // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
471  private void initComponents() {
472 
473  fileNameButtonGroup = new javax.swing.ButtonGroup();
474  typeButtonGroup = new javax.swing.ButtonGroup();
475  jScrollPane1 = new javax.swing.JScrollPane();
476  jPanel1 = new javax.swing.JPanel();
477  jLabel6 = new javax.swing.JLabel();
478  newRuleButton = new javax.swing.JButton();
479  filesRadioButton = new javax.swing.JRadioButton();
480  editRuleButton = new javax.swing.JButton();
481  rulesListLabel = new javax.swing.JLabel();
482  rulesListScrollPane = new javax.swing.JScrollPane();
483  rulesList = new javax.swing.JList<>();
484  setDescScrollPanel = new javax.swing.JScrollPane();
485  setDescriptionTextArea = new javax.swing.JTextArea();
486  editSetButton = new javax.swing.JButton();
487  setsListScrollPane = new javax.swing.JScrollPane();
488  setsList = new javax.swing.JList<>();
489  fileNameExtensionRadioButton = new javax.swing.JRadioButton();
490  jLabel3 = new javax.swing.JLabel();
491  fileNameTextField = new javax.swing.JTextField();
492  jLabel5 = new javax.swing.JLabel();
493  fileNameRadioButton = new javax.swing.JRadioButton();
494  rulePathConditionTextField = new javax.swing.JTextField();
495  ignoreKnownFilesCheckbox = new javax.swing.JCheckBox();
496  fileNameRegexCheckbox = new javax.swing.JCheckBox();
497  separator = new javax.swing.JSeparator();
498  setsListLabel = new javax.swing.JLabel();
499  bothRadioButton = new javax.swing.JRadioButton();
500  deleteSetButton = new javax.swing.JButton();
501  deleteRuleButton = new javax.swing.JButton();
502  newSetButton = new javax.swing.JButton();
503  jLabel2 = new javax.swing.JLabel();
504  dirsRadioButton = new javax.swing.JRadioButton();
505  jLabel1 = new javax.swing.JLabel();
506  jLabel4 = new javax.swing.JLabel();
507  rulePathConditionRegexCheckBox = new javax.swing.JCheckBox();
508  jScrollPane2 = new javax.swing.JScrollPane();
509  jTextArea1 = new javax.swing.JTextArea();
510  jLabel7 = new javax.swing.JLabel();
511  mimeTypeComboBox = new javax.swing.JComboBox<>();
512  jLabel8 = new javax.swing.JLabel();
513  equalitySignComboBox = new javax.swing.JComboBox<String>();
514  fileSizeSpinner = new javax.swing.JSpinner();
515  fileSizeUnitComboBox = new javax.swing.JComboBox<String>();
516 
517  setFont(getFont().deriveFont(getFont().getStyle() & ~java.awt.Font.BOLD, 11));
518 
519  jScrollPane1.setFont(jScrollPane1.getFont().deriveFont(jScrollPane1.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
520 
521  jPanel1.setFont(jPanel1.getFont().deriveFont(jPanel1.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
522 
523  jLabel6.setFont(jLabel6.getFont().deriveFont(jLabel6.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
524  org.openide.awt.Mnemonics.setLocalizedText(jLabel6, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.jLabel6.text")); // NOI18N
525 
526  newRuleButton.setFont(newRuleButton.getFont().deriveFont(newRuleButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
527  newRuleButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/images/add16.png"))); // NOI18N
528  org.openide.awt.Mnemonics.setLocalizedText(newRuleButton, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.newRuleButton.text")); // NOI18N
529  newRuleButton.addActionListener(new java.awt.event.ActionListener() {
530  public void actionPerformed(java.awt.event.ActionEvent evt) {
531  newRuleButtonActionPerformed(evt);
532  }
533  });
534 
535  typeButtonGroup.add(filesRadioButton);
536  filesRadioButton.setFont(filesRadioButton.getFont().deriveFont(filesRadioButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
537  filesRadioButton.setSelected(true);
538  org.openide.awt.Mnemonics.setLocalizedText(filesRadioButton, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.filesRadioButton.text")); // NOI18N
539  filesRadioButton.setEnabled(false);
540 
541  editRuleButton.setFont(editRuleButton.getFont().deriveFont(editRuleButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
542  editRuleButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/images/edit16.png"))); // NOI18N
543  org.openide.awt.Mnemonics.setLocalizedText(editRuleButton, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.editRuleButton.text")); // NOI18N
544  editRuleButton.setEnabled(false);
545  editRuleButton.addActionListener(new java.awt.event.ActionListener() {
546  public void actionPerformed(java.awt.event.ActionEvent evt) {
547  editRuleButtonActionPerformed(evt);
548  }
549  });
550 
551  rulesListLabel.setFont(rulesListLabel.getFont().deriveFont(rulesListLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
552  org.openide.awt.Mnemonics.setLocalizedText(rulesListLabel, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.rulesListLabel.text")); // NOI18N
553 
554  rulesListScrollPane.setFont(rulesListScrollPane.getFont().deriveFont(rulesListScrollPane.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
555 
556  rulesList.setFont(rulesList.getFont().deriveFont(rulesList.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
557  rulesList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
558  rulesListScrollPane.setViewportView(rulesList);
559 
560  setDescScrollPanel.setFont(setDescScrollPanel.getFont().deriveFont(setDescScrollPanel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
561 
562  setDescriptionTextArea.setEditable(false);
563  setDescriptionTextArea.setBackground(new java.awt.Color(240, 240, 240));
564  setDescriptionTextArea.setColumns(20);
565  setDescriptionTextArea.setFont(setDescriptionTextArea.getFont().deriveFont(setDescriptionTextArea.getFont().getStyle() & ~java.awt.Font.BOLD, 13));
566  setDescriptionTextArea.setLineWrap(true);
567  setDescriptionTextArea.setRows(2);
568  setDescriptionTextArea.setMinimumSize(new java.awt.Dimension(10, 22));
569  setDescriptionTextArea.setPreferredSize(new java.awt.Dimension(14, 40));
570  setDescScrollPanel.setViewportView(setDescriptionTextArea);
571 
572  editSetButton.setFont(editSetButton.getFont().deriveFont(editSetButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
573  editSetButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/images/edit16.png"))); // NOI18N
574  org.openide.awt.Mnemonics.setLocalizedText(editSetButton, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.editSetButton.text")); // NOI18N
575  editSetButton.setEnabled(false);
576  editSetButton.addActionListener(new java.awt.event.ActionListener() {
577  public void actionPerformed(java.awt.event.ActionEvent evt) {
578  editSetButtonActionPerformed(evt);
579  }
580  });
581 
582  setsListScrollPane.setFont(setsListScrollPane.getFont().deriveFont(setsListScrollPane.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
583 
584  setsList.setFont(setsList.getFont().deriveFont(setsList.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
585  setsList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
586  setsListScrollPane.setViewportView(setsList);
587 
588  fileNameButtonGroup.add(fileNameExtensionRadioButton);
589  fileNameExtensionRadioButton.setFont(fileNameExtensionRadioButton.getFont().deriveFont(fileNameExtensionRadioButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
590  org.openide.awt.Mnemonics.setLocalizedText(fileNameExtensionRadioButton, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.fileNameExtensionRadioButton.text")); // NOI18N
591  fileNameExtensionRadioButton.setEnabled(false);
592 
593  jLabel3.setFont(jLabel3.getFont().deriveFont(jLabel3.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
594  org.openide.awt.Mnemonics.setLocalizedText(jLabel3, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.jLabel3.text")); // NOI18N
595 
596  fileNameTextField.setEditable(false);
597  fileNameTextField.setFont(fileNameTextField.getFont().deriveFont(fileNameTextField.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
598  fileNameTextField.setText(org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.fileNameTextField.text")); // NOI18N
599  fileNameTextField.addActionListener(new java.awt.event.ActionListener() {
600  public void actionPerformed(java.awt.event.ActionEvent evt) {
601  fileNameTextFieldActionPerformed(evt);
602  }
603  });
604 
605  jLabel5.setFont(jLabel5.getFont().deriveFont(jLabel5.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
606  org.openide.awt.Mnemonics.setLocalizedText(jLabel5, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.jLabel5.text")); // NOI18N
607 
608  fileNameButtonGroup.add(fileNameRadioButton);
609  fileNameRadioButton.setFont(fileNameRadioButton.getFont().deriveFont(fileNameRadioButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
610  org.openide.awt.Mnemonics.setLocalizedText(fileNameRadioButton, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.fileNameRadioButton.text")); // NOI18N
611  fileNameRadioButton.setEnabled(false);
612 
613  rulePathConditionTextField.setEditable(false);
614  rulePathConditionTextField.setFont(rulePathConditionTextField.getFont().deriveFont(rulePathConditionTextField.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
615  rulePathConditionTextField.setText(org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.rulePathConditionTextField.text")); // NOI18N
616 
617  ignoreKnownFilesCheckbox.setFont(ignoreKnownFilesCheckbox.getFont().deriveFont(ignoreKnownFilesCheckbox.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
618  org.openide.awt.Mnemonics.setLocalizedText(ignoreKnownFilesCheckbox, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.ignoreKnownFilesCheckbox.text")); // NOI18N
619  ignoreKnownFilesCheckbox.setEnabled(false);
620  ignoreKnownFilesCheckbox.addActionListener(new java.awt.event.ActionListener() {
621  public void actionPerformed(java.awt.event.ActionEvent evt) {
622  ignoreKnownFilesCheckboxActionPerformed(evt);
623  }
624  });
625 
626  fileNameRegexCheckbox.setFont(fileNameRegexCheckbox.getFont().deriveFont(fileNameRegexCheckbox.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
627  org.openide.awt.Mnemonics.setLocalizedText(fileNameRegexCheckbox, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.fileNameRegexCheckbox.text")); // NOI18N
628  fileNameRegexCheckbox.setEnabled(false);
629 
630  separator.setOrientation(javax.swing.SwingConstants.VERTICAL);
631 
632  setsListLabel.setFont(setsListLabel.getFont().deriveFont(setsListLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
633  org.openide.awt.Mnemonics.setLocalizedText(setsListLabel, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.setsListLabel.text")); // NOI18N
634 
635  typeButtonGroup.add(bothRadioButton);
636  bothRadioButton.setFont(bothRadioButton.getFont().deriveFont(bothRadioButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
637  org.openide.awt.Mnemonics.setLocalizedText(bothRadioButton, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.bothRadioButton.text")); // NOI18N
638  bothRadioButton.setEnabled(false);
639 
640  deleteSetButton.setFont(deleteSetButton.getFont().deriveFont(deleteSetButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
641  deleteSetButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/images/delete16.png"))); // NOI18N
642  org.openide.awt.Mnemonics.setLocalizedText(deleteSetButton, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.deleteSetButton.text")); // NOI18N
643  deleteSetButton.setEnabled(false);
644  deleteSetButton.addActionListener(new java.awt.event.ActionListener() {
645  public void actionPerformed(java.awt.event.ActionEvent evt) {
646  deleteSetButtonActionPerformed(evt);
647  }
648  });
649 
650  deleteRuleButton.setFont(deleteRuleButton.getFont().deriveFont(deleteRuleButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
651  deleteRuleButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/images/delete16.png"))); // NOI18N
652  org.openide.awt.Mnemonics.setLocalizedText(deleteRuleButton, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.deleteRuleButton.text")); // NOI18N
653  deleteRuleButton.setEnabled(false);
654  deleteRuleButton.addActionListener(new java.awt.event.ActionListener() {
655  public void actionPerformed(java.awt.event.ActionEvent evt) {
656  deleteRuleButtonActionPerformed(evt);
657  }
658  });
659 
660  newSetButton.setFont(newSetButton.getFont().deriveFont(newSetButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
661  newSetButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/images/add16.png"))); // NOI18N
662  org.openide.awt.Mnemonics.setLocalizedText(newSetButton, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.newSetButton.text")); // NOI18N
663  newSetButton.addActionListener(new java.awt.event.ActionListener() {
664  public void actionPerformed(java.awt.event.ActionEvent evt) {
665  newSetButtonActionPerformed(evt);
666  }
667  });
668 
669  jLabel2.setFont(jLabel2.getFont().deriveFont(jLabel2.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
670  org.openide.awt.Mnemonics.setLocalizedText(jLabel2, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.jLabel2.text")); // NOI18N
671 
672  typeButtonGroup.add(dirsRadioButton);
673  dirsRadioButton.setFont(dirsRadioButton.getFont().deriveFont(dirsRadioButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
674  org.openide.awt.Mnemonics.setLocalizedText(dirsRadioButton, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.dirsRadioButton.text")); // NOI18N
675  dirsRadioButton.setEnabled(false);
676  dirsRadioButton.addActionListener(new java.awt.event.ActionListener() {
677  public void actionPerformed(java.awt.event.ActionEvent evt) {
678  dirsRadioButtonActionPerformed(evt);
679  }
680  });
681 
682  jLabel1.setFont(jLabel1.getFont().deriveFont(jLabel1.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
683  org.openide.awt.Mnemonics.setLocalizedText(jLabel1, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.jLabel1.text")); // NOI18N
684 
685  jLabel4.setFont(jLabel4.getFont().deriveFont(jLabel4.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
686  org.openide.awt.Mnemonics.setLocalizedText(jLabel4, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.jLabel4.text")); // NOI18N
687 
688  rulePathConditionRegexCheckBox.setFont(rulePathConditionRegexCheckBox.getFont().deriveFont(rulePathConditionRegexCheckBox.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
689  org.openide.awt.Mnemonics.setLocalizedText(rulePathConditionRegexCheckBox, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.rulePathConditionRegexCheckBox.text")); // NOI18N
690  rulePathConditionRegexCheckBox.setEnabled(false);
691 
692  jScrollPane2.setFont(jScrollPane2.getFont().deriveFont(jScrollPane2.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
693 
694  jTextArea1.setEditable(false);
695  jTextArea1.setBackground(new java.awt.Color(240, 240, 240));
696  jTextArea1.setColumns(20);
697  jTextArea1.setFont(jTextArea1.getFont().deriveFont(jTextArea1.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
698  jTextArea1.setLineWrap(true);
699  jTextArea1.setRows(3);
700  jTextArea1.setText(org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.jTextArea1.text")); // NOI18N
701  jTextArea1.setWrapStyleWord(true);
702  jScrollPane2.setViewportView(jTextArea1);
703 
704  org.openide.awt.Mnemonics.setLocalizedText(jLabel7, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.jLabel7.text")); // NOI18N
705 
706  mimeTypeComboBox.setEditable(true);
707  mimeTypeComboBox.setModel(new javax.swing.DefaultComboBoxModel<String>(new String[] {""}));
708  mimeTypeComboBox.setEnabled(false);
709  mimeTypeComboBox.setMinimumSize(new java.awt.Dimension(0, 20));
710  mimeTypeComboBox.setPreferredSize(new java.awt.Dimension(12, 20));
711 
712  org.openide.awt.Mnemonics.setLocalizedText(jLabel8, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.jLabel8.text")); // NOI18N
713 
714  equalitySignComboBox.setModel(new javax.swing.DefaultComboBoxModel<String>(new String[] { "=", ">", "≥", "<", "≤" }));
715  equalitySignComboBox.setEnabled(false);
716 
717  fileSizeSpinner.setEnabled(false);
718  fileSizeSpinner.setMinimumSize(new java.awt.Dimension(2, 20));
719 
720  fileSizeUnitComboBox.setModel(new javax.swing.DefaultComboBoxModel<String>(new String[] { Bundle.InterestingItemDefsPanel_bytes(), Bundle.InterestingItemDefsPanel_kiloBytes(), Bundle.InterestingItemDefsPanel_megaBytes(), Bundle.InterestingItemDefsPanel_gigaBytes() }));
721  fileSizeUnitComboBox.setEnabled(false);
722 
723  javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
724  jPanel1.setLayout(jPanel1Layout);
725  jPanel1Layout.setHorizontalGroup(
726  jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
727  .addGroup(jPanel1Layout.createSequentialGroup()
728  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
729  .addGroup(jPanel1Layout.createSequentialGroup()
730  .addGap(360, 360, 360)
731  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
732  .addComponent(rulesListLabel)
733  .addComponent(jLabel5)
734  .addComponent(ignoreKnownFilesCheckbox)
735  .addComponent(jLabel6))
736  .addGap(0, 0, Short.MAX_VALUE))
737  .addGroup(jPanel1Layout.createSequentialGroup()
738  .addContainerGap()
739  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
740  .addGroup(jPanel1Layout.createSequentialGroup()
741  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
742  .addComponent(setsListLabel)
743  .addComponent(setsListScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 314, javax.swing.GroupLayout.PREFERRED_SIZE)
744  .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 314, javax.swing.GroupLayout.PREFERRED_SIZE))
745  .addGap(18, 18, 18)
746  .addComponent(separator, javax.swing.GroupLayout.PREFERRED_SIZE, 6, javax.swing.GroupLayout.PREFERRED_SIZE))
747  .addGroup(jPanel1Layout.createSequentialGroup()
748  .addComponent(newSetButton, javax.swing.GroupLayout.PREFERRED_SIZE, 93, javax.swing.GroupLayout.PREFERRED_SIZE)
749  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
750  .addComponent(editSetButton, javax.swing.GroupLayout.PREFERRED_SIZE, 89, javax.swing.GroupLayout.PREFERRED_SIZE)
751  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
752  .addComponent(deleteSetButton)))
753  .addGap(12, 12, 12)
754  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
755  .addGroup(jPanel1Layout.createSequentialGroup()
756  .addGap(20, 20, 20)
757  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
758  .addGroup(jPanel1Layout.createSequentialGroup()
759  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
760  .addGroup(jPanel1Layout.createSequentialGroup()
761  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
762  .addComponent(jLabel3)
763  .addComponent(jLabel2))
764  .addGap(6, 6, 6))
765  .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
766  .addComponent(jLabel4)
767  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)))
768  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
769  .addComponent(rulePathConditionTextField, javax.swing.GroupLayout.Alignment.LEADING)
770  .addComponent(fileNameTextField)))
771  .addGroup(jPanel1Layout.createSequentialGroup()
772  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
773  .addComponent(jLabel7)
774  .addComponent(jLabel8))
775  .addGap(6, 6, 6)
776  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
777  .addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanel1Layout.createSequentialGroup()
778  .addComponent(equalitySignComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 38, javax.swing.GroupLayout.PREFERRED_SIZE)
779  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
780  .addComponent(fileSizeSpinner, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
781  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
782  .addComponent(fileSizeUnitComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 83, javax.swing.GroupLayout.PREFERRED_SIZE)
783  .addGap(8, 8, 8))
784  .addComponent(mimeTypeComboBox, javax.swing.GroupLayout.Alignment.LEADING, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))))
785  .addGroup(jPanel1Layout.createSequentialGroup()
786  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
787  .addComponent(setDescScrollPanel)
788  .addComponent(rulesListScrollPane))
789  .addGap(7, 7, 7))
790  .addGroup(jPanel1Layout.createSequentialGroup()
791  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
792  .addComponent(jLabel1)
793  .addGroup(jPanel1Layout.createSequentialGroup()
794  .addGap(92, 92, 92)
795  .addComponent(filesRadioButton, javax.swing.GroupLayout.PREFERRED_SIZE, 47, javax.swing.GroupLayout.PREFERRED_SIZE)
796  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
797  .addComponent(dirsRadioButton)
798  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
799  .addComponent(bothRadioButton))
800  .addGroup(jPanel1Layout.createSequentialGroup()
801  .addComponent(newRuleButton)
802  .addGap(18, 18, 18)
803  .addComponent(editRuleButton)
804  .addGap(18, 18, 18)
805  .addComponent(deleteRuleButton))
806  .addGroup(jPanel1Layout.createSequentialGroup()
807  .addGap(96, 96, 96)
808  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
809  .addGroup(jPanel1Layout.createSequentialGroup()
810  .addComponent(fileNameRadioButton)
811  .addGap(4, 4, 4)
812  .addComponent(fileNameExtensionRadioButton)
813  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
814  .addComponent(fileNameRegexCheckbox))
815  .addComponent(rulePathConditionRegexCheckBox))))
816  .addGap(4, 4, 4)))))
817  .addGap(23, 23, 23))
818  );
819  jPanel1Layout.setVerticalGroup(
820  jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
821  .addGroup(jPanel1Layout.createSequentialGroup()
822  .addContainerGap()
823  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
824  .addComponent(separator)
825  .addGroup(jPanel1Layout.createSequentialGroup()
826  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
827  .addGroup(jPanel1Layout.createSequentialGroup()
828  .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
829  .addGap(18, 18, 18)
830  .addComponent(setsListLabel)
831  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
832  .addComponent(setsListScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 354, Short.MAX_VALUE)
833  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
834  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
835  .addComponent(newSetButton)
836  .addComponent(editSetButton)
837  .addComponent(deleteSetButton)))
838  .addGroup(jPanel1Layout.createSequentialGroup()
839  .addComponent(jLabel6)
840  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
841  .addComponent(jLabel5)
842  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
843  .addComponent(setDescScrollPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 42, javax.swing.GroupLayout.PREFERRED_SIZE)
844  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
845  .addComponent(ignoreKnownFilesCheckbox)
846  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
847  .addComponent(rulesListLabel)
848  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
849  .addComponent(rulesListScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 67, Short.MAX_VALUE)
850  .addGap(10, 10, 10)
851  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
852  .addComponent(newRuleButton)
853  .addComponent(editRuleButton)
854  .addComponent(deleteRuleButton))
855  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
856  .addComponent(jLabel1)
857  .addGap(2, 2, 2)
858  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
859  .addComponent(jLabel2)
860  .addComponent(filesRadioButton)
861  .addComponent(dirsRadioButton)
862  .addComponent(bothRadioButton))
863  .addGap(16, 16, 16)
864  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
865  .addComponent(jLabel3)
866  .addComponent(fileNameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE))
867  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
868  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
869  .addComponent(fileNameRadioButton)
870  .addComponent(fileNameExtensionRadioButton)
871  .addComponent(fileNameRegexCheckbox))
872  .addGap(14, 14, 14)
873  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
874  .addComponent(jLabel4)
875  .addComponent(rulePathConditionTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE))
876  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
877  .addComponent(rulePathConditionRegexCheckBox)
878  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
879  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
880  .addComponent(jLabel7)
881  .addComponent(mimeTypeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
882  .addGap(16, 16, 16)
883  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
884  .addComponent(jLabel8)
885  .addComponent(equalitySignComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
886  .addComponent(fileSizeSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
887  .addComponent(fileSizeUnitComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
888  .addGap(13, 13, 13)))
889  .addGap(5, 5, 5))))
890  );
891 
892  jPanel1Layout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {deleteRuleButton, deleteSetButton, editRuleButton, editSetButton, newRuleButton, newSetButton});
893 
894  jScrollPane1.setViewportView(jPanel1);
895 
896  javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
897  this.setLayout(layout);
898  layout.setHorizontalGroup(
899  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
900  .addComponent(jScrollPane1)
901  );
902  layout.setVerticalGroup(
903  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
904  .addComponent(jScrollPane1)
905  );
906  }// </editor-fold>//GEN-END:initComponents
907 
908  private void dirsRadioButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_dirsRadioButtonActionPerformed
909  // TODO add your handling code here:
910  }//GEN-LAST:event_dirsRadioButtonActionPerformed
911 
912  private void newSetButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_newSetButtonActionPerformed
913  this.doFileSetsDialog(null);
914  firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
915  }//GEN-LAST:event_newSetButtonActionPerformed
916 
917  private void deleteRuleButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deleteRuleButtonActionPerformed
918  // Interesting file sets are immutable for thread safety,
919  // so editing a files set rule definition is a replacement
920  // operation. Preserve the existing rules from the set being
921  // edited, except for the deleted rule.
922  FilesSet oldSet = this.setsList.getSelectedValue();
923  Map<String, FilesSet.Rule> rules = new HashMap<>(oldSet.getRules());
924  FilesSet.Rule selectedRule = this.rulesList.getSelectedValue();
925  rules.remove(selectedRule.getUuid());
926  this.replaceFilesSet(oldSet, oldSet.getName(), oldSet.getDescription(), oldSet.ignoresKnownFiles(), rules);
927  if (!this.rulesListModel.isEmpty()) {
928  this.rulesList.setSelectedIndex(0);
929  } else {
930  this.resetRuleComponents();
931  }
932  firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
933  }//GEN-LAST:event_deleteRuleButtonActionPerformed
934 
935  private void deleteSetButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deleteSetButtonActionPerformed
936  FilesSet selectedSet = this.setsList.getSelectedValue();
937  this.filesSets.remove(selectedSet.getName());
938  this.setsListModel.removeElement(selectedSet);
939 
940  // Select the first of the remaining set definitions. This will cause
941  // the selection listeners to repopulate the subordinate components.
942  if (!this.filesSets.isEmpty()) {
943  this.setsList.setSelectedIndex(0);
944  } else {
945  this.resetComponents();
946  }
947  firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
948  }//GEN-LAST:event_deleteSetButtonActionPerformed
949 
950  private void ignoreKnownFilesCheckboxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_ignoreKnownFilesCheckboxActionPerformed
951  // TODO add your handling code here:
952  }//GEN-LAST:event_ignoreKnownFilesCheckboxActionPerformed
953 
954  private void editSetButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_editSetButtonActionPerformed
955  this.doFileSetsDialog(this.setsList.getSelectedValue());
956  firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
957  }//GEN-LAST:event_editSetButtonActionPerformed
958 
959  private void editRuleButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_editRuleButtonActionPerformed
960  this.doFilesSetRuleDialog(this.rulesList.getSelectedValue());
961  firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
962  }//GEN-LAST:event_editRuleButtonActionPerformed
963 
964  private void newRuleButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_newRuleButtonActionPerformed
965  this.doFilesSetRuleDialog(null);
966  firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
967  }//GEN-LAST:event_newRuleButtonActionPerformed
968 
969  private void fileNameTextFieldActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_fileNameTextFieldActionPerformed
970  // TODO add your handling code here:
971  }//GEN-LAST:event_fileNameTextFieldActionPerformed
972 
973  // Variables declaration - do not modify//GEN-BEGIN:variables
974  private javax.swing.JRadioButton bothRadioButton;
975  private javax.swing.JButton deleteRuleButton;
976  private javax.swing.JButton deleteSetButton;
977  private javax.swing.JRadioButton dirsRadioButton;
978  private javax.swing.JButton editRuleButton;
979  private javax.swing.JButton editSetButton;
980  private javax.swing.JComboBox<String> equalitySignComboBox;
981  private javax.swing.ButtonGroup fileNameButtonGroup;
982  private javax.swing.JRadioButton fileNameExtensionRadioButton;
983  private javax.swing.JRadioButton fileNameRadioButton;
984  private javax.swing.JCheckBox fileNameRegexCheckbox;
985  private javax.swing.JTextField fileNameTextField;
986  private javax.swing.JSpinner fileSizeSpinner;
987  private javax.swing.JComboBox<String> fileSizeUnitComboBox;
988  private javax.swing.JRadioButton filesRadioButton;
989  private javax.swing.JCheckBox ignoreKnownFilesCheckbox;
990  private javax.swing.JLabel jLabel1;
991  private javax.swing.JLabel jLabel2;
992  private javax.swing.JLabel jLabel3;
993  private javax.swing.JLabel jLabel4;
994  private javax.swing.JLabel jLabel5;
995  private javax.swing.JLabel jLabel6;
996  private javax.swing.JLabel jLabel7;
997  private javax.swing.JLabel jLabel8;
998  private javax.swing.JPanel jPanel1;
999  private javax.swing.JScrollPane jScrollPane1;
1000  private javax.swing.JScrollPane jScrollPane2;
1001  private javax.swing.JTextArea jTextArea1;
1002  private javax.swing.JComboBox<String> mimeTypeComboBox;
1003  private javax.swing.JButton newRuleButton;
1004  private javax.swing.JButton newSetButton;
1005  private javax.swing.JCheckBox rulePathConditionRegexCheckBox;
1006  private javax.swing.JTextField rulePathConditionTextField;
1007  private javax.swing.JList<FilesSet.Rule> rulesList;
1008  private javax.swing.JLabel rulesListLabel;
1009  private javax.swing.JScrollPane rulesListScrollPane;
1010  private javax.swing.JSeparator separator;
1011  private javax.swing.JScrollPane setDescScrollPanel;
1012  private javax.swing.JTextArea setDescriptionTextArea;
1013  private javax.swing.JList<FilesSet> setsList;
1014  private javax.swing.JLabel setsListLabel;
1015  private javax.swing.JScrollPane setsListScrollPane;
1016  private javax.swing.ButtonGroup typeButtonGroup;
1017  // End of variables declaration//GEN-END:variables
1018 
1019 }

Copyright © 2012-2016 Basis Technology. Generated on: Mon Jan 2 2017
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.