19 package org.sleuthkit.autopsy.casemodule;
22 import java.util.ArrayList;
23 import java.util.List;
25 import java.util.TreeSet;
26 import javax.swing.JFileChooser;
27 import javax.swing.JPanel;
29 import org.openide.util.NbBundle;
32 import java.util.logging.Level;
33 import javax.swing.JOptionPane;
41 final class LocalFilesPanel
extends JPanel {
43 private static final long serialVersionUID = 1L;
44 private final Set<File> currentFiles =
new TreeSet<>();
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 =
"";
53 private LocalFilesPanel() {
58 static synchronized LocalFilesPanel getDefault() {
59 if (instance == null) {
60 instance =
new LocalFilesPanel();
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"));
72 public List<String> getContentPaths() {
73 List<String> pathsList =
new ArrayList<>();
74 if (currentFiles == null) {
77 for (File f : currentFiles) {
78 pathsList.add(f.getAbsolutePath());
83 public String getContentType() {
84 return NbBundle.getMessage(this.getClass(),
"LocalFilesPanel.contentType.text");
87 public boolean validatePanel() {
89 warnIfPathIsInvalid(getContentPaths());
99 private void warnIfPathIsInvalid(List<String> pathsList) {
100 errorLabel.setVisible(
false);
102 CaseType currentCaseType = Case.getCurrentCase().getCaseType();
104 for (String currentPath : pathsList) {
105 if (!PathValidator.isValid(currentPath, currentCaseType)) {
106 errorLabel.setVisible(
true);
107 errorLabel.setText(NbBundle.getMessage(
this.getClass(),
"DataSourceOnCDriveError.text"));
113 public void select() {
117 public void reset() {
118 currentFiles.clear();
119 selectedPaths.setText(
"");
121 errorLabel.setVisible(
false);
123 this.displayNameLabel.setText(NbBundle.getMessage(
this.getClass(),
"LocalFilesPanel.displayNameLabel.text"));
126 public String getFileSetName() {
127 return this.displayName;
131 public String toString() {
132 return NbBundle.getMessage(this.getClass(),
"LocalFilesDSProcessor.toString.text");
140 @SuppressWarnings(
"unchecked")
142 private
void initComponents() {
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();
156 localFileChooser.setApproveButtonText(
org.openide.util.NbBundle.getMessage(LocalFilesPanel.class,
"LocalFilesPanel.localFileChooser.approveButtonText"));
157 localFileChooser.setApproveButtonToolTipText(
org.openide.util.NbBundle.getMessage(LocalFilesPanel.class,
"LocalFilesPanel.localFileChooser.approveButtonToolTipText"));
158 localFileChooser.setDialogTitle(
org.openide.util.NbBundle.getMessage(LocalFilesPanel.class,
"LocalFilesPanel.localFileChooser.dialogTitle"));
159 localFileChooser.setFileSelectionMode(javax.swing.JFileChooser.FILES_AND_DIRECTORIES);
161 jTextArea1.setColumns(20);
162 jTextArea1.setRows(5);
163 jScrollPane1.setViewportView(jTextArea1);
165 org.openide.awt.Mnemonics.setLocalizedText(selectButton,
org.openide.util.NbBundle.getMessage(LocalFilesPanel.class,
"LocalFilesPanel.selectButton.text"));
166 selectButton.setToolTipText(
org.openide.util.NbBundle.getMessage(LocalFilesPanel.class,
"LocalFilesPanel.selectButton.toolTipText"));
167 selectButton.setActionCommand(
org.openide.util.NbBundle.getMessage(LocalFilesPanel.class,
"LocalFilesPanel.selectButton.actionCommand"));
168 selectButton.addActionListener(
new java.awt.event.ActionListener() {
169 public void actionPerformed(java.awt.event.ActionEvent evt) {
170 selectButtonActionPerformed(evt);
174 org.openide.awt.Mnemonics.setLocalizedText(infoLabel,
org.openide.util.NbBundle.getMessage(LocalFilesPanel.class,
"LocalFilesPanel.infoLabel.text"));
176 org.openide.awt.Mnemonics.setLocalizedText(clearButton,
org.openide.util.NbBundle.getMessage(LocalFilesPanel.class,
"LocalFilesPanel.clearButton.text"));
177 clearButton.setToolTipText(
org.openide.util.NbBundle.getMessage(LocalFilesPanel.class,
"LocalFilesPanel.clearButton.toolTipText"));
178 clearButton.addActionListener(
new java.awt.event.ActionListener() {
179 public void actionPerformed(java.awt.event.ActionEvent evt) {
180 clearButtonActionPerformed(evt);
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"));
188 jScrollPane2.setViewportView(selectedPaths);
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"));
193 org.openide.awt.Mnemonics.setLocalizedText(jButton1,
org.openide.util.NbBundle.getMessage(LocalFilesPanel.class,
"LocalFilesPanel.jButton1.text"));
194 jButton1.addActionListener(
new java.awt.event.ActionListener() {
195 public void actionPerformed(java.awt.event.ActionEvent evt) {
196 jButton1ActionPerformed(evt);
200 org.openide.awt.Mnemonics.setLocalizedText(displayNameLabel,
org.openide.util.NbBundle.getMessage(LocalFilesPanel.class,
"LocalFilesPanel.displayNameLabel.text"));
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))
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))
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)
235 .addComponent(clearButton))
236 .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 82, javax.swing.GroupLayout.PREFERRED_SIZE))
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))
242 .addComponent(errorLabel)
247 private void selectButtonActionPerformed(java.awt.event.ActionEvent evt) {
248 int returnVal = localFileChooser.showOpenDialog(
this);
249 if (returnVal == JFileChooser.APPROVE_OPTION) {
250 File[] files = localFileChooser.getSelectedFiles();
251 for (File f : files) {
256 StringBuilder allPaths =
new StringBuilder();
257 for (File f : currentFiles) {
258 allPaths.append(f.getAbsolutePath()).append(
"\n");
260 this.selectedPaths.setText(allPaths.toString());
261 this.selectedPaths.setToolTipText(allPaths.toString());
264 enableNext = !currentFiles.isEmpty();
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);
270 MessageNotifyUtil.Notify.show(NbBundle.getMessage(
this.getClass(),
"LocalFilesPanel.moduleErr"),
271 NbBundle.getMessage(
this.getClass(),
"LocalFilesPanel.moduleErr.msg"),
272 MessageNotifyUtil.MessageType.ERROR);
276 private void clearButtonActionPerformed(java.awt.event.ActionEvent evt) {
281 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
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);
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;