19 package org.sleuthkit.autopsy.report.infrastructure;
22 import java.awt.Component;
23 import java.awt.event.ItemEvent;
24 import java.awt.event.ItemListener;
25 import java.awt.event.MouseAdapter;
26 import java.awt.event.MouseEvent;
27 import java.util.ArrayList;
28 import java.util.Collections;
29 import java.util.HashMap;
30 import java.util.LinkedHashMap;
31 import java.util.List;
33 import java.util.logging.Level;
34 import javax.swing.JCheckBox;
35 import javax.swing.JLabel;
36 import javax.swing.JList;
37 import javax.swing.ListCellRenderer;
38 import javax.swing.ListModel;
39 import javax.swing.event.ListDataListener;
40 import org.openide.util.NbBundle;
52 @SuppressWarnings(
"PMD.SingularField")
53 class PortableCaseInterestingItemsListPanel extends javax.swing.JPanel {
55 private List<String> setNames;
56 private final Map<String, Boolean> setNameSelections =
new LinkedHashMap<>();
57 private final SetNamesListModel setNamesListModel =
new SetNamesListModel();
58 private final SetNamesListCellRenderer setNamesRenderer =
new SetNamesListCellRenderer();
59 private Map<String, Long> setCounts;
61 private final ReportWizardPortableCaseOptionsPanel wizPanel;
62 private final PortableCaseReportModuleSettings settings;
63 private final boolean useCaseSpecificData;
68 PortableCaseInterestingItemsListPanel(ReportWizardPortableCaseOptionsPanel wizPanel, PortableCaseReportModuleSettings options,
boolean useCaseSpecificData) {
69 this.wizPanel = wizPanel;
70 this.useCaseSpecificData = useCaseSpecificData;
71 this.settings = options;
73 customizeComponents();
76 jAllSetsCheckBox.setSelected(settings.areAllSetsSelected());
77 setNamesListBox.setEnabled(!jAllSetsCheckBox.isSelected());
78 selectButton.setEnabled(!jAllSetsCheckBox.isSelected());
79 deselectButton.setEnabled(!jAllSetsCheckBox.isSelected());
80 selectAllSets(jAllSetsCheckBox.isSelected());
82 this.jAllSetsCheckBox.addItemListener(
new ItemListener() {
84 public void itemStateChanged(ItemEvent e) {
85 setNamesListBox.setEnabled(!jAllSetsCheckBox.isSelected());
86 selectButton.setEnabled(!jAllSetsCheckBox.isSelected());
87 deselectButton.setEnabled(!jAllSetsCheckBox.isSelected());
88 selectAllSets(jAllSetsCheckBox.isSelected());
94 "PortableCaseInterestingItemsListPanel.error.errorTitle=Error getting intesting item set names for case",
95 "PortableCaseInterestingItemsListPanel.error.noOpenCase=There is no case open",
96 "PortableCaseInterestingItemsListPanel.error.errorLoadingTags=Error loading interesting item set names",})
101 @SuppressWarnings(
"deprecation")
102 private void customizeComponents() {
105 setNames =
new ArrayList<>();
106 setCounts =
new HashMap<>();
111 if (useCaseSpecificData) {
114 String innerSelect =
"SELECT (value_text) AS set_name FROM blackboard_attributes WHERE (artifact_type_id = '"
115 + BlackboardArtifact.ARTIFACT_TYPE.TSK_INTERESTING_ITEM.getTypeID() +
"' OR artifact_type_id = '"
116 + BlackboardArtifact.ARTIFACT_TYPE.TSK_INTERESTING_FILE_HIT.getTypeID() +
"' OR artifact_type_id = '"
117 + BlackboardArtifact.ARTIFACT_TYPE.TSK_INTERESTING_ARTIFACT_HIT.getTypeID() +
"') AND attribute_type_id = '"
118 + BlackboardAttribute.ATTRIBUTE_TYPE.TSK_SET_NAME.getTypeID() +
"'";
121 String query =
"set_name, count(1) AS set_count FROM (" + innerSelect +
") set_names GROUP BY set_name";
123 GetInterestingItemSetNamesCallback callback =
new GetInterestingItemSetNamesCallback();
124 Case.getCurrentCaseThrows().getSleuthkitCase().getCaseDbAccessManager().select(query, callback);
125 setCounts = callback.getSetCountMap();
126 setNames.addAll(setCounts.keySet());
127 }
catch (TskCoreException ex) {
128 Logger.getLogger(ReportWizardPortableCaseOptionsVisualPanel.class.getName()).log(Level.SEVERE,
"Failed to get interesting item set names", ex);
129 }
catch (NoCurrentCaseException ex) {
131 if (Case.isCaseOpen()) {
132 Logger.getLogger(ReportWizardPortableCaseOptionsVisualPanel.class.getName()).log(Level.SEVERE,
"Exception while getting open case.", ex);
136 Collections.sort(setNames);
141 for (String setName : setNames) {
142 setNameSelections.put(setName, Boolean.FALSE);
148 setNamesListBox.setModel(setNamesListModel);
149 setNamesListBox.setCellRenderer(setNamesRenderer);
150 setNamesListBox.setVisibleRowCount(-1);
151 setNamesListBox.addMouseListener(
new MouseAdapter() {
153 public void mousePressed(MouseEvent evt) {
154 JList<?> list = (JList) evt.getSource();
155 int index = list.locationToIndex(evt.getPoint());
157 String value = setNamesListModel.getElementAt(index);
158 setNameSelections.put(value, !setNameSelections.get(value));
170 private void updateSetNameList() {
171 settings.updateSetNames(getSelectedSetNames());
172 settings.setAllSetsSelected(jAllSetsCheckBox.isSelected());
173 wizPanel.setFinish(settings.isValid());
183 return setNames.size();
188 return setNames.get(index);
208 private static final long serialVersionUID = 1L;
213 setEnabled(list.isEnabled());
214 setSelected(setNameSelections.get(value));
215 setFont(list.getFont());
216 setBackground(list.getBackground());
217 setForeground(list.getForeground());
218 String text = value +
" (" + setCounts.get(value) +
")";
220 setToolTipText(text);
233 private List<String> getSelectedSetNames() {
234 List<String> selectedSetNames =
new ArrayList<>();
235 for (String setName : setNames) {
236 if (setNameSelections.get(setName)) {
237 selectedSetNames.add(setName);
240 return selectedSetNames;
248 @SuppressWarnings(
"unchecked")
250 private
void initComponents() {
252 jPanel1 =
new javax.swing.JPanel();
253 jScrollPane1 =
new javax.swing.JScrollPane();
254 setNamesListBox =
new javax.swing.JList<>();
255 descLabel =
new javax.swing.JLabel();
256 selectButton =
new javax.swing.JButton();
257 deselectButton =
new javax.swing.JButton();
258 jAllSetsCheckBox =
new javax.swing.JCheckBox();
260 jScrollPane1.setViewportView(setNamesListBox);
262 org.openide.awt.Mnemonics.setLocalizedText(descLabel,
org.openide.util.NbBundle.getMessage(PortableCaseInterestingItemsListPanel.class,
"PortableCaseInterestingItemsListPanel.descLabel.text"));
264 org.openide.awt.Mnemonics.setLocalizedText(selectButton,
org.openide.util.NbBundle.getMessage(PortableCaseInterestingItemsListPanel.class,
"PortableCaseInterestingItemsListPanel.selectButton.text"));
265 selectButton.setMaximumSize(
new java.awt.Dimension(87, 23));
266 selectButton.setMinimumSize(
new java.awt.Dimension(87, 23));
267 selectButton.addActionListener(
new java.awt.event.ActionListener() {
268 public void actionPerformed(java.awt.event.ActionEvent evt) {
269 selectButtonActionPerformed(evt);
273 org.openide.awt.Mnemonics.setLocalizedText(deselectButton,
org.openide.util.NbBundle.getMessage(PortableCaseInterestingItemsListPanel.class,
"PortableCaseInterestingItemsListPanel.deselectButton.text"));
274 deselectButton.addActionListener(
new java.awt.event.ActionListener() {
275 public void actionPerformed(java.awt.event.ActionEvent evt) {
276 deselectButtonActionPerformed(evt);
280 org.openide.awt.Mnemonics.setLocalizedText(jAllSetsCheckBox,
org.openide.util.NbBundle.getMessage(PortableCaseInterestingItemsListPanel.class,
"PortableCaseInterestingItemsListPanel.jAllSetsCheckBox.text"));
281 jAllSetsCheckBox.addActionListener(
new java.awt.event.ActionListener() {
282 public void actionPerformed(java.awt.event.ActionEvent evt) {
283 jAllSetsCheckBoxActionPerformed(evt);
287 javax.swing.GroupLayout jPanel1Layout =
new javax.swing.GroupLayout(jPanel1);
288 jPanel1.setLayout(jPanel1Layout);
289 jPanel1Layout.setHorizontalGroup(
290 jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
291 .addGroup(jPanel1Layout.createSequentialGroup()
293 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
294 .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
295 .addGroup(jPanel1Layout.createSequentialGroup()
296 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
297 .addComponent(descLabel)
298 .addGroup(jPanel1Layout.createSequentialGroup()
299 .addComponent(selectButton, javax.swing.GroupLayout.PREFERRED_SIZE, 96, javax.swing.GroupLayout.PREFERRED_SIZE)
300 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
301 .addComponent(deselectButton))
302 .addComponent(jAllSetsCheckBox))
303 .addGap(0, 8, Short.MAX_VALUE)))
306 jPanel1Layout.setVerticalGroup(
307 jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
308 .addGroup(jPanel1Layout.createSequentialGroup()
310 .addComponent(descLabel)
311 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
312 .addComponent(jAllSetsCheckBox)
313 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
314 .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 159, Short.MAX_VALUE)
315 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
316 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
317 .addComponent(selectButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
318 .addComponent(deselectButton)))
321 javax.swing.GroupLayout layout =
new javax.swing.GroupLayout(
this);
322 this.setLayout(layout);
323 layout.setHorizontalGroup(
324 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
325 .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
327 layout.setVerticalGroup(
328 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
329 .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
333 private void deselectButtonActionPerformed(java.awt.event.ActionEvent evt) {
334 selectAllSets(
false);
337 private void selectButtonActionPerformed(java.awt.event.ActionEvent evt) {
341 private void jAllSetsCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {
345 private void selectAllSets(
boolean select) {
346 Boolean state = Boolean.TRUE;
348 state = Boolean.FALSE;
350 for (String setName : setNames) {
351 setNameSelections.put(setName, state);
354 setNamesListBox.repaint();
358 private javax.swing.JLabel descLabel;
359 private javax.swing.JButton deselectButton;
360 private javax.swing.JCheckBox jAllSetsCheckBox;
361 private javax.swing.JPanel jPanel1;
362 private javax.swing.JScrollPane jScrollPane1;
363 private javax.swing.JButton selectButton;
364 private javax.swing.JList<String> setNamesListBox;
void addListDataListener(ListDataListener l)
Component getListCellRendererComponent(JList<?extends String > list, String value, int index, boolean isSelected, boolean cellHasFocus)
void removeListDataListener(ListDataListener l)
String getElementAt(int index)