Revision: 6654
          http://sourceforge.net/p/jump-pilot/code/6654
Author:   edso
Date:     2020-12-21 14:56:41 +0000 (Mon, 21 Dec 2020)
Log Message:
-----------
integrate DefaultApplicationExitHandler into closeApplication()
run application-exit-handler handling later to respect cancelling
enhance application-exit-handler error-handling

Modified Paths:
--------------
    core/trunk/src/com/vividsolutions/jump/workbench/ui/WorkbenchFrame.java

Modified: 
core/trunk/src/com/vividsolutions/jump/workbench/ui/WorkbenchFrame.java
===================================================================
--- core/trunk/src/com/vividsolutions/jump/workbench/ui/WorkbenchFrame.java     
2020-12-21 14:43:33 UTC (rev 6653)
+++ core/trunk/src/com/vividsolutions/jump/workbench/ui/WorkbenchFrame.java     
2020-12-21 14:56:41 UTC (rev 6654)
@@ -1398,6 +1398,49 @@
     }
 
     private void closeApplication() {
+      // ask if we wanna save save and really exit first
+      if (!confirmClose(I18N.get("ui.WorkbenchFrame.exit-jump"), 
getLayersWithModifiedFeatureCollections(),
+          getGeneratedLayers(), WorkbenchFrame.this))
+        return;
+
+      // Giuseppe Aruta -June 30 2015 - warning and save selected project 
before closing Openjump
+      try {
+        int res = JOptionPane.YES_OPTION; //can be overridden by dialog below
+
+        if (getActiveTaskFrame() !=null && (res = 
JOptionPane.showConfirmDialog(this, SAVE_PROJECT, EXIT_OPENJUMP, 
JOptionPane.YES_NO_CANCEL_OPTION,
+            JOptionPane.DEFAULT_OPTION, null)) == JOptionPane.YES_OPTION) {
+
+          SaveProjectPlugIn saveProjectPlugIn = new SaveProjectPlugIn();
+          // [mmichaud] added on 2016-11-01 to fix #438
+          UndoableEditReceiver undoableEditReceiver = 
workbenchContext.getLayerManager() != null
+              ? workbenchContext.getLayerManager().getUndoableEditReceiver()
+              : null;
+          if (undoableEditReceiver != null) {
+            undoableEditReceiver.startReceiving();
+          }
+          // end of fix
+
+          PlugInContext context = getContext().createPlugInContext();
+          // save and show affirmation dialog on success
+          saveProjectPlugIn.initialize(context);
+          if (saveProjectPlugIn.execute(context)) {
+            String projectName = 
workbenchContext.getTask().getProjectFile().getAbsolutePath();
+
+            JOptionPane.showMessageDialog(this, PROJECT_SAVED + projectName, 
EXIT_OPENJUMP, JOptionPane.PLAIN_MESSAGE);
+          }
+          // failure to save is handled like a 'Cancel exit' for now
+          else {
+            return;
+          }
+        } else if (res == JOptionPane.CANCEL_OPTION) {
+          return;
+        }
+
+        // PersistentBlackboardPlugIn listens for when the workbench is
+        // hidden [Jon Aquino]
+        saveWindowState();
+        setVisible(false);
+
         // run all applicationExitHandlers
         Object[] handlers = applicationExitHandlers.toArray();
         for (Object handler : handlers) {
@@ -1408,12 +1451,28 @@
           }
         }
 
-        // for compatibility reasons run the old applicationExitHandler as last
-        try{
-          applicationExitHandler.exitApplication(this);
-        } catch (Throwable t) {
-          handleThrowable(t);
+      } catch (final Throwable t) {
+        try {
+          // always log message, log stack only if debug is enabled
+          Logger.warn(t.getMessage(), Logger.isDebugEnabled() ? t : null);
+
+          // show it instantly, before the main frame get's destroyed
+          ErrorDialog.show(this, 
StringUtil.toFriendlyName(t.getClass().getName()), toMessage(t),
+              StringUtil.stackTrace(t));
+        } catch (Throwable t2) {
+          // whatever happened here is not important enough to let it
+          // break the application exiting. log it though.
+          Logger.error(t2);
         }
+      }
+
+      // Invoke System#exit after all pending GUI events have been fired
+      // (e.g. the hiding of this WorkbenchFrame) [Jon Aquino]
+      SwingUtilities.invokeLater(new Runnable() {
+        public void run() {
+          System.exit(0);
+        }
+      });
     }
 
     private Collection getLayersWithModifiedFeatureCollections() {
@@ -1834,8 +1893,6 @@
     //
     InternalFrameCloseHandler internalFrameCloseHandler = new 
DefaultInternalFrameCloser();
 
-    ApplicationExitHandler applicationExitHandler = new 
DefaultApplicationExitHandler();
-
     public InternalFrameCloseHandler getInternalFrameCloseHandler() {
         return internalFrameCloseHandler;
     }
@@ -1930,82 +1987,6 @@
         }
     }
 
-  private class DefaultApplicationExitHandler implements 
ApplicationExitHandler {
-
-    public void exitApplication(final JFrame mainFrame) {
-      PlugInContext context = getContext().createPlugInContext();
-      if (confirmClose(I18N.get("ui.WorkbenchFrame.exit-jump"),
-          getLayersWithModifiedFeatureCollections(), getGeneratedLayers(),
-          WorkbenchFrame.this)) {
-
-        // Giuseppe Aruta -June 30 2015 - warning and save selected
-        // project before closing Openjump
-        try {
-          int res = JOptionPane.showConfirmDialog(mainFrame, SAVE_PROJECT,
-              EXIT_OPENJUMP, JOptionPane.YES_NO_CANCEL_OPTION,
-              JOptionPane.DEFAULT_OPTION, null);
-
-          if (res == JOptionPane.YES_OPTION) {
-
-            SaveProjectPlugIn saveProjectPlugIn = new SaveProjectPlugIn();
-            // [mmichaud] added on 2016-11-01 to fix #438
-            UndoableEditReceiver undoableEditReceiver = workbenchContext
-                .getLayerManager() != null ? workbenchContext.getLayerManager()
-                .getUndoableEditReceiver() : null;
-            if (undoableEditReceiver != null) {
-              undoableEditReceiver.startReceiving();
-            }
-            // end of fix
-            
-            // save and show affirmation dialog on success
-            saveProjectPlugIn.initialize(context);
-            if (saveProjectPlugIn.execute(context)) {
-              String projectName = context.getTask().getProjectFile()
-                  .getAbsolutePath();
-
-              JOptionPane.showMessageDialog(mainFrame, PROJECT_SAVED + 
projectName,
-                  EXIT_OPENJUMP, JOptionPane.PLAIN_MESSAGE);
-            }
-            // failure to save is handled like a 'Cancel exit' for now 
-            else {
-              return;
-            }
-          } else if (res == JOptionPane.CANCEL_OPTION) {
-            return;
-          }
-
-          // PersistentBlackboardPlugIn listens for when the workbench is
-          // hidden [Jon Aquino]
-          saveWindowState();
-          setVisible(false);
-
-        } catch (final Throwable t) {
-          try {
-            // always log message, log stack only if debug is enabled
-            Logger.warn(t.getMessage(), Logger.isDebugEnabled() ? t : null);
-
-            // show it instantly, before the main frame get's destroyed
-            ErrorDialog.show(mainFrame,
-                StringUtil.toFriendlyName(t.getClass().getName()),
-                toMessage(t), StringUtil.stackTrace(t));
-          } catch (Throwable t2) {
-            // whatever happened here is not important enough to let it
-            // break the application exiting. log it though.
-            Logger.error(t2);
-          }
-        }
-
-        // Invoke System#exit after all pending GUI events have been fired
-        // (e.g. the hiding of this WorkbenchFrame) [Jon Aquino]
-        SwingUtilities.invokeLater(new Runnable() {
-          public void run() {
-            System.exit(0);
-          }
-        });
-      }
-    }
-  }
-
     // Method completed by [mmichaud 2007-06-03] to close properly
     // internal frames depending on a TaskFrame.
     // Maybe this method should take place in TaskFrame instead...



_______________________________________________
Jump-pilot-devel mailing list
Jump-pilot-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel

Reply via email to