19 package org.sleuthkit.autopsy.discovery.ui;
22 import java.util.List;
23 import java.util.logging.Level;
24 import java.util.stream.Collectors;
25 import javax.swing.DefaultListModel;
26 import javax.swing.JCheckBox;
27 import javax.swing.JLabel;
28 import javax.swing.JList;
29 import org.openide.util.NbBundle;
39 final class DataSourceFilterPanel
extends AbstractDiscoveryFilterPanel {
41 private static final long serialVersionUID = 1L;
42 private final static Logger logger = Logger.getLogger(DataSourceFilterPanel.class.getName());
47 DataSourceFilterPanel() {
49 setUpDataSourceFilter();
57 @SuppressWarnings(
"unchecked")
59 private
void initComponents() {
61 dataSourceCheckbox =
new javax.swing.JCheckBox();
62 dataSourceScrollPane =
new javax.swing.JScrollPane();
63 dataSourceList =
new javax.swing.JList<>();
65 org.openide.awt.Mnemonics.setLocalizedText(dataSourceCheckbox,
org.openide.util.NbBundle.getMessage(DataSourceFilterPanel.class,
"DataSourceFilterPanel.dataSourceCheckbox.text"));
66 dataSourceCheckbox.setMaximumSize(
new java.awt.Dimension(150, 25));
67 dataSourceCheckbox.setMinimumSize(
new java.awt.Dimension(150, 25));
68 dataSourceCheckbox.setPreferredSize(
new java.awt.Dimension(150, 25));
69 dataSourceCheckbox.addActionListener(
new java.awt.event.ActionListener() {
70 public void actionPerformed(java.awt.event.ActionEvent evt) {
71 dataSourceCheckboxActionPerformed(evt);
75 setMinimumSize(
new java.awt.Dimension(250, 30));
76 setPreferredSize(
new java.awt.Dimension(250, 30));
77 setRequestFocusEnabled(
false);
79 dataSourceScrollPane.setPreferredSize(
new java.awt.Dimension(27, 27));
81 dataSourceList.setModel(
new DefaultListModel<DataSourceItem>());
82 dataSourceList.setEnabled(
false);
83 dataSourceList.setVisibleRowCount(5);
84 dataSourceScrollPane.setViewportView(dataSourceList);
86 javax.swing.GroupLayout layout =
new javax.swing.GroupLayout(
this);
87 this.setLayout(layout);
88 layout.setHorizontalGroup(
89 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
90 .addComponent(dataSourceScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 300, Short.MAX_VALUE)
92 layout.setVerticalGroup(
93 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
94 .addGroup(layout.createSequentialGroup()
95 .addComponent(dataSourceScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
100 private void dataSourceCheckboxActionPerformed(java.awt.event.ActionEvent evt) {
101 dataSourceList.setEnabled(dataSourceCheckbox.isSelected());
106 private javax.swing.JCheckBox dataSourceCheckbox;
107 private javax.swing.JList<DataSourceItem> dataSourceList;
108 private javax.swing.JScrollPane dataSourceScrollPane;
112 void configurePanel(
boolean selected,
int[] indicesSelected) {
113 dataSourceCheckbox.setSelected(selected);
114 if (dataSourceCheckbox.isEnabled() && dataSourceCheckbox.isSelected()) {
115 dataSourceScrollPane.setEnabled(
true);
116 dataSourceList.setEnabled(
true);
117 if (indicesSelected != null) {
118 dataSourceList.setSelectedIndices(indicesSelected);
121 dataSourceScrollPane.setEnabled(
false);
122 dataSourceList.setEnabled(
false);
127 JCheckBox getCheckbox() {
128 return dataSourceCheckbox;
132 JLabel getAdditionalLabel() {
139 private void setUpDataSourceFilter() {
142 DefaultListModel<DataSourceItem> dsListModel = (DefaultListModel<DataSourceItem>) dataSourceList.getModel();
143 dsListModel.removeAllElements();
144 for (DataSource ds : Case.getCurrentCase().getSleuthkitCase().getDataSources()) {
145 dsListModel.add(count,
new DataSourceItem(ds));
148 }
catch (TskCoreException ex) {
149 logger.log(Level.SEVERE,
"Error loading data sources", ex);
150 dataSourceCheckbox.setEnabled(
false);
151 dataSourceList.setEnabled(
false);
157 return dataSourceList;
166 private final DataSource
ds;
182 DataSource getDataSource() {
188 return ds.getName() +
" (ID: " + ds.getId() +
")";
192 @NbBundle.Messages({
"DataSourceFilterPanel.error.text=At least one data source must be selected."})
194 String checkForError() {
195 if (dataSourceCheckbox.isSelected() && dataSourceList.getSelectedValuesList().isEmpty()) {
196 return Bundle.DataSourceFilterPanel_error_text();
202 AbstractFilter getFilter() {
203 if (dataSourceCheckbox.isSelected()) {
204 List<DataSource> dataSources = dataSourceList.getSelectedValuesList().stream().map(t -> t.getDataSource()).collect(Collectors.toList());
205 return new SearchFiltering.DataSourceFilter(dataSources);