]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.db.procore.ui/src/org/simantics/db/procore/ui/internal/UI.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.db.procore.ui / src / org / simantics / db / procore / ui / internal / UI.java
diff --git a/bundles/org.simantics.db.procore.ui/src/org/simantics/db/procore/ui/internal/UI.java b/bundles/org.simantics.db.procore.ui/src/org/simantics/db/procore/ui/internal/UI.java
new file mode 100644 (file)
index 0000000..74fd9cd
--- /dev/null
@@ -0,0 +1,70 @@
+package org.simantics.db.procore.ui.internal;\r
+\r
+import java.io.File;\r
+import java.lang.reflect.Method;\r
+import java.util.HashMap;\r
+import java.util.Map;\r
+\r
+import org.eclipse.swt.widgets.Display;\r
+import org.eclipse.swt.widgets.Shell;\r
+import org.simantics.db.common.utils.Logger;\r
+import org.simantics.db.exception.InternalException;\r
+import org.simantics.db.server.DatabaseCorruptedException;\r
+import org.simantics.db.server.DatabaseLastExitException;\r
+import org.simantics.db.server.DatabaseProtocolException;\r
+import org.simantics.db.server.DatabaseStartException;\r
+import org.simantics.db.server.DatabaseVersionException;\r
+import org.simantics.db.server.GuardFileVersionException;\r
+import org.simantics.db.server.ProCoreException;\r
+\r
+public class UI {\r
+    public static boolean delete(Shell shell, File folder) {\r
+        return HandlerUtil.delete(shell, folder, "Database Delete", null);\r
+    }\r
+    public static boolean purge(Shell shell, File folder) {\r
+        return HandlerUtil.purge(shell, folder, "Database Purge", null);\r
+    }\r
+    public static boolean handleStart(Shell shell, InternalException e) throws ProCoreException {\r
+        if (!(e instanceof ProCoreException))\r
+            return false; // Can not fix this exception.\r
+        ProCoreException pce = (ProCoreException)e;\r
+        Handler handler = getStart(pce);\r
+        assert(null != handler);\r
+        return handler.start(shell, pce);\r
+    }\r
+    public static Display getDisplay() {\r
+        Display d = Display.getCurrent();\r
+        if (d == null)\r
+            d = Display.getDefault();\r
+        return d;\r
+    }\r
+    static Map<Long, Handler> startHandlers = new HashMap<Long, Handler>();\r
+    static {\r
+        startHandlers.put(GuardFileVersionException.getHandlerId(), new GuardFileVersionHandler());\r
+        startHandlers.put(DatabaseCorruptedException.getHandlerId(), new DatabaseCorruptedHandler());\r
+        startHandlers.put(DatabaseStartException.getHandlerId(), new DatabaseStartHandler());\r
+        startHandlers.put(DatabaseVersionException.getHandlerId(), new DatabaseVersionHandler());\r
+        startHandlers.put(DatabaseLastExitException.getHandlerId(), new DatabaseLastExitHandler());\r
+        startHandlers.put(DatabaseProtocolException.getHandlerId(), new DatabaseProtocolHandler());\r
+    }\r
+    private static <E extends ProCoreException> long getId(E pe) {\r
+        long id = 0;\r
+        try {\r
+            Method m = pe.getClass().getMethod("getHandlerId");\r
+            Object value = m.invoke(null);\r
+            id = (long)value;\r
+        } catch (RuntimeException e) {\r
+            Logger.defaultLogError(e);\r
+        } catch (Exception e) {\r
+            Logger.defaultLogError(e);\r
+        }\r
+        return id;\r
+    }\r
+    private static <E extends ProCoreException> Handler getStart(E e) {\r
+       Handler h = startHandlers.get(getId(e));\r
+       if (null == h)\r
+           return new DefaultHandler();\r
+       else\r
+           return h;\r
+    }\r
+}\r