Autopsy  4.0
Graphical digital forensics platform for The Sleuth Kit and other tools.
HashDbImportDatabaseDialog.java
Go to the documentation of this file.
1 /*
2  * Autopsy Forensic Browser
3  *
4  * Copyright 2011 - 2013 Basis Technology Corp.
5  * Contact: carrier <at> sleuthkit <dot> org
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  */
19 package org.sleuthkit.autopsy.modules.hashdatabase;
20 
21 import java.awt.Dimension;
22 import java.awt.Toolkit;
23 import java.io.File;
24 import java.io.IOException;
25 import java.util.logging.Level;
26 
27 import org.openide.util.NbBundle;
29 import javax.swing.JFileChooser;
30 import javax.swing.JOptionPane;
31 import javax.swing.filechooser.FileNameExtensionFilter;
32 import javax.swing.JFrame;
33 import org.sleuthkit.datamodel.TskCoreException;
34 import org.apache.commons.io.FilenameUtils;
39 
45 final class HashDbImportDatabaseDialog extends javax.swing.JDialog {
46 
47  private JFileChooser fileChooser = new JFileChooser();
48  private String selectedFilePath = "";
49  private HashDb selectedHashDb = null;
50  private final static String LAST_FILE_PATH_KEY = "HashDbImport_Path";
51 
57  HashDbImportDatabaseDialog() {
58  super(new JFrame(),
59  NbBundle.getMessage(HashDbImportDatabaseDialog.class, "HashDbImportDatabaseDialog.importHashDbMsg"),
60  true);
61  initFileChooser();
62  initComponents();
63  display();
64  }
65 
71  HashDb getHashDatabase() {
72  return selectedHashDb;
73  }
74 
75  private void initFileChooser() {
76  fileChooser.setDragEnabled(false);
77  fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
78  String[] EXTENSION = new String[]{"txt", "kdb", "idx", "hash", "Hash", "hsh"}; //NON-NLS
79  FileNameExtensionFilter filter = new FileNameExtensionFilter(
80  NbBundle.getMessage(this.getClass(), "HashDbImportDatabaseDialog.fileNameExtFilter.text"), EXTENSION);
81  fileChooser.setFileFilter(filter);
82  fileChooser.setMultiSelectionEnabled(false);
83  }
84 
85  private void display() {
86  Dimension screenDimension = Toolkit.getDefaultToolkit().getScreenSize();
87  setLocation((screenDimension.width - getSize().width) / 2, (screenDimension.height - getSize().height) / 2);
88  setVisible(true);
89  }
90 
91  private static String shortenPath(String path) {
92  String shortenedPath = path;
93  if (shortenedPath.length() > 50) {
94  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));
95  }
96  return shortenedPath;
97  }
98 
104  @SuppressWarnings("unchecked")
105  // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
106  private void initComponents() {
107 
108  buttonGroup1 = new javax.swing.ButtonGroup();
109  okButton = new javax.swing.JButton();
110  cancelButton = new javax.swing.JButton();
111  databasePathTextField = new javax.swing.JTextField();
112  openButton = new javax.swing.JButton();
113  knownRadioButton = new javax.swing.JRadioButton();
114  knownBadRadioButton = new javax.swing.JRadioButton();
115  jLabel1 = new javax.swing.JLabel();
116  hashSetNameTextField = new javax.swing.JTextField();
117  jLabel2 = new javax.swing.JLabel();
118  sendIngestMessagesCheckbox = new javax.swing.JCheckBox();
119  jLabel3 = new javax.swing.JLabel();
120 
121  setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
122 
123  org.openide.awt.Mnemonics.setLocalizedText(okButton, org.openide.util.NbBundle.getMessage(HashDbImportDatabaseDialog.class, "HashDbImportDatabaseDialog.okButton.text")); // NOI18N
124  okButton.addActionListener(new java.awt.event.ActionListener() {
125  public void actionPerformed(java.awt.event.ActionEvent evt) {
126  okButtonActionPerformed(evt);
127  }
128  });
129 
130  org.openide.awt.Mnemonics.setLocalizedText(cancelButton, org.openide.util.NbBundle.getMessage(HashDbImportDatabaseDialog.class, "HashDbImportDatabaseDialog.cancelButton.text")); // NOI18N
131  cancelButton.addActionListener(new java.awt.event.ActionListener() {
132  public void actionPerformed(java.awt.event.ActionEvent evt) {
133  cancelButtonActionPerformed(evt);
134  }
135  });
136 
137  databasePathTextField.setEditable(false);
138  databasePathTextField.setText(org.openide.util.NbBundle.getMessage(HashDbImportDatabaseDialog.class, "HashDbImportDatabaseDialog.databasePathTextField.text")); // NOI18N
139 
140  org.openide.awt.Mnemonics.setLocalizedText(openButton, org.openide.util.NbBundle.getMessage(HashDbImportDatabaseDialog.class, "HashDbImportDatabaseDialog.openButton.text")); // NOI18N
141  openButton.addActionListener(new java.awt.event.ActionListener() {
142  public void actionPerformed(java.awt.event.ActionEvent evt) {
143  openButtonActionPerformed(evt);
144  }
145  });
146 
147  buttonGroup1.add(knownRadioButton);
148  org.openide.awt.Mnemonics.setLocalizedText(knownRadioButton, org.openide.util.NbBundle.getMessage(HashDbImportDatabaseDialog.class, "HashDbImportDatabaseDialog.knownRadioButton.text")); // NOI18N
149  knownRadioButton.addActionListener(new java.awt.event.ActionListener() {
150  public void actionPerformed(java.awt.event.ActionEvent evt) {
151  knownRadioButtonActionPerformed(evt);
152  }
153  });
154 
155  buttonGroup1.add(knownBadRadioButton);
156  knownBadRadioButton.setSelected(true);
157  org.openide.awt.Mnemonics.setLocalizedText(knownBadRadioButton, org.openide.util.NbBundle.getMessage(HashDbImportDatabaseDialog.class, "HashDbImportDatabaseDialog.knownBadRadioButton.text")); // NOI18N
158  knownBadRadioButton.addActionListener(new java.awt.event.ActionListener() {
159  public void actionPerformed(java.awt.event.ActionEvent evt) {
160  knownBadRadioButtonActionPerformed(evt);
161  }
162  });
163 
164  org.openide.awt.Mnemonics.setLocalizedText(jLabel1, org.openide.util.NbBundle.getMessage(HashDbImportDatabaseDialog.class, "HashDbImportDatabaseDialog.jLabel1.text")); // NOI18N
165 
166  hashSetNameTextField.setText(org.openide.util.NbBundle.getMessage(HashDbImportDatabaseDialog.class, "HashDbImportDatabaseDialog.hashSetNameTextField.text")); // NOI18N
167 
168  org.openide.awt.Mnemonics.setLocalizedText(jLabel2, org.openide.util.NbBundle.getMessage(HashDbImportDatabaseDialog.class, "HashDbImportDatabaseDialog.jLabel2.text")); // NOI18N
169 
170  sendIngestMessagesCheckbox.setSelected(true);
171  org.openide.awt.Mnemonics.setLocalizedText(sendIngestMessagesCheckbox, org.openide.util.NbBundle.getMessage(HashDbImportDatabaseDialog.class, "HashDbImportDatabaseDialog.sendIngestMessagesCheckbox.text")); // NOI18N
172  sendIngestMessagesCheckbox.addActionListener(new java.awt.event.ActionListener() {
173  public void actionPerformed(java.awt.event.ActionEvent evt) {
174  sendIngestMessagesCheckboxActionPerformed(evt);
175  }
176  });
177 
178  org.openide.awt.Mnemonics.setLocalizedText(jLabel3, org.openide.util.NbBundle.getMessage(HashDbImportDatabaseDialog.class, "HashDbImportDatabaseDialog.jLabel3.text")); // NOI18N
179 
180  javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
181  getContentPane().setLayout(layout);
182  layout.setHorizontalGroup(
183  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
184  .addGroup(layout.createSequentialGroup()
185  .addContainerGap()
186  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
187  .addGroup(layout.createSequentialGroup()
188  .addGap(0, 0, Short.MAX_VALUE)
189  .addComponent(okButton)
190  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
191  .addComponent(cancelButton))
192  .addGroup(layout.createSequentialGroup()
193  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
194  .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
195  .addComponent(jLabel1)
196  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
197  .addComponent(hashSetNameTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 303, Short.MAX_VALUE))
198  .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
199  .addComponent(jLabel3)
200  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
201  .addComponent(databasePathTextField)))
202  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
203  .addComponent(openButton))
204  .addGroup(layout.createSequentialGroup()
205  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
206  .addComponent(jLabel2)
207  .addGroup(layout.createSequentialGroup()
208  .addGap(19, 19, 19)
209  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
210  .addComponent(knownRadioButton)
211  .addComponent(knownBadRadioButton)))
212  .addComponent(sendIngestMessagesCheckbox))
213  .addGap(0, 0, Short.MAX_VALUE)))
214  .addContainerGap())
215  );
216 
217  layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {cancelButton, okButton});
218 
219  layout.setVerticalGroup(
220  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
221  .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
222  .addContainerGap()
223  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
224  .addComponent(openButton)
225  .addComponent(databasePathTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
226  .addComponent(jLabel3))
227  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
228  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
229  .addComponent(jLabel1)
230  .addComponent(hashSetNameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
231  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
232  .addGroup(layout.createSequentialGroup()
233  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 119, Short.MAX_VALUE)
234  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
235  .addComponent(okButton)
236  .addComponent(cancelButton))
237  .addContainerGap())
238  .addGroup(layout.createSequentialGroup()
239  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
240  .addComponent(jLabel2)
241  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
242  .addComponent(knownRadioButton)
243  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
244  .addComponent(knownBadRadioButton)
245  .addGap(18, 18, 18)
246  .addComponent(sendIngestMessagesCheckbox)
247  .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
248  );
249 
250  pack();
251  }// </editor-fold>//GEN-END:initComponents
252 
253  private void openButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_openButtonActionPerformed
254  if (ModuleSettings.settingExists(ModuleSettings.MAIN_SETTINGS, LAST_FILE_PATH_KEY)) {
255  fileChooser.setCurrentDirectory(new File(ModuleSettings.getConfigSetting(ModuleSettings.MAIN_SETTINGS, LAST_FILE_PATH_KEY)));
256  }
257  if (fileChooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
258  File databaseFile = fileChooser.getSelectedFile();
259  try {
260  selectedFilePath = databaseFile.getCanonicalPath();
261  databasePathTextField.setText(shortenPath(selectedFilePath));
262  hashSetNameTextField.setText(FilenameUtils.removeExtension(databaseFile.getName()));
263  if (hashSetNameTextField.getText().toLowerCase().contains("nsrl")) { //NON-NLS
264  knownRadioButton.setSelected(true);
265  knownRadioButtonActionPerformed(null);
266  }
267  ModuleSettings.setConfigSetting(ModuleSettings.MAIN_SETTINGS, LAST_FILE_PATH_KEY, databaseFile.getParent());
268  } catch (IOException ex) {
269  Logger.getLogger(HashDbImportDatabaseDialog.class.getName()).log(Level.SEVERE, "Failed to get path of selected database", ex); //NON-NLS
270  JOptionPane.showMessageDialog(this,
271  NbBundle.getMessage(this.getClass(),
272  "HashDbImportDatabaseDialog.failedToGetDbPathMsg"));
273  }
274  }
275  }//GEN-LAST:event_openButtonActionPerformed
276 
277  private void knownRadioButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_knownRadioButtonActionPerformed
278  sendIngestMessagesCheckbox.setSelected(false);
279  sendIngestMessagesCheckbox.setEnabled(false);
280  }//GEN-LAST:event_knownRadioButtonActionPerformed
281 
282  private void knownBadRadioButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_knownBadRadioButtonActionPerformed
283  sendIngestMessagesCheckbox.setSelected(true);
284  sendIngestMessagesCheckbox.setEnabled(true);
285  }//GEN-LAST:event_knownBadRadioButtonActionPerformed
286 
287  private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelButtonActionPerformed
288  this.dispose();
289  }//GEN-LAST:event_cancelButtonActionPerformed
290 
291  private void okButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_okButtonActionPerformed
292  // Note that the error handlers in this method call return without disposing of the
293  // dialog to allow the user to try again, if desired.
294 
295  if (hashSetNameTextField.getText().isEmpty()) {
296  JOptionPane.showMessageDialog(this,
297  NbBundle.getMessage(this.getClass(),
298  "HashDbCreateDatabaseDialog.mustEnterHashSetNameMsg"),
299  NbBundle.getMessage(this.getClass(),
300  "HashDbImportDatabaseDialog.importHashDbErr"),
301  JOptionPane.ERROR_MESSAGE);
302  return;
303  }
304 
305  if (selectedFilePath.isEmpty()) {
306  JOptionPane.showMessageDialog(this,
307  NbBundle.getMessage(this.getClass(),
308  "HashDbImportDatabaseDialog.mustSelectHashDbFilePathMsg"),
309  NbBundle.getMessage(this.getClass(),
310  "HashDbImportDatabaseDialog.importHashDbErr"),
311  JOptionPane.ERROR_MESSAGE);
312  return;
313  }
314  File file = new File(selectedFilePath);
315  if (!file.exists()) {
316  JOptionPane.showMessageDialog(this,
317  NbBundle.getMessage(this.getClass(),
318  "HashDbImportDatabaseDialog.hashDbDoesNotExistMsg"),
319  NbBundle.getMessage(this.getClass(),
320  "HashDbImportDatabaseDialog.importHashDbErr"),
321  JOptionPane.ERROR_MESSAGE);
322  return;
323  }
324 
325  KnownFilesType type;
326  if (knownRadioButton.isSelected()) {
327  type = KnownFilesType.KNOWN;
328  } else {
329  type = KnownFilesType.KNOWN_BAD;
330  }
331 
332  String errorMessage = NbBundle.getMessage(this.getClass(),
333  "HashDbImportDatabaseDialog.errorMessage.failedToOpenHashDbMsg",
334  selectedFilePath);
335  try {
336  selectedHashDb = HashDbManager.getInstance().addExistingHashDatabaseInternal(hashSetNameTextField.getText(), selectedFilePath, true, sendIngestMessagesCheckbox.isSelected(), type);
337  } catch (HashDbManagerException ex) {
338  Logger.getLogger(HashDbImportDatabaseDialog.class.getName()).log(Level.WARNING, errorMessage, ex);
339  JOptionPane.showMessageDialog(this,
340  ex.getMessage(),
341  NbBundle.getMessage(this.getClass(),
342  "HashDbImportDatabaseDialog.importHashDbErr"),
343  JOptionPane.ERROR_MESSAGE);
344  return;
345  } catch (TskCoreException ex) {
346  Logger.getLogger(HashDbCreateDatabaseDialog.class.getName()).log(Level.SEVERE, errorMessage, ex);
347  JOptionPane.showMessageDialog(this,
348  errorMessage,
349  NbBundle.getMessage(this.getClass(),
350  "HashDbImportDatabaseDialog.importHashDbErr"),
351  JOptionPane.ERROR_MESSAGE);
352  return;
353  }
354 
355  dispose();
356  }//GEN-LAST:event_okButtonActionPerformed
357 
358  private void sendIngestMessagesCheckboxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_sendIngestMessagesCheckboxActionPerformed
359  // TODO add your handling code here:
360  }//GEN-LAST:event_sendIngestMessagesCheckboxActionPerformed
361 
362  // Variables declaration - do not modify//GEN-BEGIN:variables
363  private javax.swing.ButtonGroup buttonGroup1;
364  private javax.swing.JButton cancelButton;
365  private javax.swing.JTextField databasePathTextField;
366  private javax.swing.JTextField hashSetNameTextField;
367  private javax.swing.JLabel jLabel1;
368  private javax.swing.JLabel jLabel2;
369  private javax.swing.JLabel jLabel3;
370  private javax.swing.JRadioButton knownBadRadioButton;
371  private javax.swing.JRadioButton knownRadioButton;
372  private javax.swing.JButton okButton;
373  private javax.swing.JButton openButton;
374  private javax.swing.JCheckBox sendIngestMessagesCheckbox;
375  // End of variables declaration//GEN-END:variables
376 }

Copyright © 2012-2015 Basis Technology. Generated on: Wed Apr 6 2016
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.