19 package org.sleuthkit.autopsy.discovery.ui;
21 import java.util.Collections;
23 import java.util.List;
24 import java.util.logging.Level;
25 import java.util.stream.Collectors;
26 import javax.swing.DefaultListModel;
27 import javax.swing.JCheckBox;
28 import javax.swing.JLabel;
29 import javax.swing.JList;
30 import org.openide.util.NbBundle;
41 final class DataSourceFilterPanel
extends AbstractDiscoveryFilterPanel {
43 private static final long serialVersionUID = 1L;
44 private final static Logger logger = Logger.getLogger(DataSourceFilterPanel.class.getName());
49 @ThreadConfined(type = ThreadConfined.ThreadType.AWT)
50 DataSourceFilterPanel() {
52 setUpDataSourceFilter();
60 @SuppressWarnings(
"unchecked")
62 private
void initComponents() {
64 dataSourceCheckbox =
new javax.swing.JCheckBox();
65 dataSourceScrollPane =
new javax.swing.JScrollPane();
66 dataSourceList =
new javax.swing.JList<>();
68 org.openide.awt.Mnemonics.setLocalizedText(dataSourceCheckbox,
org.openide.util.NbBundle.getMessage(DataSourceFilterPanel.class,
"DataSourceFilterPanel.dataSourceCheckbox.text"));
69 dataSourceCheckbox.setMaximumSize(
new java.awt.Dimension(150, 25));
70 dataSourceCheckbox.setMinimumSize(
new java.awt.Dimension(150, 25));
71 dataSourceCheckbox.setPreferredSize(
new java.awt.Dimension(150, 25));
72 dataSourceCheckbox.addActionListener(
new java.awt.event.ActionListener() {
73 public void actionPerformed(java.awt.event.ActionEvent evt) {
74 dataSourceCheckboxActionPerformed(evt);
78 setMinimumSize(
new java.awt.Dimension(250, 30));
79 setPreferredSize(
new java.awt.Dimension(250, 30));
80 setRequestFocusEnabled(
false);
82 dataSourceScrollPane.setPreferredSize(
new java.awt.Dimension(27, 27));
84 dataSourceList.setModel(
new DefaultListModel<DataSourceItem>());
85 dataSourceList.setEnabled(
false);
86 dataSourceList.setVisibleRowCount(5);
87 dataSourceScrollPane.setViewportView(dataSourceList);
89 javax.swing.GroupLayout layout =
new javax.swing.GroupLayout(
this);
90 this.setLayout(layout);
91 layout.setHorizontalGroup(
92 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
93 .addComponent(dataSourceScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 300, Short.MAX_VALUE)
95 layout.setVerticalGroup(
96 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
97 .addGroup(layout.createSequentialGroup()
98 .addComponent(dataSourceScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
103 private void dataSourceCheckboxActionPerformed(java.awt.event.ActionEvent evt) {
104 dataSourceList.setEnabled(dataSourceCheckbox.isSelected());
109 private javax.swing.JCheckBox dataSourceCheckbox;
110 private javax.swing.JList<DataSourceItem> dataSourceList;
111 private javax.swing.JScrollPane dataSourceScrollPane;
114 @ThreadConfined(type = ThreadConfined.ThreadType.AWT)
116 void configurePanel(
boolean selected,
int[] indicesSelected) {
117 dataSourceCheckbox.setSelected(selected);
118 if (dataSourceCheckbox.isEnabled() && dataSourceCheckbox.isSelected()) {
119 dataSourceScrollPane.setEnabled(
true);
120 dataSourceList.setEnabled(
true);
121 if (indicesSelected != null) {
122 dataSourceList.setSelectedIndices(indicesSelected);
125 dataSourceScrollPane.setEnabled(
false);
126 dataSourceList.setEnabled(
false);
130 @ThreadConfined(type = ThreadConfined.ThreadType.AWT)
132 JCheckBox getCheckbox() {
133 return dataSourceCheckbox;
137 JLabel getAdditionalLabel() {
144 @ThreadConfined(type = ThreadConfined.ThreadType.AWT)
145 private
void setUpDataSourceFilter() {
148 DefaultListModel<DataSourceItem> dsListModel = (DefaultListModel<DataSourceItem>) dataSourceList.getModel();
149 dsListModel.removeAllElements();
150 List<DataSource> dataSources = Case.getCurrentCase().getSleuthkitCase().getDataSources();
151 Collections.sort(dataSources, (DataSource ds1, DataSource ds2) -> ds1.getName().compareToIgnoreCase(ds2.getName()));
152 for (DataSource ds : dataSources) {
153 dsListModel.add(count,
new DataSourceItem(ds));
157 }
catch (TskCoreException ex) {
158 logger.log(Level.SEVERE,
"Error loading data sources", ex);
159 dataSourceCheckbox.setEnabled(
false);
160 dataSourceList.setEnabled(
false);
164 @ThreadConfined(type = ThreadConfined.ThreadType.AWT)
167 return dataSourceList;
176 private final DataSource
ds;
192 DataSource getDataSource() {
198 return ds.getName() +
" (ID: " + ds.getId() +
")";
203 @NbBundle.Messages({
"DataSourceFilterPanel.error.text=At least one data source must be selected."})
205 String checkForError() {
206 if (dataSourceCheckbox.isSelected() && dataSourceList.getSelectedValuesList().isEmpty()) {
207 return Bundle.DataSourceFilterPanel_error_text();
212 @ThreadConfined(type = ThreadConfined.ThreadType.AWT)
214 AbstractFilter getFilter() {
215 if (dataSourceCheckbox.isSelected()) {
216 List<DataSource> dataSources = dataSourceList.getSelectedValuesList().stream().map(t -> t.getDataSource()).collect(Collectors.toList());
217 return new SearchFiltering.DataSourceFilter(dataSources);