Autopsy  4.11.0
Graphical digital forensics platform for The Sleuth Kit and other tools.
ImageFilePanel.java
Go to the documentation of this file.
1 /*
2  * Autopsy Forensic Browser
3  *
4  * Copyright 2011-2018 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.casemodule;
20 
21 import java.io.File;
22 import java.util.Calendar;
23 import java.util.List;
24 import javax.swing.JFileChooser;
25 import javax.swing.JOptionPane;
26 import javax.swing.JPanel;
27 import javax.swing.JTextField;
28 import javax.swing.event.DocumentEvent;
29 import javax.swing.event.DocumentListener;
30 import javax.swing.filechooser.FileFilter;
31 import org.apache.commons.lang3.StringUtils;
32 import org.openide.util.NbBundle;
38 import org.sleuthkit.datamodel.HashUtility;
39 
45 @SuppressWarnings("PMD.SingularField") // UI widgets cause lots of false positives
46 public class ImageFilePanel extends JPanel implements DocumentListener {
47 
48  private static final long serialVersionUID = 1L;
49  private static final String PROP_LASTIMAGE_PATH = "LBL_LastImage_PATH"; //NON-NLS
50  private static final String[] SECTOR_SIZE_CHOICES = {"Auto Detect", "512", "1024", "2048", "4096"};
51  private final JFileChooser fileChooser = new JFileChooser();
52  private final String contextName;
53 
62  private ImageFilePanel(String context, List<FileFilter> fileChooserFilters) {
63  this.contextName = context;
64  initComponents();
65 
66  // Populate the drop down list of time zones
67  createTimeZoneList();
68 
69  // Populate the drop down list of sector size options
70  for (String choice : SECTOR_SIZE_CHOICES) {
71  sectorSizeComboBox.addItem(choice);
72  }
73  sectorSizeComboBox.setSelectedIndex(0);
74 
75  errorLabel.setVisible(false);
76 
77  fileChooser.setDragEnabled(false);
78  fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
79  fileChooser.setMultiSelectionEnabled(false);
80  fileChooserFilters.forEach(fileChooser::addChoosableFileFilter);
81  if (fileChooserFilters.isEmpty() == false) {
82  fileChooser.setFileFilter(fileChooserFilters.get(0));
83  }
84  }
85 
90  private void createTimeZoneList() {
91  List<String> timeZoneList = TimeZoneUtils.createTimeZoneList();
92  for (String timeZone : timeZoneList) {
93  timeZoneComboBox.addItem(timeZone);
94  }
95 
96  // set the selected timezone
97  timeZoneComboBox.setSelectedItem(TimeZoneUtils.createTimeZoneString(Calendar.getInstance().getTimeZone()));
98  }
99 
110  public static synchronized ImageFilePanel createInstance(String context, List<FileFilter> fileChooserFilters) {
111  ImageFilePanel instance = new ImageFilePanel(context, fileChooserFilters);
112  // post-constructor initialization of listener support without leaking references of uninitialized objects
113  instance.getPathTextField().getDocument().addDocumentListener(instance);
114  instance.getMd5TextFieldField().getDocument().addDocumentListener(instance);
115  instance.getSha1TextField().getDocument().addDocumentListener(instance);
116  instance.getSha256TextField().getDocument().addDocumentListener(instance);
117  return instance;
118  }
119 
120  private JTextField getPathTextField() {
121  return pathTextField;
122  }
123 
124  private JTextField getMd5TextFieldField() {
125  return md5HashTextField;
126  }
127 
128  private JTextField getSha1TextField() {
129  return sha1HashTextField;
130  }
131 
132  private JTextField getSha256TextField() {
133  return sha256HashTextField;
134  }
135 
141  // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
142  private void initComponents() {
143 
144  pathLabel = new javax.swing.JLabel();
145  browseButton = new javax.swing.JButton();
146  pathTextField = new javax.swing.JTextField();
147  timeZoneLabel = new javax.swing.JLabel();
148  timeZoneComboBox = new javax.swing.JComboBox<>();
149  noFatOrphansCheckbox = new javax.swing.JCheckBox();
150  errorLabel = new javax.swing.JLabel();
151  sectorSizeLabel = new javax.swing.JLabel();
152  sectorSizeComboBox = new javax.swing.JComboBox<>();
153  sha256HashLabel = new javax.swing.JLabel();
154  sha256HashTextField = new javax.swing.JTextField();
155  sha1HashTextField = new javax.swing.JTextField();
156  md5HashTextField = new javax.swing.JTextField();
157  sha1HashLabel = new javax.swing.JLabel();
158  md5HashLabel = new javax.swing.JLabel();
159  hashValuesLabel = new javax.swing.JLabel();
160  hashValuesNoteLabel = new javax.swing.JLabel();
161 
162  setMinimumSize(new java.awt.Dimension(0, 65));
163  setPreferredSize(new java.awt.Dimension(403, 65));
164 
165  org.openide.awt.Mnemonics.setLocalizedText(pathLabel, org.openide.util.NbBundle.getMessage(ImageFilePanel.class, "ImageFilePanel.pathLabel.text")); // NOI18N
166 
167  org.openide.awt.Mnemonics.setLocalizedText(browseButton, org.openide.util.NbBundle.getMessage(ImageFilePanel.class, "ImageFilePanel.browseButton.text")); // NOI18N
168  browseButton.addActionListener(new java.awt.event.ActionListener() {
169  public void actionPerformed(java.awt.event.ActionEvent evt) {
170  browseButtonActionPerformed(evt);
171  }
172  });
173 
174  pathTextField.setText(org.openide.util.NbBundle.getMessage(ImageFilePanel.class, "ImageFilePanel.pathTextField.text")); // NOI18N
175 
176  org.openide.awt.Mnemonics.setLocalizedText(timeZoneLabel, org.openide.util.NbBundle.getMessage(ImageFilePanel.class, "ImageFilePanel.timeZoneLabel.text")); // NOI18N
177 
178  timeZoneComboBox.setMaximumRowCount(30);
179 
180  org.openide.awt.Mnemonics.setLocalizedText(noFatOrphansCheckbox, org.openide.util.NbBundle.getMessage(ImageFilePanel.class, "ImageFilePanel.noFatOrphansCheckbox.text")); // NOI18N
181  noFatOrphansCheckbox.setToolTipText(org.openide.util.NbBundle.getMessage(ImageFilePanel.class, "ImageFilePanel.noFatOrphansCheckbox.toolTipText")); // NOI18N
182 
183  errorLabel.setForeground(new java.awt.Color(255, 0, 0));
184  org.openide.awt.Mnemonics.setLocalizedText(errorLabel, org.openide.util.NbBundle.getMessage(ImageFilePanel.class, "ImageFilePanel.errorLabel.text")); // NOI18N
185 
186  org.openide.awt.Mnemonics.setLocalizedText(sectorSizeLabel, org.openide.util.NbBundle.getMessage(ImageFilePanel.class, "ImageFilePanel.sectorSizeLabel.text")); // NOI18N
187 
188  org.openide.awt.Mnemonics.setLocalizedText(sha256HashLabel, org.openide.util.NbBundle.getMessage(ImageFilePanel.class, "ImageFilePanel.sha256HashLabel.text")); // NOI18N
189  sha256HashLabel.setEnabled(false);
190 
191  sha256HashTextField.setText(org.openide.util.NbBundle.getMessage(ImageFilePanel.class, "ImageFilePanel.sha256HashTextField.text")); // NOI18N
192  sha256HashTextField.setEnabled(false);
193 
194  sha1HashTextField.setText(org.openide.util.NbBundle.getMessage(ImageFilePanel.class, "ImageFilePanel.sha1HashTextField.text")); // NOI18N
195  sha1HashTextField.setEnabled(false);
196 
197  md5HashTextField.setText(org.openide.util.NbBundle.getMessage(ImageFilePanel.class, "ImageFilePanel.md5HashTextField.text")); // NOI18N
198  md5HashTextField.setEnabled(false);
199 
200  org.openide.awt.Mnemonics.setLocalizedText(sha1HashLabel, org.openide.util.NbBundle.getMessage(ImageFilePanel.class, "ImageFilePanel.sha1HashLabel.text")); // NOI18N
201  sha1HashLabel.setEnabled(false);
202 
203  org.openide.awt.Mnemonics.setLocalizedText(md5HashLabel, org.openide.util.NbBundle.getMessage(ImageFilePanel.class, "ImageFilePanel.md5HashLabel.text")); // NOI18N
204  md5HashLabel.setEnabled(false);
205 
206  org.openide.awt.Mnemonics.setLocalizedText(hashValuesLabel, org.openide.util.NbBundle.getMessage(ImageFilePanel.class, "ImageFilePanel.hashValuesLabel.text")); // NOI18N
207  hashValuesLabel.setEnabled(false);
208 
209  org.openide.awt.Mnemonics.setLocalizedText(hashValuesNoteLabel, org.openide.util.NbBundle.getMessage(ImageFilePanel.class, "ImageFilePanel.hashValuesNoteLabel.text")); // NOI18N
210  hashValuesNoteLabel.setEnabled(false);
211 
212  javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
213  this.setLayout(layout);
214  layout.setHorizontalGroup(
215  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
216  .addGroup(layout.createSequentialGroup()
217  .addComponent(pathTextField)
218  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
219  .addComponent(browseButton)
220  .addGap(2, 2, 2))
221  .addGroup(layout.createSequentialGroup()
222  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
223  .addComponent(pathLabel)
224  .addComponent(noFatOrphansCheckbox, javax.swing.GroupLayout.PREFERRED_SIZE, 262, javax.swing.GroupLayout.PREFERRED_SIZE))
225  .addGap(0, 368, Short.MAX_VALUE))
226  .addGroup(layout.createSequentialGroup()
227  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
228  .addComponent(errorLabel)
229  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
230  .addGroup(layout.createSequentialGroup()
231  .addComponent(timeZoneLabel)
232  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
233  .addComponent(timeZoneComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 455, javax.swing.GroupLayout.PREFERRED_SIZE))
234  .addGroup(layout.createSequentialGroup()
235  .addComponent(sectorSizeLabel)
236  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
237  .addComponent(sectorSizeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 455, javax.swing.GroupLayout.PREFERRED_SIZE))
238  .addGroup(layout.createSequentialGroup()
239  .addComponent(md5HashLabel)
240  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
241  .addComponent(md5HashTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 455, javax.swing.GroupLayout.PREFERRED_SIZE))
242  .addGroup(layout.createSequentialGroup()
243  .addComponent(sha1HashLabel)
244  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
245  .addComponent(sha1HashTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 455, javax.swing.GroupLayout.PREFERRED_SIZE))
246  .addGroup(layout.createSequentialGroup()
247  .addComponent(sha256HashLabel)
248  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
249  .addComponent(sha256HashTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 455, javax.swing.GroupLayout.PREFERRED_SIZE)))
250  .addComponent(hashValuesNoteLabel)
251  .addComponent(hashValuesLabel))
252  .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
253  );
254  layout.setVerticalGroup(
255  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
256  .addGroup(layout.createSequentialGroup()
257  .addComponent(pathLabel)
258  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
259  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
260  .addComponent(browseButton)
261  .addComponent(pathTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
262  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
263  .addComponent(noFatOrphansCheckbox)
264  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
265  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
266  .addComponent(timeZoneComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
267  .addComponent(timeZoneLabel))
268  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
269  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
270  .addComponent(sectorSizeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
271  .addComponent(sectorSizeLabel))
272  .addGap(39, 39, 39)
273  .addComponent(hashValuesLabel)
274  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
275  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
276  .addComponent(md5HashTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
277  .addComponent(md5HashLabel))
278  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
279  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
280  .addComponent(sha1HashTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
281  .addComponent(sha1HashLabel))
282  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
283  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
284  .addComponent(sha256HashTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
285  .addComponent(sha256HashLabel))
286  .addGap(18, 18, 18)
287  .addComponent(hashValuesNoteLabel)
288  .addGap(18, 18, 18)
289  .addComponent(errorLabel)
290  .addContainerGap(51, Short.MAX_VALUE))
291  );
292  }// </editor-fold>//GEN-END:initComponents
293 
294  @NbBundle.Messages({"ImageFilePanel.000.confirmationMessage=The selected file"
295  + " has extenson .001 but there is a .000 file in the sequence of raw images."
296  + "\nShould the .000 file be used as the start, instead of the selected .001 file?\n"})
297  private void browseButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_browseButtonActionPerformed
298  String oldText = getContentPaths();
299  // set the current directory of the FileChooser if the ImagePath Field is valid
300  File currentDir = new File(oldText);
301  if (currentDir.exists()) {
302  fileChooser.setCurrentDirectory(currentDir);
303  }
304 
305  if (fileChooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
306  String path = fileChooser.getSelectedFile().getPath();
307  if (path.endsWith(".001")) {
308  String zeroX3_path = StringUtils.removeEnd(path, ".001") + ".000";
309  if (new File(zeroX3_path).exists()) {
310  int showConfirmDialog = JOptionPane.showConfirmDialog(this,
311  Bundle.ImageFilePanel_000_confirmationMessage(),
312  "Choose .001 file?", JOptionPane.YES_NO_OPTION);
313  if (showConfirmDialog == JOptionPane.YES_OPTION) {
314  path = zeroX3_path;
315  }
316  }
317  }
318 
319  setContentPath(path);
320 
325  if (!oldText.equals(getContentPaths())) {
326  md5HashTextField.setText(null);
327  sha1HashTextField.setText(null);
328  sha256HashTextField.setText(null);
329  }
330  }
331 
332  updateHelper();
333  }//GEN-LAST:event_browseButtonActionPerformed
334 
335  // Variables declaration - do not modify//GEN-BEGIN:variables
336  private javax.swing.JButton browseButton;
337  private javax.swing.JLabel errorLabel;
338  private javax.swing.JLabel hashValuesLabel;
339  private javax.swing.JLabel hashValuesNoteLabel;
340  private javax.swing.JLabel md5HashLabel;
341  private javax.swing.JTextField md5HashTextField;
342  private javax.swing.JCheckBox noFatOrphansCheckbox;
343  private javax.swing.JLabel pathLabel;
344  private javax.swing.JTextField pathTextField;
345  private javax.swing.JComboBox<String> sectorSizeComboBox;
346  private javax.swing.JLabel sectorSizeLabel;
347  private javax.swing.JLabel sha1HashLabel;
348  private javax.swing.JTextField sha1HashTextField;
349  private javax.swing.JLabel sha256HashLabel;
350  private javax.swing.JTextField sha256HashTextField;
351  private javax.swing.JComboBox<String> timeZoneComboBox;
352  private javax.swing.JLabel timeZoneLabel;
353  // End of variables declaration//GEN-END:variables
354 
360  private void setHashValuesComponentsEnabled(boolean enabled) {
361  hashValuesLabel.setEnabled(enabled);
362  hashValuesNoteLabel.setEnabled(enabled);
363 
364  md5HashLabel.setEnabled(enabled);
365  md5HashTextField.setEnabled(enabled);
366 
367  sha1HashLabel.setEnabled(enabled);
368  sha1HashTextField.setEnabled(enabled);
369 
370  sha256HashLabel.setEnabled(enabled);
371  sha256HashTextField.setEnabled(enabled);
372  }
373 
379  public String getContentPaths() {
380  return pathTextField.getText();
381  }
382 
388  public void setContentPath(String s) {
389  pathTextField.setText(s);
390  }
391 
397  public int getSectorSize() {
398  int sectorSizeSelectionIndex = sectorSizeComboBox.getSelectedIndex();
399 
400  if (sectorSizeSelectionIndex == 0) {
401  return 0;
402  }
403 
404  return Integer.valueOf((String) sectorSizeComboBox.getSelectedItem());
405  }
406 
407  public String getTimeZone() {
408  String tz = timeZoneComboBox.getSelectedItem().toString();
409  return tz.substring(tz.indexOf(')') + 2).trim();
410  }
411 
412  public boolean getNoFatOrphans() {
413  return noFatOrphansCheckbox.isSelected();
414  }
415 
416  String getMd5() {
417  return this.md5HashTextField.getText();
418  }
419 
420  String getSha1() {
421  return this.sha1HashTextField.getText();
422  }
423 
424  String getSha256() {
425  return this.sha256HashTextField.getText();
426  }
427 
428  public void reset() {
429  //reset the UI elements to default
430  pathTextField.setText(null);
431  this.md5HashTextField.setText(null);
432  this.sha1HashTextField.setText(null);
433  this.sha256HashTextField.setText(null);
434  }
435 
441  @NbBundle.Messages({
442  "ImageFilePanel.validatePanel.dataSourceOnCDriveError=Warning: Path to multi-user data source is on \"C:\" drive",
443  "ImageFilePanel.validatePanel.invalidMD5=Invalid MD5 hash",
444  "ImageFilePanel.validatePanel.invalidSHA1=Invalid SHA1 hash",
445  "ImageFilePanel.validatePanel.invalidSHA256=Invalid SHA256 hash",})
446  public boolean validatePanel() {
447  errorLabel.setVisible(false);
448 
449  String path = getContentPaths();
450  if (!isImagePathValid()) {
451  return false;
452  }
453 
454  if (!StringUtils.isBlank(getMd5()) && !HashUtility.isValidMd5Hash(getMd5())) {
455  errorLabel.setVisible(true);
456  errorLabel.setText(Bundle.ImageFilePanel_validatePanel_invalidMD5());
457  return false;
458  }
459 
460  if (!StringUtils.isBlank(getSha1()) && !HashUtility.isValidSha1Hash(getSha1())) {
461  errorLabel.setVisible(true);
462  errorLabel.setText(Bundle.ImageFilePanel_validatePanel_invalidSHA1());
463  return false;
464  }
465 
466  if (!StringUtils.isBlank(getSha256()) && !HashUtility.isValidSha256Hash(getSha256())) {
467  errorLabel.setVisible(true);
468  errorLabel.setText(Bundle.ImageFilePanel_validatePanel_invalidSHA256());
469  return false;
470  }
471 
473  errorLabel.setVisible(true);
474  errorLabel.setText(Bundle.ImageFilePanel_validatePanel_dataSourceOnCDriveError());
475  }
476 
477  return true;
478  }
479 
480  private boolean isImagePathValid() {
481  String path = getContentPaths();
482 
483  if (StringUtils.isBlank(path) || (!(new File(path).isFile() || DriveUtils.isPhysicalDrive(path) || DriveUtils.isPartition(path)))) {
484  return false;
485  }
486 
487  return true;
488  }
489 
490  public void storeSettings() {
491  String imagePathName = getContentPaths();
492  if (null != imagePathName) {
493  String imagePath = imagePathName.substring(0, imagePathName.lastIndexOf(File.separator) + 1);
494  ModuleSettings.setConfigSetting(contextName, PROP_LASTIMAGE_PATH, imagePath);
495  }
496  }
497 
498  public void readSettings() {
499  String lastImagePath = ModuleSettings.getConfigSetting(contextName, PROP_LASTIMAGE_PATH);
500  if (StringUtils.isNotBlank(lastImagePath)) {
501  setContentPath(lastImagePath);
502  }
503  }
504 
505  @Override
506  public void insertUpdate(DocumentEvent e) {
507  updateHelper();
508  }
509 
510  @Override
511  public void removeUpdate(DocumentEvent e) {
512  updateHelper();
513  }
514 
515  @Override
516  public void changedUpdate(DocumentEvent e) {
517  updateHelper();
518  }
519 
526  @NbBundle.Messages({"ImageFilePanel.moduleErr=Module Error",
527  "ImageFilePanel.moduleErr.msg=A module caused an error listening to ImageFilePanel updates."
528  + " See log to determine which module. Some data could be incomplete.\n"})
529  private void updateHelper() {
530  if (isImagePathValid() && !getContentPaths().toLowerCase().endsWith(".e01")) {
531  setHashValuesComponentsEnabled(true);
532  } else {
533  setHashValuesComponentsEnabled(false);
534  }
535 
536  firePropertyChange(DataSourceProcessor.DSP_PANEL_EVENT.UPDATE_UI.toString(), false, true);
537  }
538 
542  public void select() {
543  pathTextField.requestFocusInWindow();
544  }
545 }
static boolean isPhysicalDrive(String path)
Definition: DriveUtils.java:43
static boolean isValidForMultiUserCase(String path, Case.CaseType caseType)
javax.swing.JComboBox< String > sectorSizeComboBox
static synchronized ImageFilePanel createInstance(String context, List< FileFilter > fileChooserFilters)
static String createTimeZoneString(TimeZone timeZone)
void browseButtonActionPerformed(java.awt.event.ActionEvent evt)
static synchronized void setConfigSetting(String moduleName, String settingName, String settingVal)
ImageFilePanel(String context, List< FileFilter > fileChooserFilters)
javax.swing.JComboBox< String > timeZoneComboBox
static String getConfigSetting(String moduleName, String settingName)
static boolean isPartition(String path)
Definition: DriveUtils.java:54

Copyright © 2012-2018 Basis Technology. Generated on: Fri Jun 21 2019
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.