19 package org.sleuthkit.autopsy.discovery.ui;
22 import java.util.List;
23 import java.util.logging.Level;
24 import javax.swing.DefaultListModel;
25 import javax.swing.JCheckBox;
26 import javax.swing.JLabel;
27 import javax.swing.JList;
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();
56 @ThreadConfined(type = ThreadConfined.ThreadType.AWT)
57 private
void setUpInterestingItemsFilter() {
60 DefaultListModel<String> intListModel = (DefaultListModel<String>) interestingItemsList.getModel();
61 intListModel.removeAllElements();
62 List<String> setNames = DiscoveryUiUtils.getSetNames(BlackboardArtifact.ARTIFACT_TYPE.TSK_INTERESTING_FILE_HIT,
63 BlackboardAttribute.ATTRIBUTE_TYPE.TSK_SET_NAME);
64 for (String name : setNames) {
65 intListModel.add(count, name);
68 }
catch (TskCoreException ex) {
69 logger.log(Level.SEVERE,
"Error loading interesting file set names", ex);
70 interestingItemsCheckbox.setEnabled(
false);
71 interestingItemsList.setEnabled(
false);
80 @SuppressWarnings(
"unchecked")
82 private
void initComponents() {
84 interestingItemsCheckbox =
new javax.swing.JCheckBox();
85 interestingItemsScrollPane =
new javax.swing.JScrollPane();
86 interestingItemsList =
new javax.swing.JList<>();
88 org.openide.awt.Mnemonics.setLocalizedText(interestingItemsCheckbox,
org.openide.util.NbBundle.getMessage(InterestingItemsFilterPanel.class,
"InterestingItemsFilterPanel.interestingItemsCheckbox.text"));
89 interestingItemsCheckbox.setMaximumSize(
new java.awt.Dimension(150, 25));
90 interestingItemsCheckbox.setMinimumSize(
new java.awt.Dimension(150, 25));
91 interestingItemsCheckbox.setPreferredSize(
new java.awt.Dimension(150, 25));
92 interestingItemsCheckbox.addActionListener(
new java.awt.event.ActionListener() {
93 public void actionPerformed(java.awt.event.ActionEvent evt) {
94 interestingItemsCheckboxActionPerformed(evt);
98 setMinimumSize(
new java.awt.Dimension(250, 30));
99 setPreferredSize(
new java.awt.Dimension(250, 30));
101 interestingItemsScrollPane.setPreferredSize(
new java.awt.Dimension(27, 27));
103 interestingItemsList.setModel(
new DefaultListModel<String>());
104 interestingItemsList.setEnabled(
false);
105 interestingItemsList.setVisibleRowCount(2);
106 interestingItemsScrollPane.setViewportView(interestingItemsList);
108 javax.swing.GroupLayout layout =
new javax.swing.GroupLayout(
this);
109 this.setLayout(layout);
110 layout.setHorizontalGroup(
111 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
112 .addComponent(interestingItemsScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 300, Short.MAX_VALUE)
114 layout.setVerticalGroup(
115 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
116 .addComponent(interestingItemsScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 88, Short.MAX_VALUE)
120 private void interestingItemsCheckboxActionPerformed(java.awt.event.ActionEvent evt) {
121 interestingItemsList.setEnabled(interestingItemsCheckbox.isSelected());
124 @ThreadConfined(type = ThreadConfined.ThreadType.AWT)
126 void configurePanel(
boolean selected,
int[] indicesSelected) {
127 boolean hasInterestingItems = interestingItemsList.getModel().getSize() > 0;
128 interestingItemsCheckbox.setEnabled(hasInterestingItems);
129 interestingItemsCheckbox.setSelected(selected && hasInterestingItems);
130 if (interestingItemsCheckbox.isEnabled() && interestingItemsCheckbox.isSelected()) {
131 interestingItemsScrollPane.setEnabled(
true);
132 interestingItemsList.setEnabled(
true);
133 if (indicesSelected != null) {
134 interestingItemsList.setSelectedIndices(indicesSelected);
137 interestingItemsScrollPane.setEnabled(
false);
138 interestingItemsList.setEnabled(
false);
142 @ThreadConfined(type = ThreadConfined.ThreadType.AWT)
144 JCheckBox getCheckbox() {
145 return interestingItemsCheckbox;
149 JLabel getAdditionalLabel() {
153 @ThreadConfined(type = ThreadConfined.ThreadType.AWT)
154 @NbBundle.Messages({
"InterestingItemsFilterPanel.error.text=At least one interesting file set name must be selected."})
156 String checkForError() {
157 if (interestingItemsCheckbox.isSelected() && interestingItemsList.getSelectedValuesList().isEmpty()) {
158 return Bundle.InterestingItemsFilterPanel_error_text();
165 private javax.swing.JCheckBox interestingItemsCheckbox;
166 private javax.swing.JList<String> interestingItemsList;
167 private javax.swing.JScrollPane interestingItemsScrollPane;
170 @ThreadConfined(type = ThreadConfined.ThreadType.AWT)
173 return interestingItemsList;
176 @ThreadConfined(type = ThreadConfined.ThreadType.AWT)
178 AbstractFilter getFilter() {
179 if (interestingItemsCheckbox.isSelected()) {
180 return new SearchFiltering.InterestingFileSetFilter(interestingItemsList.getSelectedValuesList());