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();
397 @NbBundle.Messages({
"# {0} - nsrlUrlAddress",
398 "HashLookupSettingsPanel.removeUnindexedNsrl.text=Instead of indexing the NSRL, please download an already indexed version available here:\n{0}",
399 "# {0} - nsrlHashSet",
400 "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",
401 "# {0} - nsrlHashSets",
402 "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",
403 "HashLookupSettingsPanel.removeUnindexedNsrl.title=Unindexed NSRL(s) will be removed"})
406 String nsrlTotal =
"";
408 List<SleuthkitHashSet> nsrlHashsets =
new ArrayList<>();
409 for (SleuthkitHashSet hdb : unindexed) {
411 if (isWindows() && hdb.getHashSetName().toLowerCase().contains(NSRL_NAME_STRING)) {
412 nsrlHashsets.add(hdb);
413 nsrlTotal +=
"\n" + hdb.getHashSetName();
415 total +=
"\n" + hdb.getHashSetName();
418 if (!nsrlHashsets.isEmpty()) {
420 if (nsrlHashsets.size() > 1) {
421 message = Bundle.HashLookupSettingsPanel_unindexedNsrls_base(nsrlTotal) + Bundle.HashLookupSettingsPanel_removeUnindexedNsrl_text(NSRL_URL);
423 message = Bundle.HashLookupSettingsPanel_unindexedNsrl_base(nsrlTotal) + Bundle.HashLookupSettingsPanel_removeUnindexedNsrl_text(NSRL_URL);
425 JOptionPane.showMessageDialog(
this, message, Bundle.HashLookupSettingsPanel_removeUnindexedNsrl_title(), JOptionPane.INFORMATION_MESSAGE);
426 for (SleuthkitHashSet hdb : nsrlHashsets) {
427 unindexed.remove(hdb);
429 removeThese(nsrlHashsets);
431 String message = NbBundle.getMessage(this.getClass(),
"HashDbConfigPanel.dbNotIndexedMsg", total);
432 if (unindexed.isEmpty()) {
434 }
else if (unindexed.size() > 1) {
435 message = NbBundle.getMessage(this.getClass(),
"HashDbConfigPanel.dbsNotIndexedMsg", total);
437 int res = JOptionPane.showConfirmDialog(
this, message,
438 NbBundle.getMessage(
this.getClass(),
439 "HashDbConfigPanel.unindexedDbsMsg"),
440 JOptionPane.YES_NO_OPTION);
441 if (res == JOptionPane.YES_OPTION) {
442 ModalNoButtons indexingDialog =
new ModalNoButtons(
this,
new Frame(), unindexed);
443 indexingDialog.setLocationRelativeTo(null);
444 indexingDialog.setVisible(
true);
445 indexingDialog.setModal(
true);
446 hashSetTableModel.refreshModel();
448 if (res == JOptionPane.NO_OPTION) {
449 JOptionPane.showMessageDialog(
this, NbBundle.getMessage(
this.getClass(),
450 "HashDbConfigPanel.allUnindexedDbsRmFromListMsg"));
451 removeThese(unindexed);
454 hashSetManager.save();
456 JOptionPane.showMessageDialog(
this, Bundle.HashLookupSettingsPanel_saveFail_message(), Bundle.HashLookupSettingsPanel_saveFail_title(), JOptionPane.ERROR_MESSAGE);
472 JComponent cellRenderer = (JComponent) super.prepareRenderer(renderer, row, column);
473 cellRenderer.setToolTipText((String) getValueAt(row, column));
478 if (hashSetTableModel.
isValid(row)) {
479 cellRenderer.setForeground(Color.black);
481 cellRenderer.setForeground(Color.red);
488 return hashSetTableModel.getHashSetAt(getSelectionModel().getMinSelectionIndex());
492 if (index >= 0 && index < hashSetTable.getRowCount()) {
493 getSelectionModel().setSelectionInterval(index, index);
498 setSelection(hashSetTableModel.getIndexByDatabase(db));
503 setSelection(hashSetTableModel.getIndexByName(name));
522 return hashSets.size();
527 return NbBundle.getMessage(this.getClass(),
"HashDbConfigPanel.nameColLbl");
532 return hashSets.get(rowIndex).getDisplayName();
537 return hashSets.get(rowIndex).isValid();
538 }
catch (TskCoreException ex) {
550 public void setValueAt(Object aValue,
int rowIndex,
int columnIndex) {
551 throw new UnsupportedOperationException(
552 NbBundle.getMessage(
this.getClass(),
"HashDbConfigPanel.editingCellsNotSupportedMsg"));
557 return getValueAt(0, c).getClass();
560 HashDb getHashSetAt(
int index) {
561 if (!hashSets.isEmpty() && index >= 0 && index < hashSets.size()) {
562 return hashSets.get(index);
568 int getIndexByDatabase(HashDb db) {
569 for (
int i = 0; i < hashSets.size(); ++i) {
570 if (hashSets.get(i).equals(db)) {
578 int getIndexByName(String name) {
579 for (
int i = 0; i < hashSets.size(); ++i) {
580 if (hashSets.get(i).getHashSetName().equals(name)) {
587 void refreshModel() {
588 hashSets = HashDbManager.getInstance().getAllHashSets();
592 void refreshDisplay() {
593 fireTableDataChanged();
605 jLabel2 =
new javax.swing.JLabel();
606 jLabel4 =
new javax.swing.JLabel();
607 jLabel6 =
new javax.swing.JLabel();
608 jButton3 =
new javax.swing.JButton();
609 jScrollPane2 =
new javax.swing.JScrollPane();
610 jPanel1 =
new javax.swing.JPanel();
611 hashDatabasesLabel =
new javax.swing.JLabel();
612 jScrollPane1 =
new javax.swing.JScrollPane();
614 createDatabaseButton =
new javax.swing.JButton();
615 importDatabaseButton =
new javax.swing.JButton();
616 deleteDatabaseButton =
new javax.swing.JButton();
617 informationLabel =
new javax.swing.JLabel();
618 informationScrollPanel =
new javax.swing.JScrollPane();
619 informationPanel =
new javax.swing.JPanel();
620 nameLabel =
new javax.swing.JLabel();
621 hashDbNameLabel =
new javax.swing.JLabel();
622 typeLabel =
new javax.swing.JLabel();
623 hashDbTypeLabel =
new javax.swing.JLabel();
624 locationLabel =
new javax.swing.JLabel();
625 hashDbLocationLabel =
new javax.swing.JLabel();
626 versionLabel =
new javax.swing.JLabel();
627 hashDbVersionLabel =
new javax.swing.JLabel();
628 orgLabel =
new javax.swing.JLabel();
629 hashDbOrgLabel =
new javax.swing.JLabel();
630 readOnlyLabel =
new javax.swing.JLabel();
631 hashDbReadOnlyLabel =
new javax.swing.JLabel();
632 indexPathLabelLabel =
new javax.swing.JLabel();
633 indexPathLabel =
new javax.swing.JLabel();
634 indexLabel =
new javax.swing.JLabel();
635 hashDbIndexStatusLabel =
new javax.swing.JLabel();
636 indexButton =
new javax.swing.JButton();
637 addHashesToDatabaseButton =
new javax.swing.JButton();
638 sendIngestMessagesCheckBox =
new javax.swing.JCheckBox();
639 ingestWarningLabel =
new javax.swing.JLabel();
641 jLabel2.setFont(jLabel2.getFont().deriveFont(jLabel2.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
642 org.openide.awt.Mnemonics.setLocalizedText(jLabel2,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.jLabel2.text"));
644 jLabel4.setFont(jLabel4.getFont().deriveFont(jLabel4.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
645 org.openide.awt.Mnemonics.setLocalizedText(jLabel4,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.jLabel4.text"));
647 jLabel6.setFont(jLabel6.getFont().deriveFont(jLabel6.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
648 org.openide.awt.Mnemonics.setLocalizedText(jLabel6,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.jLabel6.text"));
650 jButton3.setFont(jButton3.getFont().deriveFont(jButton3.getFont().getStyle() & ~java.awt.Font.BOLD, 14));
651 org.openide.awt.Mnemonics.setLocalizedText(jButton3,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.jButton3.text"));
653 hashDatabasesLabel.setFont(hashDatabasesLabel.getFont().deriveFont(hashDatabasesLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
654 org.openide.awt.Mnemonics.setLocalizedText(hashDatabasesLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.hashDatabasesLabel.text"));
656 hashSetTable.setFont(hashSetTable.getFont().deriveFont(hashSetTable.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
657 hashSetTable.setModel(
new javax.swing.table.DefaultTableModel(
665 hashSetTable.setShowHorizontalLines(
false);
666 hashSetTable.setShowVerticalLines(
false);
667 hashSetTable.addKeyListener(
new java.awt.event.KeyAdapter() {
668 public void keyPressed(java.awt.event.KeyEvent evt) {
669 hashSetTableKeyPressed(evt);
672 jScrollPane1.setViewportView(hashSetTable);
674 createDatabaseButton.setFont(createDatabaseButton.getFont().deriveFont(createDatabaseButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
675 createDatabaseButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/modules/hashdatabase/new16.png")));
676 org.openide.awt.Mnemonics.setLocalizedText(createDatabaseButton,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.createDatabaseButton.text"));
677 createDatabaseButton.setToolTipText(
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.createDatabaseButton.toolTipText"));
678 createDatabaseButton.setMaximumSize(
new java.awt.Dimension(140, 25));
679 createDatabaseButton.setMinimumSize(
new java.awt.Dimension(140, 25));
680 createDatabaseButton.addActionListener(
new java.awt.event.ActionListener() {
681 public void actionPerformed(java.awt.event.ActionEvent evt) {
682 createDatabaseButtonActionPerformed(evt);
686 importDatabaseButton.setFont(importDatabaseButton.getFont().deriveFont(importDatabaseButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
687 importDatabaseButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/modules/hashdatabase/import16.png")));
688 org.openide.awt.Mnemonics.setLocalizedText(importDatabaseButton,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.importDatabaseButton.text"));
689 importDatabaseButton.setToolTipText(
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.importDatabaseButton.toolTipText"));
690 importDatabaseButton.setMaximumSize(
new java.awt.Dimension(140, 25));
691 importDatabaseButton.setMinimumSize(
new java.awt.Dimension(140, 25));
692 importDatabaseButton.addActionListener(
new java.awt.event.ActionListener() {
693 public void actionPerformed(java.awt.event.ActionEvent evt) {
694 importDatabaseButtonActionPerformed(evt);
698 deleteDatabaseButton.setFont(deleteDatabaseButton.getFont().deriveFont(deleteDatabaseButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
699 deleteDatabaseButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/modules/hashdatabase/delete16.png")));
700 org.openide.awt.Mnemonics.setLocalizedText(deleteDatabaseButton,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.deleteDatabaseButton.text"));
701 deleteDatabaseButton.setMaximumSize(
new java.awt.Dimension(140, 25));
702 deleteDatabaseButton.setMinimumSize(
new java.awt.Dimension(140, 25));
703 deleteDatabaseButton.addActionListener(
new java.awt.event.ActionListener() {
704 public void actionPerformed(java.awt.event.ActionEvent evt) {
705 deleteDatabaseButtonActionPerformed(evt);
709 informationLabel.setFont(informationLabel.getFont().deriveFont(informationLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
710 org.openide.awt.Mnemonics.setLocalizedText(informationLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.informationLabel.text"));
712 informationScrollPanel.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);
714 nameLabel.setFont(nameLabel.getFont().deriveFont(nameLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
715 org.openide.awt.Mnemonics.setLocalizedText(nameLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.nameLabel.text"));
717 hashDbNameLabel.setFont(hashDbNameLabel.getFont().deriveFont(hashDbNameLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
718 org.openide.awt.Mnemonics.setLocalizedText(hashDbNameLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.hashDbNameLabel.text"));
720 typeLabel.setFont(typeLabel.getFont().deriveFont(typeLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
721 org.openide.awt.Mnemonics.setLocalizedText(typeLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.typeLabel.text"));
723 hashDbTypeLabel.setFont(hashDbTypeLabel.getFont().deriveFont(hashDbTypeLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
724 org.openide.awt.Mnemonics.setLocalizedText(hashDbTypeLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.hashDbTypeLabel.text"));
726 locationLabel.setFont(locationLabel.getFont().deriveFont(locationLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
727 org.openide.awt.Mnemonics.setLocalizedText(locationLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.locationLabel.text"));
729 hashDbLocationLabel.setFont(hashDbLocationLabel.getFont().deriveFont(hashDbLocationLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
730 org.openide.awt.Mnemonics.setLocalizedText(hashDbLocationLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.hashDbLocationLabel.text"));
732 org.openide.awt.Mnemonics.setLocalizedText(versionLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.versionLabel.text_1"));
734 org.openide.awt.Mnemonics.setLocalizedText(hashDbVersionLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.hashDbVersionLabel.text_1"));
736 org.openide.awt.Mnemonics.setLocalizedText(orgLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.orgLabel.text_1"));
738 org.openide.awt.Mnemonics.setLocalizedText(hashDbOrgLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.hashDbOrgLabel.text_1"));
740 org.openide.awt.Mnemonics.setLocalizedText(readOnlyLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.readOnlyLabel.text_1"));
742 org.openide.awt.Mnemonics.setLocalizedText(hashDbReadOnlyLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.hashDbReadOnlyLabel.text_1"));
744 indexPathLabelLabel.setFont(indexPathLabelLabel.getFont().deriveFont(indexPathLabelLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
745 org.openide.awt.Mnemonics.setLocalizedText(indexPathLabelLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.indexPathLabelLabel.text"));
747 indexPathLabel.setFont(indexPathLabel.getFont().deriveFont(indexPathLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
748 org.openide.awt.Mnemonics.setLocalizedText(indexPathLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.indexPathLabel.text"));
750 indexLabel.setFont(indexLabel.getFont().deriveFont(indexLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
751 org.openide.awt.Mnemonics.setLocalizedText(indexLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.indexLabel.text"));
753 hashDbIndexStatusLabel.setFont(hashDbIndexStatusLabel.getFont().deriveFont(hashDbIndexStatusLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
754 org.openide.awt.Mnemonics.setLocalizedText(hashDbIndexStatusLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.hashDbIndexStatusLabel.text"));
756 javax.swing.GroupLayout informationPanelLayout =
new javax.swing.GroupLayout(informationPanel);
757 informationPanel.setLayout(informationPanelLayout);
758 informationPanelLayout.setHorizontalGroup(
759 informationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
760 .addGroup(informationPanelLayout.createSequentialGroup()
762 .addGroup(informationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
763 .addGroup(informationPanelLayout.createSequentialGroup()
764 .addComponent(locationLabel)
766 .addComponent(hashDbLocationLabel))
767 .addGroup(informationPanelLayout.createSequentialGroup()
768 .addComponent(nameLabel)
770 .addComponent(hashDbNameLabel))
771 .addGroup(informationPanelLayout.createSequentialGroup()
772 .addComponent(typeLabel)
774 .addComponent(hashDbTypeLabel))
775 .addGroup(informationPanelLayout.createSequentialGroup()
776 .addComponent(versionLabel)
778 .addComponent(hashDbVersionLabel))
779 .addGroup(informationPanelLayout.createSequentialGroup()
780 .addComponent(orgLabel)
782 .addComponent(hashDbOrgLabel))
783 .addGroup(informationPanelLayout.createSequentialGroup()
784 .addComponent(readOnlyLabel)
786 .addComponent(hashDbReadOnlyLabel))
787 .addGroup(informationPanelLayout.createSequentialGroup()
788 .addComponent(indexLabel)
790 .addComponent(hashDbIndexStatusLabel))
791 .addGroup(informationPanelLayout.createSequentialGroup()
792 .addComponent(indexPathLabelLabel)
794 .addComponent(indexPathLabel)))
795 .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
798 informationPanelLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL,
new java.awt.Component[] {indexLabel, indexPathLabelLabel, locationLabel, nameLabel, orgLabel, readOnlyLabel, typeLabel, versionLabel});
800 informationPanelLayout.setVerticalGroup(
801 informationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
802 .addGroup(informationPanelLayout.createSequentialGroup()
803 .addGroup(informationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
804 .addComponent(nameLabel)
805 .addComponent(hashDbNameLabel))
806 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
807 .addGroup(informationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
808 .addComponent(typeLabel)
809 .addComponent(hashDbTypeLabel))
810 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
811 .addGroup(informationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
812 .addComponent(locationLabel)
813 .addComponent(hashDbLocationLabel))
814 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
815 .addGroup(informationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
816 .addComponent(versionLabel)
817 .addComponent(hashDbVersionLabel))
818 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
819 .addGroup(informationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
820 .addComponent(orgLabel)
821 .addComponent(hashDbOrgLabel))
822 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
823 .addGroup(informationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
824 .addComponent(readOnlyLabel)
825 .addComponent(hashDbReadOnlyLabel))
826 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
827 .addGroup(informationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
828 .addComponent(indexPathLabelLabel)
829 .addComponent(indexPathLabel))
830 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
831 .addGroup(informationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
832 .addComponent(indexLabel)
833 .addComponent(hashDbIndexStatusLabel))
834 .addGap(0, 49, Short.MAX_VALUE))
837 informationScrollPanel.setViewportView(informationPanel);
839 indexButton.setFont(indexButton.getFont().deriveFont(indexButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
840 org.openide.awt.Mnemonics.setLocalizedText(indexButton,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.indexButton.text"));
841 indexButton.setEnabled(
false);
842 indexButton.addActionListener(
new java.awt.event.ActionListener() {
843 public void actionPerformed(java.awt.event.ActionEvent evt) {
844 indexButtonActionPerformed(evt);
848 addHashesToDatabaseButton.setFont(addHashesToDatabaseButton.getFont().deriveFont(addHashesToDatabaseButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
849 org.openide.awt.Mnemonics.setLocalizedText(addHashesToDatabaseButton,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.addHashesToDatabaseButton.text"));
850 addHashesToDatabaseButton.setEnabled(
false);
851 addHashesToDatabaseButton.addActionListener(
new java.awt.event.ActionListener() {
852 public void actionPerformed(java.awt.event.ActionEvent evt) {
853 addHashesToDatabaseButtonActionPerformed(evt);
857 sendIngestMessagesCheckBox.setFont(sendIngestMessagesCheckBox.getFont().deriveFont(sendIngestMessagesCheckBox.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
858 org.openide.awt.Mnemonics.setLocalizedText(sendIngestMessagesCheckBox,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.sendIngestMessagesCheckBox.text"));
859 sendIngestMessagesCheckBox.addActionListener(
new java.awt.event.ActionListener() {
860 public void actionPerformed(java.awt.event.ActionEvent evt) {
861 sendIngestMessagesCheckBoxActionPerformed(evt);
865 ingestWarningLabel.setFont(ingestWarningLabel.getFont().deriveFont(ingestWarningLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
866 ingestWarningLabel.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/modules/hashdatabase/warning16.png")));
867 org.openide.awt.Mnemonics.setLocalizedText(ingestWarningLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.ingestWarningLabel.text"));
869 javax.swing.GroupLayout jPanel1Layout =
new javax.swing.GroupLayout(jPanel1);
870 jPanel1.setLayout(jPanel1Layout);
871 jPanel1Layout.setHorizontalGroup(
872 jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
873 .addGroup(jPanel1Layout.createSequentialGroup()
875 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
876 .addGroup(jPanel1Layout.createSequentialGroup()
878 .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
879 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
880 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
881 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
882 .addComponent(informationLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
883 .addGap(356, 356, 356))
884 .addGroup(jPanel1Layout.createSequentialGroup()
885 .addComponent(indexButton)
886 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
887 .addComponent(addHashesToDatabaseButton)
888 .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
889 .addGroup(jPanel1Layout.createSequentialGroup()
890 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
891 .addComponent(informationScrollPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 420, Short.MAX_VALUE)
892 .addGroup(jPanel1Layout.createSequentialGroup()
893 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
894 .addComponent(sendIngestMessagesCheckBox)
895 .addComponent(ingestWarningLabel))
896 .addGap(0, 0, Short.MAX_VALUE)))
897 .addContainerGap())))
898 .addGroup(jPanel1Layout.createSequentialGroup()
899 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
900 .addComponent(hashDatabasesLabel)
901 .addGroup(jPanel1Layout.createSequentialGroup()
902 .addComponent(createDatabaseButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
903 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
904 .addComponent(importDatabaseButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
905 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
906 .addComponent(deleteDatabaseButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
907 .addGap(0, 0, Short.MAX_VALUE))))
909 jPanel1Layout.setVerticalGroup(
910 jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
911 .addGroup(jPanel1Layout.createSequentialGroup()
913 .addComponent(hashDatabasesLabel)
915 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
916 .addGroup(jPanel1Layout.createSequentialGroup()
917 .addComponent(informationLabel)
918 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
919 .addComponent(informationScrollPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 185, javax.swing.GroupLayout.PREFERRED_SIZE)
920 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
921 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
922 .addComponent(indexButton)
923 .addComponent(addHashesToDatabaseButton))
925 .addComponent(sendIngestMessagesCheckBox)
927 .addComponent(ingestWarningLabel)
928 .addGap(0, 0, Short.MAX_VALUE))
929 .addComponent(jScrollPane1))
930 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
931 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
932 .addComponent(createDatabaseButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
933 .addComponent(importDatabaseButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
934 .addComponent(deleteDatabaseButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
938 jScrollPane2.setViewportView(jPanel1);
940 javax.swing.GroupLayout layout =
new javax.swing.GroupLayout(
this);
941 this.setLayout(layout);
942 layout.setHorizontalGroup(
943 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
944 .addComponent(jScrollPane2)
946 layout.setVerticalGroup(
947 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
948 .addComponent(jScrollPane2)
959 HashDb hashDb =
new HashDbCreateDatabaseDialog().getHashDatabase();
960 if (null != hashDb) {
961 if (hashDb instanceof CentralRepoHashSet) {
962 int newDbIndex = ((CentralRepoHashSet) hashDb).getReferenceSetID();
963 newReferenceSetIDs.add(newDbIndex);
966 hashSetTableModel.refreshModel();
967 ((
HashSetTable) hashSetTable).selectRowByDatabase(hashDb);
968 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
974 if (hashDb != null) {
975 hashDb.setSendIngestMessages(sendIngestMessagesCheckBox.isSelected());
976 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
989 @NbBundle.Messages({
"HashLookupSettingsPanel.indexNsrl.text=This hash set appears to be the NSRL, it will be removed from the list.\n",
990 "HashLookupSettingsPanel.indexNsrl.title=NSRL will not be indexed"})
993 assert hashDatabase != null;
994 assert hashDatabase instanceof SleuthkitHashSet;
998 SleuthkitHashSet hashDb = (SleuthkitHashSet) hashDatabase;
999 if (isWindows() && hashDb.getHashSetName().toLowerCase().contains(NSRL_NAME_STRING)) {
1000 JOptionPane.showMessageDialog(
this, Bundle.HashLookupSettingsPanel_indexNsrl_text() + Bundle.HashLookupSettingsPanel_removeUnindexedNsrl_text(NSRL_URL), Bundle.HashLookupSettingsPanel_indexNsrl_title(), JOptionPane.INFORMATION_MESSAGE);
1003 hashSetTableModel.refreshModel();
1004 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
1006 logger.log(Level.WARNING,
"Unable to remove unindexed NSRL from hash set list", ex);
1009 hashDb.addPropertyChangeListener(
new PropertyChangeListener() {
1011 public void propertyChange(PropertyChangeEvent evt) {
1012 if (evt.getPropertyName().equals(SleuthkitHashSet.Event.INDEXING_DONE.toString())) {
1014 if (selectedHashDb != null && hashDb != null && hashDb.equals(selectedHashDb)) {
1017 hashSetTableModel.refreshDisplay();
1027 ModalNoButtons indexDialog =
new ModalNoButtons(
this,
new Frame(), hashDb);
1028 indexDialog.setLocationRelativeTo(null);
1029 indexDialog.setVisible(
true);
1030 indexDialog.setModal(
true);
1035 HashDb hashDb =
new HashDbImportDatabaseDialog().getHashDatabase();
1036 if (null != hashDb) {
1037 if (hashDb instanceof CentralRepoHashSet) {
1038 int newReferenceSetID = ((CentralRepoHashSet) hashDb).getReferenceSetID();
1039 newReferenceSetIDs.add(newReferenceSetID);
1042 hashSetTableModel.refreshModel();
1043 ((
HashSetTable) hashSetTable).selectRowByDatabase(hashDb);
1044 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
1049 "HashLookupSettingsPanel.promptTitle.deleteHashDb=Delete Hash Database from Configuration",
1050 "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."
1053 if (JOptionPane.showConfirmDialog(
this,
1054 Bundle.HashLookupSettingsPanel_promptMessage_deleteHashDb(),
1055 Bundle.HashLookupSettingsPanel_promptTitle_deleteHashDb(),
1056 JOptionPane.YES_NO_OPTION,
1057 JOptionPane.WARNING_MESSAGE) == JOptionPane.YES_OPTION) {
1059 if (hashDb != null) {
1063 JOptionPane.showMessageDialog(
this, Bundle.HashLookupSettingsPanel_removeDatabaseFailure_message(hashDb.
getHashSetName()));
1065 hashSetTableModel.refreshModel();
1066 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
1072 if (evt.getKeyCode() == KeyEvent.VK_DELETE) {
1074 if (hashDb != null) {
1078 JOptionPane.showMessageDialog(
this, Bundle.HashLookupSettingsPanel_removeDatabaseFailure_message(hashDb.
getHashSetName()));
1080 hashSetTableModel.refreshModel();
1081 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)