]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.workbench/src/org/simantics/workbench/internal/ApplicationUtil.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.workbench / src / org / simantics / workbench / internal / ApplicationUtil.java
diff --git a/bundles/org.simantics.workbench/src/org/simantics/workbench/internal/ApplicationUtil.java b/bundles/org.simantics.workbench/src/org/simantics/workbench/internal/ApplicationUtil.java
new file mode 100644 (file)
index 0000000..ae0746b
--- /dev/null
@@ -0,0 +1,71 @@
+package org.simantics.workbench.internal;\r
+\r
+import java.util.concurrent.atomic.AtomicBoolean;\r
+\r
+import org.eclipse.jface.dialogs.MessageDialog;\r
+import org.simantics.db.Session;\r
+import org.simantics.ui.SimanticsUI;\r
+import org.simantics.utils.ui.ErrorLogger;\r
+import org.simantics.utils.ui.dialogs.SafeMessageDialog;\r
+\r
+/**\r
+ * @author Tuukka Lehtonen\r
+ */\r
+final class ApplicationUtil {\r
+\r
+    /**\r
+     * Used to make sure that the user has a choice to save the changes into the\r
+     * active database before closing.\r
+     */\r
+    public static boolean allowShutdown(AtomicBoolean saveAtExit) {\r
+        try {\r
+            if (hasUnsavedChanges()) {\r
+                String[] buttons = { "&Save", "&Don't save", "&Cancel" };\r
+                int result = SafeMessageDialog.doMessageDialog("Save Resources", null, "Save changes before closing ?",\r
+                        MessageDialog.QUESTION, buttons, 2);\r
+\r
+                switch (result) {\r
+                    case 0:\r
+                        saveAtExit.set(true);\r
+                        break;\r
+                    case 1:\r
+                        saveAtExit.set(false);\r
+                        break;\r
+                    case 2:\r
+                        return false;\r
+                    default:\r
+                        return false;\r
+                }\r
+            }\r
+\r
+            // If any errors occur during this check, just log them, but allow\r
+            // for the program to be closed and make sure nothing is saved,\r
+            // since it would probably be corrupt.\r
+        } catch (RuntimeException e) {\r
+            ErrorLogger.defaultLogError(\r
+                    "RuntimeException occured while querying database session for unsaved changes.", e);\r
+            saveAtExit.set(false);\r
+        } catch (Error e) {\r
+            ErrorLogger.defaultLogError("Error occured while querying database session for unsaved changes.", e);\r
+            saveAtExit.set(false);\r
+        }\r
+        return true;\r
+    }\r
+\r
+    public static boolean hasUnsavedChanges() {\r
+        Session session = SimanticsUI.peekSession();\r
+        if (session == null)\r
+            return false;\r
+\r
+        // hasChangesToSave is deprecated\r
+//        LifecycleSupport lfs = session.getService(LifecycleSupport.class);\r
+//        try {\r
+//            return lfs.hasChangesToSave();\r
+//        } catch (DatabaseException e) {\r
+//            ErrorLogger.defaultLogError(\r
+//                    "Problems encountered while checking for unsaved changes, see exception for details.", e);\r
+//        }\r
+        return false;\r
+    }\r
+\r
+}\r