diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/AbstractSqlEamDb.java b/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/AbstractSqlEamDb.java index e36aca5c89..a211c49c50 100644 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/AbstractSqlEamDb.java +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/AbstractSqlEamDb.java @@ -34,9 +34,7 @@ import java.util.HashMap; import java.util.Map; import java.util.Set; import org.sleuthkit.autopsy.casemodule.Case; - import org.sleuthkit.autopsy.coreutils.Logger; -import org.sleuthkit.autopsy.modules.hashdatabase.HashDbManager; import org.sleuthkit.datamodel.TskData; /** @@ -1306,15 +1304,11 @@ public abstract class AbstractSqlEamDb implements EamDb { */ @Override public boolean referenceSetIsValid(int centralRepoIndex, String hashSetName, String version) throws EamDbException{ - System.out.println("###\nChecking if " + centralRepoIndex + " : " + hashSetName + " " + version + " is valid"); EamGlobalSet refSet = this.getReferenceSetByID(centralRepoIndex); if(refSet == null){ - System.out.println(" Not valid - no matching index"); return false; } - boolean res = refSet.getSetName().equals(hashSetName) && refSet.getVersion().equals(version); - System.out.println(" res: " + res + " (" + refSet.getSetName() + ", " + refSet.getVersion() + ")"); return(refSet.getSetName().equals(hashSetName) && refSet.getVersion().equals(version)); } diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/ImportCentralRepoDatabaseDialog.form b/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/ImportCentralRepoDatabaseDialog.form deleted file mode 100755 index cb51bb9dd8..0000000000 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/ImportCentralRepoDatabaseDialog.form +++ /dev/null @@ -1,286 +0,0 @@ - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/ImportCentralRepoDatabaseDialog.java b/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/ImportCentralRepoDatabaseDialog.java deleted file mode 100755 index 39def95529..0000000000 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/ImportCentralRepoDatabaseDialog.java +++ /dev/null @@ -1,693 +0,0 @@ -/* - * Central Repository - * - * Copyright 2015-2017 Basis Technology Corp. - * Contact: carrier sleuthkit org - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.sleuthkit.autopsy.centralrepository.optionspanel; - -import java.awt.Dimension; -import java.awt.Toolkit; -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; -import java.io.IOException; -import java.net.UnknownHostException; -import java.nio.file.Files; -import java.time.LocalDate; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import java.util.concurrent.ExecutionException; -import java.util.logging.Level; -import javax.swing.JComboBox; -import javax.swing.JFileChooser; -import javax.swing.JFrame; -import javax.swing.JOptionPane; -import javax.swing.JTextField; -import javax.swing.SwingUtilities; -import javax.swing.SwingWorker; -import javax.swing.event.DocumentEvent; -import javax.swing.event.DocumentListener; -import javax.swing.filechooser.FileNameExtensionFilter; -import org.netbeans.api.progress.ProgressHandle; -import org.netbeans.spi.options.OptionsPanelController; -import org.openide.util.Exceptions; -import org.openide.util.NbBundle; -import org.openide.util.NbBundle.Messages; -import org.openide.windows.WindowManager; -import org.sleuthkit.autopsy.centralrepository.datamodel.CorrelationAttribute; -import org.sleuthkit.autopsy.coreutils.Logger; -import org.sleuthkit.autopsy.coreutils.ModuleSettings; -import org.sleuthkit.autopsy.centralrepository.datamodel.CorrelationAttributeInstance; -import org.sleuthkit.autopsy.centralrepository.datamodel.EamDbException; -import org.sleuthkit.autopsy.centralrepository.datamodel.EamGlobalFileInstance; -import org.sleuthkit.autopsy.centralrepository.datamodel.EamGlobalSet; -import org.sleuthkit.autopsy.centralrepository.datamodel.EamOrganization; -import org.sleuthkit.autopsy.centralrepository.datamodel.EamDb; -import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil; -import org.sleuthkit.autopsy.modules.hashdatabase.HashDbManager; -import org.sleuthkit.datamodel.TskData; - -/** - * Instances of this class allow a user to select an existing hash database and - * add it to the set of hash databases used to classify files as unknown, known, - * or notable. - */ -final public class ImportCentralRepoDatabaseDialog extends javax.swing.JDialog { - private static final Logger LOGGER = Logger.getLogger(ImportCentralRepoDatabaseDialog.class.getName()); - - private final JFileChooser fileChooser = new JFileChooser(); - private final static String LAST_FILE_PATH_KEY = "CentralRepositoryImport_Path"; // NON-NLS - private final int HASH_IMPORT_THRESHOLD = 10000; - private EamOrganization selectedOrg = null; - private List orgs = null; - private final Collection textBoxes; - private final TextBoxChangedListener textBoxChangedListener; - private HashDbManager.HashDatabase selectedHashDb = null; - - - /** - * Displays a dialog that allows a user to select an existing hash database - * and add it to the set of hash databases used to classify files as - * unknown, known, or notable. - */ - @Messages({"ImportHashDatabaseDialog.importHashDbMsg=Import Hash Database"}) - public ImportCentralRepoDatabaseDialog() { - super((JFrame) WindowManager.getDefault().getMainWindow(), - Bundle.ImportHashDatabaseDialog_importHashDbMsg(), - true); // NON-NLS - textBoxes = new ArrayList<>(); - textBoxChangedListener = new TextBoxChangedListener(); - initFileChooser(); - initComponents(); - customizeComponents(); - display(); - } - - @Messages({"ImportHashDatabaseDialog.fileNameExtFilter.text=Hash Database File",}) - private void initFileChooser() { - fileChooser.setDragEnabled(false); - fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); - String[] EXTENSION = new String[]{"idx"}; //NON-NLS - FileNameExtensionFilter filter = new FileNameExtensionFilter( - Bundle.ImportHashDatabaseDialog_fileNameExtFilter_text(), - EXTENSION); // NON-NLS - fileChooser.setFileFilter(filter); - fileChooser.setMultiSelectionEnabled(false); - - if (ModuleSettings.settingExists(ModuleSettings.MAIN_SETTINGS, LAST_FILE_PATH_KEY)) { - String lastBaseDirectory = ModuleSettings.getConfigSetting(ModuleSettings.MAIN_SETTINGS, LAST_FILE_PATH_KEY); - File hashDbFolder = new File(lastBaseDirectory); - if(hashDbFolder.exists()){ - fileChooser.setCurrentDirectory(hashDbFolder); - } - } - } - - private void customizeComponents() { - populateCombobox(); - setTextBoxListeners(); - enableOkButton(false); - } - - public HashDbManager.HashDatabase getHashDatabase(){ - return this.selectedHashDb; - } - - /** - * Register for notifications when the text boxes get updated. - */ - private void setTextBoxListeners() { - textBoxes.add(tfFilePath); - textBoxes.add(tfDatabaseName); - textBoxes.add(tfDatabaseVersion); - addDocumentListeners(textBoxes, textBoxChangedListener); - } - - private void populateCombobox() { - comboboxSourceOrganization.removeAllItems(); - try { - EamDb dbManager = EamDb.getInstance(); - orgs = dbManager.getOrganizations(); - orgs.forEach((org) -> { - comboboxSourceOrganization.addItem(org.getName()); - }); - if (!orgs.isEmpty()) { - selectedOrg = orgs.get(0); - } - valid(); - } catch (EamDbException ex) { - LOGGER.log(Level.SEVERE, "Failure populating combobox with organizations.", ex); - } - } - - /** - * Adds a change listener to a collection of text fields. - * - * @param textFields The text fields. - * @param listener The change listener. - */ - private static void addDocumentListeners(Collection textFields, TextBoxChangedListener listener) { - textFields.forEach((textField) -> { - textField.getDocument().addDocumentListener(listener); - }); - } - - /** - * Tests whether or not values have been entered in all of the required - * text fields. - * - * @return True or false. - */ - private boolean textFieldsArePopulated() { - return !tfDatabaseName.getText().trim().isEmpty() - && !tfDatabaseVersion.getText().trim().isEmpty() - && !tfFilePath.getText().trim().isEmpty(); - } - - /** - * Tests whether or not all of the settings components are populated. - * - * @return True or false. - */ - @Messages({"ImportHashDatabaseDialog.validation.incompleteFields=Fill in all values"}) - private boolean checkFields() { - boolean result = true; - - boolean allPopulated = textFieldsArePopulated(); - - if (!allPopulated) { - // We don't even have everything filled out - result = false; - lbWarningMsg.setText(Bundle.ImportHashDatabaseDialog_validation_incompleteFields()); - } - return result; - } - - /** - * Validates that the form is filled out correctly for our usage. - * - * @return true if it's okay, false otherwise. - */ - @Messages({"ImportHashDatabaseDialog.validation.notEnabled=Central Repository is not enabled."}) - public boolean valid() { - lbWarningMsg.setText(""); - if (!EamDb.isEnabled()) { - lbWarningMsg.setText(Bundle.ImportHashDatabaseDialog_validation_notEnabled()); - return false; - } - - return enableOkButton(checkFields() && null != selectedOrg); - } - - /** - * Enables the "OK" button to create the Global File Set and insert the instances. - * - * @param enable - * - * @return True or False - */ - private boolean enableOkButton(Boolean enable) { - okButton.setEnabled(enable); - return enable; - } - - /** - * Used to listen for changes in text boxes. It lets the panel know things - * have been updated and that validation needs to happen. - */ - private class TextBoxChangedListener implements DocumentListener { - - @Override - public void changedUpdate(DocumentEvent e) { - firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null); - valid(); - } - - @Override - public void insertUpdate(DocumentEvent e) { - firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null); - valid(); - } - - @Override - public void removeUpdate(DocumentEvent e) { - firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null); - valid(); - } - } - - private void display() { - Dimension screenDimension = Toolkit.getDefaultToolkit().getScreenSize(); - setLocation((screenDimension.width - getSize().width) / 2, (screenDimension.height - getSize().height) / 2); - setVisible(true); - } - - /** - * This method is called from within the constructor to initialize the form. - * WARNING: Do NOT modify this code. The content of this method is always - * regenerated by the Form Editor. - */ - @SuppressWarnings("unchecked") - // //GEN-BEGIN:initComponents - private void initComponents() { - - buttonGroup1 = new javax.swing.ButtonGroup(); - okButton = new javax.swing.JButton(); - cancelButton = new javax.swing.JButton(); - tfFilePath = new javax.swing.JTextField(); - openButton = new javax.swing.JButton(); - knownRadioButton = new javax.swing.JRadioButton(); - knownBadRadioButton = new javax.swing.JRadioButton(); - lbDatabaseType = new javax.swing.JLabel(); - lbDatabasePath = new javax.swing.JLabel(); - lbSourceOrganization = new javax.swing.JLabel(); - lbDatabaseName = new javax.swing.JLabel(); - lbDatabaseVersion = new javax.swing.JLabel(); - comboboxSourceOrganization = new javax.swing.JComboBox<>(); - tfDatabaseName = new javax.swing.JTextField(); - tfDatabaseVersion = new javax.swing.JTextField(); - bnNewOrganization = new javax.swing.JButton(); - lbWarningMsg = new javax.swing.JLabel(); - cbInboxMessages = new javax.swing.JCheckBox(); - - setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); - - org.openide.awt.Mnemonics.setLocalizedText(okButton, org.openide.util.NbBundle.getMessage(ImportCentralRepoDatabaseDialog.class, "ImportCentralRepoDatabaseDialog.okButton.text")); // NOI18N - okButton.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - okButtonActionPerformed(evt); - } - }); - - org.openide.awt.Mnemonics.setLocalizedText(cancelButton, org.openide.util.NbBundle.getMessage(ImportCentralRepoDatabaseDialog.class, "ImportCentralRepoDatabaseDialog.cancelButton.text")); // NOI18N - cancelButton.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - cancelButtonActionPerformed(evt); - } - }); - - tfFilePath.setText(org.openide.util.NbBundle.getMessage(ImportCentralRepoDatabaseDialog.class, "ImportCentralRepoDatabaseDialog.tfFilePath.text")); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(openButton, org.openide.util.NbBundle.getMessage(ImportCentralRepoDatabaseDialog.class, "ImportCentralRepoDatabaseDialog.openButton.text")); // NOI18N - openButton.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - openButtonActionPerformed(evt); - } - }); - - buttonGroup1.add(knownRadioButton); - org.openide.awt.Mnemonics.setLocalizedText(knownRadioButton, org.openide.util.NbBundle.getMessage(ImportCentralRepoDatabaseDialog.class, "ImportCentralRepoDatabaseDialog.knownRadioButton.text")); // NOI18N - - buttonGroup1.add(knownBadRadioButton); - knownBadRadioButton.setSelected(true); - org.openide.awt.Mnemonics.setLocalizedText(knownBadRadioButton, org.openide.util.NbBundle.getMessage(ImportCentralRepoDatabaseDialog.class, "ImportCentralRepoDatabaseDialog.knownBadRadioButton.text")); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(lbDatabaseType, org.openide.util.NbBundle.getMessage(ImportCentralRepoDatabaseDialog.class, "ImportCentralRepoDatabaseDialog.lbDatabaseType.text")); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(lbDatabasePath, org.openide.util.NbBundle.getMessage(ImportCentralRepoDatabaseDialog.class, "ImportHashDatabaseDialog.lbFilePath.text")); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(lbSourceOrganization, org.openide.util.NbBundle.getMessage(ImportCentralRepoDatabaseDialog.class, "ImportCentralRepoDatabaseDialog.lbSourceOrganization.text")); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(lbDatabaseName, org.openide.util.NbBundle.getMessage(ImportCentralRepoDatabaseDialog.class, "ImportCentralRepoDatabaseDialog.lbDatabaseName.text")); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(lbDatabaseVersion, org.openide.util.NbBundle.getMessage(ImportCentralRepoDatabaseDialog.class, "ImportCentralRepoDatabaseDialog.lbDatabaseVersion.text")); // NOI18N - - comboboxSourceOrganization.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" })); - comboboxSourceOrganization.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - comboboxSourceOrganizationActionPerformed(evt); - } - }); - - tfDatabaseName.setToolTipText(org.openide.util.NbBundle.getMessage(ImportCentralRepoDatabaseDialog.class, "ImportHashDatabaseDialog.tfDatabaseName.tooltip")); // NOI18N - - tfDatabaseVersion.setToolTipText(org.openide.util.NbBundle.getMessage(ImportCentralRepoDatabaseDialog.class, "ImportHashDatabaseDialog.tfDatabaseVersion.tooltip.text")); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(bnNewOrganization, org.openide.util.NbBundle.getMessage(ImportCentralRepoDatabaseDialog.class, "ImportCentralRepoDatabaseDialog.bnNewOrganization.text")); // NOI18N - bnNewOrganization.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - bnNewOrganizationActionPerformed(evt); - } - }); - - lbWarningMsg.setFont(new java.awt.Font("Tahoma", 1, 12)); // NOI18N - lbWarningMsg.setForeground(new java.awt.Color(255, 0, 0)); - - org.openide.awt.Mnemonics.setLocalizedText(cbInboxMessages, org.openide.util.NbBundle.getMessage(ImportCentralRepoDatabaseDialog.class, "ImportCentralRepoDatabaseDialog.cbInboxMessages.text")); // NOI18N - - javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); - getContentPane().setLayout(layout); - layout.setHorizontalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addGap(0, 0, Short.MAX_VALUE) - .addComponent(okButton) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(cancelButton)) - .addComponent(lbWarningMsg, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addGroup(layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(lbDatabasePath) - .addComponent(lbDatabaseName)) - .addGap(18, 18, 18) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addGap(0, 0, Short.MAX_VALUE) - .addComponent(tfFilePath, javax.swing.GroupLayout.PREFERRED_SIZE, 277, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(openButton)) - .addComponent(tfDatabaseName))) - .addGroup(layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(lbDatabaseType) - .addGroup(layout.createSequentialGroup() - .addGap(19, 19, 19) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(knownRadioButton) - .addComponent(knownBadRadioButton))) - .addGroup(layout.createSequentialGroup() - .addComponent(lbDatabaseVersion) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(tfDatabaseVersion, javax.swing.GroupLayout.PREFERRED_SIZE, 154, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addGroup(layout.createSequentialGroup() - .addComponent(lbSourceOrganization) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(comboboxSourceOrganization, javax.swing.GroupLayout.PREFERRED_SIZE, 98, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(bnNewOrganization)) - .addComponent(cbInboxMessages)) - .addGap(0, 0, Short.MAX_VALUE))) - .addContainerGap()) - ); - - layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {cancelButton, okButton}); - - layout.setVerticalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(openButton) - .addComponent(tfFilePath, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(lbDatabasePath)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(lbDatabaseName, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(tfDatabaseName, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(lbDatabaseVersion, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(tfDatabaseVersion, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(lbSourceOrganization, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(comboboxSourceOrganization, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(bnNewOrganization)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 9, Short.MAX_VALUE) - .addComponent(lbDatabaseType) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(knownRadioButton) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(knownBadRadioButton) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(cbInboxMessages) - .addGap(117, 117, 117) - .addComponent(lbWarningMsg, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(18, 18, 18) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(okButton) - .addComponent(cancelButton)) - .addContainerGap()) - ); - - pack(); - }// //GEN-END:initComponents - - @Messages({"ImportHashDatabaseDialog.failedToGetDbPathMsg=Failed to get the path of the selected database.",}) - private void openButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_openButtonActionPerformed - if (fileChooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) { - File databaseFile = fileChooser.getSelectedFile(); - try { - tfFilePath.setText(databaseFile.getCanonicalPath()); - if (databaseFile.getName().toLowerCase().contains("nsrl")) { //NON-NLS - knownRadioButton.setSelected(true); - } - ModuleSettings.setConfigSetting(ModuleSettings.MAIN_SETTINGS, LAST_FILE_PATH_KEY, databaseFile.getParent()); - } catch (IOException ex) { - Logger.getLogger(ImportCentralRepoDatabaseDialog.class.getName()).log(Level.SEVERE, "Failed to get path of selected database", ex); // NON-NLS - lbWarningMsg.setText(Bundle.ImportHashDatabaseDialog_failedToGetDbPathMsg()); - } - } - valid(); - }//GEN-LAST:event_openButtonActionPerformed - - private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelButtonActionPerformed - dispose(); - }//GEN-LAST:event_cancelButtonActionPerformed - - /** - * Create the new global set and return the ID number - * - * @return ID number of new global set - * @throws EamDbException - */ - private int createGlobalSet() throws EamDbException { - EamDb dbManager = EamDb.getInstance(); - /* - EamGlobalSet eamGlobalSet = new EamGlobalSet( - selectedOrg.getOrgID(), - tfDatabaseName.getText().trim(), - tfDatabaseVersion.getText().trim(), - LocalDate.now()); - return dbManager.newReferencelSet(eamGlobalSet);*/ - return 0; - } - - @Messages({"ImportHashDatabaseDialog.createGlobalSet.failedMsg.text=Failed to store attribution details.", - "ImportHashDatabaseDialog.mustSelectHashDbFilePathMsg=Missing hash database file path.", - "ImportHashDatabaseDialog.hashDbDoesNotExistMsg=The selected hash database does not exist.", - "# {0} - selected file path", - "ImportHashDatabaseDialog.errorMessage.failedToOpenHashDbMsg=Failed to open hash database at {0}.", -}) - private void okButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_okButtonActionPerformed - // Note that the error handlers in this method call return without disposing of the - // dialog to allow the user to try again, if desired. - /*String selectedFilePath = tfFilePath.getText(); - - // have valid file path - if (selectedFilePath.isEmpty()) { - lbWarningMsg.setText(Bundle.ImportHashDatabaseDialog_mustSelectHashDbFilePathMsg()); - return; - } - File file = new File(selectedFilePath); - if (!file.exists()) { - lbWarningMsg.setText(Bundle.ImportHashDatabaseDialog_hashDbDoesNotExistMsg()); - return; - } - - HashDbManager.HashDb.KnownFilesType known; - if (knownRadioButton.isSelected()) { - known = HashDbManager.HashDb.KnownFilesType.KNOWN; - } else{ - known = HashDbManager.HashDb.KnownFilesType.KNOWN_BAD; - } - - try{ - HashDbManager.getInstance().importCentralRepoHashSet(tfDatabaseName.getText().trim(), tfDatabaseVersion.getText().trim(), - selectedOrg.getOrgID(), true, true, - known, selectedFilePath); - } catch (Exception ex){ - - } finally { - dispose(); - }*/ - /* - // create global set - int globalSetID; - try { - globalSetID = createGlobalSet(); - } catch (EamDbException ex) { - LOGGER.log(Level.SEVERE, "Failed to create global set.", ex); - lbWarningMsg.setText(Bundle.ImportHashDatabaseDialog_createGlobalSet_failedMsg_text()); - return; - } - - // insert hashes - TskData.FileKnown knownStatus = TskData.FileKnown.UNKNOWN; - if (knownRadioButton.isSelected()) { - knownStatus = TskData.FileKnown.KNOWN; - } else if (knownBadRadioButton.isSelected()) { - knownStatus = TskData.FileKnown.BAD; - } - - String errorMessage = Bundle.ImportHashDatabaseDialog_errorMessage_failedToOpenHashDbMsg(selectedFilePath); - // Future, make UI handle more than the "FILES" type. - try { - EamDb dbManager = EamDb.getInstance(); - CorrelationAttribute.Type contentType = dbManager.getCorrelationTypeById(CorrelationAttribute.FILES_TYPE_ID); // get "FILES" type - // run in the background and close dialog - SwingUtilities.invokeLater(new ImportHashDatabaseWorker(selectedFilePath, knownStatus, globalSetID, contentType)::execute); - dispose(); - } catch (EamDbException | UnknownHostException ex) { - Logger.getLogger(ImportHashDatabaseDialog.class.getName()).log(Level.SEVERE, errorMessage, ex); - lbWarningMsg.setText(ex.getMessage()); - }*/ - - }//GEN-LAST:event_okButtonActionPerformed - - @SuppressWarnings({"unchecked"}) - private void bnNewOrganizationActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bnNewOrganizationActionPerformed - AddNewOrganizationDialog dialogO = new AddNewOrganizationDialog(); - // update the combobox options - if (dialogO.isChanged()) { - populateCombobox(); - } - }//GEN-LAST:event_bnNewOrganizationActionPerformed - - @SuppressWarnings({"unchecked"}) - private void comboboxSourceOrganizationActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_comboboxSourceOrganizationActionPerformed - JComboBox cb = (JComboBox)evt.getSource(); - String orgName = (String)cb.getSelectedItem(); - if (null == orgName) return; - - for (EamOrganization org : orgs) { - if (org.getName().equals(orgName)) { - selectedOrg = org; - return; - } - } - valid(); - }//GEN-LAST:event_comboboxSourceOrganizationActionPerformed - - @NbBundle.Messages({"ImportHashDatabaseDialog.ImportHashDatabaseWorker.displayName=Importing Hash Database"}) - public class ImportHashDatabaseWorker extends SwingWorker { - - private final File file; - private final TskData.FileKnown knownStatus; - private final int globalSetID; - private final ProgressHandle progress; - private final CorrelationAttribute.Type contentType; - - public ImportHashDatabaseWorker(String filename, TskData.FileKnown knownStatus, int globalSetID, CorrelationAttribute.Type contentType) throws EamDbException, UnknownHostException { - this.file = new File(filename); - this.knownStatus = knownStatus; - this.globalSetID = globalSetID; - this.contentType = contentType; - this.progress = ProgressHandle.createHandle(Bundle.ImportHashDatabaseDialog_ImportHashDatabaseWorker_displayName()); - - if (!EamDb.isEnabled()) { - throw new EamDbException("Central repository database is not enabled."); // NON-NLS - } - } - - @Override - protected Void doInBackground() throws Exception { - importHashDatabase(); - return null; - } - - @Override - @Messages({"ImportHashDatabaseDialog.ImportHashDatabaseWorker.error=Failed to import hash database."}) - protected void done() { - progress.finish(); - try { - get(); - } catch (InterruptedException | ExecutionException ex) { - Logger.getLogger(ImportCentralRepoDatabaseDialog.class.getName()).log(Level.SEVERE, Bundle.ImportHashDatabaseDialog_ImportHashDatabaseWorker_error(), ex); - MessageNotifyUtil.Notify.show(Bundle.ImportHashDatabaseDialog_ImportHashDatabaseWorker_error(), - ex.getMessage(), - MessageNotifyUtil.MessageType.ERROR); - } - } - - private long numberOfLinesInFile(File f) throws IOException { - return Files.lines(f.toPath()).count(); - } - - @Messages({"# {0} - value content", - "ImportHashDatabaseDialog.ImportHashDatabaseWorker.duplicate=Duplicate value {0} found in import file."}) - private void importHashDatabase() throws EamDbException, IOException { - BufferedReader reader = new BufferedReader(new FileReader(file)); - String line; - EamDb dbManager = EamDb.getInstance(); - Set globalInstances = new HashSet<>(); - - long totalLines = numberOfLinesInFile(file); - if (totalLines <= Integer.MAX_VALUE) { - progress.start((int) totalLines); - } else { - progress.start(); - } - - int numLines = 0; - LOGGER.log(Level.INFO, "Importing hash database {0}", file.getName()); - while ((line = reader.readLine()) != null) { - progress.progress(++numLines); - - String[] parts = line.split("\\|"); - - // Header lines start with a 41 character dummy hash, 1 character longer than a SHA-1 hash - if (parts.length != 2 || parts[0].length() == 41) { - continue; - } - - EamGlobalFileInstance eamGlobalFileInstance = new EamGlobalFileInstance( - globalSetID, - parts[0].toLowerCase(), - knownStatus, - ""); - - globalInstances.add(eamGlobalFileInstance); - - if(numLines % HASH_IMPORT_THRESHOLD == 0){ - dbManager.bulkInsertReferenceTypeEntries(globalInstances, contentType); - globalInstances.clear(); - } - } - - dbManager.bulkInsertReferenceTypeEntries(globalInstances, contentType); - LOGGER.log(Level.INFO, "Finished importing hash database. Total entries: {0}", numLines); - - } - } - - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JButton bnNewOrganization; - private javax.swing.ButtonGroup buttonGroup1; - private javax.swing.JButton cancelButton; - private javax.swing.JCheckBox cbInboxMessages; - private javax.swing.JComboBox comboboxSourceOrganization; - private javax.swing.JRadioButton knownBadRadioButton; - private javax.swing.JRadioButton knownRadioButton; - private javax.swing.JLabel lbDatabaseName; - private javax.swing.JLabel lbDatabasePath; - private javax.swing.JLabel lbDatabaseType; - private javax.swing.JLabel lbDatabaseVersion; - private javax.swing.JLabel lbSourceOrganization; - private javax.swing.JLabel lbWarningMsg; - private javax.swing.JButton okButton; - private javax.swing.JButton openButton; - private javax.swing.JTextField tfDatabaseName; - private javax.swing.JTextField tfDatabaseVersion; - private javax.swing.JTextField tfFilePath; - // End of variables declaration//GEN-END:variables -} diff --git a/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/Bundle.properties b/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/Bundle.properties index 082874b385..ff3cf1c7f5 100755 --- a/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/Bundle.properties +++ b/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/Bundle.properties @@ -224,7 +224,6 @@ HashLookupSettingsPanel.nameLabel1.text=Hash Set Name: HashLookupSettingsPanel.sendIngestMessagesCheckBox1.text=Send ingest inbox message for each hit HashLookupSettingsPanel.importDatabaseButton1.toolTipText= HashLookupSettingsPanel.typeLabel1.text=Type: -HashLookupSettingsPanel.jButton1.text=Import CR Hashset ImportCentralRepoDatabaseDialog.cbInboxMessages.text=Send ingest inbox message for each hit ImportCentralRepoDatabaseDialog.cancelButton.text=Cancel ImportCentralRepoDatabaseDialog.lbDatabaseVersion.text=Hash Set Version: diff --git a/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/HashDbManager.java b/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/HashDbManager.java index d75c03f015..83b051aceb 100755 --- a/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/HashDbManager.java +++ b/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/HashDbManager.java @@ -512,10 +512,6 @@ public class HashDbManager implements PropertyChangeListener { void save() throws HashDbManagerException { try { - System.out.println("######\nHashDbManager: Saving Hash Lookup settings"); - for(HashDatabase db: this.hashSets){ - System.out.println(" " + db.getHashSetName() + " " + db.getDatabaseType().name()); - } if (!HashLookupSettings.writeSettings(new HashLookupSettings(HashLookupSettings.convertHashSetList(this.hashSets)))) { throw new HashDbManagerException(NbBundle.getMessage(this.getClass(), "HashDbManager.saveErrorExceptionMsg")); } diff --git a/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/HashLookupSettings.java b/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/HashLookupSettings.java index 25286936a4..8a99f5778a 100755 --- a/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/HashLookupSettings.java +++ b/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/HashLookupSettings.java @@ -125,10 +125,6 @@ final class HashLookupSettings implements Serializable { try { try (NbObjectInputStream in = new NbObjectInputStream(new FileInputStream(SERIALIZATION_FILE_PATH))) { HashLookupSettings filesSetsSettings = (HashLookupSettings) in.readObject(); - System.out.println("#####\nHashLookupSettings"); - for(HashDbInfo dbInfo:filesSetsSettings.hashDbInfoList){ - System.out.println(" " + dbInfo.getHashSetName() + " File type: " + dbInfo.isFileDatabaseType()); - } return filesSetsSettings; } } catch (IOException | ClassNotFoundException ex) { diff --git a/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/HashLookupSettingsPanel.form b/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/HashLookupSettingsPanel.form index a78094dc79..5be552d274 100755 --- a/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/HashLookupSettingsPanel.form +++ b/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/HashLookupSettingsPanel.form @@ -161,10 +161,7 @@ - - - - + @@ -258,8 +255,6 @@ - - @@ -620,16 +615,6 @@ - - - - - - - - - - diff --git a/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/HashLookupSettingsPanel.java b/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/HashLookupSettingsPanel.java index 0f371606bc..2fbe9570d6 100755 --- a/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/HashLookupSettingsPanel.java +++ b/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/HashLookupSettingsPanel.java @@ -595,7 +595,6 @@ public final class HashLookupSettingsPanel extends IngestModuleGlobalSettingsPan indexPathLabelLabel = new javax.swing.JLabel(); indexPathLabel = new javax.swing.JLabel(); addHashesToDatabaseButton = new javax.swing.JButton(); - jButton1 = new javax.swing.JButton(); versionLabel = new javax.swing.JLabel(); hashDbVersionLabel = new javax.swing.JLabel(); orgLabel = new javax.swing.JLabel(); @@ -740,13 +739,6 @@ public final class HashLookupSettingsPanel extends IngestModuleGlobalSettingsPan } }); - org.openide.awt.Mnemonics.setLocalizedText(jButton1, org.openide.util.NbBundle.getMessage(HashLookupSettingsPanel.class, "HashLookupSettingsPanel.jButton1.text")); // NOI18N - jButton1.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - jButton1ActionPerformed(evt); - } - }); - org.openide.awt.Mnemonics.setLocalizedText(versionLabel, org.openide.util.NbBundle.getMessage(HashLookupSettingsPanel.class, "HashLookupSettingsPanel.versionLabel.text_1")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(hashDbVersionLabel, org.openide.util.NbBundle.getMessage(HashLookupSettingsPanel.class, "HashLookupSettingsPanel.hashDbVersionLabel.text_1")); // NOI18N @@ -822,9 +814,7 @@ public final class HashLookupSettingsPanel extends IngestModuleGlobalSettingsPan .addComponent(sendIngestMessagesCheckBox)) .addGroup(jPanel1Layout.createSequentialGroup() .addGap(10, 10, 10) - .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(ingestWarningLabel) - .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 148, javax.swing.GroupLayout.PREFERRED_SIZE))))) + .addComponent(ingestWarningLabel)))) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))) .addGroup(jPanel1Layout.createSequentialGroup() .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) @@ -894,8 +884,6 @@ public final class HashLookupSettingsPanel extends IngestModuleGlobalSettingsPan .addComponent(sendIngestMessagesCheckBox) .addGap(18, 18, 18) .addComponent(ingestWarningLabel) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(jButton1) .addGap(0, 0, Short.MAX_VALUE)) .addComponent(jScrollPane1)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) @@ -1027,20 +1015,6 @@ public final class HashLookupSettingsPanel extends IngestModuleGlobalSettingsPan } }//GEN-LAST:event_hashSetTableKeyPressed - private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed - if(EamDb.isEnabled()){ - HashDatabase hashDb = new ImportCentralRepoDatabaseDialog().getHashDatabase(); - if (null != hashDb) { - hashSetTableModel.refreshModel(); - ((HashSetTable) hashSetTable).selectRowByDatabase(hashDb); - firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null); - } - } else { - // TEMP - JOptionPane.showMessageDialog(null, "Central repo not enabled"); - } - }//GEN-LAST:event_jButton1ActionPerformed - // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton addHashesToDatabaseButton; private javax.swing.JButton createDatabaseButton; @@ -1062,7 +1036,6 @@ public final class HashLookupSettingsPanel extends IngestModuleGlobalSettingsPan private javax.swing.JLabel informationLabel; private javax.swing.JSeparator informationSeparator; private javax.swing.JLabel ingestWarningLabel; - private javax.swing.JButton jButton1; private javax.swing.JButton jButton3; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel4; diff --git a/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/ImportCentralRepoDbProgressDialog.java b/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/ImportCentralRepoDbProgressDialog.java index 4fcf1f5879..1284263b65 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/ImportCentralRepoDbProgressDialog.java +++ b/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/ImportCentralRepoDbProgressDialog.java @@ -24,27 +24,22 @@ import java.beans.PropertyChangeEvent; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; -import java.io.IOException; -import java.nio.file.Files; import java.util.HashSet; import java.util.Set; -import java.util.concurrent.ExecutionException; import java.util.logging.Level; import javax.swing.JFrame; -import javax.swing.JProgressBar; import javax.swing.SwingWorker; import javax.swing.WindowConstants; import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.Executors; +import javax.swing.JOptionPane; import org.openide.util.NbBundle; import org.openide.windows.WindowManager; import org.sleuthkit.autopsy.centralrepository.datamodel.CorrelationAttribute; import org.sleuthkit.autopsy.centralrepository.datamodel.EamDb; import org.sleuthkit.autopsy.centralrepository.datamodel.EamDbException; import org.sleuthkit.autopsy.centralrepository.datamodel.EamGlobalFileInstance; -import org.sleuthkit.autopsy.centralrepository.datamodel.EamOrganization; import org.sleuthkit.autopsy.coreutils.Logger; -import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil; import org.sleuthkit.datamodel.TskCoreException; import org.sleuthkit.datamodel.TskData; @@ -53,8 +48,7 @@ import org.sleuthkit.datamodel.TskData; */ class ImportCentralRepoDbProgressDialog extends javax.swing.JDialog implements PropertyChangeListener{ - private CentralRepoImportWorker worker; - + private CentralRepoImportWorker worker; /** * @@ -108,9 +102,6 @@ class ImportCentralRepoDbProgressDialog extends javax.swing.JDialog implements P @NbBundle.Messages({"ImportCentralRepoDbProgressDialog.linesProcessed= lines processed"}) @Override public void propertyChange(PropertyChangeEvent evt) { - System.out.println("### Evt type: " + evt.getPropertyName()); - System.out.println(" newValue: " + evt.getNewValue().toString()); - System.out.println("### Setting progress to " + worker.getProgressPercentage()); if("progress".equals(evt.getPropertyName())){ progressBar.setValue(worker.getProgressPercentage()); @@ -199,16 +190,6 @@ class ImportCentralRepoDbProgressDialog extends javax.swing.JDialog implements P return this.getProgress(); } - //@Override - //public void addPropertyChangeListener(PropertyChangeListener dialog){ - // super.addPropertyChangeListener(dialog); - //} - - //@Override - //public void run(){ - // this.execute(); - //} - @Override protected Void doInBackground() throws Exception { @@ -218,69 +199,58 @@ class ImportCentralRepoDbProgressDialog extends javax.swing.JDialog implements P } else { knownStatus = TskData.FileKnown.BAD; } - try{ - // Create an empty hashset in the central repository - crIndex = EamDb.getInstance().newReferenceSet(orgId, hashSetName, version, knownStatus, readOnly); - } catch (EamDbException ex){ - throw new TskCoreException(ex.getLocalizedMessage()); - } + + // Create an empty hashset in the central repository + crIndex = EamDb.getInstance().newReferenceSet(orgId, hashSetName, version, knownStatus, readOnly); - try{ - EamDb dbManager = EamDb.getInstance(); - CorrelationAttribute.Type contentType = dbManager.getCorrelationTypeById(CorrelationAttribute.FILES_TYPE_ID); // get "FILES" type - BufferedReader reader = new BufferedReader(new FileReader(importFile)); - String line; - Set globalInstances = new HashSet<>(); + EamDb dbManager = EamDb.getInstance(); + CorrelationAttribute.Type contentType = dbManager.getCorrelationTypeById(CorrelationAttribute.FILES_TYPE_ID); // get "FILES" type + BufferedReader reader = new BufferedReader(new FileReader(importFile)); + String line; + Set globalInstances = new HashSet<>(); - while ((line = reader.readLine()) != null) { - if(isCancelled()){ - return null; - } - - String[] parts = line.split("\\|"); - - // Header lines start with a 41 character dummy hash, 1 character longer than a SHA-1 hash - if (parts.length != 2 || parts[0].length() == 41) { - continue; - } - - EamGlobalFileInstance eamGlobalFileInstance = new EamGlobalFileInstance( - crIndex, - parts[0].toLowerCase(), - knownStatus, - ""); - - globalInstances.add(eamGlobalFileInstance); - numLines.incrementAndGet(); - - if(numLines.get() % HASH_IMPORT_THRESHOLD == 0){ - dbManager.bulkInsertReferenceTypeEntries(globalInstances, contentType); - globalInstances.clear(); - - int progress = (int)(numLines.get() * 100 / totalLines); - if(progress < 100){ - this.setProgress(progress); - } else { - this.setProgress(99); - } - } + while ((line = reader.readLine()) != null) { + if(isCancelled()){ + return null; } - dbManager.bulkInsertReferenceTypeEntries(globalInstances, contentType); - this.setProgress(100); - - return null; - } - catch (Exception ex){ - // TODO - ex.printStackTrace(); - throw new TskCoreException(ex.getLocalizedMessage()); + String[] parts = line.split("\\|"); + + // Header lines start with a 41 character dummy hash, 1 character longer than a SHA-1 hash + if (parts.length != 2 || parts[0].length() == 41) { + continue; + } + + EamGlobalFileInstance eamGlobalFileInstance = new EamGlobalFileInstance( + crIndex, + parts[0].toLowerCase(), + knownStatus, + ""); + + globalInstances.add(eamGlobalFileInstance); + numLines.incrementAndGet(); + + if(numLines.get() % HASH_IMPORT_THRESHOLD == 0){ + dbManager.bulkInsertReferenceTypeEntries(globalInstances, contentType); + globalInstances.clear(); + + int progress = (int)(numLines.get() * 100 / totalLines); + if(progress < 100){ + this.setProgress(progress); + } else { + this.setProgress(99); + } + } } + + dbManager.bulkInsertReferenceTypeEntries(globalInstances, contentType); + this.setProgress(100); + + return null; } private void deleteIncompleteSet(int crIndex){ if(crIndex >= 0){ - System.out.println("Deleting incomplete reference set"); // This can be slow on large reference sets Executors.newSingleThreadExecutor().execute(new Runnable() { @@ -289,13 +259,14 @@ class ImportCentralRepoDbProgressDialog extends javax.swing.JDialog implements P try{ EamDb.getInstance().deleteReferenceSet(crIndex); } catch (EamDbException ex2){ - + Logger.getLogger(ImportCentralRepoDbProgressDialog.class.getName()).log(Level.SEVERE, "Error deleting incomplete hash set from central repository", ex2); } } }); } } + @NbBundle.Messages({"ImportCentralRepoDbProgressDialog.addDbError.message=Error adding new hash set"}) @Override protected void done() { if(isCancelled()){ @@ -307,23 +278,20 @@ class ImportCentralRepoDbProgressDialog extends javax.swing.JDialog implements P try { get(); try{ - System.out.println("### Finished - adding hashDb object"); newHashDb = HashDbManager.getInstance().addExistingCentralRepoHashSet(hashSetName, version, crIndex, searchDuringIngest, sendIngestMessages, knownFilesType, readOnly); } catch (TskCoreException ex){ - System.out.println("\n### Error!"); + JOptionPane.showMessageDialog(null, Bundle.ImportCentralRepoDbProgressDialog_addDbError_message()); + Logger.getLogger(ImportCentralRepoDbProgressDialog.class.getName()).log(Level.SEVERE, "Error adding imported hash set", ex); } - } catch (InterruptedException | ExecutionException ex) { - - System.out.println("\n### Interrupted!"); - + } catch (Exception ex) { // Delete this incomplete hash set from the central repo if(crIndex >= 0){ try{ EamDb.getInstance().deleteReferenceSet(crIndex); } catch (EamDbException ex2){ - + Logger.getLogger(ImportCentralRepoDbProgressDialog.class.getName()).log(Level.SEVERE, "Error deleting incomplete hash set from central repository", ex); } } }