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 ObjectDetectedFilterPanel
extends AbstractDiscoveryFilterPanel {
41 private static final long serialVersionUID = 1L;
42 private final static Logger logger = Logger.getLogger(ObjectDetectedFilterPanel.class.getName());
47 @ThreadConfined(type = ThreadConfined.ThreadType.AWT)
48 ObjectDetectedFilterPanel() {
57 @ThreadConfined(type = ThreadConfined.ThreadType.AWT)
58 private
void setUpObjectFilter() {
60 objectsList.clearList();
61 List<String> setNames = DiscoveryUiUtils.getSetNames(BlackboardArtifact.ARTIFACT_TYPE.TSK_OBJECT_DETECTED, BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DESCRIPTION);
62 for (String name : setNames) {
63 objectsList.addElement(name, null, name);
65 }
catch (TskCoreException ex) {
66 logger.log(Level.SEVERE,
"Error loading object detected set names", ex);
67 objectsCheckbox.setEnabled(
false);
68 objectsList.setEnabled(
false);
77 @SuppressWarnings(
"unchecked")
79 private
void initComponents() {
81 objectsCheckbox =
new javax.swing.JCheckBox();
84 org.openide.awt.Mnemonics.setLocalizedText(objectsCheckbox,
org.openide.util.NbBundle.getMessage(ObjectDetectedFilterPanel.class,
"ObjectDetectedFilterPanel.text"));
85 objectsCheckbox.setMaximumSize(
new java.awt.Dimension(150, 25));
86 objectsCheckbox.setMinimumSize(
new java.awt.Dimension(150, 25));
87 objectsCheckbox.setName(
"");
88 objectsCheckbox.setPreferredSize(
new java.awt.Dimension(150, 25));
89 objectsCheckbox.setVerticalAlignment(javax.swing.SwingConstants.TOP);
90 objectsCheckbox.setVerticalTextPosition(javax.swing.SwingConstants.TOP);
91 objectsCheckbox.addActionListener(
new java.awt.event.ActionListener() {
92 public void actionPerformed(java.awt.event.ActionEvent evt) {
93 objectsCheckboxActionPerformed(evt);
97 setMinimumSize(
new java.awt.Dimension(250, 30));
98 setPreferredSize(
new java.awt.Dimension(250, 30));
99 setLayout(
new java.awt.BorderLayout());
100 add(objectsList, java.awt.BorderLayout.CENTER);
103 private void objectsCheckboxActionPerformed(java.awt.event.ActionEvent evt) {
104 objectsList.setEnabled(objectsCheckbox.isSelected());
109 private javax.swing.JCheckBox objectsCheckbox;
113 @ThreadConfined(type = ThreadConfined.ThreadType.AWT)
115 void configurePanel(
boolean selected, List<?> selectedItems) {
116 boolean hasObjects = isFilterSupported();
117 objectsCheckbox.setEnabled(hasObjects);
118 objectsCheckbox.setSelected(selected && hasObjects);
119 if (objectsCheckbox.isEnabled() && objectsCheckbox.isSelected()) {
120 objectsList.setEnabled(
true);
121 if (selectedItems != null) {
122 List<String> objectList =
new ArrayList<>();
123 for (Object item : selectedItems) {
124 if (item instanceof String) {
125 objectList.add((String) item);
128 if (!objectList.isEmpty()) {
129 objectsList.setSelectedElements(objectList);
133 objectsList.setEnabled(
false);
137 @ThreadConfined(type = ThreadConfined.ThreadType.AWT)
139 JCheckBox getCheckbox() {
140 return objectsCheckbox;
144 JLabel getAdditionalLabel() {
148 @ThreadConfined(type = ThreadConfined.ThreadType.AWT)
149 @NbBundle.Messages({
"ObjectDetectedFilterPanel.error.text=At least one object type name must be selected."})
151 String checkForError() {
152 if (objectsCheckbox.isSelected() && objectsList.getSelectedElements().isEmpty()) {
153 return Bundle.ObjectDetectedFilterPanel_error_text();
158 @ThreadConfined(type = ThreadConfined.ThreadType.AWT)
160 AbstractFilter getFilter() {
161 if (objectsCheckbox.isSelected()) {
162 List<String> objectDetectedList = objectsList.getSelectedElements();
163 return new SearchFiltering.ObjectDetectionFilter(objectDetectedList);
169 void addListSelectionListener(ListSelectionListener listener) {
170 objectsList.addListSelectionListener(listener);
174 boolean isFilterSupported() {
175 return !objectsList.isEmpty();