19 package org.sleuthkit.autopsy.modules.interestingitems;
21 import java.awt.EventQueue;
23 import java.util.ArrayList;
24 import java.util.Collection;
25 import java.util.HashMap;
26 import java.util.List;
28 import java.util.SortedSet;
29 import java.util.TreeMap;
30 import java.util.logging.Level;
31 import javax.swing.DefaultListModel;
32 import javax.swing.JButton;
33 import javax.swing.JFileChooser;
34 import javax.swing.JOptionPane;
35 import javax.swing.event.ListSelectionEvent;
36 import javax.swing.event.ListSelectionListener;
37 import javax.swing.filechooser.FileNameExtensionFilter;
38 import org.netbeans.spi.options.OptionsPanelController;
39 import org.openide.util.NbBundle;
40 import org.openide.windows.WindowManager;
52 @SuppressWarnings(
"PMD.SingularField")
55 private static final long serialVersionUID = 1L;
57 @NbBundle.Messages({
"# {0} - filter name",
58 "# {1} - profile name",
59 "FilesSetDefsPanel.ingest.fileFilterInUseError=The selected file filter, {0}, is being used by a profile, {1}, and cannot be deleted while any profile uses it.",
60 "FilesSetDefsPanel.bytes=Bytes",
61 "FilesSetDefsPanel.kiloBytes=Kilobytes",
62 "FilesSetDefsPanel.megaBytes=Megabytes",
63 "FilesSetDefsPanel.gigaBytes=Gigabytes",
64 "FilesSetDefsPanel.loadError=Error loading interesting files sets from file.",
65 "FilesSetDefsPanel.saveError=Error saving interesting files sets to file.",
66 "FilesSetDefsPanel.interesting.copySetButton.text=Copy Set",
67 "FilesSetDefsPanel.interesting.importSetButton.text=Import Set",
68 "FilesSetDefsPanel.interesting.exportSetButton.text=Export Set"
75 private final DefaultListModel<FilesSet> setsListModel =
new DefaultListModel<>();
76 private final DefaultListModel<
FilesSet.
Rule> rulesListModel =
new DefaultListModel<>();
78 private final JButton okButton =
new JButton(
"OK");
79 private final JButton cancelButton =
new JButton(
"Cancel");
83 private boolean canBeEnabled =
true;
98 this.panelType = panelType;
99 this.initComponents();
101 this.setsList.setModel(setsListModel);
103 this.rulesList.setModel(rulesListModel);
105 this.ingestWarningLabel.setVisible(
false);
107 this.copySetButton.setVisible(
false);
108 this.importSetButton.setVisible(
false);
109 this.exportSetButton.setVisible(
false);
110 this.mimeTypeComboBox.setVisible(
false);
111 this.jLabel7.setVisible(
false);
112 this.fileSizeUnitComboBox.setVisible(
false);
113 this.fileSizeSpinner.setVisible(
false);
114 this.filterDialogTitle =
"FilesSetPanel.filter.title";
115 this.ruleDialogTitle =
"FilesSetPanel.rule.title";
116 this.jLabel8.setVisible(
false);
117 this.equalitySignComboBox.setVisible(
false);
118 this.ignoreKnownFilesCheckbox.setVisible(
false);
119 this.jLabel2.setVisible(
false);
120 this.filesRadioButton.setVisible(
false);
121 this.dirsRadioButton.setVisible(
false);
122 this.allRadioButton.setVisible(
false);
123 this.jTextArea1.setText(
org.openide.util.NbBundle.getMessage(
FilesSetDefsPanel.class,
"FilesSetDefsPanel.ingest.jTextArea1.text"));
124 org.openide.awt.Mnemonics.setLocalizedText(setsListLabel,
org.openide.util.NbBundle.getMessage(
FilesSetDefsPanel.class,
"FilesSetDefsPanel.ingest.setsListLabel.text"));
125 org.openide.awt.Mnemonics.setLocalizedText(editSetButton,
org.openide.util.NbBundle.getMessage(
FilesSetDefsPanel.class,
"FilesSetDefsPanel.ingest.editSetButton.text"));
126 org.openide.awt.Mnemonics.setLocalizedText(newSetButton,
org.openide.util.NbBundle.getMessage(
FilesSetDefsPanel.class,
"FilesSetDefsPanel.ingest.newSetButton.text"));
127 org.openide.awt.Mnemonics.setLocalizedText(deleteSetButton,
org.openide.util.NbBundle.getMessage(
FilesSetDefsPanel.class,
"FilesSetDefsPanel.ingest.deleteSetButton.text"));
128 org.openide.awt.Mnemonics.setLocalizedText(jLabel6,
org.openide.util.NbBundle.getMessage(
FilesSetDefsPanel.class,
"FilesSetDefsPanel.ingest.jLabel6.text"));
130 this.filterDialogTitle =
"FilesSetPanel.interesting.title";
131 this.ruleDialogTitle =
"FilesSetPanel.interesting.title";
132 this.ingoreUnallocCheckbox.setVisible(
false);
136 @NbBundle.Messages({
"FilesSetDefsPanel.Interesting.Title=Global Interesting Items Settings",
137 "FilesSetDefsPanel.Ingest.Title=File Filter Settings"})
140 setName(Bundle.FilesSetDefsPanel_Ingest_Title());
142 setName(Bundle.FilesSetDefsPanel_Interesting_Title());
147 detectableMimeTypes.forEach((type) -> {
148 mimeTypeComboBox.addItem(type);
151 logger.log(Level.SEVERE,
"Unable to get detectable file types", ex);
154 this.fileSizeUnitComboBox.setSelectedIndex(1);
155 this.equalitySignComboBox.setSelectedIndex(2);
169 logger.log(Level.WARNING, Bundle.FilesSetDefsPanel_saveError(), ex);
176 canBeEnabled = isEnabled;
177 newRuleButton.setEnabled(isEnabled);
178 copySetButton.setEnabled(isEnabled && setSelected);
179 newSetButton.setEnabled(isEnabled);
180 editRuleButton.setEnabled(isEnabled && ruleSelected);
181 editSetButton.setEnabled(isEnabled && setSelected);
182 exportSetButton.setEnabled(setSelected);
183 importSetButton.setEnabled(isEnabled);
184 deleteRuleButton.setEnabled(isEnabled && ruleSelected);
185 deleteSetButton.setEnabled(isEnabled && setSelected);
186 ingestWarningLabel.setVisible(!isEnabled);
196 this.resetComponents();
209 logger.log(Level.WARNING, Bundle.FilesSetDefsPanel_loadError(), ex);
210 this.filesSets =
new TreeMap<>();
215 this.filesSets.values().forEach((set) -> {
216 this.setsListModel.addElement(set);
219 if (!this.filesSets.isEmpty()) {
222 EventQueue.invokeLater(() -> {
232 this.resetRuleComponents();
233 this.setsListModel.clear();
234 this.setDescriptionTextArea.setText(
"");
235 this.ignoreKnownFilesCheckbox.setSelected(
true);
236 this.ingoreUnallocCheckbox.setSelected(
true);
237 this.newSetButton.setEnabled(
true && canBeEnabled);
238 this.editSetButton.setEnabled(
false);
239 this.copySetButton.setEnabled(
false);
240 this.exportSetButton.setEnabled(
false);
241 this.importSetButton.setEnabled(
true && canBeEnabled);
242 this.deleteSetButton.setEnabled(
false);
250 this.fileNameTextField.setText(
"");
251 this.fileNameRadioButton.setSelected(
true);
252 this.fileNameRegexCheckbox.setSelected(
false);
253 this.filesRadioButton.setSelected(
true);
254 this.rulePathConditionTextField.setText(
"");
255 this.daysIncludedTextField.setText(
"");
256 this.rulePathConditionRegexCheckBox.setSelected(
false);
257 this.mimeTypeComboBox.setSelectedIndex(0);
258 this.equalitySignComboBox.setSelectedIndex(2);
259 this.fileSizeUnitComboBox.setSelectedIndex(1);
260 this.fileSizeSpinner.setValue(0);
261 this.newRuleButton.setEnabled(!this.setsListModel.isEmpty() && canBeEnabled);
262 this.editRuleButton.setEnabled(
false);
263 this.deleteRuleButton.setEnabled(
false);
273 if (e.getValueIsAdjusting()) {
285 if (selectedSet != null) {
298 rules.values().forEach((rule) -> {
318 if (e.getValueIsAdjusting()) {
334 if (nameCondition != null) {
345 switch (typeCondition.getMetaType()) {
352 case FILES_AND_DIRECTORIES:
356 if (pathCondition != null) {
363 if (mimeTypeCondition != null) {
368 if (fileSizeCondition != null) {
377 if (dateCondition != null){
408 if (selectedSet != null) {
419 int option = JOptionPane.OK_OPTION;
421 option = JOptionPane.showConfirmDialog(
this, panel, NbBundle.getMessage(
FilesSetPanel.class, filterDialogTitle), JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);
422 }
while (option == JOptionPane.OK_OPTION && !panel.isValidDefinition());
426 if (this.filesSets.containsKey(panel.getFilesSetName()) && shouldCreateNew) {
428 "FilesSetDefsPanel.doFileSetsDialog.duplicateRuleSet.text",
429 panel.getFilesSetName()));
433 if (option == JOptionPane.OK_OPTION) {
435 if (selectedSet != null) {
439 rules.putAll(selectedSet.
getRules());
441 if (shouldCreateNew) {
442 this.replaceFilesSet(null, panel.getFilesSetName(), panel.getFilesSetDescription(), panel.getFileSetIgnoresKnownFiles(), panel.getFileSetIgnoresUnallocatedSpace(), rules);
444 this.replaceFilesSet(selectedSet, panel.getFilesSetName(), panel.getFilesSetDescription(), panel.getFileSetIgnoresKnownFiles(), panel.getFileSetIgnoresUnallocatedSpace(), rules);
458 FilesSetRulePanel panel;
459 if (selectedRule != null) {
461 panel =
new FilesSetRulePanel(selectedRule, okButton, cancelButton, panelType);
464 panel =
new FilesSetRulePanel(okButton, cancelButton, panelType);
469 int option = JOptionPane.OK_OPTION;
471 option = JOptionPane.showOptionDialog(
this, panel, NbBundle.getMessage(
FilesSetPanel.class, ruleDialogTitle), JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE, null,
new Object[]{okButton, cancelButton}, okButton);
473 }
while (option == JOptionPane.OK_OPTION && !panel.isValidRuleDefinition());
475 if (option == JOptionPane.OK_OPTION) {
479 FilesSet selectedSet = this.setsList.getSelectedValue();
484 if (selectedRule != null) {
485 rules.remove(selectedRule.getUuid());
487 FilesSet.
Rule newRule =
new FilesSet.
Rule(panel.getRuleName(), panel.getFileNameCondition(), panel.getMetaTypeCondition(), panel.getPathCondition(), panel.getMimeTypeCondition(), panel.getFileSizeCondition(), panel.getDateCondition());
488 rules.put(newRule.getUuid(), newRule);
497 EventQueue.invokeLater(() -> {
498 this.rulesList.setSelectedValue(newRule,
true);
518 void replaceFilesSet(
FilesSet oldSet, String name, String description,
boolean ignoresKnownFiles,
boolean ignoresUnallocatedSpace, Map<String, FilesSet.Rule> rules) {
519 if (oldSet != null) {
522 this.filesSets.remove(oldSet.
getName());
527 FilesSet newSet =
new FilesSet(name, description, ignoresKnownFiles, ignoresUnallocatedSpace, rules);
528 this.filesSets.put(newSet.getName(), newSet);
532 FilesSetDefsPanel.this.setsListModel.clear();
533 this.filesSets.values().forEach((set) -> {
534 this.setsListModel.addElement(set);
540 this.setsList.setSelectedValue(newSet,
true);
548 @SuppressWarnings(
"unchecked")
550 private
void initComponents() {
552 fileNameButtonGroup =
new javax.swing.ButtonGroup();
553 typeButtonGroup =
new javax.swing.ButtonGroup();
554 jScrollPane1 =
new javax.swing.JScrollPane();
555 jPanel1 =
new javax.swing.JPanel();
556 jLabel6 =
new javax.swing.JLabel();
557 newRuleButton =
new javax.swing.JButton();
558 filesRadioButton =
new javax.swing.JRadioButton();
559 editRuleButton =
new javax.swing.JButton();
560 rulesListLabel =
new javax.swing.JLabel();
561 rulesListScrollPane =
new javax.swing.JScrollPane();
562 rulesList =
new javax.swing.JList<>();
563 setDescScrollPanel =
new javax.swing.JScrollPane();
564 setDescriptionTextArea =
new javax.swing.JTextArea();
565 editSetButton =
new javax.swing.JButton();
566 setsListScrollPane =
new javax.swing.JScrollPane();
567 setsList =
new javax.swing.JList<>();
568 fileNameExtensionRadioButton =
new javax.swing.JRadioButton();
569 jLabel3 =
new javax.swing.JLabel();
570 fileNameTextField =
new javax.swing.JTextField();
571 jLabel5 =
new javax.swing.JLabel();
572 fileNameRadioButton =
new javax.swing.JRadioButton();
573 rulePathConditionTextField =
new javax.swing.JTextField();
574 ignoreKnownFilesCheckbox =
new javax.swing.JCheckBox();
575 fileNameRegexCheckbox =
new javax.swing.JCheckBox();
576 separator =
new javax.swing.JSeparator();
577 setsListLabel =
new javax.swing.JLabel();
578 allRadioButton =
new javax.swing.JRadioButton();
579 deleteSetButton =
new javax.swing.JButton();
580 deleteRuleButton =
new javax.swing.JButton();
581 newSetButton =
new javax.swing.JButton();
582 jLabel2 =
new javax.swing.JLabel();
583 dirsRadioButton =
new javax.swing.JRadioButton();
584 jLabel1 =
new javax.swing.JLabel();
585 jLabel4 =
new javax.swing.JLabel();
586 rulePathConditionRegexCheckBox =
new javax.swing.JCheckBox();
587 jScrollPane2 =
new javax.swing.JScrollPane();
588 jTextArea1 =
new javax.swing.JTextArea();
589 jLabel7 =
new javax.swing.JLabel();
590 mimeTypeComboBox =
new javax.swing.JComboBox<>();
591 jLabel8 =
new javax.swing.JLabel();
592 equalitySignComboBox =
new javax.swing.JComboBox<String>();
593 fileSizeSpinner =
new javax.swing.JSpinner();
594 fileSizeUnitComboBox =
new javax.swing.JComboBox<String>();
595 ingoreUnallocCheckbox =
new javax.swing.JCheckBox();
596 ingestWarningLabel =
new javax.swing.JLabel();
597 copySetButton =
new javax.swing.JButton();
598 importSetButton =
new javax.swing.JButton();
599 exportSetButton =
new javax.swing.JButton();
600 modifiedDateLabel =
new javax.swing.JLabel();
601 daysIncludedTextField =
new javax.swing.JTextField();
602 daysIncludedLabel =
new javax.swing.JLabel();
604 setFont(getFont().deriveFont(getFont().getStyle() & ~java.awt.Font.BOLD, 11));
606 jScrollPane1.setFont(jScrollPane1.getFont().deriveFont(jScrollPane1.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
608 jPanel1.setFont(jPanel1.getFont().deriveFont(jPanel1.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
610 jLabel6.setFont(jLabel6.getFont().deriveFont(jLabel6.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
611 org.openide.awt.Mnemonics.setLocalizedText(jLabel6,
org.openide.util.NbBundle.getMessage(
FilesSetDefsPanel.class,
"FilesSetDefsPanel.interesting.jLabel6.text"));
613 newRuleButton.setFont(newRuleButton.getFont().deriveFont(newRuleButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
614 newRuleButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/images/add16.png")));
615 org.openide.awt.Mnemonics.setLocalizedText(newRuleButton,
org.openide.util.NbBundle.getMessage(
FilesSetDefsPanel.class,
"FilesSetDefsPanel.newRuleButton.text"));
616 newRuleButton.addActionListener(
new java.awt.event.ActionListener() {
617 public void actionPerformed(java.awt.event.ActionEvent evt) {
618 newRuleButtonActionPerformed(evt);
622 typeButtonGroup.add(filesRadioButton);
623 filesRadioButton.setFont(filesRadioButton.getFont().deriveFont(filesRadioButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
624 filesRadioButton.setSelected(
true);
625 org.openide.awt.Mnemonics.setLocalizedText(filesRadioButton,
org.openide.util.NbBundle.getMessage(
FilesSetDefsPanel.class,
"FilesSetDefsPanel.filesRadioButton.text"));
626 filesRadioButton.setEnabled(
false);
628 editRuleButton.setFont(editRuleButton.getFont().deriveFont(editRuleButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
629 editRuleButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/images/edit16.png")));
630 org.openide.awt.Mnemonics.setLocalizedText(editRuleButton,
org.openide.util.NbBundle.getMessage(
FilesSetDefsPanel.class,
"FilesSetDefsPanel.editRuleButton.text"));
631 editRuleButton.setEnabled(
false);
632 editRuleButton.addActionListener(
new java.awt.event.ActionListener() {
633 public void actionPerformed(java.awt.event.ActionEvent evt) {
634 editRuleButtonActionPerformed(evt);
638 rulesListLabel.setFont(rulesListLabel.getFont().deriveFont(rulesListLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
639 org.openide.awt.Mnemonics.setLocalizedText(rulesListLabel,
org.openide.util.NbBundle.getMessage(
FilesSetDefsPanel.class,
"FilesSetDefsPanel.rulesListLabel.text"));
641 rulesListScrollPane.setFont(rulesListScrollPane.getFont().deriveFont(rulesListScrollPane.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
643 rulesList.setFont(rulesList.getFont().deriveFont(rulesList.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
644 rulesList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
645 rulesListScrollPane.setViewportView(rulesList);
647 setDescScrollPanel.setFont(setDescScrollPanel.getFont().deriveFont(setDescScrollPanel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
648 setDescScrollPanel.setMinimumSize(
new java.awt.Dimension(10, 22));
649 setDescScrollPanel.setPreferredSize(
new java.awt.Dimension(14, 40));
651 setDescriptionTextArea.setEditable(
false);
652 setDescriptionTextArea.setBackground(
new java.awt.Color(240, 240, 240));
653 setDescriptionTextArea.setColumns(20);
654 setDescriptionTextArea.setFont(setDescriptionTextArea.getFont().deriveFont(setDescriptionTextArea.getFont().getStyle() & ~java.awt.Font.BOLD, 13));
655 setDescriptionTextArea.setLineWrap(
true);
656 setDescriptionTextArea.setRows(6);
657 setDescriptionTextArea.setMinimumSize(
new java.awt.Dimension(10, 22));
658 setDescriptionTextArea.setOpaque(
false);
659 setDescScrollPanel.setViewportView(setDescriptionTextArea);
661 editSetButton.setFont(editSetButton.getFont().deriveFont(editSetButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
662 editSetButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/images/edit16.png")));
663 org.openide.awt.Mnemonics.setLocalizedText(editSetButton,
org.openide.util.NbBundle.getMessage(
FilesSetDefsPanel.class,
"FilesSetDefsPanel.interesting.editSetButton.text"));
664 editSetButton.setEnabled(
false);
665 editSetButton.setMargin(
new java.awt.Insets(2, 6, 2, 6));
666 editSetButton.setMaximumSize(
new java.awt.Dimension(111, 25));
667 editSetButton.setMinimumSize(
new java.awt.Dimension(111, 25));
668 editSetButton.setPreferredSize(
new java.awt.Dimension(111, 25));
669 editSetButton.addActionListener(
new java.awt.event.ActionListener() {
670 public void actionPerformed(java.awt.event.ActionEvent evt) {
671 editSetButtonActionPerformed(evt);
675 setsListScrollPane.setFont(setsListScrollPane.getFont().deriveFont(setsListScrollPane.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
677 setsList.setFont(setsList.getFont().deriveFont(setsList.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
678 setsList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
679 setsListScrollPane.setViewportView(setsList);
681 fileNameButtonGroup.add(fileNameExtensionRadioButton);
682 fileNameExtensionRadioButton.setFont(fileNameExtensionRadioButton.getFont().deriveFont(fileNameExtensionRadioButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
683 org.openide.awt.Mnemonics.setLocalizedText(fileNameExtensionRadioButton,
org.openide.util.NbBundle.getMessage(
FilesSetDefsPanel.class,
"FilesSetDefsPanel.fileNameExtensionRadioButton.text"));
684 fileNameExtensionRadioButton.setEnabled(
false);
686 jLabel3.setFont(jLabel3.getFont().deriveFont(jLabel3.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
687 org.openide.awt.Mnemonics.setLocalizedText(jLabel3,
org.openide.util.NbBundle.getMessage(
FilesSetDefsPanel.class,
"FilesSetDefsPanel.jLabel3.text"));
689 fileNameTextField.setEditable(
false);
690 fileNameTextField.setFont(fileNameTextField.getFont().deriveFont(fileNameTextField.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
691 fileNameTextField.setText(
org.openide.util.NbBundle.getMessage(
FilesSetDefsPanel.class,
"FilesSetDefsPanel.fileNameTextField.text"));
693 jLabel5.setFont(jLabel5.getFont().deriveFont(jLabel5.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
694 org.openide.awt.Mnemonics.setLocalizedText(jLabel5,
org.openide.util.NbBundle.getMessage(
FilesSetDefsPanel.class,
"FilesSetDefsPanel.jLabel5.text"));
696 fileNameButtonGroup.add(fileNameRadioButton);
697 fileNameRadioButton.setFont(fileNameRadioButton.getFont().deriveFont(fileNameRadioButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
698 org.openide.awt.Mnemonics.setLocalizedText(fileNameRadioButton,
org.openide.util.NbBundle.getMessage(
FilesSetDefsPanel.class,
"FilesSetDefsPanel.fileNameRadioButton.text"));
699 fileNameRadioButton.setEnabled(
false);
701 rulePathConditionTextField.setEditable(
false);
702 rulePathConditionTextField.setFont(rulePathConditionTextField.getFont().deriveFont(rulePathConditionTextField.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
703 rulePathConditionTextField.setText(
org.openide.util.NbBundle.getMessage(
FilesSetDefsPanel.class,
"FilesSetDefsPanel.rulePathConditionTextField.text"));
705 ignoreKnownFilesCheckbox.setFont(ignoreKnownFilesCheckbox.getFont().deriveFont(ignoreKnownFilesCheckbox.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
706 org.openide.awt.Mnemonics.setLocalizedText(ignoreKnownFilesCheckbox,
org.openide.util.NbBundle.getMessage(
FilesSetDefsPanel.class,
"FilesSetDefsPanel.ignoreKnownFilesCheckbox.text"));
707 ignoreKnownFilesCheckbox.setEnabled(
false);
709 fileNameRegexCheckbox.setFont(fileNameRegexCheckbox.getFont().deriveFont(fileNameRegexCheckbox.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
710 org.openide.awt.Mnemonics.setLocalizedText(fileNameRegexCheckbox,
org.openide.util.NbBundle.getMessage(
FilesSetDefsPanel.class,
"FilesSetDefsPanel.fileNameRegexCheckbox.text"));
711 fileNameRegexCheckbox.setEnabled(
false);
712 fileNameRegexCheckbox.addActionListener(
new java.awt.event.ActionListener() {
713 public void actionPerformed(java.awt.event.ActionEvent evt) {
714 fileNameRegexCheckboxActionPerformed(evt);
718 separator.setOrientation(javax.swing.SwingConstants.VERTICAL);
720 setsListLabel.setFont(setsListLabel.getFont().deriveFont(setsListLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
721 org.openide.awt.Mnemonics.setLocalizedText(setsListLabel,
org.openide.util.NbBundle.getMessage(
FilesSetDefsPanel.class,
"FilesSetDefsPanel.interesting.setsListLabel.text"));
723 typeButtonGroup.add(allRadioButton);
724 allRadioButton.setFont(allRadioButton.getFont().deriveFont(allRadioButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
725 org.openide.awt.Mnemonics.setLocalizedText(allRadioButton,
org.openide.util.NbBundle.getMessage(
FilesSetDefsPanel.class,
"FilesSetDefsPanel.allRadioButton.text"));
726 allRadioButton.setEnabled(
false);
728 deleteSetButton.setFont(deleteSetButton.getFont().deriveFont(deleteSetButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
729 deleteSetButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/images/delete16.png")));
730 org.openide.awt.Mnemonics.setLocalizedText(deleteSetButton,
org.openide.util.NbBundle.getMessage(
FilesSetDefsPanel.class,
"FilesSetDefsPanel.interesting.deleteSetButton.text"));
731 deleteSetButton.setEnabled(
false);
732 deleteSetButton.setMargin(
new java.awt.Insets(2, 6, 2, 6));
733 deleteSetButton.setMaximumSize(
new java.awt.Dimension(111, 25));
734 deleteSetButton.setMinimumSize(
new java.awt.Dimension(111, 25));
735 deleteSetButton.setPreferredSize(
new java.awt.Dimension(111, 25));
736 deleteSetButton.addActionListener(
new java.awt.event.ActionListener() {
737 public void actionPerformed(java.awt.event.ActionEvent evt) {
738 deleteSetButtonActionPerformed(evt);
742 deleteRuleButton.setFont(deleteRuleButton.getFont().deriveFont(deleteRuleButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
743 deleteRuleButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/images/delete16.png")));
744 org.openide.awt.Mnemonics.setLocalizedText(deleteRuleButton,
org.openide.util.NbBundle.getMessage(
FilesSetDefsPanel.class,
"FilesSetDefsPanel.deleteRuleButton.text"));
745 deleteRuleButton.setEnabled(
false);
746 deleteRuleButton.addActionListener(
new java.awt.event.ActionListener() {
747 public void actionPerformed(java.awt.event.ActionEvent evt) {
748 deleteRuleButtonActionPerformed(evt);
752 newSetButton.setFont(newSetButton.getFont().deriveFont(newSetButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
753 newSetButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/images/add16.png")));
754 org.openide.awt.Mnemonics.setLocalizedText(newSetButton,
org.openide.util.NbBundle.getMessage(
FilesSetDefsPanel.class,
"FilesSetDefsPanel.interesting.newSetButton.text"));
755 newSetButton.setMargin(
new java.awt.Insets(2, 6, 2, 6));
756 newSetButton.setMaximumSize(
new java.awt.Dimension(111, 25));
757 newSetButton.setMinimumSize(
new java.awt.Dimension(111, 25));
758 newSetButton.setPreferredSize(
new java.awt.Dimension(111, 25));
759 newSetButton.addActionListener(
new java.awt.event.ActionListener() {
760 public void actionPerformed(java.awt.event.ActionEvent evt) {
761 newSetButtonActionPerformed(evt);
765 jLabel2.setFont(jLabel2.getFont().deriveFont(jLabel2.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
766 org.openide.awt.Mnemonics.setLocalizedText(jLabel2,
org.openide.util.NbBundle.getMessage(
FilesSetDefsPanel.class,
"FilesSetDefsPanel.jLabel2.text"));
768 typeButtonGroup.add(dirsRadioButton);
769 dirsRadioButton.setFont(dirsRadioButton.getFont().deriveFont(dirsRadioButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
770 org.openide.awt.Mnemonics.setLocalizedText(dirsRadioButton,
org.openide.util.NbBundle.getMessage(
FilesSetDefsPanel.class,
"FilesSetDefsPanel.dirsRadioButton.text"));
771 dirsRadioButton.setEnabled(
false);
773 jLabel1.setFont(jLabel1.getFont().deriveFont(jLabel1.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
774 org.openide.awt.Mnemonics.setLocalizedText(jLabel1,
org.openide.util.NbBundle.getMessage(
FilesSetDefsPanel.class,
"FilesSetDefsPanel.jLabel1.text"));
776 jLabel4.setFont(jLabel4.getFont().deriveFont(jLabel4.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
777 org.openide.awt.Mnemonics.setLocalizedText(jLabel4,
org.openide.util.NbBundle.getMessage(
FilesSetDefsPanel.class,
"FilesSetDefsPanel.jLabel4.text"));
779 rulePathConditionRegexCheckBox.setFont(rulePathConditionRegexCheckBox.getFont().deriveFont(rulePathConditionRegexCheckBox.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
780 org.openide.awt.Mnemonics.setLocalizedText(rulePathConditionRegexCheckBox,
org.openide.util.NbBundle.getMessage(
FilesSetDefsPanel.class,
"FilesSetDefsPanel.rulePathConditionRegexCheckBox.text"));
781 rulePathConditionRegexCheckBox.setEnabled(
false);
783 jScrollPane2.setFont(jScrollPane2.getFont().deriveFont(jScrollPane2.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
785 jTextArea1.setEditable(
false);
786 jTextArea1.setBackground(
new java.awt.Color(240, 240, 240));
787 jTextArea1.setColumns(20);
788 jTextArea1.setFont(jTextArea1.getFont().deriveFont(jTextArea1.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
789 jTextArea1.setLineWrap(
true);
790 jTextArea1.setRows(3);
791 jTextArea1.setText(
org.openide.util.NbBundle.getMessage(
FilesSetDefsPanel.class,
"FilesSetDefsPanel.interesting.jTextArea1.text"));
792 jTextArea1.setWrapStyleWord(
true);
793 jTextArea1.setOpaque(
false);
794 jScrollPane2.setViewportView(jTextArea1);
796 org.openide.awt.Mnemonics.setLocalizedText(jLabel7,
org.openide.util.NbBundle.getMessage(
FilesSetDefsPanel.class,
"FilesSetDefsPanel.jLabel7.text"));
798 mimeTypeComboBox.setBackground(
new java.awt.Color(240, 240, 240));
799 mimeTypeComboBox.setModel(
new javax.swing.DefaultComboBoxModel<String>(
new String[] {
""}));
800 mimeTypeComboBox.setEnabled(
false);
801 mimeTypeComboBox.setMinimumSize(
new java.awt.Dimension(0, 20));
802 mimeTypeComboBox.setPreferredSize(
new java.awt.Dimension(12, 20));
804 org.openide.awt.Mnemonics.setLocalizedText(jLabel8,
org.openide.util.NbBundle.getMessage(
FilesSetDefsPanel.class,
"FilesSetDefsPanel.jLabel8.text"));
806 equalitySignComboBox.setModel(
new javax.swing.DefaultComboBoxModel<String>(
new String[] {
"=",
">",
"≥",
"<",
"≤" }));
807 equalitySignComboBox.setEnabled(
false);
809 fileSizeSpinner.setEnabled(
false);
810 fileSizeSpinner.setMinimumSize(
new java.awt.Dimension(2, 20));
812 fileSizeUnitComboBox.setModel(
new javax.swing.DefaultComboBoxModel<String>(
new String[] { Bundle.FilesSetDefsPanel_bytes(), Bundle.FilesSetDefsPanel_kiloBytes(), Bundle.FilesSetDefsPanel_megaBytes(), Bundle.FilesSetDefsPanel_gigaBytes() }));
813 fileSizeUnitComboBox.setEnabled(
false);
815 org.openide.awt.Mnemonics.setLocalizedText(ingoreUnallocCheckbox,
org.openide.util.NbBundle.getMessage(
FilesSetDefsPanel.class,
"FilesSetDefsPanel.ingoreUnallocCheckbox.text"));
816 ingoreUnallocCheckbox.setToolTipText(
org.openide.util.NbBundle.getMessage(
FilesSetDefsPanel.class,
"FilesSetDefsPanel.ingoreUnallocCheckbox.toolTipText"));
817 ingoreUnallocCheckbox.setEnabled(
false);
819 ingestWarningLabel.setFont(ingestWarningLabel.getFont().deriveFont(ingestWarningLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
820 ingestWarningLabel.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/modules/hashdatabase/warning16.png")));
821 org.openide.awt.Mnemonics.setLocalizedText(ingestWarningLabel,
org.openide.util.NbBundle.getMessage(
FilesSetDefsPanel.class,
"FilesSetDefsPanel.ingestWarningLabel.text"));
823 copySetButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/images/new16.png")));
824 org.openide.awt.Mnemonics.setLocalizedText(copySetButton,
org.openide.util.NbBundle.getMessage(
FilesSetDefsPanel.class,
"FilesSetDefsPanel.interesting.copySetButton.text"));
825 copySetButton.setEnabled(
false);
826 copySetButton.setMargin(
new java.awt.Insets(2, 6, 2, 6));
827 copySetButton.setMaximumSize(
new java.awt.Dimension(111, 25));
828 copySetButton.setMinimumSize(
new java.awt.Dimension(111, 25));
829 copySetButton.setPreferredSize(
new java.awt.Dimension(111, 25));
830 copySetButton.addActionListener(
new java.awt.event.ActionListener() {
831 public void actionPerformed(java.awt.event.ActionEvent evt) {
832 copySetButtonActionPerformed(evt);
836 importSetButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/images/import16.png")));
837 org.openide.awt.Mnemonics.setLocalizedText(importSetButton,
org.openide.util.NbBundle.getMessage(
FilesSetDefsPanel.class,
"FilesSetDefsPanel.interesting.importSetButton.text"));
838 importSetButton.setMargin(
new java.awt.Insets(2, 6, 2, 6));
839 importSetButton.setMaximumSize(
new java.awt.Dimension(111, 25));
840 importSetButton.setMinimumSize(
new java.awt.Dimension(111, 25));
841 importSetButton.setPreferredSize(
new java.awt.Dimension(111, 25));
842 importSetButton.addActionListener(
new java.awt.event.ActionListener() {
843 public void actionPerformed(java.awt.event.ActionEvent evt) {
844 importSetButtonActionPerformed(evt);
848 exportSetButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/images/export16.png")));
849 org.openide.awt.Mnemonics.setLocalizedText(exportSetButton,
org.openide.util.NbBundle.getMessage(
FilesSetDefsPanel.class,
"FilesSetDefsPanel.interesting.exportSetButton.text"));
850 exportSetButton.setEnabled(
false);
851 exportSetButton.setMargin(
new java.awt.Insets(2, 6, 2, 6));
852 exportSetButton.setMaximumSize(
new java.awt.Dimension(111, 25));
853 exportSetButton.setMinimumSize(
new java.awt.Dimension(111, 25));
854 exportSetButton.setPreferredSize(
new java.awt.Dimension(111, 25));
855 exportSetButton.addActionListener(
new java.awt.event.ActionListener() {
856 public void actionPerformed(java.awt.event.ActionEvent evt) {
857 exportSetButtonActionPerformed(evt);
861 org.openide.awt.Mnemonics.setLocalizedText(modifiedDateLabel,
org.openide.util.NbBundle.getMessage(
FilesSetDefsPanel.class,
"FilesSetDefsPanel.modifiedDateLabel.text"));
863 daysIncludedTextField.setEditable(
false);
864 daysIncludedTextField.setHorizontalAlignment(javax.swing.JTextField.TRAILING);
865 daysIncludedTextField.setText(
org.openide.util.NbBundle.getMessage(
FilesSetDefsPanel.class,
"FilesSetDefsPanel.daysIncludedTextField.text"));
866 daysIncludedTextField.setMinimumSize(
new java.awt.Dimension(60, 20));
867 daysIncludedTextField.setPreferredSize(
new java.awt.Dimension(60, 20));
869 org.openide.awt.Mnemonics.setLocalizedText(daysIncludedLabel,
org.openide.util.NbBundle.getMessage(
FilesSetDefsPanel.class,
"FilesSetDefsPanel.daysIncludedLabel.text"));
870 daysIncludedLabel.setEnabled(
false);
872 javax.swing.GroupLayout jPanel1Layout =
new javax.swing.GroupLayout(jPanel1);
873 jPanel1.setLayout(jPanel1Layout);
874 jPanel1Layout.setHorizontalGroup(
875 jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
876 .addGroup(jPanel1Layout.createSequentialGroup()
878 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
879 .addGroup(jPanel1Layout.createSequentialGroup()
880 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING,
false)
881 .addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanel1Layout.createSequentialGroup()
882 .addComponent(copySetButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
883 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
884 .addComponent(importSetButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
885 .addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanel1Layout.createSequentialGroup()
886 .addComponent(newSetButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
887 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
888 .addComponent(editSetButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
889 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
890 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
891 .addComponent(exportSetButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
892 .addComponent(deleteSetButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
893 .addComponent(setsListScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 346, javax.swing.GroupLayout.PREFERRED_SIZE)
894 .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 346, javax.swing.GroupLayout.PREFERRED_SIZE)
895 .addComponent(setsListLabel))
896 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
897 .addComponent(separator, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
898 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
899 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
900 .addGroup(jPanel1Layout.createSequentialGroup()
901 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
902 .addComponent(rulesListScrollPane, javax.swing.GroupLayout.Alignment.TRAILING)
903 .addComponent(setDescScrollPanel, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
904 .addGroup(jPanel1Layout.createSequentialGroup()
906 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING,
false)
907 .addComponent(jLabel7)
908 .addComponent(jLabel8)
909 .addComponent(jLabel2)
910 .addComponent(jLabel4)
911 .addComponent(modifiedDateLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
912 .addComponent(jLabel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
913 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
914 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
915 .addComponent(rulePathConditionTextField)
916 .addComponent(fileNameTextField, javax.swing.GroupLayout.Alignment.TRAILING)
917 .addComponent(mimeTypeComboBox, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
918 .addGroup(jPanel1Layout.createSequentialGroup()
919 .addComponent(equalitySignComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 60, javax.swing.GroupLayout.PREFERRED_SIZE)
920 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
921 .addComponent(fileSizeSpinner, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
922 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
923 .addComponent(fileSizeUnitComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 79, javax.swing.GroupLayout.PREFERRED_SIZE))
924 .addGroup(jPanel1Layout.createSequentialGroup()
925 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
926 .addComponent(rulePathConditionRegexCheckBox)
927 .addGroup(jPanel1Layout.createSequentialGroup()
928 .addComponent(daysIncludedTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
929 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
930 .addComponent(daysIncludedLabel))
931 .addGroup(jPanel1Layout.createSequentialGroup()
932 .addComponent(filesRadioButton)
933 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
934 .addComponent(dirsRadioButton)
935 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
936 .addComponent(allRadioButton))
937 .addGroup(jPanel1Layout.createSequentialGroup()
938 .addComponent(fileNameRadioButton)
939 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
940 .addComponent(fileNameExtensionRadioButton)
941 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
942 .addComponent(fileNameRegexCheckbox)))
943 .addGap(0, 0, Short.MAX_VALUE)))))
945 .addGroup(jPanel1Layout.createSequentialGroup()
946 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
947 .addComponent(rulesListLabel)
948 .addGroup(jPanel1Layout.createSequentialGroup()
949 .addComponent(ignoreKnownFilesCheckbox)
950 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
951 .addComponent(ingoreUnallocCheckbox, javax.swing.GroupLayout.PREFERRED_SIZE, 158, javax.swing.GroupLayout.PREFERRED_SIZE))
952 .addGroup(jPanel1Layout.createSequentialGroup()
953 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
954 .addComponent(jLabel5)
955 .addComponent(jLabel6))
956 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
957 .addComponent(ingestWarningLabel))
958 .addComponent(jLabel1)
959 .addGroup(jPanel1Layout.createSequentialGroup()
960 .addComponent(newRuleButton)
962 .addComponent(editRuleButton)
964 .addComponent(deleteRuleButton)))
965 .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
968 jPanel1Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL,
new java.awt.Component[] {copySetButton, deleteSetButton, editSetButton, exportSetButton, importSetButton, newSetButton});
970 jPanel1Layout.setVerticalGroup(
971 jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
972 .addGroup(jPanel1Layout.createSequentialGroup()
974 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
975 .addComponent(separator)
976 .addGroup(jPanel1Layout.createSequentialGroup()
977 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
978 .addGroup(jPanel1Layout.createSequentialGroup()
979 .addComponent(jLabel6)
980 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
981 .addComponent(jLabel5)
983 .addComponent(ingestWarningLabel, javax.swing.GroupLayout.Alignment.TRAILING))
984 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
985 .addComponent(setDescScrollPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 69, Short.MAX_VALUE)
986 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
987 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
988 .addComponent(ignoreKnownFilesCheckbox)
989 .addComponent(ingoreUnallocCheckbox, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE))
990 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
991 .addComponent(rulesListLabel)
992 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
993 .addComponent(rulesListScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 61, Short.MAX_VALUE)
994 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
995 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
996 .addComponent(newRuleButton)
997 .addComponent(editRuleButton)
998 .addComponent(deleteRuleButton))
999 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
1000 .addComponent(jLabel1)
1001 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
1002 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
1003 .addComponent(jLabel2)
1004 .addComponent(filesRadioButton)
1005 .addComponent(dirsRadioButton)
1006 .addComponent(allRadioButton))
1007 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
1008 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
1009 .addComponent(jLabel3)
1010 .addComponent(fileNameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE))
1011 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
1012 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
1013 .addComponent(fileNameRadioButton)
1014 .addComponent(fileNameExtensionRadioButton)
1015 .addComponent(fileNameRegexCheckbox))
1016 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
1017 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
1018 .addComponent(jLabel4)
1019 .addComponent(rulePathConditionTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE))
1020 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
1021 .addComponent(rulePathConditionRegexCheckBox)
1022 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
1023 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
1024 .addComponent(jLabel7)
1025 .addComponent(mimeTypeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
1026 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
1027 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
1028 .addComponent(jLabel8)
1029 .addComponent(equalitySignComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
1030 .addComponent(fileSizeSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
1031 .addComponent(fileSizeUnitComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
1032 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
1033 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
1034 .addComponent(modifiedDateLabel)
1035 .addComponent(daysIncludedTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
1036 .addComponent(daysIncludedLabel))
1038 .addGroup(jPanel1Layout.createSequentialGroup()
1039 .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
1040 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
1041 .addComponent(setsListLabel)
1042 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
1043 .addComponent(setsListScrollPane)
1044 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
1045 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
1046 .addComponent(newSetButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
1047 .addComponent(editSetButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
1048 .addComponent(deleteSetButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
1049 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
1050 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
1051 .addComponent(copySetButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
1052 .addComponent(importSetButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
1053 .addComponent(exportSetButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
1057 jPanel1Layout.linkSize(javax.swing.SwingConstants.VERTICAL,
new java.awt.Component[] {copySetButton, deleteRuleButton, deleteSetButton, editRuleButton, editSetButton, exportSetButton, importSetButton, newRuleButton, newSetButton});
1059 jScrollPane1.setViewportView(jPanel1);
1061 javax.swing.GroupLayout layout =
new javax.swing.GroupLayout(
this);
1062 this.setLayout(layout);
1063 layout.setHorizontalGroup(
1064 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
1065 .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 800, Short.MAX_VALUE)
1067 layout.setVerticalGroup(
1068 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
1069 .addComponent(jScrollPane1)
1074 this.doFileSetsDialog(null,
true);
1075 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
1083 FilesSet oldSet = this.setsList.getSelectedValue();
1085 FilesSet.
Rule selectedRule = this.rulesList.getSelectedValue();
1086 rules.remove(selectedRule.getUuid());
1088 if (!this.rulesListModel.isEmpty()) {
1089 this.rulesList.setSelectedIndex(0);
1091 this.resetRuleComponents();
1093 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
1097 FilesSet selectedSet = this.setsList.getSelectedValue();
1100 if (profile.getFileIngestFilter().equals(selectedSet.
getName())) {
1102 "FilesSetDefsPanel.ingest.fileFilterInUseError",
1103 selectedSet.
getName(), profile.toString()));
1109 this.filesSets.remove(selectedSet.
getName());
1110 this.setsListModel.removeElement(selectedSet);
1113 if (!this.filesSets.isEmpty()) {
1114 this.setsList.setSelectedIndex(0);
1116 this.resetComponents();
1118 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
1122 this.doFileSetsDialog(this.setsList.getSelectedValue(),
false);
1123 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
1127 this.doFilesSetRuleDialog(this.rulesList.getSelectedValue());
1128 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
1132 this.doFilesSetRuleDialog(null);
1133 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
1137 this.doFileSetsDialog(this.setsList.getSelectedValue(),
true);
1138 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
1140 @NbBundle.Messages({
1141 "FilesSetDefsPanel.yesOwMsg=Yes, overwrite",
1142 "FilesSetDefsPanel.noSkipMsg=No, skip",
1143 "FilesSetDefsPanel.cancelImportMsg=Cancel import",
1144 "# {0} - FilesSet name",
1145 "FilesSetDefsPanel.interesting.overwriteSetPrompt=Interesting files set <{0}> already exists locally, overwrite?",
1146 "FilesSetDefsPanel.interesting.importOwConflict=Import Interesting files set conflict",
1147 "FilesSetDefsPanel.interesting.failImportMsg=Interesting files set not imported",
1148 "FilesSetDefsPanel.interesting.fileExtensionFilterLbl=Autopsy Interesting File Set File (xml)",
1149 "FilesSetDefsPanel.interesting.importButtonAction.featureName=Interesting Files Set Import"
1153 FilesSet selectedSet = this.setsList.getSelectedValue();
1154 JFileChooser chooser =
new JFileChooser();
1155 final String EXTENSION =
"xml";
1156 FileNameExtensionFilter autopsyFilter =
new FileNameExtensionFilter(
1157 NbBundle.getMessage(
this.getClass(),
"FilesSetDefsPanel.interesting.fileExtensionFilterLbl"), EXTENSION);
1158 chooser.addChoosableFileFilter(autopsyFilter);
1159 chooser.setAcceptAllFileFilterUsed(
false);
1160 chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
1161 int returnVal = chooser.showOpenDialog(
this);
1162 if (returnVal == JFileChooser.APPROVE_OPTION) {
1163 File selFile = chooser.getSelectedFile();
1164 if (selFile == null) {
1165 JOptionPane.showMessageDialog(
this,
1166 NbBundle.getMessage(
this.getClass(),
"FilesSetDefsPanel.interesting.failImportMsg"),
1167 NbBundle.getMessage(
this.getClass(),
"FilesSetDefsPanel.interesting.importButtonAction.featureName"),
1168 JOptionPane.WARNING_MESSAGE);
1169 logger.warning(
"Selected file was null, when trying to import interesting files set definitions");
1172 Collection<FilesSet> importedSets;
1174 importedSets = InterestingItemsFilesSetSettings.readDefinitionsXML(selFile).values();
1175 if (importedSets.isEmpty()) {
1179 JOptionPane.showMessageDialog(
this,
1180 NbBundle.getMessage(
this.getClass(),
"FilesSetDefsPanel.interesting.failImportMsg"),
1181 NbBundle.getMessage(
this.getClass(),
"FilesSetDefsPanel.interesting.importButtonAction.featureName"),
1182 JOptionPane.WARNING_MESSAGE);
1183 logger.log(Level.WARNING,
"No Interesting files set definitions were read from the selected file, exception", ex);
1186 for (
FilesSet set : importedSets) {
1187 int choice = JOptionPane.OK_OPTION;
1188 if (filesSets.containsKey(set.getName())) {
1189 Object[] options = {NbBundle.getMessage(this.getClass(),
"FilesSetDefsPanel.yesOwMsg"),
1190 NbBundle.getMessage(this.getClass(),
"FilesSetDefsPanel.noSkipMsg"),
1191 NbBundle.getMessage(this.getClass(),
"FilesSetDefsPanel.cancelImportMsg")};
1192 choice = JOptionPane.showOptionDialog(
this,
1193 NbBundle.getMessage(
this.getClass(),
"FilesSetDefsPanel.interesting.overwriteSetPrompt", set.getName()),
1194 NbBundle.getMessage(
this.getClass(),
"FilesSetDefsPanel.interesting.importOwConflict"),
1195 JOptionPane.YES_NO_CANCEL_OPTION,
1196 JOptionPane.QUESTION_MESSAGE,
1201 if (choice == JOptionPane.OK_OPTION) {
1203 this.filesSets.put(set.getName(), set);
1204 }
else if (choice == JOptionPane.CANCEL_OPTION) {
1210 this.filesSets.values().forEach((set) -> {
1211 this.setsListModel.addElement(set);
1216 this.setsList.setSelectedValue(selectedSet,
true);
1217 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
1222 @NbBundle.Messages({
"FilesSetDefsPanel.interesting.exportButtonAction.featureName=Interesting Files Set Export",
1223 "# {0} - file name",
1224 "FilesSetDefsPanel.exportButtonActionPerformed.fileExistPrompt=File {0} exists, overwrite?",
1225 "FilesSetDefsPanel.interesting.ExportedMsg=Interesting files set exported",
1226 "FilesSetDefsPanel.interesting.failExportMsg=Export of interesting files set failed"})
1230 JFileChooser chooser =
new JFileChooser();
1231 final String EXTENSION =
"xml";
1232 FileNameExtensionFilter autopsyFilter =
new FileNameExtensionFilter(
1233 NbBundle.getMessage(
this.getClass(),
"FilesSetDefsPanel.interesting.fileExtensionFilterLbl"), EXTENSION);
1234 chooser.addChoosableFileFilter(autopsyFilter);
1235 chooser.setSelectedFile(
new File(this.setsList.getSelectedValue().getName()));
1236 chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
1237 int returnVal = chooser.showSaveDialog(
this);
1238 if (returnVal == JFileChooser.APPROVE_OPTION) {
1239 final String FEATURE_NAME = NbBundle.getMessage(this.getClass(),
1240 "FilesSetDefsPanel.interesting.exportButtonAction.featureName");
1241 File selFile = chooser.getSelectedFile();
1242 if (selFile == null) {
1243 JOptionPane.showMessageDialog(
this,
1244 NbBundle.getMessage(
this.getClass(),
"FilesSetDefsPanel.interesting.failExportMsg"),
1246 JOptionPane.WARNING_MESSAGE);
1247 logger.warning(
"Selected file was null, when trying to export interesting files set definitions");
1251 String fileAbs = selFile.getAbsolutePath();
1252 if (!fileAbs.endsWith(
"." + EXTENSION)) {
1253 fileAbs = fileAbs +
"." + EXTENSION;
1254 selFile =
new File(fileAbs);
1256 if (selFile.exists()) {
1258 final String FILE_EXISTS_MESSAGE = NbBundle.getMessage(this.getClass(),
1259 "FilesSetDefsPanel.exportButtonActionPerformed.fileExistPrompt", selFile.getName());
1260 boolean shouldWrite = JOptionPane.showConfirmDialog(
this, FILE_EXISTS_MESSAGE, FEATURE_NAME, JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE) == JOptionPane.YES_OPTION;
1265 List<FilesSet> exportSets;
1266 exportSets =
new ArrayList<>();
1268 exportSets.add(this.setsList.getSelectedValue());
1269 boolean written = InterestingItemsFilesSetSettings.exportXmlDefinitionsFile(selFile, exportSets);
1271 JOptionPane.showMessageDialog(
1272 WindowManager.getDefault().getMainWindow(),
1273 NbBundle.getMessage(this.getClass(),
"FilesSetDefsPanel.interesting.ExportedMsg"),
1275 JOptionPane.INFORMATION_MESSAGE);
1277 JOptionPane.showMessageDialog(WindowManager.getDefault().getMainWindow(),
1278 NbBundle.getMessage(this.getClass(),
"FilesSetDefsPanel.interesting.failExportMsg"),
1280 JOptionPane.WARNING_MESSAGE);
1281 logger.warning(
"Export of interesting files set failed unable to write definitions xml file");
void deleteRuleButtonActionPerformed(java.awt.event.ActionEvent evt)
javax.swing.JLabel daysIncludedLabel
javax.swing.JPanel jPanel1
javax.swing.JLabel jLabel4
javax.swing.JRadioButton fileNameExtensionRadioButton
javax.swing.JComboBox< String > fileSizeUnitComboBox
void valueChanged(ListSelectionEvent e)
javax.swing.JLabel jLabel6
javax.swing.JButton importSetButton
void editSetButtonActionPerformed(java.awt.event.ActionEvent evt)
javax.swing.JTextField fileNameTextField
javax.swing.JButton copySetButton
javax.swing.JLabel modifiedDateLabel
javax.swing.JLabel jLabel1
javax.swing.JButton exportSetButton
Map< String, FilesSet > getInterestingFilesSets()
void deleteSetButtonActionPerformed(java.awt.event.ActionEvent evt)
final DefaultListModel< FilesSet > setsListModel
void editRuleButtonActionPerformed(java.awt.event.ActionEvent evt)
void exportSetButtonActionPerformed(java.awt.event.ActionEvent evt)
javax.swing.JScrollPane rulesListScrollPane
javax.swing.JScrollPane setDescScrollPanel
javax.swing.JButton newSetButton
javax.swing.JLabel rulesListLabel
static synchronized FilesSetsManager getInstance()
javax.swing.JScrollPane setsListScrollPane
void copySetButtonActionPerformed(java.awt.event.ActionEvent evt)
javax.swing.JLabel jLabel7
javax.swing.JList< FilesSet > setsList
Map< String, FilesSet > getCustomFileIngestFilters()
javax.swing.JSpinner fileSizeSpinner
javax.swing.JTextArea jTextArea1
javax.swing.ButtonGroup fileNameButtonGroup
void doFilesSetRuleDialog(FilesSet.Rule selectedRule)
javax.swing.JCheckBox ignoreKnownFilesCheckbox
javax.swing.JLabel setsListLabel
javax.swing.JCheckBox ingoreUnallocCheckbox
void newRuleButtonActionPerformed(java.awt.event.ActionEvent evt)
javax.swing.JLabel jLabel8
FilesSetDefsPanel(PANEL_TYPE panelType)
static synchronized List< IngestProfile > getIngestProfiles()
javax.swing.JLabel jLabel3
javax.swing.JTextField daysIncludedTextField
javax.swing.JButton newRuleButton
void doFileSetsDialog(FilesSet selectedSet, boolean shouldCreateNew)
javax.swing.JLabel jLabel2
void valueChanged(ListSelectionEvent e)
void importSetButtonActionPerformed(java.awt.event.ActionEvent evt)
javax.swing.JButton deleteSetButton
javax.swing.JRadioButton filesRadioButton
Map< String, Rule > getRules()
javax.swing.JTextArea setDescriptionTextArea
javax.swing.JButton editSetButton
final String ruleDialogTitle
javax.swing.JCheckBox rulePathConditionRegexCheckBox
javax.swing.JSeparator separator
void fileNameRegexCheckboxActionPerformed(java.awt.event.ActionEvent evt)
javax.swing.JCheckBox fileNameRegexCheckbox
void resetRuleComponents()
TreeMap< String, FilesSet > filesSets
javax.swing.JRadioButton dirsRadioButton
javax.swing.JRadioButton allRadioButton
javax.swing.JComboBox< String > equalitySignComboBox
boolean ignoresKnownFiles()
synchronized static Logger getLogger(String name)
void enableButtons(boolean isEnabled)
final PANEL_TYPE panelType
javax.swing.JButton deleteRuleButton
javax.swing.JButton editRuleButton
javax.swing.JScrollPane jScrollPane2
javax.swing.JLabel ingestWarningLabel
final String filterDialogTitle
void newSetButtonActionPerformed(java.awt.event.ActionEvent evt)
javax.swing.JTextField rulePathConditionTextField
javax.swing.JComboBox< String > mimeTypeComboBox
boolean ingoresUnallocatedSpace()
static synchronized SortedSet< String > getDetectedTypes()
javax.swing.JRadioButton fileNameRadioButton
javax.swing.JScrollPane jScrollPane1
javax.swing.JLabel jLabel5
final DefaultListModel< FilesSet.Rule > rulesListModel
javax.swing.JList< FilesSet.Rule > rulesList
static void error(String message)
javax.swing.ButtonGroup typeButtonGroup