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