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)