19 package org.sleuthkit.autopsy.casemodule;
 
   21 import java.awt.EventQueue;
 
   22 import java.awt.event.ActionEvent;
 
   23 import java.awt.event.ActionListener;
 
   25 import javax.swing.JOptionPane;
 
   26 import javax.swing.SwingUtilities;
 
   27 import org.openide.util.NbBundle;
 
   28 import org.openide.windows.WindowManager;
 
   29 import java.awt.Cursor;
 
   30 import java.util.logging.Level;
 
   31 import org.openide.DialogDescriptor;
 
   32 import org.openide.DialogDisplayer;
 
   33 import org.openide.NotifyDescriptor;
 
   40 class RecentItems 
implements ActionListener {
 
   42     private static final Logger logger = Logger.getLogger(RecentItems.class.getName());
 
   43     private final String caseName;
 
   44     private final String caseMetaDataFilePath;
 
   52     public RecentItems(String caseName, String caseMetaDataFilePath) {
 
   53         this.caseName = caseName;
 
   54         this.caseMetaDataFilePath = caseMetaDataFilePath;
 
   63     public void actionPerformed(ActionEvent e) {
 
   69         if (IngestManager.getInstance().isIngestRunning()) {
 
   70             NotifyDescriptor descriptor = 
new NotifyDescriptor.Confirmation(
 
   71                     NbBundle.getMessage(
this.getClass(), 
"CloseCaseWhileIngesting.Warning"),
 
   72                     NbBundle.getMessage(
this.getClass(), 
"CloseCaseWhileIngesting.Warning.title"),
 
   73                     NotifyDescriptor.YES_NO_OPTION, NotifyDescriptor.WARNING_MESSAGE);
 
   74             descriptor.setValue(NotifyDescriptor.NO_OPTION);
 
   75             Object res = DialogDisplayer.getDefault().notify(descriptor);
 
   76             if (res != null && res == DialogDescriptor.YES_OPTION) {
 
   77                 Case currentCase = null;
 
   79                     currentCase = Case.getCurrentCase();
 
   80                     currentCase.closeCase();
 
   81                 } 
catch (IllegalStateException ignored) {
 
   85                 } 
catch (CaseActionException ex) {
 
   86                     logger.log(Level.SEVERE, String.format(
"Error closing case at %s while ingest was running", (null!= currentCase ? currentCase.getCaseDirectory() : 
"?")),ex); 
 
   96         if (caseName.equals(
"") || caseMetaDataFilePath.equals(
"") || (!
new File(caseMetaDataFilePath).exists())) {
 
   97             JOptionPane.showMessageDialog(WindowManager.getDefault().getMainWindow(),
 
   98                     NbBundle.getMessage(this.getClass(), 
"RecentItems.openRecentCase.msgDlg.text", caseName),
 
   99                     NbBundle.getMessage(this.getClass(), 
"CaseOpenAction.msgDlg.cantOpenCase.title"),
 
  100                     JOptionPane.ERROR_MESSAGE);
 
  101             RecentCases.
getInstance().removeRecentCase(caseName, caseMetaDataFilePath);
 
  102             if (Case.isCaseOpen() == 
false) {
 
  103                 EventQueue.invokeLater(() -> {
 
  104                     StartupWindowProvider.getInstance().open();
 
  108             SwingUtilities.invokeLater(() -> {
 
  109                 WindowManager.getDefault().getMainWindow().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
 
  113                     Case.open(caseMetaDataFilePath);
 
  114                 } 
catch (CaseActionException ex) {
 
  115                     SwingUtilities.invokeLater(() -> {
 
  116                         logger.log(Level.SEVERE, String.format(
"Error opening case with metadata file path %s", caseMetaDataFilePath), ex); 
 
  117                         WindowManager.getDefault().getMainWindow().setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
 
  118                         JOptionPane.showMessageDialog(
 
  119                                 WindowManager.getDefault().getMainWindow(),
 
  121                                 NbBundle.getMessage(RecentItems.this.getClass(), 
"CaseOpenAction.msgDlg.cantOpenCase.title"), 
 
  122                                 JOptionPane.ERROR_MESSAGE);
 
  123                         if (!Case.isCaseOpen()) {
 
  124                             StartupWindowProvider.getInstance().open();
 
static synchronized IngestManager getInstance()