Autopsy  4.1
Graphical digital forensics platform for The Sleuth Kit and other tools.
LocalFilesPanel.java
Go to the documentation of this file.
1 /*
2  * Autopsy Forensic Browser
3  *
4  * Copyright 2011-2016 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.ArrayList;
23 import java.util.List;
24 import java.util.Set;
25 import java.util.TreeSet;
26 import javax.swing.JFileChooser;
27 import javax.swing.JPanel;
28 
29 import org.openide.util.NbBundle;
32 import java.util.logging.Level;
33 import javax.swing.JOptionPane;
37 
41 final class LocalFilesPanel extends JPanel {
42 
43  private static final long serialVersionUID = 1L;
44  private final Set<File> currentFiles = new TreeSet<>(); //keep currents in a set to disallow duplicates per add
45  private boolean enableNext = false;
46  private static LocalFilesPanel instance;
47  private static final Logger logger = Logger.getLogger(LocalFilesPanel.class.getName());
48  private String displayName = "";
49 
53  private LocalFilesPanel() {
54  initComponents();
55  customInit();
56  }
57 
58  static synchronized LocalFilesPanel getDefault() {
59  if (instance == null) {
60  instance = new LocalFilesPanel();
61  }
62  return instance;
63  }
64 
65  private void customInit() {
66  localFileChooser.setMultiSelectionEnabled(true);
67  errorLabel.setVisible(false);
68  selectedPaths.setText("");
69  this.displayNameLabel.setText(NbBundle.getMessage(this.getClass(), "LocalFilesPanel.displayNameLabel.text"));
70  }
71 
72  public List<String> getContentPaths() {
73  List<String> pathsList = new ArrayList<>();
74  if (currentFiles == null) {
75  return pathsList;
76  }
77  for (File f : currentFiles) {
78  pathsList.add(f.getAbsolutePath());
79  }
80  return pathsList;
81  }
82 
83  public String getContentType() {
84  return NbBundle.getMessage(this.getClass(), "LocalFilesPanel.contentType.text");
85  }
86 
87  public boolean validatePanel() {
88  // display warning if there is one (but don't disable "next" button)
89  warnIfPathIsInvalid(getContentPaths());
90  return enableNext;
91  }
92 
99  private void warnIfPathIsInvalid(List<String> pathsList) {
100  errorLabel.setVisible(false);
101 
102  CaseType currentCaseType = Case.getCurrentCase().getCaseType();
103 
104  for (String currentPath : pathsList) {
105  if (!PathValidator.isValid(currentPath, currentCaseType)) {
106  errorLabel.setVisible(true);
107  errorLabel.setText(NbBundle.getMessage(this.getClass(), "DataSourceOnCDriveError.text"));
108  return;
109  }
110  }
111  }
112 
113  public void select() {
114  reset();
115  }
116 
117  public void reset() {
118  currentFiles.clear();
119  selectedPaths.setText("");
120  enableNext = false;
121  errorLabel.setVisible(false);
122  displayName = "";
123  this.displayNameLabel.setText(NbBundle.getMessage(this.getClass(), "LocalFilesPanel.displayNameLabel.text"));
124  }
125 
126  public String getFileSetName() {
127  return this.displayName;
128  }
129 
130  @Override
131  public String toString() {
132  return NbBundle.getMessage(this.getClass(), "LocalFilesDSProcessor.toString.text");
133  }
134 
140  @SuppressWarnings("unchecked")
141  // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
142  private void initComponents() {
143 
144  localFileChooser = new javax.swing.JFileChooser();
145  jScrollPane1 = new javax.swing.JScrollPane();
146  jTextArea1 = new javax.swing.JTextArea();
147  selectButton = new javax.swing.JButton();
148  infoLabel = new javax.swing.JLabel();
149  clearButton = new javax.swing.JButton();
150  jScrollPane2 = new javax.swing.JScrollPane();
151  selectedPaths = new javax.swing.JTextArea();
152  errorLabel = new javax.swing.JLabel();
153  jButton1 = new javax.swing.JButton();
154  displayNameLabel = new javax.swing.JLabel();
155 
156  localFileChooser.setApproveButtonText(org.openide.util.NbBundle.getMessage(LocalFilesPanel.class, "LocalFilesPanel.localFileChooser.approveButtonText")); // NOI18N
157  localFileChooser.setApproveButtonToolTipText(org.openide.util.NbBundle.getMessage(LocalFilesPanel.class, "LocalFilesPanel.localFileChooser.approveButtonToolTipText")); // NOI18N
158  localFileChooser.setDialogTitle(org.openide.util.NbBundle.getMessage(LocalFilesPanel.class, "LocalFilesPanel.localFileChooser.dialogTitle")); // NOI18N
159  localFileChooser.setFileSelectionMode(javax.swing.JFileChooser.FILES_AND_DIRECTORIES);
160 
161  jTextArea1.setColumns(20);
162  jTextArea1.setRows(5);
163  jScrollPane1.setViewportView(jTextArea1);
164 
165  org.openide.awt.Mnemonics.setLocalizedText(selectButton, org.openide.util.NbBundle.getMessage(LocalFilesPanel.class, "LocalFilesPanel.selectButton.text")); // NOI18N
166  selectButton.setToolTipText(org.openide.util.NbBundle.getMessage(LocalFilesPanel.class, "LocalFilesPanel.selectButton.toolTipText")); // NOI18N
167  selectButton.setActionCommand(org.openide.util.NbBundle.getMessage(LocalFilesPanel.class, "LocalFilesPanel.selectButton.actionCommand")); // NOI18N
168  selectButton.addActionListener(new java.awt.event.ActionListener() {
169  public void actionPerformed(java.awt.event.ActionEvent evt) {
170  selectButtonActionPerformed(evt);
171  }
172  });
173 
174  org.openide.awt.Mnemonics.setLocalizedText(infoLabel, org.openide.util.NbBundle.getMessage(LocalFilesPanel.class, "LocalFilesPanel.infoLabel.text")); // NOI18N
175 
176  org.openide.awt.Mnemonics.setLocalizedText(clearButton, org.openide.util.NbBundle.getMessage(LocalFilesPanel.class, "LocalFilesPanel.clearButton.text")); // NOI18N
177  clearButton.setToolTipText(org.openide.util.NbBundle.getMessage(LocalFilesPanel.class, "LocalFilesPanel.clearButton.toolTipText")); // NOI18N
178  clearButton.addActionListener(new java.awt.event.ActionListener() {
179  public void actionPerformed(java.awt.event.ActionEvent evt) {
180  clearButtonActionPerformed(evt);
181  }
182  });
183 
184  selectedPaths.setEditable(false);
185  selectedPaths.setColumns(20);
186  selectedPaths.setRows(5);
187  selectedPaths.setToolTipText(org.openide.util.NbBundle.getMessage(LocalFilesPanel.class, "LocalFilesPanel.selectedPaths.toolTipText")); // NOI18N
188  jScrollPane2.setViewportView(selectedPaths);
189 
190  errorLabel.setForeground(new java.awt.Color(255, 0, 0));
191  org.openide.awt.Mnemonics.setLocalizedText(errorLabel, org.openide.util.NbBundle.getMessage(LocalFilesPanel.class, "LocalFilesPanel.errorLabel.text")); // NOI18N
192 
193  org.openide.awt.Mnemonics.setLocalizedText(jButton1, org.openide.util.NbBundle.getMessage(LocalFilesPanel.class, "LocalFilesPanel.jButton1.text")); // NOI18N
194  jButton1.addActionListener(new java.awt.event.ActionListener() {
195  public void actionPerformed(java.awt.event.ActionEvent evt) {
196  jButton1ActionPerformed(evt);
197  }
198  });
199 
200  org.openide.awt.Mnemonics.setLocalizedText(displayNameLabel, org.openide.util.NbBundle.getMessage(LocalFilesPanel.class, "LocalFilesPanel.displayNameLabel.text")); // NOI18N
201 
202  javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
203  this.setLayout(layout);
204  layout.setHorizontalGroup(
205  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
206  .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
207  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
208  .addGroup(layout.createSequentialGroup()
209  .addComponent(infoLabel)
210  .addGap(0, 0, Short.MAX_VALUE))
211  .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 389, Short.MAX_VALUE))
212  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
213  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
214  .addComponent(selectButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
215  .addComponent(clearButton, javax.swing.GroupLayout.DEFAULT_SIZE, 69, Short.MAX_VALUE))
216  .addGap(2, 2, 2))
217  .addGroup(layout.createSequentialGroup()
218  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
219  .addComponent(errorLabel)
220  .addGroup(layout.createSequentialGroup()
221  .addComponent(displayNameLabel)
222  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
223  .addComponent(jButton1)))
224  .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
225  );
226  layout.setVerticalGroup(
227  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
228  .addGroup(layout.createSequentialGroup()
229  .addComponent(infoLabel)
230  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
231  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
232  .addGroup(layout.createSequentialGroup()
233  .addComponent(selectButton)
234  .addGap(36, 36, 36)
235  .addComponent(clearButton))
236  .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 82, javax.swing.GroupLayout.PREFERRED_SIZE))
237  .addGap(18, 18, 18)
238  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
239  .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
240  .addComponent(displayNameLabel))
241  .addGap(13, 13, 13)
242  .addComponent(errorLabel)
243  .addGap(7, 7, 7))
244  );
245  }// </editor-fold>//GEN-END:initComponents
246 
247  private void selectButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_selectButtonActionPerformed
248  int returnVal = localFileChooser.showOpenDialog(this);
249  if (returnVal == JFileChooser.APPROVE_OPTION) {
250  File[] files = localFileChooser.getSelectedFiles();
251  for (File f : files) {
252  currentFiles.add(f);
253  }
254 
255  //update label
256  StringBuilder allPaths = new StringBuilder();
257  for (File f : currentFiles) {
258  allPaths.append(f.getAbsolutePath()).append("\n");
259  }
260  this.selectedPaths.setText(allPaths.toString());
261  this.selectedPaths.setToolTipText(allPaths.toString());
262  }
263 
264  enableNext = !currentFiles.isEmpty();
265 
266  try {
267  firePropertyChange(DataSourceProcessor.DSP_PANEL_EVENT.UPDATE_UI.toString(), false, true);
268  } catch (Exception e) {
269  logger.log(Level.SEVERE, "LocalFilesPanel listener threw exception", e); //NON-NLS
270  MessageNotifyUtil.Notify.show(NbBundle.getMessage(this.getClass(), "LocalFilesPanel.moduleErr"),
271  NbBundle.getMessage(this.getClass(), "LocalFilesPanel.moduleErr.msg"),
272  MessageNotifyUtil.MessageType.ERROR);
273  }
274  }//GEN-LAST:event_selectButtonActionPerformed
275 
276  private void clearButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_clearButtonActionPerformed
277  reset();
278 
279  }//GEN-LAST:event_clearButtonActionPerformed
280 
281  private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
282  String displayName = JOptionPane.showInputDialog("New Display Name: ");
283  if (displayName != null && !displayName.equals("")) {
284  this.displayName = displayName;
285  this.displayNameLabel.setText("Display Name: " + this.displayName);
286  }
287  }//GEN-LAST:event_jButton1ActionPerformed
288 
289  // Variables declaration - do not modify//GEN-BEGIN:variables
290  private javax.swing.JButton clearButton;
291  private javax.swing.JLabel displayNameLabel;
292  private javax.swing.JLabel errorLabel;
293  private javax.swing.JLabel infoLabel;
294  private javax.swing.JButton jButton1;
295  private javax.swing.JScrollPane jScrollPane1;
296  private javax.swing.JScrollPane jScrollPane2;
297  private javax.swing.JTextArea jTextArea1;
298  private javax.swing.JFileChooser localFileChooser;
299  private javax.swing.JButton selectButton;
300  private javax.swing.JTextArea selectedPaths;
301  // End of variables declaration//GEN-END:variables
302 }

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