19 package org.sleuthkit.autopsy.modules.interestingitems;
21 import java.util.ArrayList;
22 import java.util.List;
23 import java.util.Observable;
24 import java.util.Observer;
25 import java.util.TreeMap;
26 import javax.swing.JTable;
27 import javax.swing.table.AbstractTableModel;
28 import javax.swing.table.TableColumn;
29 import org.openide.util.Exceptions;
30 import org.openide.util.NbBundle.Messages;
38 final class FilesIdentifierIngestJobSettingsPanel
extends IngestModuleIngestJobSettingsPanel implements Observer {
40 "FilesIdentifierIngestJobSettingsPanel.updateError=Error updating interesting files sets settings file.",
41 "FilesIdentifierIngestJobSettingsPanel.getError=Error getting interesting files sets from settings file."
44 private final FilesSetsTableModel tableModel;
49 private TreeMap<String, FilesSet> filesSetSnapshot;
58 static FilesIdentifierIngestJobSettingsPanel makePanel(FilesIdentifierIngestJobSettings settings) {
59 FilesIdentifierIngestJobSettingsPanel panel =
new FilesIdentifierIngestJobSettingsPanel(settings);
65 InterestingItemDefsManager.getInstance().addObserver(panel);
74 private FilesIdentifierIngestJobSettingsPanel(FilesIdentifierIngestJobSettings settings) {
84 List<FilesSetRow> filesSetRows =
new ArrayList<>();
86 this.filesSetSnapshot =
new TreeMap<>(InterestingItemDefsManager.getInstance().getInterestingFilesSets());
87 }
catch (InterestingItemDefsManager.InterestingItemDefsManagerException ex) {
88 MessageNotifyUtil.Message.error(Bundle.FilesIdentifierIngestJobSettingsPanel_getError());
89 this.filesSetSnapshot =
new TreeMap<>();
91 for (FilesSet set : this.filesSetSnapshot.values()) {
92 filesSetRows.add(
new FilesSetRow(set, settings.interestingFilesSetIsEnabled(set.getName())));
96 this.tableModel =
new FilesSetsTableModel(filesSetRows);
101 this.filesSetTable.setModel(tableModel);
102 this.filesSetTable.setTableHeader(null);
103 this.filesSetTable.setRowSelectionAllowed(
false);
104 final int width = this.filesSetScrollPane.getPreferredSize().width;
105 this.filesSetTable.setAutoResizeMode(JTable.AUTO_RESIZE_NEXT_COLUMN);
107 for (
int i = 0; i < this.filesSetTable.getColumnCount(); i++) {
108 column = this.filesSetTable.getColumnModel().getColumn(i);
110 column.setPreferredWidth(((
int) (width * 0.07)));
112 column.setPreferredWidth(((
int) (width * 0.92)));
121 public IngestModuleIngestJobSettings getSettings() {
122 List<String> enabledInterestingFilesSets =
new ArrayList<>();
123 List<String> disabledInterestingFilesSets =
new ArrayList<>();
124 for (FilesSetRow rowModel : this.tableModel.filesSetRows) {
125 if (rowModel.isEnabled()) {
126 enabledInterestingFilesSets.add(rowModel.getFilesSet().getName());
128 disabledInterestingFilesSets.add(rowModel.getFilesSet().getName());
131 return new FilesIdentifierIngestJobSettings(enabledInterestingFilesSets, disabledInterestingFilesSets);
138 public void update(Observable o, Object arg
141 FilesIdentifierIngestJobSettings settings = (FilesIdentifierIngestJobSettings) this.getSettings();
144 List<FilesSetRow> rowModels =
new ArrayList<>();
145 TreeMap<String, FilesSet> newFilesSetSnapshot;
147 newFilesSetSnapshot =
new TreeMap<>(InterestingItemDefsManager.getInstance().getInterestingFilesSets());
148 }
catch (InterestingItemDefsManager.InterestingItemDefsManagerException ex) {
149 MessageNotifyUtil.Message.error(Bundle.FilesIdentifierIngestJobSettingsPanel_updateError());
152 for (FilesSet set : newFilesSetSnapshot.values()) {
153 if (this.filesSetSnapshot.keySet().contains(set.getName())) {
155 rowModels.add(
new FilesSetRow(set, settings.interestingFilesSetIsEnabled(set.getName())));
158 rowModels.add(
new FilesSetRow(set,
true));
161 this.tableModel.resetTableData(rowModels);
164 this.filesSetSnapshot = newFilesSetSnapshot;
193 void resetTableData(List<FilesSetRow> filesSetRows) {
195 this.fireTableDataChanged();
203 return this.filesSetRows.size();
219 if (columnIndex == 0) {
220 return this.filesSetRows.get(rowIndex).isEnabled();
222 return this.filesSetRows.get(rowIndex).getFilesSet().getName();
231 return (columnIndex == 0);
238 public void setValueAt(Object aValue,
int rowIndex,
int columnIndex) {
239 if (columnIndex == 0) {
240 this.filesSetRows.get(rowIndex).setEnabled((Boolean) aValue);
258 private final FilesSet
set;
266 FilesSet getFilesSet() {
270 boolean isEnabled() {
274 void setEnabled(
boolean enabled) {
284 @SuppressWarnings(
"unchecked")
286 private
void initComponents() {
288 filesSetScrollPane =
new javax.swing.JScrollPane();
289 filesSetTable =
new javax.swing.JTable();
291 setBorder(javax.swing.BorderFactory.createTitledBorder(
org.openide.util.NbBundle.getMessage(FilesIdentifierIngestJobSettingsPanel.class,
"FilesIdentifierIngestJobSettingsPanel.border.title")));
293 filesSetTable.setBackground(
new java.awt.Color(240, 240, 240));
294 filesSetTable.setModel(
new javax.swing.table.DefaultTableModel(
302 filesSetTable.setShowHorizontalLines(
false);
303 filesSetTable.setShowVerticalLines(
false);
304 filesSetScrollPane.setViewportView(filesSetTable);
306 javax.swing.GroupLayout layout =
new javax.swing.GroupLayout(
this);
307 this.setLayout(layout);
308 layout.setHorizontalGroup(
309 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
310 .addGroup(layout.createSequentialGroup()
312 .addComponent(filesSetScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 242, Short.MAX_VALUE)
315 layout.setVerticalGroup(
316 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
317 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
319 .addComponent(filesSetScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 165, Short.MAX_VALUE)
325 private javax.swing.JScrollPane filesSetScrollPane;
326 private javax.swing.JTable filesSetTable;
Class<?> getColumnClass(int c)
Object getValueAt(int rowIndex, int columnIndex)
boolean isCellEditable(int rowIndex, int columnIndex)
List< FilesSetRow > filesSetRows
void setValueAt(Object aValue, int rowIndex, int columnIndex)