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;
29 import java.util.ArrayList;
30 import java.util.List;
31 import java.util.logging.Level;
32 import javax.swing.JComponent;
33 import javax.swing.JOptionPane;
34 import javax.swing.JTable;
35 import javax.swing.ListSelectionModel;
36 import javax.swing.SwingUtilities;
37 import javax.swing.event.ListSelectionEvent;
38 import javax.swing.event.ListSelectionListener;
39 import javax.swing.table.AbstractTableModel;
40 import javax.swing.table.TableCellRenderer;
41 import org.netbeans.spi.options.OptionsPanelController;
42 import org.openide.util.NbBundle;
43 import org.openide.util.NbBundle.Messages;
61 @SuppressWarnings(
"PMD.SingularField")
64 private static final String NO_SELECTION_TEXT = NbBundle
66 private static final String ERROR_GETTING_PATH_TEXT = NbBundle
68 private static final String ERROR_GETTING_INDEX_STATUS_TEXT = NbBundle
72 private final List<Integer> newReferenceSetIDs =
new ArrayList<>();
76 customizeComponents();
77 updateComponentsForNoSelection();
83 public void propertyChange(PropertyChangeEvent evt) {
84 if (isLocalIngestJobEvent(evt)) {
85 EventQueue.invokeLater(
new Runnable() {
96 @NbBundle.Messages({
"HashLookupSettingsPanel.Title=Global Hash Lookup Settings"})
98 setName(Bundle.HashLookupSettingsPanel_Title());
99 this.ingestWarningLabel.setVisible(
false);
100 this.hashSetTable.setModel(hashSetTableModel);
101 this.hashSetTable.setTableHeader(null);
102 hashSetTable.getParent().setBackground(hashSetTable.getBackground());
103 hashSetTable.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
104 hashSetTable.getSelectionModel().addListSelectionListener(
new ListSelectionListener() {
106 public void valueChanged(ListSelectionEvent e) {
107 if (!e.getValueIsAdjusting()) {
117 updateComponentsForSelection(db);
119 updateComponentsForNoSelection();
127 hashDbNameLabel.setText(NO_SELECTION_TEXT);
128 hashDbTypeLabel.setText(NO_SELECTION_TEXT);
129 hashDbLocationLabel.setText(NO_SELECTION_TEXT);
130 hashDbVersionLabel.setText(NO_SELECTION_TEXT);
131 hashDbOrgLabel.setText(NO_SELECTION_TEXT);
132 hashDbReadOnlyLabel.setText(NO_SELECTION_TEXT);
133 indexPathLabel.setText(NO_SELECTION_TEXT);
136 hashDbIndexStatusLabel.setText(NO_SELECTION_TEXT);
137 hashDbIndexStatusLabel.setForeground(Color.black);
138 indexButton.setText(NbBundle.getMessage(
this.getClass(),
"HashDbConfigPanel.indexButtonText.index"));
139 indexButton.setEnabled(
false);
140 addHashesToDatabaseButton.setEnabled(
false);
143 sendIngestMessagesCheckBox.setSelected(
false);
144 sendIngestMessagesCheckBox.setEnabled(
false);
147 createDatabaseButton.setEnabled(
true);
148 importDatabaseButton.setEnabled(
true);
149 deleteDatabaseButton.setEnabled(
false);
152 ingestWarningLabel.setVisible(ingestIsRunning);
155 @NbBundle.Messages({
"HashLookupSettingsPanel.readOnly=Read only",
156 "HashLookupSettingsPanel.editable=Editable",
157 "HashLookupSettingsPanel.updateStatusError=Error reading status",
158 "HashLookupSettingsPanel.notApplicable=N/A",
159 "HashLookupSettingsPanel.centralRepo=Central Repository"
169 hashDbReadOnlyLabel.setText(Bundle.HashLookupSettingsPanel_editable());
171 hashDbReadOnlyLabel.setText(Bundle.HashLookupSettingsPanel_readOnly());
173 }
catch (TskCoreException ex) {
174 hashDbReadOnlyLabel.setText(Bundle.HashLookupSettingsPanel_updateStatusError());
178 addHashesToDatabaseButton.setEnabled(!ingestIsRunning && db.
isUpdateable());
179 }
catch (TskCoreException ex) {
181 addHashesToDatabaseButton.setEnabled(
false);
184 if (db instanceof SleuthkitHashSet) {
185 SleuthkitHashSet hashDb = (SleuthkitHashSet) db;
188 hashDbVersionLabel.setText(Bundle.HashLookupSettingsPanel_notApplicable());
189 hashDbOrgLabel.setText(Bundle.HashLookupSettingsPanel_notApplicable());
192 deleteDatabaseButton.setEnabled(!ingestIsRunning);
196 }
catch (TskCoreException ex) {
198 hashDbLocationLabel.setText(ERROR_GETTING_PATH_TEXT);
202 indexPathLabel.setText(hashDb.getIndexPath());
203 }
catch (TskCoreException ex) {
205 indexPathLabel.setText(ERROR_GETTING_PATH_TEXT);
210 if (hashDb.isIndexing()) {
212 NbBundle.getMessage(
this.getClass(),
"HashDbConfigPanel.indexButtonText.indexing"));
213 hashDbIndexStatusLabel.setText(
214 NbBundle.getMessage(
this.getClass(),
"HashDbConfigPanel.indexStatusText.indexGen"));
215 hashDbIndexStatusLabel.setForeground(Color.black);
216 indexButton.setEnabled(
false);
217 }
else if (hashDb.hasIndex()) {
218 if (hashDb.hasIndexOnly()) {
219 hashDbIndexStatusLabel.setText(
220 NbBundle.getMessage(
this.getClass(),
"HashDbConfigPanel.indexStatusText.indexOnly"));
222 hashDbIndexStatusLabel.setText(
223 NbBundle.getMessage(
this.getClass(),
"HashDbConfigPanel.indexStatusText.indexed"));
225 hashDbIndexStatusLabel.setForeground(Color.black);
226 if (hashDb.canBeReIndexed()) {
228 NbBundle.getMessage(
this.getClass(),
"HashDbConfigPanel.indexButtonText.reIndex"));
229 indexButton.setEnabled(
true);
231 indexButton.setText(NbBundle.getMessage(
this.getClass(),
"HashDbConfigPanel.indexButtonText.index"));
232 indexButton.setEnabled(
false);
235 hashDbIndexStatusLabel.setText(
236 NbBundle.getMessage(
this.getClass(),
"HashDbConfigPanel.indexStatusText.noIndex"));
237 hashDbIndexStatusLabel.setForeground(Color.red);
238 indexButton.setText(NbBundle.getMessage(
this.getClass(),
"HashDbConfigPanel.indexButtonText.index"));
239 indexButton.setEnabled(
true);
241 }
catch (TskCoreException ex) {
243 hashDbIndexStatusLabel.setText(ERROR_GETTING_INDEX_STATUS_TEXT);
244 hashDbIndexStatusLabel.setForeground(Color.red);
245 indexButton.setText(NbBundle.getMessage(
this.getClass(),
"HashDbConfigPanel.indexButtonText.index"));
246 indexButton.setEnabled(
false);
251 indexPathLabel.setText(Bundle.HashLookupSettingsPanel_notApplicable());
252 hashDbIndexStatusLabel.setText(Bundle.HashLookupSettingsPanel_notApplicable());
253 hashDbLocationLabel.setText(Bundle.HashLookupSettingsPanel_centralRepo());
254 indexButton.setEnabled(
false);
255 deleteDatabaseButton.setEnabled(
false);
257 CentralRepoHashSet crDb = (CentralRepoHashSet) db;
259 hashDbVersionLabel.setText(crDb.getVersion());
260 hashDbOrgLabel.setText(crDb.getOrgName());
264 if (ingestIsRunning) {
265 indexButton.setEnabled(
false);
273 createDatabaseButton.setEnabled(
true);
274 importDatabaseButton.setEnabled(
true);
277 ingestWarningLabel.setVisible(ingestIsRunning);
282 AutopsyEvent
event = (AutopsyEvent) evt;
283 if (event.getSourceType() == AutopsyEvent.SourceType.LOCAL) {
284 String eventType =
event.getPropertyName();
294 @Messages({
"HashLookupSettingsPanel.saveFail.message=Couldn't save hash set settings.",
295 "HashLookupSettingsPanel.saveFail.title=Save Fail"})
299 newReferenceSetIDs.clear();
302 List<SleuthkitHashSet> unindexed =
new ArrayList<>();
304 if (db instanceof SleuthkitHashSet) {
306 SleuthkitHashSet hashDatabase = (SleuthkitHashSet) db;
307 if (!hashDatabase.hasIndex()) {
308 unindexed.add(hashDatabase);
310 }
catch (TskCoreException ex) {
318 if (!unindexed.isEmpty()) {
319 SwingUtilities.invokeLater(
new Runnable() {
323 if (unindexed.size() == 1) {
324 showInvalidIndex(
false, unindexed);
325 }
else if (unindexed.size() > 1) {
326 showInvalidIndex(
true, unindexed);
332 hashSetManager.save();
334 SwingUtilities.invokeLater(() -> {
335 JOptionPane.showMessageDialog(
this, Bundle.HashLookupSettingsPanel_saveFail_message(), Bundle.HashLookupSettingsPanel_saveFail_title(), JOptionPane.ERROR_MESSAGE);
343 hashSetTable.clearSelection();
344 hashSetTableModel.refreshModel();
360 for (
int refID : newReferenceSetIDs) {
377 @Messages({
"# {0} - hash lookup name",
"HashLookupSettingsPanel.removeDatabaseFailure.message=Failed to remove hash lookup: {0}"})
378 void removeThese(List<SleuthkitHashSet> toRemove) {
379 for (SleuthkitHashSet hashDb : toRemove) {
382 }
catch (HashDbManager.HashDbManagerException ex) {
383 JOptionPane.showMessageDialog(
this, Bundle.HashLookupSettingsPanel_removeDatabaseFailure_message(hashDb.getHashSetName()));
386 hashSetTableModel.refreshModel();
400 for (
HashDb hdb : unindexed) {
401 total +=
"\n" + hdb.getHashSetName();
404 message = NbBundle.getMessage(this.getClass(),
"HashDbConfigPanel.dbsNotIndexedMsg", total);
406 message = NbBundle.getMessage(this.getClass(),
"HashDbConfigPanel.dbNotIndexedMsg", total);
408 int res = JOptionPane.showConfirmDialog(
this, message,
409 NbBundle.getMessage(
this.getClass(),
410 "HashDbConfigPanel.unindexedDbsMsg"),
411 JOptionPane.YES_NO_OPTION);
412 if (res == JOptionPane.YES_OPTION) {
413 ModalNoButtons indexingDialog =
new ModalNoButtons(
this,
new Frame(), unindexed);
414 indexingDialog.setLocationRelativeTo(null);
415 indexingDialog.setVisible(
true);
416 indexingDialog.setModal(
true);
417 hashSetTableModel.refreshModel();
419 if (res == JOptionPane.NO_OPTION) {
420 JOptionPane.showMessageDialog(
this, NbBundle.getMessage(
this.getClass(),
421 "HashDbConfigPanel.allUnindexedDbsRmFromListMsg"));
422 removeThese(unindexed);
425 hashSetManager.save();
427 JOptionPane.showMessageDialog(
this, Bundle.HashLookupSettingsPanel_saveFail_message(), Bundle.HashLookupSettingsPanel_saveFail_title(), JOptionPane.ERROR_MESSAGE);
443 JComponent cellRenderer = (JComponent) super.prepareRenderer(renderer, row, column);
444 cellRenderer.setToolTipText((String) getValueAt(row, column));
449 if (hashSetTableModel.
isValid(row)) {
450 cellRenderer.setForeground(Color.black);
452 cellRenderer.setForeground(Color.red);
459 return hashSetTableModel.getHashSetAt(getSelectionModel().getMinSelectionIndex());
463 if (index >= 0 && index < hashSetTable.getRowCount()) {
464 getSelectionModel().setSelectionInterval(index, index);
469 setSelection(hashSetTableModel.getIndexByDatabase(db));
474 setSelection(hashSetTableModel.getIndexByName(name));
493 return hashSets.size();
498 return NbBundle.getMessage(this.getClass(),
"HashDbConfigPanel.nameColLbl");
503 return hashSets.get(rowIndex).getDisplayName();
508 return hashSets.get(rowIndex).isValid();
509 }
catch (TskCoreException ex) {
521 public void setValueAt(Object aValue,
int rowIndex,
int columnIndex) {
522 throw new UnsupportedOperationException(
523 NbBundle.getMessage(
this.getClass(),
"HashDbConfigPanel.editingCellsNotSupportedMsg"));
528 return getValueAt(0, c).getClass();
531 HashDb getHashSetAt(
int index) {
532 if (!hashSets.isEmpty() && index >= 0 && index < hashSets.size()) {
533 return hashSets.get(index);
539 int getIndexByDatabase(HashDb db) {
540 for (
int i = 0; i < hashSets.size(); ++i) {
541 if (hashSets.get(i).equals(db)) {
549 int getIndexByName(String name) {
550 for (
int i = 0; i < hashSets.size(); ++i) {
551 if (hashSets.get(i).getHashSetName().equals(name)) {
558 void refreshModel() {
559 hashSets = HashDbManager.getInstance().getAllHashSets();
563 void refreshDisplay() {
564 fireTableDataChanged();
576 jLabel2 =
new javax.swing.JLabel();
577 jLabel4 =
new javax.swing.JLabel();
578 jLabel6 =
new javax.swing.JLabel();
579 jButton3 =
new javax.swing.JButton();
580 jScrollPane2 =
new javax.swing.JScrollPane();
581 jPanel1 =
new javax.swing.JPanel();
582 hashDatabasesLabel =
new javax.swing.JLabel();
583 jScrollPane1 =
new javax.swing.JScrollPane();
585 createDatabaseButton =
new javax.swing.JButton();
586 importDatabaseButton =
new javax.swing.JButton();
587 deleteDatabaseButton =
new javax.swing.JButton();
588 informationLabel =
new javax.swing.JLabel();
589 informationScrollPanel =
new javax.swing.JScrollPane();
590 informationPanel =
new javax.swing.JPanel();
591 nameLabel =
new javax.swing.JLabel();
592 hashDbNameLabel =
new javax.swing.JLabel();
593 typeLabel =
new javax.swing.JLabel();
594 hashDbTypeLabel =
new javax.swing.JLabel();
595 locationLabel =
new javax.swing.JLabel();
596 hashDbLocationLabel =
new javax.swing.JLabel();
597 versionLabel =
new javax.swing.JLabel();
598 hashDbVersionLabel =
new javax.swing.JLabel();
599 orgLabel =
new javax.swing.JLabel();
600 hashDbOrgLabel =
new javax.swing.JLabel();
601 readOnlyLabel =
new javax.swing.JLabel();
602 hashDbReadOnlyLabel =
new javax.swing.JLabel();
603 indexPathLabelLabel =
new javax.swing.JLabel();
604 indexPathLabel =
new javax.swing.JLabel();
605 indexLabel =
new javax.swing.JLabel();
606 hashDbIndexStatusLabel =
new javax.swing.JLabel();
607 indexButton =
new javax.swing.JButton();
608 addHashesToDatabaseButton =
new javax.swing.JButton();
609 sendIngestMessagesCheckBox =
new javax.swing.JCheckBox();
610 ingestWarningLabel =
new javax.swing.JLabel();
612 jLabel2.setFont(jLabel2.getFont().deriveFont(jLabel2.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
613 org.openide.awt.Mnemonics.setLocalizedText(jLabel2,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.jLabel2.text"));
615 jLabel4.setFont(jLabel4.getFont().deriveFont(jLabel4.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
616 org.openide.awt.Mnemonics.setLocalizedText(jLabel4,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.jLabel4.text"));
618 jLabel6.setFont(jLabel6.getFont().deriveFont(jLabel6.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
619 org.openide.awt.Mnemonics.setLocalizedText(jLabel6,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.jLabel6.text"));
621 jButton3.setFont(jButton3.getFont().deriveFont(jButton3.getFont().getStyle() & ~java.awt.Font.BOLD, 14));
622 org.openide.awt.Mnemonics.setLocalizedText(jButton3,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.jButton3.text"));
624 hashDatabasesLabel.setFont(hashDatabasesLabel.getFont().deriveFont(hashDatabasesLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
625 org.openide.awt.Mnemonics.setLocalizedText(hashDatabasesLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.hashDatabasesLabel.text"));
627 hashSetTable.setFont(hashSetTable.getFont().deriveFont(hashSetTable.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
628 hashSetTable.setModel(
new javax.swing.table.DefaultTableModel(
636 hashSetTable.setShowHorizontalLines(
false);
637 hashSetTable.setShowVerticalLines(
false);
638 hashSetTable.addKeyListener(
new java.awt.event.KeyAdapter() {
639 public void keyPressed(java.awt.event.KeyEvent evt) {
640 hashSetTableKeyPressed(evt);
643 jScrollPane1.setViewportView(hashSetTable);
645 createDatabaseButton.setFont(createDatabaseButton.getFont().deriveFont(createDatabaseButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
646 createDatabaseButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/modules/hashdatabase/new16.png")));
647 org.openide.awt.Mnemonics.setLocalizedText(createDatabaseButton,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.createDatabaseButton.text"));
648 createDatabaseButton.setToolTipText(
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.createDatabaseButton.toolTipText"));
649 createDatabaseButton.setMaximumSize(
new java.awt.Dimension(140, 25));
650 createDatabaseButton.setMinimumSize(
new java.awt.Dimension(140, 25));
651 createDatabaseButton.addActionListener(
new java.awt.event.ActionListener() {
652 public void actionPerformed(java.awt.event.ActionEvent evt) {
653 createDatabaseButtonActionPerformed(evt);
657 importDatabaseButton.setFont(importDatabaseButton.getFont().deriveFont(importDatabaseButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
658 importDatabaseButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/modules/hashdatabase/import16.png")));
659 org.openide.awt.Mnemonics.setLocalizedText(importDatabaseButton,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.importDatabaseButton.text"));
660 importDatabaseButton.setToolTipText(
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.importDatabaseButton.toolTipText"));
661 importDatabaseButton.setMaximumSize(
new java.awt.Dimension(140, 25));
662 importDatabaseButton.setMinimumSize(
new java.awt.Dimension(140, 25));
663 importDatabaseButton.addActionListener(
new java.awt.event.ActionListener() {
664 public void actionPerformed(java.awt.event.ActionEvent evt) {
665 importDatabaseButtonActionPerformed(evt);
669 deleteDatabaseButton.setFont(deleteDatabaseButton.getFont().deriveFont(deleteDatabaseButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
670 deleteDatabaseButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/modules/hashdatabase/delete16.png")));
671 org.openide.awt.Mnemonics.setLocalizedText(deleteDatabaseButton,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.deleteDatabaseButton.text"));
672 deleteDatabaseButton.setMaximumSize(
new java.awt.Dimension(140, 25));
673 deleteDatabaseButton.setMinimumSize(
new java.awt.Dimension(140, 25));
674 deleteDatabaseButton.addActionListener(
new java.awt.event.ActionListener() {
675 public void actionPerformed(java.awt.event.ActionEvent evt) {
676 deleteDatabaseButtonActionPerformed(evt);
680 informationLabel.setFont(informationLabel.getFont().deriveFont(informationLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
681 org.openide.awt.Mnemonics.setLocalizedText(informationLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.informationLabel.text"));
683 informationScrollPanel.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);
685 nameLabel.setFont(nameLabel.getFont().deriveFont(nameLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
686 org.openide.awt.Mnemonics.setLocalizedText(nameLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.nameLabel.text"));
688 hashDbNameLabel.setFont(hashDbNameLabel.getFont().deriveFont(hashDbNameLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
689 org.openide.awt.Mnemonics.setLocalizedText(hashDbNameLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.hashDbNameLabel.text"));
691 typeLabel.setFont(typeLabel.getFont().deriveFont(typeLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
692 org.openide.awt.Mnemonics.setLocalizedText(typeLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.typeLabel.text"));
694 hashDbTypeLabel.setFont(hashDbTypeLabel.getFont().deriveFont(hashDbTypeLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
695 org.openide.awt.Mnemonics.setLocalizedText(hashDbTypeLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.hashDbTypeLabel.text"));
697 locationLabel.setFont(locationLabel.getFont().deriveFont(locationLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
698 org.openide.awt.Mnemonics.setLocalizedText(locationLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.locationLabel.text"));
700 hashDbLocationLabel.setFont(hashDbLocationLabel.getFont().deriveFont(hashDbLocationLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
701 org.openide.awt.Mnemonics.setLocalizedText(hashDbLocationLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.hashDbLocationLabel.text"));
703 org.openide.awt.Mnemonics.setLocalizedText(versionLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.versionLabel.text_1"));
705 org.openide.awt.Mnemonics.setLocalizedText(hashDbVersionLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.hashDbVersionLabel.text_1"));
707 org.openide.awt.Mnemonics.setLocalizedText(orgLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.orgLabel.text_1"));
709 org.openide.awt.Mnemonics.setLocalizedText(hashDbOrgLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.hashDbOrgLabel.text_1"));
711 org.openide.awt.Mnemonics.setLocalizedText(readOnlyLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.readOnlyLabel.text_1"));
713 org.openide.awt.Mnemonics.setLocalizedText(hashDbReadOnlyLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.hashDbReadOnlyLabel.text_1"));
715 indexPathLabelLabel.setFont(indexPathLabelLabel.getFont().deriveFont(indexPathLabelLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
716 org.openide.awt.Mnemonics.setLocalizedText(indexPathLabelLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.indexPathLabelLabel.text"));
718 indexPathLabel.setFont(indexPathLabel.getFont().deriveFont(indexPathLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
719 org.openide.awt.Mnemonics.setLocalizedText(indexPathLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.indexPathLabel.text"));
721 indexLabel.setFont(indexLabel.getFont().deriveFont(indexLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
722 org.openide.awt.Mnemonics.setLocalizedText(indexLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.indexLabel.text"));
724 hashDbIndexStatusLabel.setFont(hashDbIndexStatusLabel.getFont().deriveFont(hashDbIndexStatusLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
725 org.openide.awt.Mnemonics.setLocalizedText(hashDbIndexStatusLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.hashDbIndexStatusLabel.text"));
727 javax.swing.GroupLayout informationPanelLayout =
new javax.swing.GroupLayout(informationPanel);
728 informationPanel.setLayout(informationPanelLayout);
729 informationPanelLayout.setHorizontalGroup(
730 informationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
731 .addGroup(informationPanelLayout.createSequentialGroup()
733 .addGroup(informationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
734 .addGroup(informationPanelLayout.createSequentialGroup()
735 .addComponent(locationLabel)
737 .addComponent(hashDbLocationLabel))
738 .addGroup(informationPanelLayout.createSequentialGroup()
739 .addComponent(nameLabel)
741 .addComponent(hashDbNameLabel))
742 .addGroup(informationPanelLayout.createSequentialGroup()
743 .addComponent(typeLabel)
745 .addComponent(hashDbTypeLabel))
746 .addGroup(informationPanelLayout.createSequentialGroup()
747 .addComponent(versionLabel)
749 .addComponent(hashDbVersionLabel))
750 .addGroup(informationPanelLayout.createSequentialGroup()
751 .addComponent(orgLabel)
753 .addComponent(hashDbOrgLabel))
754 .addGroup(informationPanelLayout.createSequentialGroup()
755 .addComponent(readOnlyLabel)
757 .addComponent(hashDbReadOnlyLabel))
758 .addGroup(informationPanelLayout.createSequentialGroup()
759 .addComponent(indexLabel)
761 .addComponent(hashDbIndexStatusLabel))
762 .addGroup(informationPanelLayout.createSequentialGroup()
763 .addComponent(indexPathLabelLabel)
765 .addComponent(indexPathLabel)))
766 .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
769 informationPanelLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL,
new java.awt.Component[] {indexLabel, indexPathLabelLabel, locationLabel, nameLabel, orgLabel, readOnlyLabel, typeLabel, versionLabel});
771 informationPanelLayout.setVerticalGroup(
772 informationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
773 .addGroup(informationPanelLayout.createSequentialGroup()
774 .addGroup(informationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
775 .addComponent(nameLabel)
776 .addComponent(hashDbNameLabel))
777 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
778 .addGroup(informationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
779 .addComponent(typeLabel)
780 .addComponent(hashDbTypeLabel))
781 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
782 .addGroup(informationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
783 .addComponent(locationLabel)
784 .addComponent(hashDbLocationLabel))
785 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
786 .addGroup(informationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
787 .addComponent(versionLabel)
788 .addComponent(hashDbVersionLabel))
789 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
790 .addGroup(informationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
791 .addComponent(orgLabel)
792 .addComponent(hashDbOrgLabel))
793 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
794 .addGroup(informationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
795 .addComponent(readOnlyLabel)
796 .addComponent(hashDbReadOnlyLabel))
797 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
798 .addGroup(informationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
799 .addComponent(indexPathLabelLabel)
800 .addComponent(indexPathLabel))
801 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
802 .addGroup(informationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
803 .addComponent(indexLabel)
804 .addComponent(hashDbIndexStatusLabel))
805 .addGap(0, 49, Short.MAX_VALUE))
808 informationScrollPanel.setViewportView(informationPanel);
810 indexButton.setFont(indexButton.getFont().deriveFont(indexButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
811 org.openide.awt.Mnemonics.setLocalizedText(indexButton,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.indexButton.text"));
812 indexButton.setEnabled(
false);
813 indexButton.addActionListener(
new java.awt.event.ActionListener() {
814 public void actionPerformed(java.awt.event.ActionEvent evt) {
815 indexButtonActionPerformed(evt);
819 addHashesToDatabaseButton.setFont(addHashesToDatabaseButton.getFont().deriveFont(addHashesToDatabaseButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
820 org.openide.awt.Mnemonics.setLocalizedText(addHashesToDatabaseButton,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.addHashesToDatabaseButton.text"));
821 addHashesToDatabaseButton.setEnabled(
false);
822 addHashesToDatabaseButton.addActionListener(
new java.awt.event.ActionListener() {
823 public void actionPerformed(java.awt.event.ActionEvent evt) {
824 addHashesToDatabaseButtonActionPerformed(evt);
828 sendIngestMessagesCheckBox.setFont(sendIngestMessagesCheckBox.getFont().deriveFont(sendIngestMessagesCheckBox.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
829 org.openide.awt.Mnemonics.setLocalizedText(sendIngestMessagesCheckBox,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.sendIngestMessagesCheckBox.text"));
830 sendIngestMessagesCheckBox.addActionListener(
new java.awt.event.ActionListener() {
831 public void actionPerformed(java.awt.event.ActionEvent evt) {
832 sendIngestMessagesCheckBoxActionPerformed(evt);
836 ingestWarningLabel.setFont(ingestWarningLabel.getFont().deriveFont(ingestWarningLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
837 ingestWarningLabel.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/modules/hashdatabase/warning16.png")));
838 org.openide.awt.Mnemonics.setLocalizedText(ingestWarningLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.ingestWarningLabel.text"));
840 javax.swing.GroupLayout jPanel1Layout =
new javax.swing.GroupLayout(jPanel1);
841 jPanel1.setLayout(jPanel1Layout);
842 jPanel1Layout.setHorizontalGroup(
843 jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
844 .addGroup(jPanel1Layout.createSequentialGroup()
846 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
847 .addGroup(jPanel1Layout.createSequentialGroup()
849 .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
850 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
851 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
852 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
853 .addComponent(informationLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
854 .addGap(356, 356, 356))
855 .addGroup(jPanel1Layout.createSequentialGroup()
856 .addComponent(indexButton)
857 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
858 .addComponent(addHashesToDatabaseButton)
859 .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
860 .addGroup(jPanel1Layout.createSequentialGroup()
861 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
862 .addComponent(informationScrollPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 420, Short.MAX_VALUE)
863 .addGroup(jPanel1Layout.createSequentialGroup()
864 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
865 .addComponent(sendIngestMessagesCheckBox)
866 .addComponent(ingestWarningLabel))
867 .addGap(0, 0, Short.MAX_VALUE)))
868 .addContainerGap())))
869 .addGroup(jPanel1Layout.createSequentialGroup()
870 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
871 .addComponent(hashDatabasesLabel)
872 .addGroup(jPanel1Layout.createSequentialGroup()
873 .addComponent(createDatabaseButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
874 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
875 .addComponent(importDatabaseButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
876 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
877 .addComponent(deleteDatabaseButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
878 .addGap(0, 0, Short.MAX_VALUE))))
880 jPanel1Layout.setVerticalGroup(
881 jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
882 .addGroup(jPanel1Layout.createSequentialGroup()
884 .addComponent(hashDatabasesLabel)
886 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
887 .addGroup(jPanel1Layout.createSequentialGroup()
888 .addComponent(informationLabel)
889 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
890 .addComponent(informationScrollPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 185, javax.swing.GroupLayout.PREFERRED_SIZE)
891 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
892 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
893 .addComponent(indexButton)
894 .addComponent(addHashesToDatabaseButton))
896 .addComponent(sendIngestMessagesCheckBox)
898 .addComponent(ingestWarningLabel)
899 .addGap(0, 0, Short.MAX_VALUE))
900 .addComponent(jScrollPane1))
901 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
902 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
903 .addComponent(createDatabaseButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
904 .addComponent(importDatabaseButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
905 .addComponent(deleteDatabaseButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
909 jScrollPane2.setViewportView(jPanel1);
911 javax.swing.GroupLayout layout =
new javax.swing.GroupLayout(
this);
912 this.setLayout(layout);
913 layout.setHorizontalGroup(
914 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
915 .addComponent(jScrollPane2)
917 layout.setVerticalGroup(
918 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
919 .addComponent(jScrollPane2)
930 HashDb hashDb =
new HashDbCreateDatabaseDialog().getHashDatabase();
931 if (null != hashDb) {
932 if (hashDb instanceof CentralRepoHashSet) {
933 int newDbIndex = ((CentralRepoHashSet) hashDb).getReferenceSetID();
934 newReferenceSetIDs.add(newDbIndex);
937 hashSetTableModel.refreshModel();
938 ((
HashSetTable) hashSetTable).selectRowByDatabase(hashDb);
939 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
945 if (hashDb != null) {
946 hashDb.setSendIngestMessages(sendIngestMessagesCheckBox.isSelected());
947 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
953 assert hashDatabase != null;
954 assert hashDatabase instanceof SleuthkitHashSet;
958 SleuthkitHashSet hashDb = (SleuthkitHashSet) hashDatabase;
961 public void propertyChange(PropertyChangeEvent evt) {
962 if (evt.getPropertyName().equals(SleuthkitHashSet.Event.INDEXING_DONE.toString())) {
964 if (selectedHashDb != null && hashDb != null && hashDb.equals(selectedHashDb)) {
967 hashSetTableModel.refreshDisplay();
977 ModalNoButtons indexDialog =
new ModalNoButtons(
this,
new Frame(), hashDb);
978 indexDialog.setLocationRelativeTo(null);
979 indexDialog.setVisible(
true);
980 indexDialog.setModal(
true);
984 HashDb hashDb =
new HashDbImportDatabaseDialog().getHashDatabase();
985 if (null != hashDb) {
986 if (hashDb instanceof CentralRepoHashSet) {
987 int newReferenceSetID = ((CentralRepoHashSet) hashDb).getReferenceSetID();
988 newReferenceSetIDs.add(newReferenceSetID);
991 hashSetTableModel.refreshModel();
992 ((
HashSetTable) hashSetTable).selectRowByDatabase(hashDb);
993 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
998 "HashLookupSettingsPanel.promptTitle.deleteHashDb=Delete Hash Database from Configuration",
999 "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."
1002 if (JOptionPane.showConfirmDialog(
this,
1003 Bundle.HashLookupSettingsPanel_promptMessage_deleteHashDb(),
1004 Bundle.HashLookupSettingsPanel_promptTitle_deleteHashDb(),
1005 JOptionPane.YES_NO_OPTION,
1006 JOptionPane.WARNING_MESSAGE) == JOptionPane.YES_OPTION) {
1008 if (hashDb != null) {
1012 JOptionPane.showMessageDialog(
this, Bundle.HashLookupSettingsPanel_removeDatabaseFailure_message(hashDb.
getHashSetName()));
1014 hashSetTableModel.refreshModel();
1015 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
1021 if (evt.getKeyCode() == KeyEvent.VK_DELETE) {
1023 if (hashDb != null) {
1027 JOptionPane.showMessageDialog(
this, Bundle.HashLookupSettingsPanel_removeDatabaseFailure_message(hashDb.
getHashSetName()));
1029 hashSetTableModel.refreshModel();
1030 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
abstract boolean getSendIngestMessages()
void importDatabaseButtonActionPerformed(java.awt.event.ActionEvent evt)
javax.swing.JLabel indexLabel
void showInvalidIndex(boolean plural, List< SleuthkitHashSet > unindexed)
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 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()
abstract void addPropertyChangeListener(PropertyChangeListener pcl)
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)