19 package org.sleuthkit.autopsy.modules.interestingitems;
22 import java.awt.Color;
23 import java.awt.event.ActionEvent;
24 import java.util.Arrays;
25 import java.util.List;
26 import java.util.SortedSet;
27 import java.util.logging.Level;
28 import java.util.regex.Pattern;
29 import java.util.regex.PatternSyntaxException;
30 import javax.swing.JButton;
31 import javax.swing.JComponent;
32 import javax.swing.JOptionPane;
33 import org.openide.DialogDisplayer;
34 import org.openide.NotifyDescriptor;
35 import org.openide.util.NbBundle;
36 import org.openide.util.NbBundle.Messages;
45 @SuppressWarnings(
"PMD.SingularField")
46 final class FilesSetRulePanel extends javax.swing.JPanel {
49 "FilesSetRulePanel.bytes=Bytes",
50 "FilesSetRulePanel.kiloBytes=Kilobytes",
51 "FilesSetRulePanel.megaBytes=Megabytes",
52 "FilesSetRulePanel.gigaBytes=Gigabytes",
53 "FilesSetRulePanel.nameTextField.fullNameExample=Example: \"file.exe\"",
54 "FilesSetRulePanel.nameTextField.extensionExample=Examples: \"jpg\" or \"jpg,jpeg,gif\"",
55 "FilesSetRulePanel.NoConditionError=Must have at least one condition to make a rule.",
56 "FilesSetRulePanel.NoMimeTypeError=Please select a valid MIME type.",
57 "FilesSetRulePanel.NoNameError=Name cannot be empty",
58 "FilesSetRulePanel.NoPathError=Path cannot be empty",
59 "FilesSetRulePanel.DaysIncludedEmptyError=Number of days included cannot be empty.",
60 "FilesSetRulePanel.DaysIncludedInvalidError=Number of days included must be a positive integer.",
61 "FilesSetRulePanel.ZeroFileSizeError=File size condition value must not be 0 (Unless = is selected).",
63 "FilesSetRulePanel.CommaInRegexWarning=Warning: Comma(s) in the file extension field will be interpreted as part of a regex and will not split the entry into multiple extensions (Entered: \"{0}\")",
66 private static final long serialVersionUID = 1L;
67 private static final Logger logger = Logger.getLogger(FilesSetRulePanel.class.getName());
68 private static final String SLEUTHKIT_PATH_SEPARATOR =
"/";
69 private static final List<String> ILLEGAL_FILE_NAME_CHARS = FilesSetsManager.getIllegalFileNameChars();
70 private static final List<String> ILLEGAL_FILE_PATH_CHARS = FilesSetsManager.getIllegalFilePathChars();
71 private JButton okButton;
72 private JButton cancelButton;
73 private TextPrompt nameTextFieldPrompt;
78 FilesSetRulePanel(JButton okButton, JButton cancelButton, PANEL_TYPE panelType) {
80 AutoCompletion.enable(mimeTypeComboBox);
81 if (panelType == FilesSetDefsPanel.PANEL_TYPE.FILE_INGEST_FILTERS) {
82 mimeTypeComboBox.setVisible(
false);
83 mimeCheck.setVisible(
false);
84 jLabel1.setVisible(
false);
85 filesRadioButton.setVisible(
false);
86 dirsRadioButton.setVisible(
false);
87 allRadioButton.setVisible(
false);
88 org.openide.awt.Mnemonics.setLocalizedText(jLabel5,
org.openide.util.NbBundle.getMessage(FilesSetRulePanel.class,
"FilesSetRulePanel.ingest.jLabel5.text"));
91 populateMimeTypesComboBox();
93 this.dateCheckActionPerformed(null);
94 populateComponentsWithDefaultValues();
95 this.setButtons(okButton, cancelButton);
97 updateNameTextFieldPrompt();
105 FilesSetRulePanel(FilesSet.Rule rule, JButton okButton, JButton cancelButton, PANEL_TYPE panelType) {
107 AutoCompletion.enable(mimeTypeComboBox);
108 if (panelType == FilesSetDefsPanel.PANEL_TYPE.FILE_INGEST_FILTERS) {
109 mimeTypeComboBox.setVisible(
false);
110 mimeCheck.setVisible(
false);
111 jLabel1.setVisible(
false);
112 filesRadioButton.setVisible(
false);
113 dirsRadioButton.setVisible(
false);
114 allRadioButton.setVisible(
false);
116 populateMimeTypesComboBox();
117 populateMimeConditionComponents(rule);
119 populateMimeTypesComboBox();
120 populateRuleNameComponent(rule);
121 populateTypeConditionComponents(rule);
122 populateNameConditionComponents(rule);
123 populatePathConditionComponents(rule);
124 populateDateConditionComponents(rule);
125 populateSizeConditionComponents(rule);
126 populateInclusiveExclusive(rule);
127 this.setButtons(okButton, cancelButton);
129 updateNameTextFieldPrompt();
130 setComponentsForSearchType();
137 private void updateNameTextFieldPrompt() {
142 if (fullNameRadioButton.isSelected()) {
143 text = Bundle.FilesSetRulePanel_nameTextField_fullNameExample();
145 text = Bundle.FilesSetRulePanel_nameTextField_extensionExample();
147 nameTextFieldPrompt =
new TextPrompt(text, nameTextField);
152 nameTextFieldPrompt.setForeground(Color.LIGHT_GRAY);
153 nameTextFieldPrompt.changeAlpha(0.9f);
162 private void populateComponentsWithDefaultValues() {
163 this.filesRadioButton.setSelected(
true);
164 this.fullNameRadioButton.setSelected(
true);
165 this.equalitySymbolComboBox.setSelectedItem(FilesSet.Rule.FileSizeCondition.COMPARATOR.GREATER_THAN_EQUAL.getSymbol());
166 this.fileSizeComboBox.setSelectedItem(FilesSet.Rule.FileSizeCondition.SIZE_UNIT.KILOBYTE.getName());
167 this.mimeTypeComboBox.setSelectedIndex(0);
170 private void populateMimeTypesComboBox() {
172 SortedSet<String> detectableMimeTypes = FileTypeDetector.getDetectedTypes();
173 detectableMimeTypes.forEach((type) -> {
174 mimeTypeComboBox.addItem(type);
176 }
catch (FileTypeDetector.FileTypeDetectorInitException ex) {
177 logger.log(Level.SEVERE,
"Unable to get detectable file types", ex);
187 private void populateRuleNameComponent(FilesSet.Rule rule) {
188 this.ruleNameTextField.setText(rule.getName());
191 private void populateMimeConditionComponents(FilesSet.Rule rule) {
192 FilesSet.Rule.MimeTypeCondition mimeTypeCondition = rule.getMimeTypeCondition();
193 if (mimeTypeCondition != null) {
194 this.mimeCheck.setSelected(
true);
195 this.mimeCheckActionPerformed(null);
196 this.mimeTypeComboBox.setSelectedItem(mimeTypeCondition.getMimeType());
200 private void populateSizeConditionComponents(FilesSet.Rule rule) {
201 FilesSet.Rule.FileSizeCondition fileSizeCondition = rule.getFileSizeCondition();
202 if (fileSizeCondition != null) {
203 this.fileSizeCheck.setSelected(
true);
204 this.fileSizeCheckActionPerformed(null);
205 this.fileSizeSpinner.setValue(fileSizeCondition.getSizeValue());
206 this.fileSizeComboBox.setSelectedItem(fileSizeCondition.getUnit().getName());
207 this.equalitySymbolComboBox.setSelectedItem(fileSizeCondition.getComparator().getSymbol());
215 private void setOkButton() {
216 if (this.okButton != null) {
217 this.okButton.setEnabled(this.fileSizeCheck.isSelected() || this.mimeCheck.isSelected()
218 || this.nameCheck.isSelected() || this.pathCheck.isSelected() || this.dateCheck.isSelected());
229 private JOptionPane getOptionPane(JComponent parent) {
231 if (!(parent instanceof JOptionPane)) {
232 pane = getOptionPane((JComponent) parent.getParent());
234 pane = (JOptionPane) parent;
245 private void setButtons(JButton ok, JButton cancel) {
247 this.cancelButton = cancel;
248 okButton.addActionListener((ActionEvent e) -> {
249 JOptionPane pane = getOptionPane(okButton);
250 pane.setValue(okButton);
252 cancelButton.addActionListener((ActionEvent e) -> {
253 JOptionPane pane = getOptionPane(cancelButton);
254 pane.setValue(cancelButton);
265 private void populateTypeConditionComponents(FilesSet.Rule rule) {
266 FilesSet.Rule.MetaTypeCondition typeCondition = rule.getMetaTypeCondition();
267 switch (typeCondition.getMetaType()) {
269 this.filesRadioButton.setSelected(
true);
272 this.dirsRadioButton.setSelected(
true);
275 this.allRadioButton.setSelected(
true);
280 private void populateInclusiveExclusive(FilesSet.Rule rule) {
281 this.inclusiveRuleTypeRadio.setSelected(!rule.isExclusive());
282 this.exclusiveRuleTypeRadio.setSelected(rule.isExclusive());
290 private void populateNameConditionComponents(FilesSet.Rule rule) {
291 FilesSet.Rule.FileNameCondition nameCondition = rule.getFileNameCondition();
292 if (nameCondition != null) {
293 this.nameCheck.setSelected(
true);
294 this.nameCheckActionPerformed(null);
295 this.nameTextField.setText(nameCondition.getTextToMatch());
296 this.nameRegexCheckbox.setSelected(nameCondition.isRegex());
297 if (nameCondition instanceof FilesSet.Rule.FullNameCondition) {
298 this.fullNameRadioButton.setSelected(
true);
300 this.extensionRadioButton.setSelected(
true);
311 private void populatePathConditionComponents(FilesSet.Rule rule) {
312 FilesSet.Rule.ParentPathCondition pathCondition = rule.getPathCondition();
313 if (pathCondition != null) {
314 this.pathCheck.setSelected(
true);
315 this.pathCheckActionPerformed(null);
316 this.pathTextField.setText(pathCondition.getTextToMatch());
317 this.pathRegexCheckBox.setSelected(pathCondition.isRegex());
327 private void populateDateConditionComponents(FilesSet.Rule rule) {
328 FilesSet.Rule.DateCondition dateCondition = rule.getDateCondition();
329 if (dateCondition != null) {
330 this.dateCheck.setSelected(
true);
331 this.dateCheckActionPerformed(null);
332 this.daysIncludedTextField.setText(Integer.toString(dateCondition.getDaysIncluded()));
343 boolean isValidRuleDefinition() {
345 if (!(this.mimeCheck.isSelected() || this.fileSizeCheck.isSelected() || this.pathCheck.isSelected() || this.nameCheck.isSelected() || this.dateCheck.isSelected())) {
346 NotifyDescriptor notifyDesc =
new NotifyDescriptor.Message(
347 Bundle.FilesSetRulePanel_NoConditionError(),
348 NotifyDescriptor.WARNING_MESSAGE);
349 DialogDisplayer.getDefault().notify(notifyDesc);
353 if (this.nameCheck.isSelected()) {
356 if (this.nameTextField.getText().isEmpty()) {
357 NotifyDescriptor notifyDesc =
new NotifyDescriptor.Message(
358 Bundle.FilesSetRulePanel_NoNameError(),
359 NotifyDescriptor.WARNING_MESSAGE);
360 DialogDisplayer.getDefault().notify(notifyDesc);
363 if (this.nameRegexCheckbox.isSelected()) {
367 if (this.extensionRadioButton.isSelected() && this.nameTextField.getText().contains(
",")) {
368 NotifyDescriptor notifyDesc =
new NotifyDescriptor.Message(
369 Bundle.FilesSetRulePanel_CommaInRegexWarning(
this.nameTextField.getText()),
370 NotifyDescriptor.WARNING_MESSAGE);
371 DialogDisplayer.getDefault().notify(notifyDesc);
375 Pattern.compile(this.nameTextField.getText());
376 }
catch (PatternSyntaxException ex) {
377 NotifyDescriptor notifyDesc =
new NotifyDescriptor.Message(
378 NbBundle.getMessage(FilesSetPanel.class,
"FilesSetRulePanel.messages.invalidNameRegex", ex.getLocalizedMessage()),
379 NotifyDescriptor.WARNING_MESSAGE);
380 DialogDisplayer.getDefault().notify(notifyDesc);
383 }
else if (this.nameTextField.getText().isEmpty() || !FilesSetRulePanel.containsOnlyLegalChars(this.nameTextField.getText(), FilesSetRulePanel.ILLEGAL_FILE_NAME_CHARS)) {
384 NotifyDescriptor notifyDesc =
new NotifyDescriptor.Message(
385 NbBundle.getMessage(FilesSetPanel.class,
"FilesSetRulePanel.messages.invalidCharInName"),
386 NotifyDescriptor.WARNING_MESSAGE);
387 DialogDisplayer.getDefault().notify(notifyDesc);
394 if (this.pathCheck.isSelected()) {
395 if (this.pathTextField.getText().isEmpty()) {
396 NotifyDescriptor notifyDesc =
new NotifyDescriptor.Message(
397 Bundle.FilesSetRulePanel_NoPathError(),
398 NotifyDescriptor.WARNING_MESSAGE);
399 DialogDisplayer.getDefault().notify(notifyDesc);
402 if (this.pathRegexCheckBox.isSelected()) {
404 Pattern.compile(this.pathTextField.getText());
405 }
catch (PatternSyntaxException ex) {
406 NotifyDescriptor notifyDesc =
new NotifyDescriptor.Message(
407 NbBundle.getMessage(FilesSetPanel.class,
"FilesSetRulePanel.messages.invalidPathRegex", ex.getLocalizedMessage()),
408 NotifyDescriptor.WARNING_MESSAGE);
409 DialogDisplayer.getDefault().notify(notifyDesc);
412 }
else if (this.pathTextField.getText().isEmpty() || !FilesSetRulePanel.containsOnlyLegalChars(this.pathTextField.getText(), FilesSetRulePanel.ILLEGAL_FILE_PATH_CHARS)) {
413 NotifyDescriptor notifyDesc =
new NotifyDescriptor.Message(
414 NbBundle.getMessage(FilesSetPanel.class,
"FilesSetRulePanel.messages.invalidCharInPath"),
415 NotifyDescriptor.WARNING_MESSAGE);
416 DialogDisplayer.getDefault().notify(notifyDesc);
420 if (this.mimeCheck.isSelected()) {
421 if (this.mimeTypeComboBox.getSelectedIndex() == 0) {
422 NotifyDescriptor notifyDesc =
new NotifyDescriptor.Message(
423 Bundle.FilesSetRulePanel_NoMimeTypeError(),
424 NotifyDescriptor.WARNING_MESSAGE);
425 DialogDisplayer.getDefault().notify(notifyDesc);
429 if (this.fileSizeCheck.isSelected()) {
430 if ((Integer) this.fileSizeSpinner.getValue() == 0 && !((String) this.equalitySymbolComboBox.getSelectedItem()).equals(
"=")) {
431 NotifyDescriptor notifyDesc =
new NotifyDescriptor.Message(
432 Bundle.FilesSetRulePanel_ZeroFileSizeError(),
433 NotifyDescriptor.WARNING_MESSAGE);
434 DialogDisplayer.getDefault().notify(notifyDesc);
439 if (this.dateCheck.isSelected()) {
440 if (this.daysIncludedTextField.getText().isEmpty()) {
441 NotifyDescriptor notifyDesc =
new NotifyDescriptor.Message(
442 Bundle.FilesSetRulePanel_DaysIncludedEmptyError(),
443 NotifyDescriptor.WARNING_MESSAGE);
444 DialogDisplayer.getDefault().notify(notifyDesc);
448 int value = Integer.parseInt(daysIncludedTextField.getText());
450 throw new NumberFormatException(
"Negative numbers are not allowed for the within N days condition");
452 }
catch (NumberFormatException e) {
454 NotifyDescriptor notifyDesc =
new NotifyDescriptor.Message(
455 Bundle.FilesSetRulePanel_DaysIncludedInvalidError(),
456 NotifyDescriptor.WARNING_MESSAGE);
457 DialogDisplayer.getDefault().notify(notifyDesc);
469 String getRuleName() {
470 return this.ruleNameTextField.getText();
477 boolean isExclusive() {
478 return this.exclusiveRuleTypeRadio.isSelected();
490 FilesSet.Rule.FileNameCondition getFileNameCondition() throws IllegalStateException {
491 FilesSet.Rule.FileNameCondition condition = null;
492 if (!this.nameTextField.getText().isEmpty()) {
493 if (this.nameRegexCheckbox.isSelected()) {
495 Pattern pattern = Pattern.compile(this.nameTextField.getText(), Pattern.CASE_INSENSITIVE);
496 if (this.fullNameRadioButton.isSelected()) {
497 condition =
new FilesSet.Rule.FullNameCondition(pattern);
499 condition =
new FilesSet.Rule.ExtensionCondition(pattern);
501 }
catch (PatternSyntaxException ex) {
502 logger.log(Level.SEVERE,
"Attempt to get regex name condition that does not compile", ex);
503 throw new IllegalStateException(
"The files set rule panel name condition is not in a valid state");
505 }
else if (FilesSetRulePanel.containsOnlyLegalChars(
this.nameTextField.getText(), FilesSetRulePanel.ILLEGAL_FILE_NAME_CHARS)) {
506 if (this.fullNameRadioButton.isSelected()) {
507 condition =
new FilesSet.Rule.FullNameCondition(this.nameTextField.getText());
509 List<String> extensions = Arrays.asList(this.nameTextField.getText().split(
","));
510 for (
int i=0; i < extensions.size(); i++) {
512 extensions.set(i, extensions.get(i).trim());
514 condition =
new FilesSet.Rule.ExtensionCondition(extensions);
517 logger.log(Level.SEVERE,
"Attempt to get name condition with illegal chars");
518 throw new IllegalStateException(
"The files set rule panel name condition is not in a valid state");
529 FilesSet.Rule.MimeTypeCondition getMimeTypeCondition() {
530 FilesSet.Rule.MimeTypeCondition condition = null;
531 if (!this.mimeTypeComboBox.getSelectedItem().equals(
"")) {
532 condition =
new FilesSet.Rule.MimeTypeCondition((String) this.mimeTypeComboBox.getSelectedItem());
542 FilesSet.Rule.FileSizeCondition getFileSizeCondition() {
543 FilesSet.Rule.FileSizeCondition condition = null;
544 if (this.fileSizeCheck.isSelected()) {
545 if ((Integer) this.fileSizeSpinner.getValue() != 0 || ((String) this.equalitySymbolComboBox.getSelectedItem()).equals(
"=")) {
546 FilesSet.Rule.FileSizeCondition.COMPARATOR comparator = FilesSet.Rule.FileSizeCondition.COMPARATOR.fromSymbol((String) this.equalitySymbolComboBox.getSelectedItem());
547 FilesSet.Rule.FileSizeCondition.SIZE_UNIT unit = FilesSet.Rule.FileSizeCondition.SIZE_UNIT.fromName((String) this.fileSizeComboBox.getSelectedItem());
548 int fileSizeValue = (Integer) this.fileSizeSpinner.getValue();
549 condition =
new FilesSet.Rule.FileSizeCondition(comparator, unit, fileSizeValue);
561 FilesSet.Rule.MetaTypeCondition getMetaTypeCondition() {
562 if (this.filesRadioButton.isSelected()) {
563 return new FilesSet.Rule.MetaTypeCondition(FilesSet.Rule.MetaTypeCondition.Type.FILES);
564 }
else if (this.dirsRadioButton.isSelected()) {
565 return new FilesSet.Rule.MetaTypeCondition(FilesSet.Rule.MetaTypeCondition.Type.DIRECTORIES);
567 return new FilesSet.Rule.MetaTypeCondition(FilesSet.Rule.MetaTypeCondition.Type.ALL);
580 FilesSet.Rule.ParentPathCondition getPathCondition() throws IllegalStateException {
581 FilesSet.Rule.ParentPathCondition condition = null;
582 if (!this.pathTextField.getText().isEmpty()) {
583 if (this.pathRegexCheckBox.isSelected()) {
585 condition =
new FilesSet.Rule.ParentPathCondition(Pattern.compile(
this.pathTextField.getText(), Pattern.CASE_INSENSITIVE));
586 }
catch (PatternSyntaxException ex) {
587 logger.log(Level.SEVERE,
"Attempt to get malformed path condition", ex);
588 throw new IllegalStateException(
"The files set rule panel path condition is not in a valid state");
591 String path = this.pathTextField.getText();
592 if (FilesSetRulePanel.containsOnlyLegalChars(path, FilesSetRulePanel.ILLEGAL_FILE_PATH_CHARS)) {
594 if (!path.startsWith(FilesSetRulePanel.SLEUTHKIT_PATH_SEPARATOR)) {
595 path = FilesSetRulePanel.SLEUTHKIT_PATH_SEPARATOR + path;
598 if (!path.endsWith(FilesSetRulePanel.SLEUTHKIT_PATH_SEPARATOR)) {
599 path += FilesSetRulePanel.SLEUTHKIT_PATH_SEPARATOR;
601 condition =
new FilesSet.Rule.ParentPathCondition(path);
603 logger.log(Level.SEVERE,
"Attempt to get path condition with illegal chars");
604 throw new IllegalStateException(
"The files set rule panel path condition is not in a valid state");
620 FilesSet.Rule.DateCondition getDateCondition() {
621 FilesSet.Rule.DateCondition dateCondition = null;
622 if (!daysIncludedTextField.getText().isEmpty()) {
623 dateCondition =
new FilesSet.Rule.DateCondition(Integer.parseInt(daysIncludedTextField.getText()));
625 return dateCondition;
637 private static boolean containsOnlyLegalChars(String toBeChecked, List<String> illegalChars) {
638 for (String illegalChar : illegalChars) {
639 if (toBeChecked.contains(illegalChar)) {
650 private void setComponentsForSearchType() {
651 if (!this.filesRadioButton.isSelected()) {
652 this.fullNameRadioButton.setSelected(
true);
653 this.extensionRadioButton.setEnabled(
false);
654 this.mimeTypeComboBox.setEnabled(
false);
655 this.mimeTypeComboBox.setSelectedIndex(0);
656 this.equalitySymbolComboBox.setEnabled(
false);
657 this.fileSizeComboBox.setEnabled(
false);
658 this.fileSizeSpinner.setEnabled(
false);
659 this.fileSizeSpinner.setValue(0);
660 this.fileSizeCheck.setEnabled(
false);
661 this.fileSizeCheck.setSelected(
false);
662 this.mimeCheck.setEnabled(
false);
663 this.mimeCheck.setSelected(
false);
665 if (this.nameCheck.isSelected()) {
666 this.extensionRadioButton.setEnabled(
true);
668 this.fileSizeCheck.setEnabled(
true);
669 this.mimeCheck.setEnabled(
true);
678 @SuppressWarnings(
"unchecked")
680 private
void initComponents() {
682 nameButtonGroup =
new javax.swing.ButtonGroup();
683 typeButtonGroup =
new javax.swing.ButtonGroup();
684 ruleTypeButtonGroup =
new javax.swing.ButtonGroup();
685 ruleNameLabel =
new javax.swing.JLabel();
686 ruleNameTextField =
new javax.swing.JTextField();
687 jLabel1 =
new javax.swing.JLabel();
688 nameTextField =
new javax.swing.JTextField();
689 fullNameRadioButton =
new javax.swing.JRadioButton();
690 extensionRadioButton =
new javax.swing.JRadioButton();
691 nameRegexCheckbox =
new javax.swing.JCheckBox();
692 pathTextField =
new javax.swing.JTextField();
693 pathRegexCheckBox =
new javax.swing.JCheckBox();
694 pathSeparatorInfoLabel =
new javax.swing.JLabel();
695 jLabel5 =
new javax.swing.JLabel();
696 mimeTypeComboBox =
new javax.swing.JComboBox<String>();
697 equalitySymbolComboBox =
new javax.swing.JComboBox<String>();
698 fileSizeComboBox =
new javax.swing.JComboBox<String>();
699 fileSizeSpinner =
new javax.swing.JSpinner();
700 nameCheck =
new javax.swing.JCheckBox();
701 pathCheck =
new javax.swing.JCheckBox();
702 mimeCheck =
new javax.swing.JCheckBox();
703 fileSizeCheck =
new javax.swing.JCheckBox();
704 filesRadioButton =
new javax.swing.JRadioButton();
705 dirsRadioButton =
new javax.swing.JRadioButton();
706 allRadioButton =
new javax.swing.JRadioButton();
707 daysIncludedTextField =
new javax.swing.JTextField();
708 daysIncludedLabel =
new javax.swing.JLabel();
709 dateCheck =
new javax.swing.JCheckBox();
710 javax.swing.JLabel ruleTypeLabel =
new javax.swing.JLabel();
711 inclusiveRuleTypeRadio =
new javax.swing.JRadioButton();
712 exclusiveRuleTypeRadio =
new javax.swing.JRadioButton();
713 jSeparator1 =
new javax.swing.JSeparator();
715 org.openide.awt.Mnemonics.setLocalizedText(ruleNameLabel,
org.openide.util.NbBundle.getMessage(FilesSetRulePanel.class,
"FilesSetRulePanel.ruleNameLabel.text"));
717 ruleNameTextField.setText(
org.openide.util.NbBundle.getMessage(FilesSetRulePanel.class,
"FilesSetRulePanel.ruleNameTextField.text"));
719 org.openide.awt.Mnemonics.setLocalizedText(jLabel1,
org.openide.util.NbBundle.getMessage(FilesSetRulePanel.class,
"FilesSetRulePanel.jLabel1.text"));
721 nameTextField.setText(
org.openide.util.NbBundle.getMessage(FilesSetRulePanel.class,
"FilesSetRulePanel.nameTextField.text"));
722 nameTextField.setEnabled(
false);
724 nameButtonGroup.add(fullNameRadioButton);
725 org.openide.awt.Mnemonics.setLocalizedText(fullNameRadioButton,
org.openide.util.NbBundle.getMessage(FilesSetRulePanel.class,
"FilesSetRulePanel.fullNameRadioButton.text"));
726 fullNameRadioButton.setEnabled(
false);
727 fullNameRadioButton.addActionListener(
new java.awt.event.ActionListener() {
728 public void actionPerformed(java.awt.event.ActionEvent evt) {
729 fullNameRadioButtonActionPerformed(evt);
733 nameButtonGroup.add(extensionRadioButton);
734 org.openide.awt.Mnemonics.setLocalizedText(extensionRadioButton,
org.openide.util.NbBundle.getMessage(FilesSetRulePanel.class,
"FilesSetRulePanel.extensionRadioButton.text"));
735 extensionRadioButton.setEnabled(
false);
736 extensionRadioButton.addActionListener(
new java.awt.event.ActionListener() {
737 public void actionPerformed(java.awt.event.ActionEvent evt) {
738 extensionRadioButtonActionPerformed(evt);
742 org.openide.awt.Mnemonics.setLocalizedText(nameRegexCheckbox,
org.openide.util.NbBundle.getMessage(FilesSetRulePanel.class,
"FilesSetRulePanel.nameRegexCheckbox.text"));
743 nameRegexCheckbox.setEnabled(
false);
745 pathTextField.setText(
org.openide.util.NbBundle.getMessage(FilesSetRulePanel.class,
"FilesSetRulePanel.pathTextField.text"));
746 pathTextField.setEnabled(
false);
748 org.openide.awt.Mnemonics.setLocalizedText(pathRegexCheckBox,
org.openide.util.NbBundle.getMessage(FilesSetRulePanel.class,
"FilesSetRulePanel.pathRegexCheckBox.text"));
749 pathRegexCheckBox.setEnabled(
false);
751 pathSeparatorInfoLabel.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/images/info-icon-16.png")));
752 org.openide.awt.Mnemonics.setLocalizedText(pathSeparatorInfoLabel,
org.openide.util.NbBundle.getMessage(FilesSetRulePanel.class,
"FilesSetRulePanel.pathSeparatorInfoLabel.text"));
753 pathSeparatorInfoLabel.setEnabled(
false);
755 org.openide.awt.Mnemonics.setLocalizedText(jLabel5,
org.openide.util.NbBundle.getMessage(FilesSetRulePanel.class,
"FilesSetRulePanel.interesting.jLabel5.text"));
757 mimeTypeComboBox.setEditable(
true);
758 mimeTypeComboBox.setModel(
new javax.swing.DefaultComboBoxModel<String>(
new String[] {
""}));
759 mimeTypeComboBox.setEnabled(
false);
761 equalitySymbolComboBox.setModel(
new javax.swing.DefaultComboBoxModel<String>(
new String[] {
">",
"<" }));
762 equalitySymbolComboBox.setEnabled(
false);
764 fileSizeComboBox.setModel(
new javax.swing.DefaultComboBoxModel<String>(
new String[] { Bundle.FilesSetRulePanel_bytes(), Bundle.FilesSetRulePanel_kiloBytes(), Bundle.FilesSetRulePanel_megaBytes(), Bundle.FilesSetRulePanel_gigaBytes() }));
765 fileSizeComboBox.setEnabled(
false);
767 fileSizeSpinner.setModel(
new javax.swing.SpinnerNumberModel(0, 0, null, 1));
768 fileSizeSpinner.setEnabled(
false);
770 org.openide.awt.Mnemonics.setLocalizedText(nameCheck,
org.openide.util.NbBundle.getMessage(FilesSetRulePanel.class,
"FilesSetRulePanel.nameCheck.text"));
771 nameCheck.addActionListener(
new java.awt.event.ActionListener() {
772 public void actionPerformed(java.awt.event.ActionEvent evt) {
773 nameCheckActionPerformed(evt);
777 org.openide.awt.Mnemonics.setLocalizedText(pathCheck,
org.openide.util.NbBundle.getMessage(FilesSetRulePanel.class,
"FilesSetRulePanel.pathCheck.text"));
778 pathCheck.addActionListener(
new java.awt.event.ActionListener() {
779 public void actionPerformed(java.awt.event.ActionEvent evt) {
780 pathCheckActionPerformed(evt);
784 org.openide.awt.Mnemonics.setLocalizedText(mimeCheck,
org.openide.util.NbBundle.getMessage(FilesSetRulePanel.class,
"FilesSetRulePanel.mimeCheck.text"));
785 mimeCheck.addActionListener(
new java.awt.event.ActionListener() {
786 public void actionPerformed(java.awt.event.ActionEvent evt) {
787 mimeCheckActionPerformed(evt);
791 org.openide.awt.Mnemonics.setLocalizedText(fileSizeCheck,
org.openide.util.NbBundle.getMessage(FilesSetRulePanel.class,
"FilesSetRulePanel.fileSizeCheck.text"));
792 fileSizeCheck.addActionListener(
new java.awt.event.ActionListener() {
793 public void actionPerformed(java.awt.event.ActionEvent evt) {
794 fileSizeCheckActionPerformed(evt);
798 typeButtonGroup.add(filesRadioButton);
799 org.openide.awt.Mnemonics.setLocalizedText(filesRadioButton,
org.openide.util.NbBundle.getMessage(FilesSetRulePanel.class,
"FilesSetRulePanel.filesRadioButton.text"));
800 filesRadioButton.addActionListener(
new java.awt.event.ActionListener() {
801 public void actionPerformed(java.awt.event.ActionEvent evt) {
802 filesRadioButtonActionPerformed(evt);
806 typeButtonGroup.add(dirsRadioButton);
807 org.openide.awt.Mnemonics.setLocalizedText(dirsRadioButton,
org.openide.util.NbBundle.getMessage(FilesSetRulePanel.class,
"FilesSetRulePanel.dirsRadioButton.text"));
808 dirsRadioButton.addActionListener(
new java.awt.event.ActionListener() {
809 public void actionPerformed(java.awt.event.ActionEvent evt) {
810 dirsRadioButtonActionPerformed(evt);
814 typeButtonGroup.add(allRadioButton);
815 org.openide.awt.Mnemonics.setLocalizedText(allRadioButton,
org.openide.util.NbBundle.getMessage(FilesSetRulePanel.class,
"FilesSetRulePanel.allRadioButton.text"));
816 allRadioButton.addActionListener(
new java.awt.event.ActionListener() {
817 public void actionPerformed(java.awt.event.ActionEvent evt) {
818 allRadioButtonActionPerformed(evt);
822 daysIncludedTextField.setEnabled(
false);
823 daysIncludedTextField.setMinimumSize(
new java.awt.Dimension(60, 20));
824 daysIncludedTextField.setPreferredSize(
new java.awt.Dimension(60, 20));
826 org.openide.awt.Mnemonics.setLocalizedText(daysIncludedLabel,
org.openide.util.NbBundle.getMessage(FilesSetRulePanel.class,
"FilesSetRulePanel.daysIncludedLabel.text"));
828 org.openide.awt.Mnemonics.setLocalizedText(dateCheck,
org.openide.util.NbBundle.getMessage(FilesSetRulePanel.class,
"FilesSetRulePanel.dateCheck.text"));
829 dateCheck.addActionListener(
new java.awt.event.ActionListener() {
830 public void actionPerformed(java.awt.event.ActionEvent evt) {
831 dateCheckActionPerformed(evt);
835 org.openide.awt.Mnemonics.setLocalizedText(ruleTypeLabel,
org.openide.util.NbBundle.getMessage(FilesSetRulePanel.class,
"FilesSetRulePanel.ruleTypeLabel.text"));
837 ruleTypeButtonGroup.add(inclusiveRuleTypeRadio);
838 inclusiveRuleTypeRadio.setSelected(
true);
839 org.openide.awt.Mnemonics.setLocalizedText(inclusiveRuleTypeRadio,
org.openide.util.NbBundle.getMessage(FilesSetRulePanel.class,
"FilesSetRulePanel.inclusiveRuleTypeRadio.text"));
841 ruleTypeButtonGroup.add(exclusiveRuleTypeRadio);
842 org.openide.awt.Mnemonics.setLocalizedText(exclusiveRuleTypeRadio,
org.openide.util.NbBundle.getMessage(FilesSetRulePanel.class,
"FilesSetRulePanel.exclusiveRuleTypeRadio.text"));
844 javax.swing.GroupLayout layout =
new javax.swing.GroupLayout(
this);
845 this.setLayout(layout);
846 layout.setHorizontalGroup(
847 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
848 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
849 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
850 .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
851 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
852 .addGroup(layout.createSequentialGroup()
854 .addComponent(jLabel5))
855 .addGroup(layout.createSequentialGroup()
857 .addComponent(ruleTypeLabel))
858 .addGroup(layout.createSequentialGroup()
859 .addGap(119, 119, 119)
860 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
861 .addComponent(exclusiveRuleTypeRadio)
862 .addComponent(inclusiveRuleTypeRadio))))
863 .addGap(0, 0, Short.MAX_VALUE))
864 .addGroup(layout.createSequentialGroup()
866 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
867 .addComponent(jSeparator1)
868 .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
870 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
871 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
872 .addComponent(ruleNameLabel)
874 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
875 .addComponent(mimeTypeComboBox, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
876 .addComponent(pathTextField)
877 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
878 .addComponent(equalitySymbolComboBox, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
879 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
880 .addComponent(fileSizeSpinner)
881 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
882 .addComponent(fileSizeComboBox, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
883 .addGroup(layout.createSequentialGroup()
884 .addComponent(pathRegexCheckBox)
885 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
886 .addComponent(pathSeparatorInfoLabel))
887 .addGroup(layout.createSequentialGroup()
888 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
889 .addComponent(ruleNameTextField)
890 .addGroup(layout.createSequentialGroup()
891 .addComponent(daysIncludedTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 69, javax.swing.GroupLayout.PREFERRED_SIZE)
892 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
893 .addComponent(daysIncludedLabel)
894 .addGap(0, 0, Short.MAX_VALUE)))
896 .addGroup(layout.createSequentialGroup()
897 .addComponent(fullNameRadioButton)
898 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
899 .addComponent(extensionRadioButton)
900 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
901 .addComponent(nameRegexCheckbox))))
902 .addGroup(layout.createSequentialGroup()
903 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
904 .addComponent(nameCheck, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 95, javax.swing.GroupLayout.PREFERRED_SIZE)
905 .addComponent(jLabel1))
907 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
908 .addComponent(nameTextField)
909 .addGroup(layout.createSequentialGroup()
910 .addComponent(filesRadioButton)
911 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
912 .addComponent(dirsRadioButton)
913 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
914 .addComponent(allRadioButton))))))
915 .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
916 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
917 .addComponent(pathCheck)
918 .addComponent(mimeCheck)
919 .addComponent(fileSizeCheck)
920 .addComponent(dateCheck))
921 .addGap(0, 0, Short.MAX_VALUE)))))
924 layout.setVerticalGroup(
925 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
926 .addGroup(layout.createSequentialGroup()
927 .addComponent(jLabel5)
929 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
930 .addComponent(ruleTypeLabel)
931 .addComponent(inclusiveRuleTypeRadio))
932 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
933 .addComponent(exclusiveRuleTypeRadio)
934 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
935 .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 9, javax.swing.GroupLayout.PREFERRED_SIZE)
936 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
937 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
938 .addGroup(layout.createSequentialGroup()
939 .addComponent(jLabel1)
941 .addComponent(nameCheck))
942 .addGroup(layout.createSequentialGroup()
943 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
944 .addComponent(filesRadioButton)
945 .addComponent(dirsRadioButton)
946 .addComponent(allRadioButton))
947 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
948 .addComponent(nameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)))
949 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
950 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
951 .addComponent(fullNameRadioButton)
952 .addComponent(extensionRadioButton)
953 .addComponent(nameRegexCheckbox))
954 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
955 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
956 .addComponent(pathTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
957 .addComponent(pathCheck))
958 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
959 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
960 .addComponent(pathRegexCheckBox)
961 .addComponent(pathSeparatorInfoLabel))
962 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
963 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
964 .addComponent(mimeTypeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
965 .addComponent(mimeCheck))
967 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
968 .addComponent(equalitySymbolComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
969 .addComponent(fileSizeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
970 .addComponent(fileSizeSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
971 .addComponent(fileSizeCheck))
972 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
973 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
974 .addComponent(daysIncludedTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
975 .addComponent(daysIncludedLabel)
976 .addComponent(dateCheck))
977 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
978 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
979 .addComponent(ruleNameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
980 .addComponent(ruleNameLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
985 private void nameCheckActionPerformed(java.awt.event.ActionEvent evt) {
986 if (!this.nameCheck.isSelected()) {
987 this.nameTextField.setEnabled(
false);
988 this.nameTextField.setText(
"");
989 this.fullNameRadioButton.setEnabled(
false);
990 this.extensionRadioButton.setEnabled(
false);
991 this.nameRegexCheckbox.setEnabled(
false);
993 this.nameTextField.setEnabled(
true);
994 this.fullNameRadioButton.setEnabled(
true);
995 if (this.filesRadioButton.isSelected()) {
996 this.extensionRadioButton.setEnabled(
true);
998 this.nameRegexCheckbox.setEnabled(
true);
1003 private void pathCheckActionPerformed(java.awt.event.ActionEvent evt) {
1004 if (!this.pathCheck.isSelected()) {
1005 this.pathTextField.setEnabled(
false);
1006 this.pathTextField.setText(
"");
1007 this.pathRegexCheckBox.setEnabled(
false);
1008 this.pathSeparatorInfoLabel.setEnabled(
false);
1010 this.pathTextField.setEnabled(
true);
1011 this.pathRegexCheckBox.setEnabled(
true);
1012 this.pathSeparatorInfoLabel.setEnabled(
true);
1017 private void filesRadioButtonActionPerformed(java.awt.event.ActionEvent evt) {
1019 this.setComponentsForSearchType();
1022 private void dirsRadioButtonActionPerformed(java.awt.event.ActionEvent evt) {
1023 this.setComponentsForSearchType();
1026 private void allRadioButtonActionPerformed(java.awt.event.ActionEvent evt) {
1027 this.setComponentsForSearchType();
1030 private void dateCheckActionPerformed(java.awt.event.ActionEvent evt) {
1031 if (!this.dateCheck.isSelected()) {
1032 this.daysIncludedTextField.setEnabled(
false);
1033 this.daysIncludedLabel.setEnabled(
false);
1034 this.daysIncludedTextField.setText(
"");
1036 this.daysIncludedTextField.setEnabled(
true);
1037 this.daysIncludedLabel.setEnabled(
true);
1042 private void fileSizeCheckActionPerformed(java.awt.event.ActionEvent evt) {
1043 if (!this.fileSizeCheck.isSelected()) {
1044 this.fileSizeComboBox.setEnabled(
false);
1045 this.fileSizeSpinner.setEnabled(
false);
1046 this.fileSizeSpinner.setValue(0);
1047 this.equalitySymbolComboBox.setEnabled(
false);
1049 this.fileSizeComboBox.setEnabled(
true);
1050 this.fileSizeSpinner.setEnabled(
true);
1051 this.equalitySymbolComboBox.setEnabled(
true);
1056 private void mimeCheckActionPerformed(java.awt.event.ActionEvent evt) {
1057 if (!this.mimeCheck.isSelected()) {
1058 this.mimeTypeComboBox.setEnabled(
false);
1059 this.mimeTypeComboBox.setSelectedIndex(0);
1061 this.mimeTypeComboBox.setEnabled(
true);
1066 private void extensionRadioButtonActionPerformed(java.awt.event.ActionEvent evt) {
1067 updateNameTextFieldPrompt();
1070 private void fullNameRadioButtonActionPerformed(java.awt.event.ActionEvent evt) {
1071 updateNameTextFieldPrompt();
1075 private javax.swing.JRadioButton allRadioButton;
1076 private javax.swing.JCheckBox dateCheck;
1077 private javax.swing.JLabel daysIncludedLabel;
1078 private javax.swing.JTextField daysIncludedTextField;
1079 private javax.swing.JRadioButton dirsRadioButton;
1080 private javax.swing.JComboBox<String> equalitySymbolComboBox;
1081 private javax.swing.JRadioButton exclusiveRuleTypeRadio;
1082 private javax.swing.JRadioButton extensionRadioButton;
1083 private javax.swing.JCheckBox fileSizeCheck;
1084 private javax.swing.JComboBox<String> fileSizeComboBox;
1085 private javax.swing.JSpinner fileSizeSpinner;
1086 private javax.swing.JRadioButton filesRadioButton;
1087 private javax.swing.JRadioButton fullNameRadioButton;
1088 private javax.swing.JRadioButton inclusiveRuleTypeRadio;
1089 private javax.swing.JLabel jLabel1;
1090 private javax.swing.JLabel jLabel5;
1091 private javax.swing.JSeparator jSeparator1;
1092 private javax.swing.JCheckBox mimeCheck;
1093 private javax.swing.JComboBox<String> mimeTypeComboBox;
1094 private javax.swing.ButtonGroup nameButtonGroup;
1095 private javax.swing.JCheckBox nameCheck;
1096 private javax.swing.JCheckBox nameRegexCheckbox;
1097 private javax.swing.JTextField nameTextField;
1098 private javax.swing.JCheckBox pathCheck;
1099 private javax.swing.JCheckBox pathRegexCheckBox;
1100 private javax.swing.JLabel pathSeparatorInfoLabel;
1101 private javax.swing.JTextField pathTextField;
1102 private javax.swing.JLabel ruleNameLabel;
1103 private javax.swing.JTextField ruleNameTextField;
1104 private javax.swing.ButtonGroup ruleTypeButtonGroup;
1105 private javax.swing.ButtonGroup typeButtonGroup;