Autopsy  4.4.1
Graphical digital forensics platform for The Sleuth Kit and other tools.
HashDbCreateDatabaseDialog.java
Go to the documentation of this file.
1 /*
2  * Autopsy Forensic Browser
3  *
4  * Copyright 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.nio.file.Paths;
26 import java.util.logging.Level;
27 import javax.swing.JFileChooser;
28 import javax.swing.JFrame;
29 import javax.swing.JOptionPane;
30 import org.apache.commons.io.FilenameUtils;
31 import org.openide.util.NbBundle;
32 import org.openide.windows.WindowManager;
39 
45 final class HashDbCreateDatabaseDialog extends javax.swing.JDialog {
46 
47  private static final String DEFAULT_FILE_NAME = NbBundle
48  .getMessage(HashDbCreateDatabaseDialog.class, "HashDbCreateDatabaseDialog.defaultFileName");
49  private JFileChooser fileChooser = null;
50  private HashDb newHashDb = null;
51  private final static String LAST_FILE_PATH_KEY = "HashDbCreate_Path";
52 
58  HashDbCreateDatabaseDialog() {
59  super((JFrame) WindowManager.getDefault().getMainWindow(), NbBundle.getMessage(HashDbCreateDatabaseDialog.class, "HashDbCreateDatabaseDialog.createHashDbMsg"), true);
60  initFileChooser();
61  initComponents();
62  display();
63  }
64 
70  HashDb getHashDatabase() {
71  return newHashDb;
72  }
73 
74  private void initFileChooser() {
75  fileChooser = new JFileChooser() {
76  @Override
77  public void approveSelection() {
78  File selectedFile = getSelectedFile();
79  if (!FilenameUtils.getExtension(selectedFile.getName()).equalsIgnoreCase(HashDbManager.getHashDatabaseFileExtension())) {
80  if (JOptionPane.showConfirmDialog(this,
81  NbBundle.getMessage(this.getClass(),
82  "HashDbCreateDatabaseDialog.hashDbMustHaveFileExtensionMsg",
83  HashDbManager.getHashDatabaseFileExtension()),
84  NbBundle.getMessage(this.getClass(),
85  "HashDbCreateDatabaseDialog.fileNameErr"),
86  JOptionPane.OK_CANCEL_OPTION) == JOptionPane.CANCEL_OPTION) {
87  cancelSelection();
88  }
89  return;
90  }
91  if (selectedFile.exists()) {
92  if (JOptionPane.showConfirmDialog(this,
93  NbBundle.getMessage(this.getClass(),
94  "HashDbCreateDatabaseDialog.fileNameAlreadyExistsMsg"),
95  NbBundle.getMessage(this.getClass(),
96  "HashDbCreateDatabaseDialog.fileExistsErr"),
97  JOptionPane.OK_CANCEL_OPTION) == JOptionPane.CANCEL_OPTION) {
98  cancelSelection();
99  }
100  return;
101  }
102  super.approveSelection();
103  }
104  };
105  fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
106  fileChooser.setDragEnabled(false);
107  fileChooser.setMultiSelectionEnabled(false);
108  }
109 
110  private void display() {
111  Dimension screenDimension = Toolkit.getDefaultToolkit().getScreenSize();
112  setLocation((screenDimension.width - getSize().width) / 2, (screenDimension.height - getSize().height) / 2);
113  setVisible(true);
114  }
115 
121  @SuppressWarnings("unchecked")
122  // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
123  private void initComponents() {
124 
125  buttonGroup1 = new javax.swing.ButtonGroup();
126  saveAsButton = new javax.swing.JButton();
127  cancelButton = new javax.swing.JButton();
128  knownRadioButton = new javax.swing.JRadioButton();
129  knownBadRadioButton = new javax.swing.JRadioButton();
130  jLabel1 = new javax.swing.JLabel();
131  hashSetNameTextField = new javax.swing.JTextField();
132  jLabel2 = new javax.swing.JLabel();
133  sendIngestMessagesCheckbox = new javax.swing.JCheckBox();
134  jLabel3 = new javax.swing.JLabel();
135  databasePathTextField = new javax.swing.JTextField();
136  okButton = new javax.swing.JButton();
137 
138  setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
139 
140  org.openide.awt.Mnemonics.setLocalizedText(saveAsButton, org.openide.util.NbBundle.getMessage(HashDbCreateDatabaseDialog.class, "HashDbCreateDatabaseDialog.saveAsButton.text")); // NOI18N
141  saveAsButton.addActionListener(new java.awt.event.ActionListener() {
142  public void actionPerformed(java.awt.event.ActionEvent evt) {
143  saveAsButtonActionPerformed(evt);
144  }
145  });
146 
147  org.openide.awt.Mnemonics.setLocalizedText(cancelButton, org.openide.util.NbBundle.getMessage(HashDbCreateDatabaseDialog.class, "HashDbCreateDatabaseDialog.cancelButton.text")); // NOI18N
148  cancelButton.addActionListener(new java.awt.event.ActionListener() {
149  public void actionPerformed(java.awt.event.ActionEvent evt) {
150  cancelButtonActionPerformed(evt);
151  }
152  });
153 
154  buttonGroup1.add(knownRadioButton);
155  org.openide.awt.Mnemonics.setLocalizedText(knownRadioButton, org.openide.util.NbBundle.getMessage(HashDbCreateDatabaseDialog.class, "HashDbCreateDatabaseDialog.knownRadioButton.text")); // NOI18N
156  knownRadioButton.addActionListener(new java.awt.event.ActionListener() {
157  public void actionPerformed(java.awt.event.ActionEvent evt) {
158  knownRadioButtonActionPerformed(evt);
159  }
160  });
161 
162  buttonGroup1.add(knownBadRadioButton);
163  knownBadRadioButton.setSelected(true);
164  org.openide.awt.Mnemonics.setLocalizedText(knownBadRadioButton, org.openide.util.NbBundle.getMessage(HashDbCreateDatabaseDialog.class, "HashDbCreateDatabaseDialog.knownBadRadioButton.text")); // NOI18N
165  knownBadRadioButton.addActionListener(new java.awt.event.ActionListener() {
166  public void actionPerformed(java.awt.event.ActionEvent evt) {
167  knownBadRadioButtonActionPerformed(evt);
168  }
169  });
170 
171  org.openide.awt.Mnemonics.setLocalizedText(jLabel1, org.openide.util.NbBundle.getMessage(HashDbCreateDatabaseDialog.class, "HashDbCreateDatabaseDialog.jLabel1.text")); // NOI18N
172 
173  hashSetNameTextField.setText(org.openide.util.NbBundle.getMessage(HashDbCreateDatabaseDialog.class, "HashDbCreateDatabaseDialog.hashSetNameTextField.text")); // NOI18N
174 
175  org.openide.awt.Mnemonics.setLocalizedText(jLabel2, org.openide.util.NbBundle.getMessage(HashDbCreateDatabaseDialog.class, "HashDbCreateDatabaseDialog.jLabel2.text")); // NOI18N
176 
177  sendIngestMessagesCheckbox.setSelected(true);
178  org.openide.awt.Mnemonics.setLocalizedText(sendIngestMessagesCheckbox, org.openide.util.NbBundle.getMessage(HashDbCreateDatabaseDialog.class, "HashDbCreateDatabaseDialog.sendIngestMessagesCheckbox.text")); // NOI18N
179  sendIngestMessagesCheckbox.addActionListener(new java.awt.event.ActionListener() {
180  public void actionPerformed(java.awt.event.ActionEvent evt) {
181  sendIngestMessagesCheckboxActionPerformed(evt);
182  }
183  });
184 
185  org.openide.awt.Mnemonics.setLocalizedText(jLabel3, org.openide.util.NbBundle.getMessage(HashDbCreateDatabaseDialog.class, "HashDbCreateDatabaseDialog.jLabel3.text")); // NOI18N
186 
187  databasePathTextField.setEditable(false);
188  databasePathTextField.setText(org.openide.util.NbBundle.getMessage(HashDbCreateDatabaseDialog.class, "HashDbCreateDatabaseDialog.databasePathTextField.text")); // NOI18N
189 
190  org.openide.awt.Mnemonics.setLocalizedText(okButton, org.openide.util.NbBundle.getMessage(HashDbCreateDatabaseDialog.class, "HashDbCreateDatabaseDialog.okButton.text")); // NOI18N
191  okButton.addActionListener(new java.awt.event.ActionListener() {
192  public void actionPerformed(java.awt.event.ActionEvent evt) {
193  okButtonActionPerformed(evt);
194  }
195  });
196 
197  javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
198  getContentPane().setLayout(layout);
199  layout.setHorizontalGroup(
200  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
201  .addGroup(layout.createSequentialGroup()
202  .addContainerGap()
203  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
204  .addComponent(sendIngestMessagesCheckbox)
205  .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
206  .addGap(0, 0, Short.MAX_VALUE)
207  .addComponent(okButton)
208  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
209  .addComponent(cancelButton))
210  .addComponent(jLabel2)
211  .addGroup(layout.createSequentialGroup()
212  .addGap(20, 20, 20)
213  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
214  .addComponent(knownRadioButton)
215  .addComponent(knownBadRadioButton)))
216  .addGroup(layout.createSequentialGroup()
217  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
218  .addGroup(layout.createSequentialGroup()
219  .addComponent(jLabel1)
220  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
221  .addComponent(databasePathTextField))
222  .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
223  .addComponent(jLabel3)
224  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
225  .addComponent(hashSetNameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 272, javax.swing.GroupLayout.PREFERRED_SIZE)))
226  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
227  .addComponent(saveAsButton)))
228  .addContainerGap())
229  );
230 
231  layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {cancelButton, okButton});
232 
233  layout.setVerticalGroup(
234  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
235  .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
236  .addGap(2, 2, 2)
237  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
238  .addComponent(jLabel3)
239  .addComponent(hashSetNameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
240  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
241  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
242  .addComponent(databasePathTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
243  .addComponent(saveAsButton)
244  .addComponent(jLabel1))
245  .addGap(7, 7, 7)
246  .addComponent(jLabel2)
247  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
248  .addComponent(knownRadioButton)
249  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
250  .addComponent(knownBadRadioButton)
251  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
252  .addComponent(sendIngestMessagesCheckbox)
253  .addGap(26, 26, 26)
254  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
255  .addComponent(cancelButton)
256  .addComponent(okButton))
257  .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
258  );
259 
260  pack();
261  }// </editor-fold>//GEN-END:initComponents
262 
263  private void knownRadioButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_knownRadioButtonActionPerformed
264  sendIngestMessagesCheckbox.setSelected(false);
265  sendIngestMessagesCheckbox.setEnabled(false);
266  }//GEN-LAST:event_knownRadioButtonActionPerformed
267 
268  private void knownBadRadioButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_knownBadRadioButtonActionPerformed
269  sendIngestMessagesCheckbox.setSelected(true);
270  sendIngestMessagesCheckbox.setEnabled(true);
271  }//GEN-LAST:event_knownBadRadioButtonActionPerformed
272 
273  private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelButtonActionPerformed
274  dispose();
275  }//GEN-LAST:event_cancelButtonActionPerformed
276 
277  private void saveAsButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_saveAsButtonActionPerformed
278  try {
279  String lastBaseDirectory = Paths.get(PlatformUtil.getUserConfigDirectory(), "HashDatabases").toString();
280  if (ModuleSettings.settingExists(ModuleSettings.MAIN_SETTINGS, LAST_FILE_PATH_KEY)) {
281  lastBaseDirectory = ModuleSettings.getConfigSetting(ModuleSettings.MAIN_SETTINGS, LAST_FILE_PATH_KEY);
282  }
283  StringBuilder path = new StringBuilder();
284  path.append(lastBaseDirectory);
285  File hashDbFolder = new File(path.toString());
286  // create the folder if it doesn't exist
287  if (!hashDbFolder.exists()){
288  hashDbFolder.mkdir();
289  }
290  if (!hashSetNameTextField.getText().isEmpty()) {
291  path.append(File.separator).append(hashSetNameTextField.getText());
292  } else {
293  path.append(File.separator).append(DEFAULT_FILE_NAME);
294  }
295  path.append(".").append(HashDbManager.getHashDatabaseFileExtension());
296  fileChooser.setSelectedFile(new File(path.toString()));
297  if (fileChooser.showSaveDialog(this) == JFileChooser.APPROVE_OPTION) {
298  File databaseFile = fileChooser.getSelectedFile();
299  databasePathTextField.setText(databaseFile.getCanonicalPath());
300  ModuleSettings.setConfigSetting(ModuleSettings.MAIN_SETTINGS, LAST_FILE_PATH_KEY, databaseFile.getParent());
301  }
302  } catch (IOException ex) {
303  Logger.getLogger(HashDbCreateDatabaseDialog.class.getName()).log(Level.WARNING, "Couldn't get selected file path.", ex); //NON-NLS
304  }
305  }//GEN-LAST:event_saveAsButtonActionPerformed
306 
307  private void okButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_okButtonActionPerformed
308  // Note that the error handlers in this method call return without disposing of the
309  // dialog to allow the user to try again, if desired.
310 
311  if (hashSetNameTextField.getText().isEmpty()) {
312  JOptionPane.showMessageDialog(this,
313  NbBundle.getMessage(this.getClass(),
314  "HashDbCreateDatabaseDialog.mustEnterHashSetNameMsg"),
315  NbBundle.getMessage(this.getClass(),
316  "HashDbCreateDatabaseDialog.createHashDbErr"),
317  JOptionPane.ERROR_MESSAGE);
318  return;
319  }
320 
321  if (databasePathTextField.getText().isEmpty()) {
322  JOptionPane.showMessageDialog(this,
323  NbBundle.getMessage(this.getClass(),
324  "HashDbCreateDatabaseDialog.mustEnterHashDbPathMsg"),
325  NbBundle.getMessage(this.getClass(),
326  "HashDbCreateDatabaseDialog.createHashDbErr"),
327  JOptionPane.ERROR_MESSAGE);
328  return;
329  }
330 
331  KnownFilesType type;
332  if (knownRadioButton.isSelected()) {
333  type = KnownFilesType.KNOWN;
334  } else {
335  type = KnownFilesType.KNOWN_BAD;
336  }
337 
338  String errorMessage = NbBundle
339  .getMessage(this.getClass(), "HashDbCreateDatabaseDialog.errMsg.hashDbCreationErr");
340  try {
341  newHashDb = HashDbManager.getInstance().addNewHashDatabaseNoSave(hashSetNameTextField.getText(), fileChooser.getSelectedFile().getCanonicalPath(), true, sendIngestMessagesCheckbox.isSelected(), type);
342  } catch (IOException ex) {
343  Logger.getLogger(HashDbCreateDatabaseDialog.class.getName()).log(Level.WARNING, errorMessage, ex);
344  JOptionPane.showMessageDialog(this,
345  NbBundle.getMessage(this.getClass(),
346  "HashDbCreateDatabaseDialog.cannotCreateFileAtLocMsg"),
347  NbBundle.getMessage(this.getClass(),
348  "HashDbCreateDatabaseDialog.createHashDbErr"),
349  JOptionPane.ERROR_MESSAGE);
350  return;
351  } catch (HashDbManagerException ex) {
352  Logger.getLogger(HashDbCreateDatabaseDialog.class.getName()).log(Level.WARNING, errorMessage, ex);
353  JOptionPane.showMessageDialog(this,
354  ex.getMessage(),
355  NbBundle.getMessage(this.getClass(),
356  "HashDbCreateDatabaseDialog.createHashDbErr"),
357  JOptionPane.ERROR_MESSAGE);
358  return;
359  }
360 
361  dispose();
362  }//GEN-LAST:event_okButtonActionPerformed
363 
364  private void sendIngestMessagesCheckboxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_sendIngestMessagesCheckboxActionPerformed
365  // TODO add your handling code here:
366  }//GEN-LAST:event_sendIngestMessagesCheckboxActionPerformed
367 
368  // Variables declaration - do not modify//GEN-BEGIN:variables
369  private javax.swing.ButtonGroup buttonGroup1;
370  private javax.swing.JButton cancelButton;
371  private javax.swing.JTextField databasePathTextField;
372  private javax.swing.JTextField hashSetNameTextField;
373  private javax.swing.JLabel jLabel1;
374  private javax.swing.JLabel jLabel2;
375  private javax.swing.JLabel jLabel3;
376  private javax.swing.JRadioButton knownBadRadioButton;
377  private javax.swing.JRadioButton knownRadioButton;
378  private javax.swing.JButton okButton;
379  private javax.swing.JButton saveAsButton;
380  private javax.swing.JCheckBox sendIngestMessagesCheckbox;
381  // End of variables declaration//GEN-END:variables
382 }

Copyright © 2012-2016 Basis Technology. Generated on: Fri Sep 29 2017
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.