19 package org.sleuthkit.autopsy.modules.hashdatabase;
21 import java.awt.Color;
22 import java.awt.Component;
23 import java.awt.EventQueue;
24 import java.awt.Frame;
25 import java.awt.event.KeyEvent;
26 import java.beans.PropertyChangeEvent;
27 import java.beans.PropertyChangeListener;
28 import java.util.ArrayList;
29 import java.util.List;
30 import java.util.logging.Level;
31 import javax.swing.JComponent;
32 import javax.swing.JOptionPane;
33 import javax.swing.JTable;
34 import javax.swing.ListSelectionModel;
35 import javax.swing.SwingUtilities;
36 import javax.swing.event.ListSelectionEvent;
37 import javax.swing.event.ListSelectionListener;
38 import javax.swing.table.AbstractTableModel;
39 import javax.swing.table.TableCellRenderer;
40 import org.netbeans.spi.options.OptionsPanelController;
41 import org.openide.util.NbBundle;
42 import org.openide.util.NbBundle.Messages;
61 @SuppressWarnings(
"PMD.SingularField")
64 private static final String NSRL_URL =
"https://sourceforge.net/projects/autopsy/files/NSRL/";
65 private static final String NSRL_NAME_STRING =
"nsrl";
66 private static final String NO_SELECTION_TEXT = NbBundle
68 private static final String ERROR_GETTING_PATH_TEXT = NbBundle
70 private static final String ERROR_GETTING_INDEX_STATUS_TEXT = NbBundle
75 private final List<Integer> newReferenceSetIDs =
new ArrayList<>();
79 customizeComponents();
80 updateComponentsForNoSelection();
86 public void propertyChange(PropertyChangeEvent evt) {
87 if (isLocalIngestJobEvent(evt)) {
88 EventQueue.invokeLater(
new Runnable() {
99 @NbBundle.Messages({
"HashLookupSettingsPanel.Title=Global Hash Lookup Settings"})
101 setName(Bundle.HashLookupSettingsPanel_Title());
102 this.ingestWarningLabel.setVisible(
false);
103 this.hashSetTable.setModel(hashSetTableModel);
104 this.hashSetTable.setTableHeader(null);
105 hashSetTable.getParent().setBackground(hashSetTable.getBackground());
106 hashSetTable.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
107 hashSetTable.getSelectionModel().addListSelectionListener(
new ListSelectionListener() {
109 public void valueChanged(ListSelectionEvent e) {
110 if (!e.getValueIsAdjusting()) {
120 updateComponentsForSelection(db);
122 updateComponentsForNoSelection();
130 hashDbNameLabel.setText(NO_SELECTION_TEXT);
131 hashDbTypeLabel.setText(NO_SELECTION_TEXT);
132 hashDbLocationLabel.setText(NO_SELECTION_TEXT);
133 hashDbVersionLabel.setText(NO_SELECTION_TEXT);
134 hashDbOrgLabel.setText(NO_SELECTION_TEXT);
135 hashDbReadOnlyLabel.setText(NO_SELECTION_TEXT);
136 indexPathLabel.setText(NO_SELECTION_TEXT);
139 hashDbIndexStatusLabel.setText(NO_SELECTION_TEXT);
140 hashDbIndexStatusLabel.setForeground(Color.black);
141 indexButton.setText(NbBundle.getMessage(
this.getClass(),
"HashDbConfigPanel.indexButtonText.index"));
142 indexButton.setEnabled(
false);
143 addHashesToDatabaseButton.setEnabled(
false);
146 sendIngestMessagesCheckBox.setSelected(
false);
147 sendIngestMessagesCheckBox.setEnabled(
false);
150 createDatabaseButton.setEnabled(
true);
151 importDatabaseButton.setEnabled(
true);
152 deleteDatabaseButton.setEnabled(
false);
155 ingestWarningLabel.setVisible(ingestIsRunning);
158 @NbBundle.Messages({
"HashLookupSettingsPanel.readOnly=Read only",
159 "HashLookupSettingsPanel.editable=Editable",
160 "HashLookupSettingsPanel.updateStatusError=Error reading status",
161 "HashLookupSettingsPanel.notApplicable=N/A",
162 "HashLookupSettingsPanel.centralRepo=Central Repository"
172 hashDbReadOnlyLabel.setText(Bundle.HashLookupSettingsPanel_editable());
174 hashDbReadOnlyLabel.setText(Bundle.HashLookupSettingsPanel_readOnly());
176 }
catch (TskCoreException ex) {
177 hashDbReadOnlyLabel.setText(Bundle.HashLookupSettingsPanel_updateStatusError());
181 addHashesToDatabaseButton.setEnabled(!ingestIsRunning && db.
isUpdateable());
182 }
catch (TskCoreException ex) {
184 addHashesToDatabaseButton.setEnabled(
false);
187 if (db instanceof SleuthkitHashSet) {
188 SleuthkitHashSet hashDb = (SleuthkitHashSet) db;
191 hashDbVersionLabel.setText(Bundle.HashLookupSettingsPanel_notApplicable());
192 hashDbOrgLabel.setText(Bundle.HashLookupSettingsPanel_notApplicable());
195 deleteDatabaseButton.setEnabled(!ingestIsRunning);
199 }
catch (TskCoreException ex) {
201 hashDbLocationLabel.setText(ERROR_GETTING_PATH_TEXT);
205 indexPathLabel.setText(hashDb.getIndexPath());
206 }
catch (TskCoreException ex) {
208 indexPathLabel.setText(ERROR_GETTING_PATH_TEXT);
213 if (hashDb.isIndexing()) {
215 NbBundle.getMessage(
this.getClass(),
"HashDbConfigPanel.indexButtonText.indexing"));
216 hashDbIndexStatusLabel.setText(
217 NbBundle.getMessage(
this.getClass(),
"HashDbConfigPanel.indexStatusText.indexGen"));
218 hashDbIndexStatusLabel.setForeground(Color.black);
219 indexButton.setEnabled(
false);
220 }
else if (hashDb.hasIndex()) {
221 if (hashDb.hasIndexOnly()) {
222 hashDbIndexStatusLabel.setText(
223 NbBundle.getMessage(
this.getClass(),
"HashDbConfigPanel.indexStatusText.indexOnly"));
225 hashDbIndexStatusLabel.setText(
226 NbBundle.getMessage(
this.getClass(),
"HashDbConfigPanel.indexStatusText.indexed"));
228 hashDbIndexStatusLabel.setForeground(Color.black);
229 if (hashDb.canBeReIndexed()) {
231 NbBundle.getMessage(
this.getClass(),
"HashDbConfigPanel.indexButtonText.reIndex"));
232 indexButton.setEnabled(
true);
234 indexButton.setText(NbBundle.getMessage(
this.getClass(),
"HashDbConfigPanel.indexButtonText.index"));
235 indexButton.setEnabled(
false);
238 hashDbIndexStatusLabel.setText(
239 NbBundle.getMessage(
this.getClass(),
"HashDbConfigPanel.indexStatusText.noIndex"));
240 hashDbIndexStatusLabel.setForeground(Color.red);
241 indexButton.setText(NbBundle.getMessage(
this.getClass(),
"HashDbConfigPanel.indexButtonText.index"));
242 indexButton.setEnabled(
true);
244 }
catch (TskCoreException ex) {
246 hashDbIndexStatusLabel.setText(ERROR_GETTING_INDEX_STATUS_TEXT);
247 hashDbIndexStatusLabel.setForeground(Color.red);
248 indexButton.setText(NbBundle.getMessage(
this.getClass(),
"HashDbConfigPanel.indexButtonText.index"));
249 indexButton.setEnabled(
false);
254 indexPathLabel.setText(Bundle.HashLookupSettingsPanel_notApplicable());
255 hashDbIndexStatusLabel.setText(Bundle.HashLookupSettingsPanel_notApplicable());
256 hashDbLocationLabel.setText(Bundle.HashLookupSettingsPanel_centralRepo());
257 indexButton.setEnabled(
false);
258 deleteDatabaseButton.setEnabled(
false);
260 CentralRepoHashSet crDb = (CentralRepoHashSet) db;
262 hashDbVersionLabel.setText(crDb.getVersion());
263 hashDbOrgLabel.setText(crDb.getOrgName());
267 if (ingestIsRunning) {
268 indexButton.setEnabled(
false);
276 createDatabaseButton.setEnabled(
true);
277 importDatabaseButton.setEnabled(
true);
280 ingestWarningLabel.setVisible(ingestIsRunning);
285 AutopsyEvent
event = (AutopsyEvent) evt;
286 if (event.getSourceType() == AutopsyEvent.SourceType.LOCAL) {
287 String eventType =
event.getPropertyName();
297 @Messages({
"HashLookupSettingsPanel.saveFail.message=Couldn't save hash set settings.",
298 "HashLookupSettingsPanel.saveFail.title=Save Fail"})
302 newReferenceSetIDs.clear();
305 List<SleuthkitHashSet> unindexed =
new ArrayList<>();
307 if (db instanceof SleuthkitHashSet) {
309 SleuthkitHashSet hashDatabase = (SleuthkitHashSet) db;
310 if (!hashDatabase.hasIndex()) {
311 unindexed.add(hashDatabase);
313 }
catch (TskCoreException ex) {
321 if (!unindexed.isEmpty()) {
322 SwingUtilities.invokeLater(
new Runnable() {
326 if (!unindexed.isEmpty()) {
327 showInvalidIndex(unindexed);
333 hashSetManager.save();
335 SwingUtilities.invokeLater(() -> {
336 JOptionPane.showMessageDialog(
this, Bundle.HashLookupSettingsPanel_saveFail_message(), Bundle.HashLookupSettingsPanel_saveFail_title(), JOptionPane.ERROR_MESSAGE);
344 hashSetTable.clearSelection();
345 hashSetTableModel.refreshModel();
361 for (
int refID : newReferenceSetIDs) {
378 @Messages({
"# {0} - hash lookup name",
"HashLookupSettingsPanel.removeDatabaseFailure.message=Failed to remove hash lookup: {0}"})
379 void removeThese(List<SleuthkitHashSet> toRemove) {
380 for (SleuthkitHashSet hashDb : toRemove) {
383 }
catch (HashDbManager.HashDbManagerException ex) {
384 JOptionPane.showMessageDialog(
this, Bundle.HashLookupSettingsPanel_removeDatabaseFailure_message(hashDb.getHashSetName()));
387 hashSetTableModel.refreshModel();
398 @NbBundle.Messages({
"# {0} - nsrlUrlAddress",
399 "HashLookupSettingsPanel.removeUnindexedNsrl.text=Instead of indexing the NSRL, please download an already indexed version available here:\n{0}",
400 "# {0} - nsrlHashSet",
401 "HashLookupSettingsPanel.unindexedNsrl.base=The following hash set appears to be an unindexed version of the NSRL, it will be removed from the list.\nHash set:{0}\n",
402 "# {0} - nsrlHashSets",
403 "HashLookupSettingsPanel.unindexedNsrls.base=The following hash sets appear to be unindexed versions of the NSRL, they will be removed from the list.\nHash sets:{0}\n",
404 "HashLookupSettingsPanel.removeUnindexedNsrl.title=Unindexed NSRL(s) will be removed"})
407 String nsrlTotal =
"";
409 List<SleuthkitHashSet> nsrlHashsets =
new ArrayList<>();
410 for (SleuthkitHashSet hdb : unindexed) {
412 if (isWindows() && hdb.getHashSetName().toLowerCase().contains(NSRL_NAME_STRING)) {
413 nsrlHashsets.add(hdb);
414 nsrlTotal +=
"\n" + hdb.getHashSetName();
416 total +=
"\n" + hdb.getHashSetName();
419 if (!nsrlHashsets.isEmpty()) {
421 if (nsrlHashsets.size() > 1) {
422 message = Bundle.HashLookupSettingsPanel_unindexedNsrls_base(nsrlTotal) + Bundle.HashLookupSettingsPanel_removeUnindexedNsrl_text(NSRL_URL);
424 message = Bundle.HashLookupSettingsPanel_unindexedNsrl_base(nsrlTotal) + Bundle.HashLookupSettingsPanel_removeUnindexedNsrl_text(NSRL_URL);
426 JOptionPane.showMessageDialog(
this, message, Bundle.HashLookupSettingsPanel_removeUnindexedNsrl_title(), JOptionPane.INFORMATION_MESSAGE);
427 for (SleuthkitHashSet hdb : nsrlHashsets) {
428 unindexed.remove(hdb);
430 removeThese(nsrlHashsets);
432 String message = NbBundle.getMessage(this.getClass(),
"HashDbConfigPanel.dbNotIndexedMsg", total);
433 if (unindexed.isEmpty()) {
435 }
else if (unindexed.size() > 1) {
436 message = NbBundle.getMessage(this.getClass(),
"HashDbConfigPanel.dbsNotIndexedMsg", total);
438 int res = JOptionPane.showConfirmDialog(
this, message,
439 NbBundle.getMessage(
this.getClass(),
440 "HashDbConfigPanel.unindexedDbsMsg"),
441 JOptionPane.YES_NO_OPTION);
442 if (res == JOptionPane.YES_OPTION) {
443 ModalNoButtons indexingDialog =
new ModalNoButtons(
this,
new Frame(), unindexed);
444 indexingDialog.setLocationRelativeTo(null);
445 indexingDialog.setVisible(
true);
446 indexingDialog.setModal(
true);
447 hashSetTableModel.refreshModel();
449 if (res == JOptionPane.NO_OPTION) {
450 JOptionPane.showMessageDialog(
this, NbBundle.getMessage(
this.getClass(),
451 "HashDbConfigPanel.allUnindexedDbsRmFromListMsg"));
452 removeThese(unindexed);
455 hashSetManager.save();
457 JOptionPane.showMessageDialog(
this, Bundle.HashLookupSettingsPanel_saveFail_message(), Bundle.HashLookupSettingsPanel_saveFail_title(), JOptionPane.ERROR_MESSAGE);
473 JComponent cellRenderer = (JComponent) super.prepareRenderer(renderer, row, column);
474 cellRenderer.setToolTipText((String) getValueAt(row, column));
479 if (hashSetTableModel.
isValid(row)) {
480 cellRenderer.setForeground(Color.black);
482 cellRenderer.setForeground(Color.red);
489 return hashSetTableModel.getHashSetAt(getSelectionModel().getMinSelectionIndex());
493 if (index >= 0 && index < hashSetTable.getRowCount()) {
494 getSelectionModel().setSelectionInterval(index, index);
499 setSelection(hashSetTableModel.getIndexByDatabase(db));
504 setSelection(hashSetTableModel.getIndexByName(name));
523 return hashSets.size();
528 return NbBundle.getMessage(this.getClass(),
"HashDbConfigPanel.nameColLbl");
533 return hashSets.get(rowIndex).getDisplayName();
538 return hashSets.get(rowIndex).isValid();
539 }
catch (TskCoreException ex) {
551 public void setValueAt(Object aValue,
int rowIndex,
int columnIndex) {
552 throw new UnsupportedOperationException(
553 NbBundle.getMessage(
this.getClass(),
"HashDbConfigPanel.editingCellsNotSupportedMsg"));
558 return getValueAt(0, c).getClass();
561 HashDb getHashSetAt(
int index) {
562 if (!hashSets.isEmpty() && index >= 0 && index < hashSets.size()) {
563 return hashSets.get(index);
569 int getIndexByDatabase(HashDb db) {
570 for (
int i = 0; i < hashSets.size(); ++i) {
571 if (hashSets.get(i).equals(db)) {
579 int getIndexByName(String name) {
580 for (
int i = 0; i < hashSets.size(); ++i) {
581 if (hashSets.get(i).getHashSetName().equals(name)) {
588 void refreshModel() {
589 hashSets = HashDbManager.getInstance().getAllHashSets();
593 void refreshDisplay() {
594 fireTableDataChanged();
606 jLabel2 =
new javax.swing.JLabel();
607 jLabel4 =
new javax.swing.JLabel();
608 jLabel6 =
new javax.swing.JLabel();
609 jButton3 =
new javax.swing.JButton();
610 jScrollPane2 =
new javax.swing.JScrollPane();
611 jPanel1 =
new javax.swing.JPanel();
612 hashDatabasesLabel =
new javax.swing.JLabel();
613 jScrollPane1 =
new javax.swing.JScrollPane();
615 createDatabaseButton =
new javax.swing.JButton();
616 importDatabaseButton =
new javax.swing.JButton();
617 deleteDatabaseButton =
new javax.swing.JButton();
618 informationLabel =
new javax.swing.JLabel();
619 informationScrollPanel =
new javax.swing.JScrollPane();
620 informationPanel =
new javax.swing.JPanel();
621 nameLabel =
new javax.swing.JLabel();
622 hashDbNameLabel =
new javax.swing.JLabel();
623 typeLabel =
new javax.swing.JLabel();
624 hashDbTypeLabel =
new javax.swing.JLabel();
625 locationLabel =
new javax.swing.JLabel();
626 hashDbLocationLabel =
new javax.swing.JLabel();
627 versionLabel =
new javax.swing.JLabel();
628 hashDbVersionLabel =
new javax.swing.JLabel();
629 orgLabel =
new javax.swing.JLabel();
630 hashDbOrgLabel =
new javax.swing.JLabel();
631 readOnlyLabel =
new javax.swing.JLabel();
632 hashDbReadOnlyLabel =
new javax.swing.JLabel();
633 indexPathLabelLabel =
new javax.swing.JLabel();
634 indexPathLabel =
new javax.swing.JLabel();
635 indexLabel =
new javax.swing.JLabel();
636 hashDbIndexStatusLabel =
new javax.swing.JLabel();
637 indexButton =
new javax.swing.JButton();
638 addHashesToDatabaseButton =
new javax.swing.JButton();
639 sendIngestMessagesCheckBox =
new javax.swing.JCheckBox();
640 ingestWarningLabel =
new javax.swing.JLabel();
642 jLabel2.setFont(jLabel2.getFont().deriveFont(jLabel2.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
643 org.openide.awt.Mnemonics.setLocalizedText(jLabel2,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.jLabel2.text"));
645 jLabel4.setFont(jLabel4.getFont().deriveFont(jLabel4.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
646 org.openide.awt.Mnemonics.setLocalizedText(jLabel4,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.jLabel4.text"));
648 jLabel6.setFont(jLabel6.getFont().deriveFont(jLabel6.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
649 org.openide.awt.Mnemonics.setLocalizedText(jLabel6,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.jLabel6.text"));
651 jButton3.setFont(jButton3.getFont().deriveFont(jButton3.getFont().getStyle() & ~java.awt.Font.BOLD, 14));
652 org.openide.awt.Mnemonics.setLocalizedText(jButton3,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.jButton3.text"));
654 hashDatabasesLabel.setFont(hashDatabasesLabel.getFont().deriveFont(hashDatabasesLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
655 org.openide.awt.Mnemonics.setLocalizedText(hashDatabasesLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.hashDatabasesLabel.text"));
657 hashSetTable.setFont(hashSetTable.getFont().deriveFont(hashSetTable.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
658 hashSetTable.setModel(
new javax.swing.table.DefaultTableModel(
666 hashSetTable.setShowHorizontalLines(
false);
667 hashSetTable.setShowVerticalLines(
false);
668 hashSetTable.addKeyListener(
new java.awt.event.KeyAdapter() {
669 public void keyPressed(java.awt.event.KeyEvent evt) {
670 hashSetTableKeyPressed(evt);
673 jScrollPane1.setViewportView(hashSetTable);
675 createDatabaseButton.setFont(createDatabaseButton.getFont().deriveFont(createDatabaseButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
676 createDatabaseButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/modules/hashdatabase/new16.png")));
677 org.openide.awt.Mnemonics.setLocalizedText(createDatabaseButton,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.createDatabaseButton.text"));
678 createDatabaseButton.setToolTipText(
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.createDatabaseButton.toolTipText"));
679 createDatabaseButton.setMaximumSize(
new java.awt.Dimension(140, 25));
680 createDatabaseButton.setMinimumSize(
new java.awt.Dimension(140, 25));
681 createDatabaseButton.addActionListener(
new java.awt.event.ActionListener() {
682 public void actionPerformed(java.awt.event.ActionEvent evt) {
683 createDatabaseButtonActionPerformed(evt);
687 importDatabaseButton.setFont(importDatabaseButton.getFont().deriveFont(importDatabaseButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
688 importDatabaseButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/modules/hashdatabase/import16.png")));
689 org.openide.awt.Mnemonics.setLocalizedText(importDatabaseButton,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.importDatabaseButton.text"));
690 importDatabaseButton.setToolTipText(
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.importDatabaseButton.toolTipText"));
691 importDatabaseButton.setMaximumSize(
new java.awt.Dimension(140, 25));
692 importDatabaseButton.setMinimumSize(
new java.awt.Dimension(140, 25));
693 importDatabaseButton.addActionListener(
new java.awt.event.ActionListener() {
694 public void actionPerformed(java.awt.event.ActionEvent evt) {
695 importDatabaseButtonActionPerformed(evt);
699 deleteDatabaseButton.setFont(deleteDatabaseButton.getFont().deriveFont(deleteDatabaseButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
700 deleteDatabaseButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/modules/hashdatabase/delete16.png")));
701 org.openide.awt.Mnemonics.setLocalizedText(deleteDatabaseButton,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.deleteDatabaseButton.text"));
702 deleteDatabaseButton.setMaximumSize(
new java.awt.Dimension(140, 25));
703 deleteDatabaseButton.setMinimumSize(
new java.awt.Dimension(140, 25));
704 deleteDatabaseButton.addActionListener(
new java.awt.event.ActionListener() {
705 public void actionPerformed(java.awt.event.ActionEvent evt) {
706 deleteDatabaseButtonActionPerformed(evt);
710 informationLabel.setFont(informationLabel.getFont().deriveFont(informationLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
711 org.openide.awt.Mnemonics.setLocalizedText(informationLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.informationLabel.text"));
713 informationScrollPanel.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);
715 nameLabel.setFont(nameLabel.getFont().deriveFont(nameLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
716 org.openide.awt.Mnemonics.setLocalizedText(nameLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.nameLabel.text"));
718 hashDbNameLabel.setFont(hashDbNameLabel.getFont().deriveFont(hashDbNameLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
719 org.openide.awt.Mnemonics.setLocalizedText(hashDbNameLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.hashDbNameLabel.text"));
721 typeLabel.setFont(typeLabel.getFont().deriveFont(typeLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
722 org.openide.awt.Mnemonics.setLocalizedText(typeLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.typeLabel.text"));
724 hashDbTypeLabel.setFont(hashDbTypeLabel.getFont().deriveFont(hashDbTypeLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
725 org.openide.awt.Mnemonics.setLocalizedText(hashDbTypeLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.hashDbTypeLabel.text"));
727 locationLabel.setFont(locationLabel.getFont().deriveFont(locationLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
728 org.openide.awt.Mnemonics.setLocalizedText(locationLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.locationLabel.text"));
730 hashDbLocationLabel.setFont(hashDbLocationLabel.getFont().deriveFont(hashDbLocationLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
731 org.openide.awt.Mnemonics.setLocalizedText(hashDbLocationLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.hashDbLocationLabel.text"));
733 org.openide.awt.Mnemonics.setLocalizedText(versionLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.versionLabel.text_1"));
735 org.openide.awt.Mnemonics.setLocalizedText(hashDbVersionLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.hashDbVersionLabel.text_1"));
737 org.openide.awt.Mnemonics.setLocalizedText(orgLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.orgLabel.text_1"));
739 org.openide.awt.Mnemonics.setLocalizedText(hashDbOrgLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.hashDbOrgLabel.text_1"));
741 org.openide.awt.Mnemonics.setLocalizedText(readOnlyLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.readOnlyLabel.text_1"));
743 org.openide.awt.Mnemonics.setLocalizedText(hashDbReadOnlyLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.hashDbReadOnlyLabel.text_1"));
745 indexPathLabelLabel.setFont(indexPathLabelLabel.getFont().deriveFont(indexPathLabelLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
746 org.openide.awt.Mnemonics.setLocalizedText(indexPathLabelLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.indexPathLabelLabel.text"));
748 indexPathLabel.setFont(indexPathLabel.getFont().deriveFont(indexPathLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
749 org.openide.awt.Mnemonics.setLocalizedText(indexPathLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.indexPathLabel.text"));
751 indexLabel.setFont(indexLabel.getFont().deriveFont(indexLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
752 org.openide.awt.Mnemonics.setLocalizedText(indexLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.indexLabel.text"));
754 hashDbIndexStatusLabel.setFont(hashDbIndexStatusLabel.getFont().deriveFont(hashDbIndexStatusLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
755 org.openide.awt.Mnemonics.setLocalizedText(hashDbIndexStatusLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.hashDbIndexStatusLabel.text"));
757 javax.swing.GroupLayout informationPanelLayout =
new javax.swing.GroupLayout(informationPanel);
758 informationPanel.setLayout(informationPanelLayout);
759 informationPanelLayout.setHorizontalGroup(
760 informationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
761 .addGroup(informationPanelLayout.createSequentialGroup()
763 .addGroup(informationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
764 .addGroup(informationPanelLayout.createSequentialGroup()
765 .addComponent(locationLabel)
767 .addComponent(hashDbLocationLabel))
768 .addGroup(informationPanelLayout.createSequentialGroup()
769 .addComponent(nameLabel)
771 .addComponent(hashDbNameLabel))
772 .addGroup(informationPanelLayout.createSequentialGroup()
773 .addComponent(typeLabel)
775 .addComponent(hashDbTypeLabel))
776 .addGroup(informationPanelLayout.createSequentialGroup()
777 .addComponent(versionLabel)
779 .addComponent(hashDbVersionLabel))
780 .addGroup(informationPanelLayout.createSequentialGroup()
781 .addComponent(orgLabel)
783 .addComponent(hashDbOrgLabel))
784 .addGroup(informationPanelLayout.createSequentialGroup()
785 .addComponent(readOnlyLabel)
787 .addComponent(hashDbReadOnlyLabel))
788 .addGroup(informationPanelLayout.createSequentialGroup()
789 .addComponent(indexLabel)
791 .addComponent(hashDbIndexStatusLabel))
792 .addGroup(informationPanelLayout.createSequentialGroup()
793 .addComponent(indexPathLabelLabel)
795 .addComponent(indexPathLabel)))
796 .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
799 informationPanelLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL,
new java.awt.Component[] {indexLabel, indexPathLabelLabel, locationLabel, nameLabel, orgLabel, readOnlyLabel, typeLabel, versionLabel});
801 informationPanelLayout.setVerticalGroup(
802 informationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
803 .addGroup(informationPanelLayout.createSequentialGroup()
804 .addGroup(informationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
805 .addComponent(nameLabel)
806 .addComponent(hashDbNameLabel))
807 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
808 .addGroup(informationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
809 .addComponent(typeLabel)
810 .addComponent(hashDbTypeLabel))
811 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
812 .addGroup(informationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
813 .addComponent(locationLabel)
814 .addComponent(hashDbLocationLabel))
815 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
816 .addGroup(informationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
817 .addComponent(versionLabel)
818 .addComponent(hashDbVersionLabel))
819 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
820 .addGroup(informationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
821 .addComponent(orgLabel)
822 .addComponent(hashDbOrgLabel))
823 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
824 .addGroup(informationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
825 .addComponent(readOnlyLabel)
826 .addComponent(hashDbReadOnlyLabel))
827 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
828 .addGroup(informationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
829 .addComponent(indexPathLabelLabel)
830 .addComponent(indexPathLabel))
831 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
832 .addGroup(informationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
833 .addComponent(indexLabel)
834 .addComponent(hashDbIndexStatusLabel))
835 .addGap(0, 49, Short.MAX_VALUE))
838 informationScrollPanel.setViewportView(informationPanel);
840 indexButton.setFont(indexButton.getFont().deriveFont(indexButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
841 org.openide.awt.Mnemonics.setLocalizedText(indexButton,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.indexButton.text"));
842 indexButton.setEnabled(
false);
843 indexButton.addActionListener(
new java.awt.event.ActionListener() {
844 public void actionPerformed(java.awt.event.ActionEvent evt) {
845 indexButtonActionPerformed(evt);
849 addHashesToDatabaseButton.setFont(addHashesToDatabaseButton.getFont().deriveFont(addHashesToDatabaseButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
850 org.openide.awt.Mnemonics.setLocalizedText(addHashesToDatabaseButton,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.addHashesToDatabaseButton.text"));
851 addHashesToDatabaseButton.setEnabled(
false);
852 addHashesToDatabaseButton.addActionListener(
new java.awt.event.ActionListener() {
853 public void actionPerformed(java.awt.event.ActionEvent evt) {
854 addHashesToDatabaseButtonActionPerformed(evt);
858 sendIngestMessagesCheckBox.setFont(sendIngestMessagesCheckBox.getFont().deriveFont(sendIngestMessagesCheckBox.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
859 org.openide.awt.Mnemonics.setLocalizedText(sendIngestMessagesCheckBox,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.sendIngestMessagesCheckBox.text"));
860 sendIngestMessagesCheckBox.addActionListener(
new java.awt.event.ActionListener() {
861 public void actionPerformed(java.awt.event.ActionEvent evt) {
862 sendIngestMessagesCheckBoxActionPerformed(evt);
866 ingestWarningLabel.setFont(ingestWarningLabel.getFont().deriveFont(ingestWarningLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
867 ingestWarningLabel.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/modules/hashdatabase/warning16.png")));
868 org.openide.awt.Mnemonics.setLocalizedText(ingestWarningLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.ingestWarningLabel.text"));
870 javax.swing.GroupLayout jPanel1Layout =
new javax.swing.GroupLayout(jPanel1);
871 jPanel1.setLayout(jPanel1Layout);
872 jPanel1Layout.setHorizontalGroup(
873 jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
874 .addGroup(jPanel1Layout.createSequentialGroup()
876 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
877 .addGroup(jPanel1Layout.createSequentialGroup()
879 .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
880 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
881 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
882 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
883 .addComponent(informationLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
884 .addGap(356, 356, 356))
885 .addGroup(jPanel1Layout.createSequentialGroup()
886 .addComponent(indexButton)
887 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
888 .addComponent(addHashesToDatabaseButton)
889 .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
890 .addGroup(jPanel1Layout.createSequentialGroup()
891 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
892 .addComponent(informationScrollPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 420, Short.MAX_VALUE)
893 .addGroup(jPanel1Layout.createSequentialGroup()
894 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
895 .addComponent(sendIngestMessagesCheckBox)
896 .addComponent(ingestWarningLabel))
897 .addGap(0, 0, Short.MAX_VALUE)))
898 .addContainerGap())))
899 .addGroup(jPanel1Layout.createSequentialGroup()
900 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
901 .addComponent(hashDatabasesLabel)
902 .addGroup(jPanel1Layout.createSequentialGroup()
903 .addComponent(createDatabaseButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
904 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
905 .addComponent(importDatabaseButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
906 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
907 .addComponent(deleteDatabaseButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
908 .addGap(0, 0, Short.MAX_VALUE))))
910 jPanel1Layout.setVerticalGroup(
911 jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
912 .addGroup(jPanel1Layout.createSequentialGroup()
914 .addComponent(hashDatabasesLabel)
916 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
917 .addGroup(jPanel1Layout.createSequentialGroup()
918 .addComponent(informationLabel)
919 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
920 .addComponent(informationScrollPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 185, javax.swing.GroupLayout.PREFERRED_SIZE)
921 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
922 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
923 .addComponent(indexButton)
924 .addComponent(addHashesToDatabaseButton))
926 .addComponent(sendIngestMessagesCheckBox)
928 .addComponent(ingestWarningLabel)
929 .addGap(0, 0, Short.MAX_VALUE))
930 .addComponent(jScrollPane1))
931 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
932 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
933 .addComponent(createDatabaseButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
934 .addComponent(importDatabaseButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
935 .addComponent(deleteDatabaseButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
939 jScrollPane2.setViewportView(jPanel1);
941 javax.swing.GroupLayout layout =
new javax.swing.GroupLayout(
this);
942 this.setLayout(layout);
943 layout.setHorizontalGroup(
944 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
945 .addComponent(jScrollPane2)
947 layout.setVerticalGroup(
948 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
949 .addComponent(jScrollPane2)
960 HashDb hashDb =
new HashDbCreateDatabaseDialog().getHashDatabase();
961 if (null != hashDb) {
962 if (hashDb instanceof CentralRepoHashSet) {
963 int newDbIndex = ((CentralRepoHashSet) hashDb).getReferenceSetID();
964 newReferenceSetIDs.add(newDbIndex);
967 hashSetTableModel.refreshModel();
968 ((
HashSetTable) hashSetTable).selectRowByDatabase(hashDb);
969 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
975 if (hashDb != null) {
976 hashDb.setSendIngestMessages(sendIngestMessagesCheckBox.isSelected());
977 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
990 @NbBundle.Messages({
"HashLookupSettingsPanel.indexNsrl.text=This hash set appears to be the NSRL, it will be removed from the list.\n",
991 "HashLookupSettingsPanel.indexNsrl.title=NSRL will not be indexed"})
994 assert hashDatabase != null;
995 assert hashDatabase instanceof SleuthkitHashSet;
999 SleuthkitHashSet hashDb = (SleuthkitHashSet) hashDatabase;
1000 if (isWindows() && hashDb.getHashSetName().toLowerCase().contains(NSRL_NAME_STRING)) {
1001 JOptionPane.showMessageDialog(
this, Bundle.HashLookupSettingsPanel_indexNsrl_text() + Bundle.HashLookupSettingsPanel_removeUnindexedNsrl_text(NSRL_URL), Bundle.HashLookupSettingsPanel_indexNsrl_title(), JOptionPane.INFORMATION_MESSAGE);
1004 hashSetTableModel.refreshModel();
1005 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
1007 logger.log(Level.WARNING,
"Unable to remove unindexed NSRL from hash set list", ex);
1010 hashDb.addPropertyChangeListener(
new PropertyChangeListener() {
1012 public void propertyChange(PropertyChangeEvent evt) {
1013 if (evt.getPropertyName().equals(SleuthkitHashSet.Event.INDEXING_DONE.toString())) {
1015 if (selectedHashDb != null && hashDb != null && hashDb.equals(selectedHashDb)) {
1018 hashSetTableModel.refreshDisplay();
1028 ModalNoButtons indexDialog =
new ModalNoButtons(
this,
new Frame(), hashDb);
1029 indexDialog.setLocationRelativeTo(null);
1030 indexDialog.setVisible(
true);
1031 indexDialog.setModal(
true);
1036 HashDb hashDb =
new HashDbImportDatabaseDialog().getHashDatabase();
1037 if (null != hashDb) {
1038 if (hashDb instanceof CentralRepoHashSet) {
1039 int newReferenceSetID = ((CentralRepoHashSet) hashDb).getReferenceSetID();
1040 newReferenceSetIDs.add(newReferenceSetID);
1043 hashSetTableModel.refreshModel();
1044 ((
HashSetTable) hashSetTable).selectRowByDatabase(hashDb);
1045 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
1050 "HashLookupSettingsPanel.promptTitle.deleteHashDb=Delete Hash Database from Configuration",
1051 "HashLookupSettingsPanel.promptMessage.deleteHashDb=This will make the hash database unavailable for lookup. Do you want to proceed?\n\nNote: The hash database can still be re-imported later."
1054 if (JOptionPane.showConfirmDialog(
this,
1055 Bundle.HashLookupSettingsPanel_promptMessage_deleteHashDb(),
1056 Bundle.HashLookupSettingsPanel_promptTitle_deleteHashDb(),
1057 JOptionPane.YES_NO_OPTION,
1058 JOptionPane.WARNING_MESSAGE) == JOptionPane.YES_OPTION) {
1060 if (hashDb != null) {
1064 JOptionPane.showMessageDialog(
this, Bundle.HashLookupSettingsPanel_removeDatabaseFailure_message(hashDb.
getHashSetName()));
1066 hashSetTableModel.refreshModel();
1067 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
1073 if (evt.getKeyCode() == KeyEvent.VK_DELETE) {
1075 if (hashDb != null) {
1079 JOptionPane.showMessageDialog(
this, Bundle.HashLookupSettingsPanel_removeDatabaseFailure_message(hashDb.
getHashSetName()));
1081 hashSetTableModel.refreshModel();
1082 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
abstract boolean getSendIngestMessages()
void importDatabaseButtonActionPerformed(java.awt.event.ActionEvent evt)
javax.swing.JLabel indexLabel
static synchronized IngestManager getInstance()
javax.swing.JPanel informationPanel
boolean isCellEditable(int rowIndex, int columnIndex)
javax.swing.JLabel hashDbIndexStatusLabel
javax.swing.JLabel jLabel6
void setValueAt(Object aValue, int rowIndex, int columnIndex)
javax.swing.JLabel hashDbVersionLabel
void deleteReferenceSet(int referenceSetID)
javax.swing.JLabel hashDatabasesLabel
javax.swing.JLabel ingestWarningLabel
javax.swing.JLabel typeLabel
javax.swing.JLabel indexPathLabel
void updateComponentsForSelection(HashDb db)
javax.swing.JButton createDatabaseButton
void createDatabaseButtonActionPerformed(java.awt.event.ActionEvent evt)
abstract String getHashSetName()
javax.swing.JLabel hashDbOrgLabel
boolean isIngestRunning()
HashLookupSettingsPanel()
javax.swing.JButton jButton3
javax.swing.JScrollPane jScrollPane1
void updateComponentsForNoSelection()
javax.swing.JLabel readOnlyLabel
javax.swing.JLabel hashDbLocationLabel
javax.swing.JLabel nameLabel
javax.swing.JLabel locationLabel
javax.swing.JButton indexButton
void selectRowByDatabase(HashDb db)
javax.swing.JLabel informationLabel
void sendIngestMessagesCheckBoxActionPerformed(java.awt.event.ActionEvent evt)
Component prepareRenderer(TableCellRenderer renderer, int row, int column)
void indexButtonActionPerformed(java.awt.event.ActionEvent evt)
void customizeComponents()
static EamDb getInstance()
void showInvalidIndex(List< SleuthkitHashSet > unindexed)
void addIngestJobEventListener(final PropertyChangeListener listener)
javax.swing.JLabel jLabel2
synchronized void removeHashDatabaseNoSave(HashDb hashDb)
javax.swing.JScrollPane jScrollPane2
static synchronized HashDbManager getInstance()
boolean isLocalIngestJobEvent(PropertyChangeEvent evt)
abstract HashDb.KnownFilesType getKnownFilesType()
javax.swing.JLabel indexPathLabelLabel
void hashSetTableKeyPressed(java.awt.event.KeyEvent evt)
void selectRowByName(String name)
javax.swing.JLabel versionLabel
javax.swing.JTable hashSetTable
static boolean isEnabled()
javax.swing.JLabel hashDbNameLabel
String getColumnName(int column)
javax.swing.JButton addHashesToDatabaseButton
javax.swing.JLabel jLabel4
synchronized List< HashDb > getAllHashSets()
javax.swing.JButton deleteDatabaseButton
Object getValueAt(int rowIndex, int columnIndex)
abstract boolean isUpdateable()
javax.swing.JScrollPane informationScrollPanel
abstract String getDatabasePath()
Class<?> getColumnClass(int c)
void setSelection(int index)
boolean isValid(int rowIndex)
synchronized void loadLastSavedConfiguration()
synchronized static Logger getLogger(String name)
javax.swing.JLabel hashDbTypeLabel
void deleteDatabaseButtonActionPerformed(java.awt.event.ActionEvent evt)
javax.swing.JLabel hashDbReadOnlyLabel
javax.swing.JButton importDatabaseButton
javax.swing.JPanel jPanel1
javax.swing.JLabel orgLabel
javax.swing.JCheckBox sendIngestMessagesCheckBox
void addHashesToDatabaseButtonActionPerformed(java.awt.event.ActionEvent evt)