19 package org.sleuthkit.autopsy.casemodule;
 
   21 import java.awt.event.ActionEvent;
 
   22 import java.beans.PropertyChangeEvent;
 
   23 import java.util.EnumSet;
 
   24 import java.util.concurrent.ExecutionException;
 
   25 import java.util.logging.Level;
 
   26 import javax.swing.Action;
 
   27 import javax.swing.JOptionPane;
 
   28 import javax.swing.SwingWorker;
 
   29 import org.openide.DialogDescriptor;
 
   30 import org.openide.DialogDisplayer;
 
   31 import org.openide.NotifyDescriptor;
 
   32 import org.openide.util.HelpCtx;
 
   33 import org.openide.util.NbBundle;
 
   34 import org.openide.util.NbBundle.Messages;
 
   35 import org.openide.util.actions.CallableSystemAction;
 
   36 import org.openide.windows.WindowManager;
 
   45 final class CaseDeleteAction 
extends CallableSystemAction {
 
   47     private static final long serialVersionUID = 1L;
 
   48     private static final Logger logger = Logger.
getLogger(CaseDeleteAction.class.getName());
 
   51         putValue(Action.NAME, NbBundle.getMessage(CaseDeleteAction.class, 
"CTL_CaseDeleteAction"));
 
   52         this.setEnabled(
false);
 
   53         Case.addEventTypeSubscriber(EnumSet.of(Case.Events.CURRENT_CASE), (PropertyChangeEvent evt) -> {
 
   57             setEnabled(null != evt.getNewValue());
 
   63         "Case.deleteCaseConfirmationDialog.title=Delete Current Case?",
 
   64         "Case.deleteCaseConfirmationDialog.message=Are you sure you want to close and delete the current case?",
 
   65         "Case.deleteCaseFailureMessageBox.title=Failed to Delete Case",
 
   66         "# {0} - exception message", 
"Case.deleteCaseFailureMessageBox.message=Error deleting case: {0}",})
 
   67     public void actionPerformed(ActionEvent e) {
 
   69             Case currentCase = Case.getCurrentCaseThrows();
 
   70             String caseName = currentCase.getName();
 
   71             String caseDirectory = currentCase.getCaseDirectory();
 
   77             Object response = DialogDisplayer.getDefault().notify(
new NotifyDescriptor(
 
   78                     Bundle.Case_deleteCaseConfirmationDialog_message(),
 
   79                     Bundle.Case_deleteCaseConfirmationDialog_title(),
 
   80                     NotifyDescriptor.YES_NO_OPTION,
 
   81                     NotifyDescriptor.WARNING_MESSAGE,
 
   83                     NotifyDescriptor.NO_OPTION));
 
   84             if (null != response && DialogDescriptor.YES_OPTION == response) {
 
   86                 new SwingWorker<Void, Void>() {
 
   89                     protected Void doInBackground() throws Exception {
 
   90                         Case.deleteCurrentCase();
 
   95                     protected void done() {
 
   98                         } 
catch (InterruptedException | ExecutionException ex) {
 
   99                             logger.log(Level.SEVERE, String.format(
"Failed to delete case %s at %s", caseName, caseDirectory), ex);
 
  100                             JOptionPane.showMessageDialog(
 
  101                                     WindowManager.getDefault().getMainWindow(),
 
  102                                     Bundle.Case_deleteCaseFailureMessageBox_message(ex.getLocalizedMessage()),
 
  103                                     Bundle.Case_deleteCaseFailureMessageBox_title(),
 
  104                                     JOptionPane.ERROR_MESSAGE);
 
  109                         StartupWindowProvider.getInstance().open();
 
  113         } 
catch (NoCurrentCaseException ex) {
 
  114             logger.log(Level.SEVERE, 
"Case delete action called with no current case", ex);
 
  119     public void performAction() {
 
  123     public String getName() {
 
  124         return NbBundle.getMessage(CaseDeleteAction.class, 
"CTL_CaseDeleteAction");
 
  128     public HelpCtx getHelpCtx() {
 
  129         return HelpCtx.DEFAULT_HELP;
 
synchronized static Logger getLogger(String name)