19 package org.sleuthkit.autopsy.discovery.ui;
21 import java.util.ArrayList;
23 import java.util.List;
24 import java.util.logging.Level;
25 import javax.swing.JCheckBox;
26 import javax.swing.JLabel;
27 import javax.swing.event.ListSelectionListener;
28 import org.openide.util.NbBundle;
39 final class InterestingItemsFilterPanel
extends AbstractDiscoveryFilterPanel {
41 private static final long serialVersionUID = 1L;
42 private final static Logger logger = Logger.getLogger(InterestingItemsFilterPanel.class.getName());
47 @ThreadConfined(type = ThreadConfined.ThreadType.AWT)
48 InterestingItemsFilterPanel() {
50 setUpInterestingItemsFilter();
57 @ThreadConfined(type = ThreadConfined.ThreadType.AWT)
58 private
void setUpInterestingItemsFilter() {
60 interestingItemsList.clearList();
61 List<String> setNames = DiscoveryUiUtils.getSetNames(BlackboardArtifact.ARTIFACT_TYPE.TSK_INTERESTING_FILE_HIT,
62 BlackboardAttribute.ATTRIBUTE_TYPE.TSK_SET_NAME);
63 for (String name : setNames) {
64 interestingItemsList.addElement(name, null, name);
66 }
catch (TskCoreException ex) {
67 logger.log(Level.SEVERE,
"Error loading interesting file set names", ex);
68 interestingItemsCheckbox.setEnabled(
false);
69 interestingItemsList.setEnabled(
false);
79 private void initComponents() {
81 interestingItemsCheckbox =
new javax.swing.JCheckBox();
84 org.openide.awt.Mnemonics.setLocalizedText(interestingItemsCheckbox,
org.openide.util.NbBundle.getMessage(InterestingItemsFilterPanel.class,
"InterestingItemsFilterPanel.interestingItemsCheckbox.text"));
85 interestingItemsCheckbox.setMaximumSize(
new java.awt.Dimension(150, 25));
86 interestingItemsCheckbox.setMinimumSize(
new java.awt.Dimension(150, 25));
87 interestingItemsCheckbox.setPreferredSize(
new java.awt.Dimension(150, 25));
88 interestingItemsCheckbox.addActionListener(
new java.awt.event.ActionListener() {
89 public void actionPerformed(java.awt.event.ActionEvent evt) {
90 interestingItemsCheckboxActionPerformed(evt);
94 setMinimumSize(
new java.awt.Dimension(250, 30));
95 setPreferredSize(
new java.awt.Dimension(250, 30));
96 setLayout(
new java.awt.BorderLayout());
97 add(interestingItemsList, java.awt.BorderLayout.CENTER);
100 private void interestingItemsCheckboxActionPerformed(java.awt.event.ActionEvent evt) {
101 interestingItemsList.setEnabled(interestingItemsCheckbox.isSelected());
104 @ThreadConfined(type = ThreadConfined.ThreadType.AWT)
106 void configurePanel(
boolean selected, List<?> selectedItems) {
107 boolean hasInterestingItems = isFilterSupported();
108 interestingItemsCheckbox.setEnabled(hasInterestingItems);
109 interestingItemsCheckbox.setSelected(selected && hasInterestingItems);
110 if (interestingItemsCheckbox.isEnabled() && interestingItemsCheckbox.isSelected()) {
111 interestingItemsList.setEnabled(
true);
112 if (selectedItems != null) {
113 List<String> intItemList =
new ArrayList<>();
114 for (Object item : selectedItems) {
115 if (item instanceof String) {
116 intItemList.add((String) item);
119 if (!intItemList.isEmpty()) {
120 interestingItemsList.setSelectedElements(intItemList);
124 interestingItemsList.setEnabled(
false);
128 @ThreadConfined(type = ThreadConfined.ThreadType.AWT)
130 JCheckBox getCheckbox() {
131 return interestingItemsCheckbox;
135 JLabel getAdditionalLabel() {
139 @ThreadConfined(type = ThreadConfined.ThreadType.AWT)
140 @NbBundle.Messages({
"InterestingItemsFilterPanel.error.text=At least one interesting file set name must be selected."})
142 String checkForError() {
143 if (interestingItemsCheckbox.isSelected() && interestingItemsList.getSelectedElements().isEmpty()) {
144 return Bundle.InterestingItemsFilterPanel_error_text();
151 private javax.swing.JCheckBox interestingItemsCheckbox;
155 @ThreadConfined(type = ThreadConfined.ThreadType.AWT)
157 AbstractFilter getFilter() {
158 if (interestingItemsCheckbox.isSelected()) {
160 return new SearchFiltering.InterestingFileSetFilter(itemsList);
166 void addListSelectionListener(ListSelectionListener listener) {
167 interestingItemsList.addListSelectionListener(listener);
171 boolean isFilterSupported() {
172 return !interestingItemsList.isEmpty();
List< T > getSelectedElements()