--- /dev/null
+package org.simantics.db.procore.ui.internal;\r
+\r
+import org.eclipse.jface.dialogs.MessageDialog;\r
+import org.eclipse.swt.widgets.Display;\r
+import org.eclipse.swt.widgets.Shell;\r
+import org.simantics.db.common.utils.Logger;\r
+\r
+public class Util {\r
+ static void showInfo(Shell shell, String message) {\r
+ MessageDialog.openInformation(shell, "Information", message);\r
+ }\r
+ static void showWarning(Shell shell, String message) {\r
+ MessageDialog.openWarning(shell, "Warning", message);\r
+ }\r
+ public static void showError(Shell shell, String message) {\r
+ Util.showError(shell, message, null);\r
+ }\r
+ static void showError(Shell shell, String message, Throwable t) {\r
+ Logger.defaultLogError(message, t);\r
+ if (null != t)\r
+ message += "\n" + t.getMessage();\r
+ MessageDialog.openError(shell, "Error", message);\r
+ }\r
+ public static void logError(String message) {\r
+ Util.logError(message, null);\r
+ }\r
+ public static void logError(String message, Throwable cause) {\r
+ Logger.defaultLogError(message, cause);\r
+ }\r
+ public static void trace(Class<?> clazz) {\r
+ trace(clazz, null);\r
+ }\r
+ public static void trace(String message) {\r
+ trace(null, message);\r
+ }\r
+ public static void trace(Class<?> clazz, String message) {\r
+ String s = "";\r
+ if (null != clazz)\r
+ s += clazz.getSimpleName() + " called.\n";\r
+ if (null != message)\r
+ s += message;\r
+ Logger.defaultLogTrace(s);\r
+ }\r
+ private static String NL = System.getProperty("line.separator");\r
+ static class Choice {\r
+ public Choice(String button, String text) {\r
+ this.button = button;\r
+ this.text = text;\r
+ }\r
+ public String button;\r
+ public String text;\r
+ }\r
+ public static int select(final Shell shell, final String title, String message, Choice[] choices, int def) {\r
+ assert(choices.length > 0);\r
+ if (def < 0 || def >= choices.length)\r
+ def = 0;\r
+ final String[] labels = new String[choices.length];\r
+ final StringBuilder sb = new StringBuilder(message.length() + 256);\r
+ sb.append(message);\r
+ for (int i=0; i<labels.length; ++ i) {\r
+ labels[i] = choices[i].button;\r
+ sb.append(NL + NL + choices[i].text);\r
+ }\r
+ if (Display.getDefault().getThread() == Thread.currentThread())\r
+ return select(shell, title, sb.toString(), labels, def);\r
+ class SelectRunnable implements Runnable {\r
+ int ret;\r
+ int def;\r
+ SelectRunnable(int def) {\r
+ this.def = def;\r
+ }\r
+ public void run() {\r
+ ret = select(shell, title, sb.toString(), labels, def);\r
+ }\r
+ };\r
+ SelectRunnable sr = new SelectRunnable(def);\r
+ Display.getDefault().syncExec(sr);\r
+ return sr.ret;\r
+ }\r
+ private static int select(Shell shell, String title, String message, String[] labels, int def) {\r
+ MessageDialog dialog = new MessageDialog(shell, title, null, message, MessageDialog.QUESTION, labels, def);\r
+ int answer = dialog.open();\r
+ if (answer < 0 || answer >= labels.length)\r
+ answer = 0;\r
+ return answer;\r
+ }\r
+ public static boolean confirm(Shell shell, String title, String message) {\r
+ String[] labels = new String[2];\r
+ labels[0] = "Yes";\r
+ labels[1] = "No";\r
+ MessageDialog dialog = new MessageDialog(shell, title, null, message, MessageDialog.QUESTION, labels, 1);\r
+ int answer = dialog.open();\r
+ return answer == 0;\r
+ }\r
+ public static boolean openDefaultNo(Shell shell, String title, String message, int style) {\r
+ String[] labels = new String[2];\r
+ labels[0] = "Yes";\r
+ labels[1] = "No";\r
+ MessageDialog dialog = new MessageDialog(shell, title, null, message, style, labels, 1);\r
+ int answer = dialog.open();\r
+ return answer == 0;\r
+ }\r
+ public static String getMessage(Throwable t) {\r
+ StringBuilder s = new StringBuilder(t.getMessage());\r
+ final int LIMIT = 10;\r
+ int i = 0;\r
+ for (Throwable c = t.getCause(); null != c && i < LIMIT; ++i, c = c.getCause())\r
+ s.append(NL + "cause: " + c.getMessage());\r
+ return s.toString();\r
+ }\r
+}\r