19package org.sleuthkit.autopsy.modules.interestingitems;
21import java.awt.Component;
22import java.util.ArrayList;
24import java.util.Observable;
25import java.util.Observer;
26import java.util.TreeMap;
27import javax.swing.JLabel;
28import javax.swing.JTable;
29import javax.swing.table.AbstractTableModel;
30import javax.swing.table.DefaultTableCellRenderer;
31import javax.swing.table.TableColumn;
32import org.openide.util.NbBundle.Messages;
33import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil;
34import org.sleuthkit.autopsy.ingest.IngestModuleIngestJobSettings;
35import org.sleuthkit.autopsy.ingest.IngestModuleIngestJobSettingsPanel;
40@SuppressWarnings(
"PMD.SingularField")
44 "FilesIdentifierIngestJobSettingsPanel.updateError=Error updating interesting files sets settings file.",
45 "FilesIdentifierIngestJobSettingsPanel.getError=Error getting interesting files sets from settings file."
48 private final FilesSetsTableModel tableModel;
53 private TreeMap<String, FilesSet> filesSetSnapshot;
62 static FilesIdentifierIngestJobSettingsPanel makePanel(FilesIdentifierIngestJobSettings settings) {
63 FilesIdentifierIngestJobSettingsPanel panel =
new FilesIdentifierIngestJobSettingsPanel(settings);
78 private FilesIdentifierIngestJobSettingsPanel(FilesIdentifierIngestJobSettings settings) {
88 List<FilesSetRow> filesSetRows =
new ArrayList<>();
93 this.filesSetSnapshot =
new TreeMap<>();
95 for (
FilesSet set : this.filesSetSnapshot.values()) {
96 filesSetRows.add(
new FilesSetRow(
set, settings.interestingFilesSetIsEnabled(
set.getName())));
100 this.tableModel =
new FilesSetsTableModel(filesSetRows);
105 this.filesSetTable.setModel(tableModel);
106 this.filesSetTable.setTableHeader(
null);
107 this.filesSetTable.setRowSelectionAllowed(
false);
108 final int width = this.filesSetScrollPane.getPreferredSize().width;
109 this.filesSetTable.setAutoResizeMode(JTable.AUTO_RESIZE_NEXT_COLUMN);
111 for (
int i = 0; i < this.filesSetTable.getColumnCount(); i++) {
112 column = this.filesSetTable.getColumnModel().getColumn(i);
114 column.setPreferredWidth(((
int) (width * 0.07)));
116 column.setCellRenderer(
new FileSetsTableCellRenderer());
117 column.setPreferredWidth(((
int) (width * 0.92)));
124 List<String> enabledInterestingFilesSets =
new ArrayList<>();
125 List<String> disabledInterestingFilesSets =
new ArrayList<>();
126 for (FilesSetRow rowModel : this.tableModel.filesSetRows) {
127 if (rowModel.isEnabled()) {
128 enabledInterestingFilesSets.add(rowModel.getFilesSet().getName());
130 disabledInterestingFilesSets.add(rowModel.getFilesSet().getName());
133 return new FilesIdentifierIngestJobSettings(enabledInterestingFilesSets, disabledInterestingFilesSets);
137 public void update(Observable o, Object arg
140 FilesIdentifierIngestJobSettings settings = (FilesIdentifierIngestJobSettings) this.getSettings();
143 List<FilesSetRow> rowModels =
new ArrayList<>();
144 TreeMap<String, FilesSet> newFilesSetSnapshot;
151 for (
FilesSet set : newFilesSetSnapshot.values()) {
152 if (this.filesSetSnapshot.keySet().contains(
set.getName())) {
154 rowModels.add(
new FilesSetRow(
set, settings.interestingFilesSetIsEnabled(
set.getName())));
157 rowModels.add(
new FilesSetRow(
set,
true));
160 this.tableModel.resetTableData(rowModels);
163 this.filesSetSnapshot = newFilesSetSnapshot;
175 JTable table, Object value,
176 boolean isSelected,
boolean hasFocus,
177 int row,
int column) {
178 JLabel label = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
179 label.setToolTipText(label.getText());
188 private final static class FilesSetsTableModel
extends AbstractTableModel {
210 void resetTableData(List<FilesSetRow> filesSetRows) {
211 this.filesSetRows = filesSetRows;
212 this.fireTableDataChanged();
217 return this.filesSetRows.size();
227 if (columnIndex == 0) {
228 return this.filesSetRows.get(rowIndex).isEnabled();
230 return this.filesSetRows.get(rowIndex).getFilesSet().getName();
236 return (columnIndex == 0);
240 public void setValueAt(Object aValue,
int rowIndex,
int columnIndex) {
241 if (columnIndex == 0) {
242 this.filesSetRows.get(rowIndex).setEnabled((Boolean) aValue);
255 private final static class FilesSetRow {
269 boolean isEnabled() {
273 void setEnabled(
boolean enabled) {
274 this.enabled = enabled;
283 @SuppressWarnings(
"unchecked")
285 private
void initComponents() {
287 filesSetScrollPane =
new javax.swing.JScrollPane();
288 filesSetTable =
new javax.swing.JTable();
290 setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(FilesIdentifierIngestJobSettingsPanel.class,
"FilesIdentifierIngestJobSettingsPanel.border.title")));
292 filesSetTable.setBackground(
new java.awt.Color(240, 240, 240));
293 filesSetTable.setModel(
new javax.swing.table.DefaultTableModel(
301 filesSetTable.setShowHorizontalLines(
false);
302 filesSetTable.setShowVerticalLines(
false);
303 filesSetScrollPane.setViewportView(filesSetTable);
305 javax.swing.GroupLayout layout =
new javax.swing.GroupLayout(
this);
306 this.setLayout(layout);
307 layout.setHorizontalGroup(
308 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
309 .addGroup(layout.createSequentialGroup()
311 .addComponent(filesSetScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 242, Short.MAX_VALUE)
314 layout.setVerticalGroup(
315 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
316 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
318 .addComponent(filesSetScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 165, Short.MAX_VALUE)
324 private javax.swing.JScrollPane filesSetScrollPane;
325 private javax.swing.JTable filesSetTable;
static void error(String message)
Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
static final long serialVersionUID
Class<?> getColumnClass(int c)
Object getValueAt(int rowIndex, int columnIndex)
List< FilesSetRow > filesSetRows
void setValueAt(Object aValue, int rowIndex, int columnIndex)
boolean isCellEditable(int rowIndex, int columnIndex)
Map< String, FilesSet > getInterestingFilesSets()
static synchronized FilesSetsManager getInstance()