19 package org.sleuthkit.autopsy.modules.hashdatabase;
21 import java.beans.PropertyChangeEvent;
22 import java.beans.PropertyChangeListener;
23 import java.util.ArrayList;
24 import java.util.List;
25 import java.util.logging.Level;
26 import javax.swing.JScrollPane;
27 import javax.swing.JTable;
28 import javax.swing.table.AbstractTableModel;
29 import javax.swing.table.TableColumn;
30 import org.apache.commons.lang.StringUtils;
40 @SuppressWarnings(
"PMD.SingularField")
43 private static final long serialVersionUID = 1L;
45 private final List<HashSetModel> hashSetModels =
new ArrayList<>();
49 initializeHashSetModels(settings);
51 customizeComponents(settings);
55 List<HashDb> hashDbs = validSetsOnly(hashDbManager.
getAllHashSets());
56 hashSetModels.clear();
57 for (
HashDb db : hashDbs) {
58 hashSetModels.add(
new HashSetModel(db, settings.isHashSetEnabled(db), isHashDbValid(db)));
63 customizeHashSetsTable(hashDbsScrollPane, hashTable, hashSetsTableModel);
64 alwaysCalcHashesCheckbox.setSelected(settings.shouldCalculateHashes());
66 alwaysCalcHashesCheckbox.setText(
"<html>" +
org.openide.util.NbBundle.getMessage(
HashLookupModuleSettingsPanel.class,
"HashLookupModuleSettingsPanel.alwaysCalcHashesCheckbox.text") +
"</html>");
70 table.setModel(tableModel);
71 table.setTableHeader(null);
72 table.setRowSelectionAllowed(
false);
73 final int width1 = scrollPane.getPreferredSize().width;
74 hashTable.setAutoResizeMode(JTable.AUTO_RESIZE_NEXT_COLUMN);
76 for (
int i = 0; i < table.getColumnCount(); i++) {
77 column = table.getColumnModel().getColumn(i);
79 column.setPreferredWidth(((
int) (width1 * 0.07)));
81 column.setPreferredWidth(((
int) (width1 * 0.92)));
97 List<HashDb> enabledHashSets =
new ArrayList<>();
98 List<HashDb> disabledHashSets =
new ArrayList<>();
99 addHashSets(hashSetModels, enabledHashSets, disabledHashSets);
100 return new HashLookupModuleSettings(alwaysCalcHashesCheckbox.isSelected(),
101 enabledHashSets, disabledHashSets);
104 private void addHashSets(List<HashSetModel> hashSetModels, List<HashDb> enabledHashSets, List<HashDb> disabledHashSets) {
106 if (model.isEnabled() && model.isValid()) {
107 enabledHashSets.add(model.getDatabase());
109 disabledHashSets.add(model.getDatabase());
115 updateHashSetModels();
116 hashSetsTableModel.fireTableDataChanged();
120 List<HashDb> validDbs =
new ArrayList<>();
121 for (
HashDb db : hashDbs) {
126 }
catch (TskCoreException ex) {
133 void updateHashSetModels() {
134 List<HashDb> hashDbs = validSetsOnly(hashDbManager.
getAllHashSets());
136 List<HashDb> hashDatabases =
new ArrayList<>(hashDbs);
139 List<HashSetModel> deletedHashSetModels =
new ArrayList<>();
140 for (HashSetModel model : hashSetModels) {
141 boolean foundDatabase =
false;
142 for (
HashDb db : hashDatabases) {
143 if (model.getDatabase().equals(db)) {
144 model.setValid(isHashDbValid(db));
145 hashDatabases.remove(db);
146 foundDatabase =
true;
150 if (!foundDatabase) {
151 deletedHashSetModels.add(model);
156 for (HashSetModel model : deletedHashSetModels) {
157 hashSetModels.remove(model);
161 for (HashDb db : hashDatabases) {
162 hashSetModels.add(
new HashSetModel(db,
true, isHashDbValid(db)));
166 void reset(HashLookupModuleSettings newSettings) {
167 initializeHashSetModels(newSettings);
168 alwaysCalcHashesCheckbox.setSelected(newSettings.shouldCalculateHashes());
169 hashSetsTableModel.fireTableDataChanged();
173 boolean isValid =
false;
175 isValid = hashDb.isValid();
176 }
catch (TskCoreException ex) {
190 this.enabled = enabled;
199 return db.getDisplayName();
202 String getFormattedName() {
204 if (!StringUtils.isBlank(knownTypeName)) {
205 knownTypeName = String.format(
" (%s)", knownTypeName);
208 String displayName = db != null ? db.getDisplayName() :
"";
209 return displayName + knownTypeName;
212 void setEnabled(
boolean enabled) {
213 this.enabled = enabled;
216 boolean isEnabled() {
220 void setValid(
boolean valid) {
231 private static final long serialVersionUID = 1L;
235 this.hashSets = hashSets;
240 return hashSets.size();
250 if (columnIndex == 0) {
251 return hashSets.get(rowIndex).isEnabled();
253 return hashSets.get(rowIndex).getFormattedName();
259 return (columnIndex == 0 && hashSets.get(rowIndex).isValid());
263 public void setValueAt(Object aValue,
int rowIndex,
int columnIndex) {
264 if (columnIndex == 0) {
265 hashSets.get(rowIndex).setEnabled((Boolean) aValue);
271 return getValueAt(0, c).getClass();
280 @SuppressWarnings(
"unchecked")
282 private
void initComponents() {
284 hashDbsLabel =
new javax.swing.JLabel();
285 hashDbsScrollPane =
new javax.swing.JScrollPane();
286 hashTable =
new javax.swing.JTable();
287 alwaysCalcHashesCheckbox =
new javax.swing.JCheckBox();
289 setPreferredSize(
new java.awt.Dimension(292, 150));
293 hashDbsScrollPane.setBorder(javax.swing.BorderFactory.createEtchedBorder());
295 hashTable.setBackground(
new java.awt.Color(240, 240, 240));
296 hashTable.setShowHorizontalLines(
false);
297 hashTable.setShowVerticalLines(
false);
298 hashDbsScrollPane.setViewportView(hashTable);
300 alwaysCalcHashesCheckbox.setText(
org.openide.util.NbBundle.getMessage(
HashLookupModuleSettingsPanel.class,
"HashLookupModuleSettingsPanel.alwaysCalcHashesCheckbox.text"));
301 alwaysCalcHashesCheckbox.setToolTipText(
org.openide.util.NbBundle.getMessage(
HashLookupModuleSettingsPanel.class,
"HashLookupModuleSettingsPanel.alwaysCalcHashesCheckbox.toolTipText"));
302 alwaysCalcHashesCheckbox.setMaximumSize(
new java.awt.Dimension(290, 35));
303 alwaysCalcHashesCheckbox.setMinimumSize(
new java.awt.Dimension(290, 35));
304 alwaysCalcHashesCheckbox.setPreferredSize(
new java.awt.Dimension(271, 35));
305 alwaysCalcHashesCheckbox.setVerticalAlignment(javax.swing.SwingConstants.TOP);
306 alwaysCalcHashesCheckbox.setVerticalTextPosition(javax.swing.SwingConstants.TOP);
308 javax.swing.GroupLayout layout =
new javax.swing.GroupLayout(
this);
309 this.setLayout(layout);
310 layout.setHorizontalGroup(
311 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
312 .addGroup(layout.createSequentialGroup()
314 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
315 .addGroup(layout.createSequentialGroup()
316 .addComponent(hashDbsLabel)
317 .addGap(0, 0, Short.MAX_VALUE))
318 .addGroup(layout.createSequentialGroup()
320 .addComponent(hashDbsScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 494, Short.MAX_VALUE))
321 .addComponent(alwaysCalcHashesCheckbox, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
324 layout.setVerticalGroup(
325 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
326 .addGroup(layout.createSequentialGroup()
328 .addComponent(hashDbsLabel)
329 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
330 .addComponent(hashDbsScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 207, Short.MAX_VALUE)
331 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
332 .addComponent(alwaysCalcHashesCheckbox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
void setValueAt(Object aValue, int rowIndex, int columnIndex)
javax.swing.JScrollPane hashDbsScrollPane
List< HashDb > validSetsOnly(List< HashDb > hashDbs)
IngestModuleIngestJobSettings getSettings()
javax.swing.JLabel hashDbsLabel
void propertyChange(PropertyChangeEvent event)
synchronized void addPropertyChangeListener(PropertyChangeListener listener)
void addHashSets(List< HashSetModel > hashSetModels, List< HashDb > enabledHashSets, List< HashDb > disabledHashSets)
abstract String getHashSetName()
void customizeHashSetsTable(JScrollPane scrollPane, JTable table, HashSetsTableModel tableModel)
boolean isCellEditable(int rowIndex, int columnIndex)
void initializeHashSetModels(HashLookupModuleSettings settings)
static synchronized HashDbManager getInstance()
abstract HashDb.KnownFilesType getKnownFilesType()
boolean isHashDbValid(HashDb hashDb)
synchronized List< HashDb > getAllHashSets()
javax.swing.JTable hashTable
void customizeComponents(HashLookupModuleSettings settings)
Object getValueAt(int rowIndex, int columnIndex)
javax.swing.JCheckBox alwaysCalcHashesCheckbox
synchronized static Logger getLogger(String name)
final List< HashSetModel > hashSets
Class<?> getColumnClass(int c)