--- /dev/null
+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