+package org.simantics.db.procore.ui;\r
+\r
+import org.eclipse.swt.widgets.Display;\r
+import org.eclipse.swt.widgets.Shell;\r
+import org.eclipse.ui.IWorkbench;\r
+import org.eclipse.ui.IWorkbenchWindow;\r
+import org.simantics.db.DatabaseUserAgent;\r
+import org.simantics.db.exception.InternalException;\r
+import org.simantics.db.procore.ProCoreDriver;\r
+\r
+public final class ProCoreUserAgent implements DatabaseUserAgent {\r
+ private static Shell getShell(IWorkbench workbench) {\r
+ IWorkbenchWindow wbw = workbench.getActiveWorkbenchWindow();\r
+ Shell shell = null;\r
+ if (null != wbw) {\r
+ shell = wbw.getShell();\r
+ } else {\r
+ Display d = getDisplay();\r
+ if (d == null)\r
+ return null;\r
+ shell = d.getActiveShell();\r
+ if (null == shell) {\r
+ Shell[] shells = d.getShells();\r
+ if (null != shells && shells.length > 0)\r
+ shell = shells[0];\r
+ }\r
+ }\r
+ return shell;\r
+ }\r
+ private static Display getDisplay() {\r
+ Display d = Display.getCurrent();\r
+ if (d == null)\r
+ d = Display.getDefault();\r
+ return d;\r
+ }\r
+ private IWorkbench workbench;\r
+ public ProCoreUserAgent(IWorkbench workbench) {\r
+ this.workbench = workbench;\r
+ }\r
+ private Shell getShell() {\r
+ return getShell(workbench);\r
+ }\r
+ @Override\r
+ public boolean handleStart(InternalException exception) {\r
+ Shell shell = getShell();\r
+ if (null == shell)\r
+ return false; // no can do\r
+ try {\r
+ return Auxiliary.handleStart(shell, exception);\r
+ } catch (InternalException e) {\r
+ return false; // no could do\r
+ }\r
+ }\r
+ \r
+ @Override\r
+ public String getId() {\r
+ return ProCoreDriver.ProCoreDriverName;\r
+ }\r
+}
\ No newline at end of file