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);
145 optionsLabel.setEnabled(
false);
146 optionsSeparator.setEnabled(
false);
149 createDatabaseButton.setEnabled(
true);
150 importDatabaseButton.setEnabled(
true);
151 deleteDatabaseButton.setEnabled(
false);
154 ingestWarningLabel.setVisible(ingestIsRunning);
157 @NbBundle.Messages({
"HashLookupSettingsPanel.readOnly=Read only",
158 "HashLookupSettingsPanel.editable=Editable",
159 "HashLookupSettingsPanel.updateStatusError=Error reading status",
160 "HashLookupSettingsPanel.notApplicable=N/A",
161 "HashLookupSettingsPanel.centralRepo=Central Repository"
171 hashDbReadOnlyLabel.setText(Bundle.HashLookupSettingsPanel_editable());
173 hashDbReadOnlyLabel.setText(Bundle.HashLookupSettingsPanel_readOnly());
175 }
catch (TskCoreException ex) {
176 hashDbReadOnlyLabel.setText(Bundle.HashLookupSettingsPanel_updateStatusError());
180 addHashesToDatabaseButton.setEnabled(!ingestIsRunning && db.
isUpdateable());
181 }
catch (TskCoreException ex) {
183 addHashesToDatabaseButton.setEnabled(
false);
186 if (db instanceof SleuthkitHashSet) {
187 SleuthkitHashSet hashDb = (SleuthkitHashSet) db;
190 hashDbVersionLabel.setText(Bundle.HashLookupSettingsPanel_notApplicable());
191 hashDbOrgLabel.setText(Bundle.HashLookupSettingsPanel_notApplicable());
194 deleteDatabaseButton.setEnabled(!ingestIsRunning);
198 }
catch (TskCoreException ex) {
200 hashDbLocationLabel.setText(ERROR_GETTING_PATH_TEXT);
204 indexPathLabel.setText(shortenPath(hashDb.getIndexPath()));
205 }
catch (TskCoreException ex) {
207 indexPathLabel.setText(ERROR_GETTING_PATH_TEXT);
212 if (hashDb.isIndexing()) {
214 NbBundle.getMessage(
this.getClass(),
"HashDbConfigPanel.indexButtonText.indexing"));
215 hashDbIndexStatusLabel.setText(
216 NbBundle.getMessage(
this.getClass(),
"HashDbConfigPanel.indexStatusText.indexGen"));
217 hashDbIndexStatusLabel.setForeground(Color.black);
218 indexButton.setEnabled(
false);
219 }
else if (hashDb.hasIndex()) {
220 if (hashDb.hasIndexOnly()) {
221 hashDbIndexStatusLabel.setText(
222 NbBundle.getMessage(
this.getClass(),
"HashDbConfigPanel.indexStatusText.indexOnly"));
224 hashDbIndexStatusLabel.setText(
225 NbBundle.getMessage(
this.getClass(),
"HashDbConfigPanel.indexStatusText.indexed"));
227 hashDbIndexStatusLabel.setForeground(Color.black);
228 if (hashDb.canBeReIndexed()) {
230 NbBundle.getMessage(
this.getClass(),
"HashDbConfigPanel.indexButtonText.reIndex"));
231 indexButton.setEnabled(
true);
233 indexButton.setText(NbBundle.getMessage(
this.getClass(),
"HashDbConfigPanel.indexButtonText.index"));
234 indexButton.setEnabled(
false);
237 hashDbIndexStatusLabel.setText(
238 NbBundle.getMessage(
this.getClass(),
"HashDbConfigPanel.indexStatusText.noIndex"));
239 hashDbIndexStatusLabel.setForeground(Color.red);
240 indexButton.setText(NbBundle.getMessage(
this.getClass(),
"HashDbConfigPanel.indexButtonText.index"));
241 indexButton.setEnabled(
true);
243 }
catch (TskCoreException ex) {
245 hashDbIndexStatusLabel.setText(ERROR_GETTING_INDEX_STATUS_TEXT);
246 hashDbIndexStatusLabel.setForeground(Color.red);
247 indexButton.setText(NbBundle.getMessage(
this.getClass(),
"HashDbConfigPanel.indexButtonText.index"));
248 indexButton.setEnabled(
false);
253 indexPathLabel.setText(Bundle.HashLookupSettingsPanel_notApplicable());
254 hashDbIndexStatusLabel.setText(Bundle.HashLookupSettingsPanel_notApplicable());
255 hashDbLocationLabel.setText(Bundle.HashLookupSettingsPanel_centralRepo());
256 indexButton.setEnabled(
false);
257 deleteDatabaseButton.setEnabled(
false);
259 CentralRepoHashSet crDb = (CentralRepoHashSet) db;
261 hashDbVersionLabel.setText(crDb.getVersion());
262 hashDbOrgLabel.setText(crDb.getOrgName());
266 if (ingestIsRunning) {
267 indexButton.setEnabled(
false);
273 optionsLabel.setEnabled(!ingestIsRunning);
274 optionsSeparator.setEnabled(!ingestIsRunning);
277 createDatabaseButton.setEnabled(
true);
278 importDatabaseButton.setEnabled(
true);
281 ingestWarningLabel.setVisible(ingestIsRunning);
285 String shortenedPath = path;
286 if (shortenedPath.length() > 50) {
287 shortenedPath = shortenedPath.substring(0, 10 + shortenedPath.substring(10).indexOf(File.separator) + 1) +
"..." + shortenedPath.substring((shortenedPath.length() - 20) + shortenedPath.substring(shortenedPath.length() - 20).indexOf(File.separator));
289 return shortenedPath;
294 AutopsyEvent
event = (AutopsyEvent) evt;
295 if (event.getSourceType() == AutopsyEvent.SourceType.LOCAL) {
296 String eventType =
event.getPropertyName();
306 @Messages({
"HashLookupSettingsPanel.saveFail.message=Couldn't save hash set settings.",
307 "HashLookupSettingsPanel.saveFail.title=Save Fail"})
311 newReferenceSetIDs.clear();
314 List<SleuthkitHashSet> unindexed =
new ArrayList<>();
316 if (db instanceof SleuthkitHashSet) {
318 SleuthkitHashSet hashDatabase = (SleuthkitHashSet) db;
319 if (!hashDatabase.hasIndex()) {
320 unindexed.add(hashDatabase);
322 }
catch (TskCoreException ex) {
330 if (!unindexed.isEmpty()) {
331 SwingUtilities.invokeLater(
new Runnable() {
335 if (unindexed.size() == 1) {
336 showInvalidIndex(
false, unindexed);
337 }
else if (unindexed.size() > 1) {
338 showInvalidIndex(
true, unindexed);
344 hashSetManager.save();
346 SwingUtilities.invokeLater(() -> {
347 JOptionPane.showMessageDialog(
this, Bundle.HashLookupSettingsPanel_saveFail_message(), Bundle.HashLookupSettingsPanel_saveFail_title(), JOptionPane.ERROR_MESSAGE);
355 hashSetTable.clearSelection();
356 hashSetTableModel.refreshModel();
372 for (
int refID : newReferenceSetIDs) {
389 @Messages({
"# {0} - hash lookup name",
"HashLookupSettingsPanel.removeDatabaseFailure.message=Failed to remove hash lookup: {0}"})
390 void removeThese(List<SleuthkitHashSet> toRemove) {
391 for (SleuthkitHashSet hashDb : toRemove) {
394 }
catch (HashDbManager.HashDbManagerException ex) {
395 JOptionPane.showMessageDialog(
this, Bundle.HashLookupSettingsPanel_removeDatabaseFailure_message(hashDb.getHashSetName()));
398 hashSetTableModel.refreshModel();
412 for (
HashDb hdb : unindexed) {
413 total +=
"\n" + hdb.getHashSetName();
416 message = NbBundle.getMessage(this.getClass(),
"HashDbConfigPanel.dbsNotIndexedMsg", total);
418 message = NbBundle.getMessage(this.getClass(),
"HashDbConfigPanel.dbNotIndexedMsg", total);
420 int res = JOptionPane.showConfirmDialog(
this, message,
421 NbBundle.getMessage(
this.getClass(),
422 "HashDbConfigPanel.unindexedDbsMsg"),
423 JOptionPane.YES_NO_OPTION);
424 if (res == JOptionPane.YES_OPTION) {
425 ModalNoButtons indexingDialog =
new ModalNoButtons(
this,
new Frame(), unindexed);
426 indexingDialog.setLocationRelativeTo(null);
427 indexingDialog.setVisible(
true);
428 indexingDialog.setModal(
true);
429 hashSetTableModel.refreshModel();
431 if (res == JOptionPane.NO_OPTION) {
432 JOptionPane.showMessageDialog(
this, NbBundle.getMessage(
this.getClass(),
433 "HashDbConfigPanel.allUnindexedDbsRmFromListMsg"));
434 removeThese(unindexed);
437 hashSetManager.save();
439 JOptionPane.showMessageDialog(
this, Bundle.HashLookupSettingsPanel_saveFail_message(), Bundle.HashLookupSettingsPanel_saveFail_title(), JOptionPane.ERROR_MESSAGE);
455 JComponent cellRenderer = (JComponent) super.prepareRenderer(renderer, row, column);
456 cellRenderer.setToolTipText((String) getValueAt(row, column));
461 if (hashSetTableModel.
isValid(row)) {
462 cellRenderer.setForeground(Color.black);
464 cellRenderer.setForeground(Color.red);
471 return hashSetTableModel.getHashSetAt(getSelectionModel().getMinSelectionIndex());
475 if (index >= 0 && index < hashSetTable.getRowCount()) {
476 getSelectionModel().setSelectionInterval(index, index);
481 setSelection(hashSetTableModel.getIndexByDatabase(db));
486 setSelection(hashSetTableModel.getIndexByName(name));
505 return hashSets.size();
510 return NbBundle.getMessage(this.getClass(),
"HashDbConfigPanel.nameColLbl");
515 return hashSets.get(rowIndex).getDisplayName();
520 return hashSets.get(rowIndex).isValid();
521 }
catch (TskCoreException ex) {
533 public void setValueAt(Object aValue,
int rowIndex,
int columnIndex) {
534 throw new UnsupportedOperationException(
535 NbBundle.getMessage(
this.getClass(),
"HashDbConfigPanel.editingCellsNotSupportedMsg"));
540 return getValueAt(0, c).getClass();
543 HashDb getHashSetAt(
int index) {
544 if (!hashSets.isEmpty() && index >= 0 && index < hashSets.size()) {
545 return hashSets.get(index);
551 int getIndexByDatabase(HashDb db) {
552 for (
int i = 0; i < hashSets.size(); ++i) {
553 if (hashSets.get(i).equals(db)) {
561 int getIndexByName(String name) {
562 for (
int i = 0; i < hashSets.size(); ++i) {
563 if (hashSets.get(i).getHashSetName().equals(name)) {
570 void refreshModel() {
571 hashSets = HashDbManager.getInstance().getAllHashSets();
575 void refreshDisplay() {
576 fireTableDataChanged();
588 jLabel2 =
new javax.swing.JLabel();
589 jLabel4 =
new javax.swing.JLabel();
590 jLabel6 =
new javax.swing.JLabel();
591 jButton3 =
new javax.swing.JButton();
592 jScrollPane2 =
new javax.swing.JScrollPane();
593 jPanel1 =
new javax.swing.JPanel();
594 ingestWarningLabel =
new javax.swing.JLabel();
595 jScrollPane1 =
new javax.swing.JScrollPane();
597 deleteDatabaseButton =
new javax.swing.JButton();
598 importDatabaseButton =
new javax.swing.JButton();
599 hashDatabasesLabel =
new javax.swing.JLabel();
600 nameLabel =
new javax.swing.JLabel();
601 hashDbNameLabel =
new javax.swing.JLabel();
602 hashDbLocationLabel =
new javax.swing.JLabel();
603 locationLabel =
new javax.swing.JLabel();
604 typeLabel =
new javax.swing.JLabel();
605 hashDbTypeLabel =
new javax.swing.JLabel();
606 hashDbIndexStatusLabel =
new javax.swing.JLabel();
607 indexLabel =
new javax.swing.JLabel();
608 indexButton =
new javax.swing.JButton();
609 sendIngestMessagesCheckBox =
new javax.swing.JCheckBox();
610 informationLabel =
new javax.swing.JLabel();
611 optionsLabel =
new javax.swing.JLabel();
612 informationSeparator =
new javax.swing.JSeparator();
613 optionsSeparator =
new javax.swing.JSeparator();
614 createDatabaseButton =
new javax.swing.JButton();
615 indexPathLabelLabel =
new javax.swing.JLabel();
616 indexPathLabel =
new javax.swing.JLabel();
617 addHashesToDatabaseButton =
new javax.swing.JButton();
618 versionLabel =
new javax.swing.JLabel();
619 hashDbVersionLabel =
new javax.swing.JLabel();
620 orgLabel =
new javax.swing.JLabel();
621 hashDbOrgLabel =
new javax.swing.JLabel();
622 readOnlyLabel =
new javax.swing.JLabel();
623 hashDbReadOnlyLabel =
new javax.swing.JLabel();
625 jLabel2.setFont(jLabel2.getFont().deriveFont(jLabel2.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
626 org.openide.awt.Mnemonics.setLocalizedText(jLabel2,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.jLabel2.text"));
628 jLabel4.setFont(jLabel4.getFont().deriveFont(jLabel4.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
629 org.openide.awt.Mnemonics.setLocalizedText(jLabel4,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.jLabel4.text"));
631 jLabel6.setFont(jLabel6.getFont().deriveFont(jLabel6.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
632 org.openide.awt.Mnemonics.setLocalizedText(jLabel6,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.jLabel6.text"));
634 jButton3.setFont(jButton3.getFont().deriveFont(jButton3.getFont().getStyle() & ~java.awt.Font.BOLD, 14));
635 org.openide.awt.Mnemonics.setLocalizedText(jButton3,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.jButton3.text"));
637 ingestWarningLabel.setFont(ingestWarningLabel.getFont().deriveFont(ingestWarningLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
638 ingestWarningLabel.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/modules/hashdatabase/warning16.png")));
639 org.openide.awt.Mnemonics.setLocalizedText(ingestWarningLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.ingestWarningLabel.text"));
641 hashSetTable.setFont(hashSetTable.getFont().deriveFont(hashSetTable.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
642 hashSetTable.setModel(
new javax.swing.table.DefaultTableModel(
650 hashSetTable.setShowHorizontalLines(
false);
651 hashSetTable.setShowVerticalLines(
false);
652 hashSetTable.addKeyListener(
new java.awt.event.KeyAdapter() {
653 public void keyPressed(java.awt.event.KeyEvent evt) {
654 hashSetTableKeyPressed(evt);
657 jScrollPane1.setViewportView(hashSetTable);
659 deleteDatabaseButton.setFont(deleteDatabaseButton.getFont().deriveFont(deleteDatabaseButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
660 deleteDatabaseButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/modules/hashdatabase/delete16.png")));
661 org.openide.awt.Mnemonics.setLocalizedText(deleteDatabaseButton,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.deleteDatabaseButton.text"));
662 deleteDatabaseButton.setMaximumSize(
new java.awt.Dimension(140, 25));
663 deleteDatabaseButton.setMinimumSize(
new java.awt.Dimension(140, 25));
664 deleteDatabaseButton.addActionListener(
new java.awt.event.ActionListener() {
665 public void actionPerformed(java.awt.event.ActionEvent evt) {
666 deleteDatabaseButtonActionPerformed(evt);
670 importDatabaseButton.setFont(importDatabaseButton.getFont().deriveFont(importDatabaseButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
671 importDatabaseButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/modules/hashdatabase/import16.png")));
672 org.openide.awt.Mnemonics.setLocalizedText(importDatabaseButton,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.importDatabaseButton.text"));
673 importDatabaseButton.setToolTipText(
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.importDatabaseButton.toolTipText"));
674 importDatabaseButton.setMaximumSize(
new java.awt.Dimension(140, 25));
675 importDatabaseButton.setMinimumSize(
new java.awt.Dimension(140, 25));
676 importDatabaseButton.addActionListener(
new java.awt.event.ActionListener() {
677 public void actionPerformed(java.awt.event.ActionEvent evt) {
678 importDatabaseButtonActionPerformed(evt);
682 hashDatabasesLabel.setFont(hashDatabasesLabel.getFont().deriveFont(hashDatabasesLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
683 org.openide.awt.Mnemonics.setLocalizedText(hashDatabasesLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.hashDatabasesLabel.text"));
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 hashDbLocationLabel.setFont(hashDbLocationLabel.getFont().deriveFont(hashDbLocationLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
692 org.openide.awt.Mnemonics.setLocalizedText(hashDbLocationLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.hashDbLocationLabel.text"));
694 locationLabel.setFont(locationLabel.getFont().deriveFont(locationLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
695 org.openide.awt.Mnemonics.setLocalizedText(locationLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.locationLabel.text"));
697 typeLabel.setFont(typeLabel.getFont().deriveFont(typeLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
698 org.openide.awt.Mnemonics.setLocalizedText(typeLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.typeLabel.text"));
700 hashDbTypeLabel.setFont(hashDbTypeLabel.getFont().deriveFont(hashDbTypeLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
701 org.openide.awt.Mnemonics.setLocalizedText(hashDbTypeLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.hashDbTypeLabel.text"));
703 hashDbIndexStatusLabel.setFont(hashDbIndexStatusLabel.getFont().deriveFont(hashDbIndexStatusLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
704 org.openide.awt.Mnemonics.setLocalizedText(hashDbIndexStatusLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.hashDbIndexStatusLabel.text"));
706 indexLabel.setFont(indexLabel.getFont().deriveFont(indexLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
707 org.openide.awt.Mnemonics.setLocalizedText(indexLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.indexLabel.text"));
709 indexButton.setFont(indexButton.getFont().deriveFont(indexButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
710 org.openide.awt.Mnemonics.setLocalizedText(indexButton,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.indexButton.text"));
711 indexButton.setEnabled(
false);
712 indexButton.addActionListener(
new java.awt.event.ActionListener() {
713 public void actionPerformed(java.awt.event.ActionEvent evt) {
714 indexButtonActionPerformed(evt);
718 sendIngestMessagesCheckBox.setFont(sendIngestMessagesCheckBox.getFont().deriveFont(sendIngestMessagesCheckBox.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
719 org.openide.awt.Mnemonics.setLocalizedText(sendIngestMessagesCheckBox,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.sendIngestMessagesCheckBox.text"));
720 sendIngestMessagesCheckBox.addActionListener(
new java.awt.event.ActionListener() {
721 public void actionPerformed(java.awt.event.ActionEvent evt) {
722 sendIngestMessagesCheckBoxActionPerformed(evt);
726 informationLabel.setFont(informationLabel.getFont().deriveFont(informationLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
727 org.openide.awt.Mnemonics.setLocalizedText(informationLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.informationLabel.text"));
729 optionsLabel.setFont(optionsLabel.getFont().deriveFont(optionsLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
730 org.openide.awt.Mnemonics.setLocalizedText(optionsLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.optionsLabel.text"));
732 createDatabaseButton.setFont(createDatabaseButton.getFont().deriveFont(createDatabaseButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
733 createDatabaseButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/modules/hashdatabase/new16.png")));
734 org.openide.awt.Mnemonics.setLocalizedText(createDatabaseButton,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.createDatabaseButton.text"));
735 createDatabaseButton.setToolTipText(
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.createDatabaseButton.toolTipText"));
736 createDatabaseButton.setMaximumSize(
new java.awt.Dimension(140, 25));
737 createDatabaseButton.setMinimumSize(
new java.awt.Dimension(140, 25));
738 createDatabaseButton.addActionListener(
new java.awt.event.ActionListener() {
739 public void actionPerformed(java.awt.event.ActionEvent evt) {
740 createDatabaseButtonActionPerformed(evt);
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 addHashesToDatabaseButton.setFont(addHashesToDatabaseButton.getFont().deriveFont(addHashesToDatabaseButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
751 org.openide.awt.Mnemonics.setLocalizedText(addHashesToDatabaseButton,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.addHashesToDatabaseButton.text"));
752 addHashesToDatabaseButton.setEnabled(
false);
753 addHashesToDatabaseButton.addActionListener(
new java.awt.event.ActionListener() {
754 public void actionPerformed(java.awt.event.ActionEvent evt) {
755 addHashesToDatabaseButtonActionPerformed(evt);
759 org.openide.awt.Mnemonics.setLocalizedText(versionLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.versionLabel.text_1"));
761 org.openide.awt.Mnemonics.setLocalizedText(hashDbVersionLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.hashDbVersionLabel.text_1"));
763 org.openide.awt.Mnemonics.setLocalizedText(orgLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.orgLabel.text_1"));
765 org.openide.awt.Mnemonics.setLocalizedText(hashDbOrgLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.hashDbOrgLabel.text_1"));
767 org.openide.awt.Mnemonics.setLocalizedText(readOnlyLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.readOnlyLabel.text_1"));
769 org.openide.awt.Mnemonics.setLocalizedText(hashDbReadOnlyLabel,
org.openide.util.NbBundle.getMessage(
HashLookupSettingsPanel.class,
"HashLookupSettingsPanel.hashDbReadOnlyLabel.text_1"));
771 javax.swing.GroupLayout jPanel1Layout =
new javax.swing.GroupLayout(jPanel1);
772 jPanel1.setLayout(jPanel1Layout);
773 jPanel1Layout.setHorizontalGroup(
774 jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
775 .addGroup(jPanel1Layout.createSequentialGroup()
777 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
778 .addGroup(jPanel1Layout.createSequentialGroup()
780 .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
781 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
782 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
783 .addGroup(jPanel1Layout.createSequentialGroup()
784 .addComponent(informationLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
785 .addGap(309, 309, 309))
786 .addGroup(jPanel1Layout.createSequentialGroup()
787 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
788 .addGroup(jPanel1Layout.createSequentialGroup()
790 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
791 .addGroup(jPanel1Layout.createSequentialGroup()
792 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
793 .addComponent(indexLabel)
794 .addComponent(indexPathLabelLabel))
796 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
797 .addComponent(hashDbIndexStatusLabel)
798 .addComponent(indexPathLabel)))
799 .addGroup(jPanel1Layout.createSequentialGroup()
800 .addComponent(indexButton)
802 .addComponent(addHashesToDatabaseButton))
803 .addGroup(jPanel1Layout.createSequentialGroup()
804 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
805 .addComponent(locationLabel)
806 .addComponent(typeLabel)
807 .addComponent(versionLabel)
808 .addComponent(orgLabel)
809 .addComponent(readOnlyLabel)
810 .addComponent(nameLabel))
812 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
813 .addComponent(hashDbNameLabel)
814 .addComponent(hashDbTypeLabel)
815 .addComponent(hashDbLocationLabel)
816 .addComponent(hashDbVersionLabel)
817 .addComponent(hashDbOrgLabel)
818 .addComponent(hashDbReadOnlyLabel)))))
819 .addGroup(jPanel1Layout.createSequentialGroup()
821 .addComponent(informationSeparator, javax.swing.GroupLayout.PREFERRED_SIZE, 305, javax.swing.GroupLayout.PREFERRED_SIZE))
822 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
823 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
824 .addComponent(optionsLabel)
825 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
826 .addComponent(optionsSeparator, javax.swing.GroupLayout.PREFERRED_SIZE, 334, javax.swing.GroupLayout.PREFERRED_SIZE))
827 .addGroup(jPanel1Layout.createSequentialGroup()
829 .addComponent(sendIngestMessagesCheckBox))
830 .addGroup(jPanel1Layout.createSequentialGroup()
832 .addComponent(ingestWarningLabel))))
833 .addContainerGap(24, Short.MAX_VALUE))))
834 .addGroup(jPanel1Layout.createSequentialGroup()
835 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
836 .addComponent(hashDatabasesLabel)
837 .addGroup(jPanel1Layout.createSequentialGroup()
838 .addComponent(createDatabaseButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
839 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
840 .addComponent(importDatabaseButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
841 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
842 .addComponent(deleteDatabaseButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
843 .addGap(0, 0, Short.MAX_VALUE))))
846 jPanel1Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL,
new java.awt.Component[] {indexLabel, indexPathLabelLabel, locationLabel, nameLabel, orgLabel, readOnlyLabel, typeLabel, versionLabel});
848 jPanel1Layout.setVerticalGroup(
849 jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
850 .addGroup(jPanel1Layout.createSequentialGroup()
852 .addComponent(hashDatabasesLabel)
854 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
855 .addGroup(jPanel1Layout.createSequentialGroup()
856 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
857 .addComponent(informationLabel)
858 .addGroup(jPanel1Layout.createSequentialGroup()
860 .addComponent(informationSeparator, javax.swing.GroupLayout.PREFERRED_SIZE, 3, javax.swing.GroupLayout.PREFERRED_SIZE)))
862 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
863 .addComponent(nameLabel)
864 .addComponent(hashDbNameLabel))
865 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
866 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
867 .addComponent(typeLabel)
868 .addComponent(hashDbTypeLabel))
869 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
870 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
871 .addComponent(locationLabel)
872 .addComponent(hashDbLocationLabel))
873 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
874 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
875 .addComponent(versionLabel)
876 .addComponent(hashDbVersionLabel))
877 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
878 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
879 .addComponent(orgLabel)
880 .addComponent(hashDbOrgLabel))
882 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
883 .addComponent(readOnlyLabel)
884 .addComponent(hashDbReadOnlyLabel))
885 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
886 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
887 .addComponent(indexPathLabelLabel)
888 .addComponent(indexPathLabel))
889 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
890 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
891 .addComponent(indexLabel)
892 .addComponent(hashDbIndexStatusLabel))
893 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
894 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
895 .addComponent(indexButton)
896 .addComponent(addHashesToDatabaseButton))
897 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
898 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
899 .addComponent(optionsLabel)
900 .addComponent(optionsSeparator, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
902 .addComponent(sendIngestMessagesCheckBox)
904 .addComponent(ingestWarningLabel)
905 .addGap(0, 0, Short.MAX_VALUE))
906 .addComponent(jScrollPane1))
907 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
908 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
909 .addComponent(createDatabaseButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
910 .addComponent(importDatabaseButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
911 .addComponent(deleteDatabaseButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
915 jScrollPane2.setViewportView(jPanel1);
917 javax.swing.GroupLayout layout =
new javax.swing.GroupLayout(
this);
918 this.setLayout(layout);
919 layout.setHorizontalGroup(
920 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
921 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
922 .addComponent(jScrollPane2)
925 layout.setVerticalGroup(
926 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
927 .addComponent(jScrollPane2)
938 HashDb hashDb =
new HashDbCreateDatabaseDialog().getHashDatabase();
939 if (null != hashDb) {
940 if (hashDb instanceof CentralRepoHashSet) {
941 int newDbIndex = ((CentralRepoHashSet) hashDb).getReferenceSetID();
942 newReferenceSetIDs.add(newDbIndex);
945 hashSetTableModel.refreshModel();
946 ((
HashSetTable) hashSetTable).selectRowByDatabase(hashDb);
947 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
953 if (hashDb != null) {
954 hashDb.setSendIngestMessages(sendIngestMessagesCheckBox.isSelected());
955 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
961 assert hashDatabase != null;
962 assert hashDatabase instanceof SleuthkitHashSet;
966 SleuthkitHashSet hashDb = (SleuthkitHashSet) hashDatabase;
969 public void propertyChange(PropertyChangeEvent evt) {
970 if (evt.getPropertyName().equals(SleuthkitHashSet.Event.INDEXING_DONE.toString())) {
972 if (selectedHashDb != null && hashDb != null && hashDb.equals(selectedHashDb)) {
975 hashSetTableModel.refreshDisplay();
985 ModalNoButtons indexDialog =
new ModalNoButtons(
this,
new Frame(), hashDb);
986 indexDialog.setLocationRelativeTo(null);
987 indexDialog.setVisible(
true);
988 indexDialog.setModal(
true);
992 HashDb hashDb =
new HashDbImportDatabaseDialog().getHashDatabase();
993 if (null != hashDb) {
994 if (hashDb instanceof CentralRepoHashSet) {
995 int newReferenceSetID = ((CentralRepoHashSet) hashDb).getReferenceSetID();
996 newReferenceSetIDs.add(newReferenceSetID);
999 hashSetTableModel.refreshModel();
1000 ((
HashSetTable) hashSetTable).selectRowByDatabase(hashDb);
1001 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
1006 "HashLookupSettingsPanel.promptTitle.deleteHashDb=Delete Hash Database from Configuration",
1007 "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."
1010 if (JOptionPane.showConfirmDialog(
this,
1011 Bundle.HashLookupSettingsPanel_promptMessage_deleteHashDb(),
1012 Bundle.HashLookupSettingsPanel_promptTitle_deleteHashDb(),
1013 JOptionPane.YES_NO_OPTION,
1014 JOptionPane.WARNING_MESSAGE) == JOptionPane.YES_OPTION) {
1016 if (hashDb != null) {
1020 JOptionPane.showMessageDialog(
this, Bundle.HashLookupSettingsPanel_removeDatabaseFailure_message(hashDb.
getHashSetName()));
1022 hashSetTableModel.refreshModel();
1023 firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
1029 if (evt.getKeyCode() == KeyEvent.VK_DELETE) {
1031 if (hashDb != null) {
1035 JOptionPane.showMessageDialog(
this, Bundle.HashLookupSettingsPanel_removeDatabaseFailure_message(hashDb.
getHashSetName()));
1037 hashSetTableModel.refreshModel();
1038 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()
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 optionsLabel
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
static String shortenPath(String path)
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()
abstract String getDatabasePath()
Class<?> getColumnClass(int c)
void setSelection(int index)
boolean isValid(int rowIndex)
javax.swing.JSeparator optionsSeparator
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.JSeparator informationSeparator
javax.swing.JButton importDatabaseButton
javax.swing.JPanel jPanel1
javax.swing.JLabel orgLabel
javax.swing.JCheckBox sendIngestMessagesCheckBox
void addHashesToDatabaseButtonActionPerformed(java.awt.event.ActionEvent evt)