19 package org.sleuthkit.autopsy.directorytree;
21 import java.awt.Component;
22 import java.awt.event.ActionEvent;
24 import java.util.ArrayList;
25 import java.util.Collection;
26 import java.util.HashSet;
27 import java.util.Iterator;
29 import java.util.logging.Level;
30 import javax.swing.AbstractAction;
31 import javax.swing.JFileChooser;
32 import javax.swing.JOptionPane;
33 import javax.swing.SwingWorker;
34 import org.netbeans.api.progress.ProgressHandle;
35 import org.openide.util.Cancellable;
36 import org.openide.util.NbBundle;
37 import org.openide.util.Utilities;
61 if (null == instance) {
68 super(NbBundle.getMessage(
ExtractAction.class,
"ExtractAction.title.extractFiles.text"));
79 Collection<? extends AbstractFile> selectedFiles = Utilities.actionsGlobalContext().lookupAll(
AbstractFile.class);
80 if (selectedFiles.size() > 1) {
82 }
else if (selectedFiles.size() == 1) {
99 JFileChooser fileChooser =
new JFileChooser();
103 if (fileChooser.showSaveDialog((Component) e.getSource()) == JFileChooser.APPROVE_OPTION) {
104 ArrayList<FileExtractionTask> fileExtractionTasks =
new ArrayList<>();
105 fileExtractionTasks.add(
new FileExtractionTask(selectedFile, fileChooser.getSelectedFile()));
116 private void extractFiles(ActionEvent e, Collection<? extends AbstractFile> selectedFiles) {
117 JFileChooser folderChooser =
new JFileChooser();
118 folderChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
120 if (folderChooser.showSaveDialog((Component) e.getSource()) == JFileChooser.APPROVE_OPTION) {
121 File destinationFolder = folderChooser.getSelectedFile();
122 if (!destinationFolder.
exists()) {
124 destinationFolder.mkdirs();
125 }
catch (Exception ex) {
126 JOptionPane.showMessageDialog((Component) e.getSource(), NbBundle.getMessage(this.getClass(),
127 "ExtractAction.extractFiles.cantCreateFolderErr.msg"));
128 logger.log(Level.INFO,
"Unable to create folder(s) for user " + destinationFolder.getAbsolutePath(), ex);
136 Set<AbstractFile> uniqueFiles =
new HashSet<>(selectedFiles);
139 ArrayList<FileExtractionTask> fileExtractionTasks =
new ArrayList<>();
151 for (Iterator<FileExtractionTask> it = fileExtractionTasks.iterator(); it.hasNext();) {
164 if (task.destination.
exists()) {
165 if (JOptionPane.showConfirmDialog((Component) e.getSource(),
166 NbBundle.getMessage(this.getClass(),
"ExtractAction.confDlg.destFileExist.msg", task.destination.getAbsolutePath()),
167 NbBundle.getMessage(
this.getClass(),
"ExtractAction.confDlg.destFileExist.title"),
168 JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {
170 JOptionPane.showMessageDialog((Component) e.getSource(),
171 NbBundle.getMessage(this.getClass(),
"ExtractAction.msgDlg.cantOverwriteFile.msg", task.destination.getAbsolutePath()));
181 if (!fileExtractionTasks.isEmpty()) {
185 }
catch (Exception ex) {
186 logger.log(Level.WARNING,
"Unable to start background file extraction thread", ex);
190 NbBundle.getMessage(
this.getClass(),
"ExtractAction.notifyDlg.noFileToExtr.msg"));
200 this.source = source;
201 this.destination = destination;
214 FileExtracter(ArrayList<FileExtractionTask> extractionTasks) {
220 if (extractionTasks.isEmpty()) {
225 final String displayName = NbBundle.getMessage(this.getClass(),
"ExtractAction.progress.extracting");
226 progress = ProgressHandle.createHandle(displayName,
new Cancellable() {
228 public boolean cancel() {
229 if (progress != null) {
230 progress.setDisplayName(
231 NbBundle.getMessage(
this.getClass(),
"ExtractAction.progress.cancellingExtraction", displayName));
237 progress.switchToIndeterminate();
256 boolean msgDisplayed =
false;
259 }
catch (Exception ex) {
260 logger.log(Level.SEVERE,
"Fatal error during file extraction", ex);
262 NbBundle.getMessage(
this.getClass(),
"ExtractAction.done.notifyMsg.extractErr", ex.getMessage()));
266 if (!this.isCancelled() && !msgDisplayed) {
268 NbBundle.getMessage(
this.getClass(),
"ExtractAction.done.notifyMsg.fileExtr.text"));
285 logger.log(Level.SEVERE,
"Could not get children of content", ex);
static boolean deleteFileDir(File path)
List< Content > getChildren()
static String escapeFileName(String fileName)
static Case getCurrentCase()
synchronized static Logger getLogger(String name)
String getExportDirectory()
static void info(String message)
static boolean isDotDirectory(AbstractFile dir)