9c4a5e42302a71261fd878e129784616ca7370ca
[simantics/platform.git] / bundles / org.simantics.db.procore.ui / src / org / simantics / db / procore / ui / internal / Util.java
1 package org.simantics.db.procore.ui.internal;
2
3 import org.eclipse.jface.dialogs.MessageDialog;
4 import org.eclipse.swt.widgets.Display;
5 import org.eclipse.swt.widgets.Shell;
6 import org.simantics.db.common.utils.Logger;
7
8 public class Util {
9     static void showInfo(Shell shell, String message) {
10         MessageDialog.openInformation(shell, Messages.Util_Information, message);
11     }
12     static void showWarning(Shell shell, String message) {
13         MessageDialog.openWarning(shell, Messages.Util_Warning, message);
14     }
15     public static void showError(Shell shell, String message) {
16         Util.showError(shell, message, null);
17     }
18     static void showError(Shell shell, String message, Throwable t) {
19         Logger.defaultLogError(message, t);
20         if (null != t)
21             message += "\n" + t.getMessage(); //$NON-NLS-1$
22         MessageDialog.openError(shell, Messages.Util_Error, message);
23     }
24     public static void logError(String message) {
25         Util.logError(message, null);
26     }
27     public static void logError(String message, Throwable cause) {
28         Logger.defaultLogError(message, cause);
29     }
30     public static void trace(Class<?> clazz) {
31         trace(clazz, null);
32     }
33     public static void trace(String message) {
34         trace(null, message);
35     }
36     public static void trace(Class<?> clazz, String message) {
37         String s = ""; //$NON-NLS-1$
38         if (null != clazz)
39             s += clazz.getSimpleName() + " called.\n"; //$NON-NLS-1$
40         if (null != message)
41             s += message;
42         Logger.defaultLogInfo(s);
43     }
44     private static String NL = System.getProperty("line.separator"); //$NON-NLS-1$
45     static class Choice {
46         public Choice(String button, String text) {
47             this.button = button;
48             this.text = text;
49         }
50         public String button;
51         public String text;
52     }
53     public static int select(final Shell shell, final String title, String message, Choice[] choices, int def) {
54         assert(choices.length > 0);
55         if (def < 0 || def >= choices.length)
56             def = 0;
57         final String[] labels = new String[choices.length];
58         final StringBuilder sb = new StringBuilder(message.length() + 256);
59         sb.append(message);
60         for (int i=0; i<labels.length; ++ i) {
61             labels[i] = choices[i].button;
62             sb.append(NL + NL + choices[i].text);
63         }
64         if (Display.getDefault().getThread() == Thread.currentThread())
65             return select(shell, title, sb.toString(), labels, def);
66         class SelectRunnable implements Runnable {
67             int ret;
68             int def;
69             SelectRunnable(int def) {
70                 this.def = def;
71             }
72             public void run() {
73                 ret = select(shell, title, sb.toString(), labels, def);
74             }
75         };
76         SelectRunnable sr = new SelectRunnable(def);
77         Display.getDefault().syncExec(sr);
78         return sr.ret;
79     }
80     private static int select(Shell shell, String title, String message, String[] labels, int def) {
81         MessageDialog dialog = new MessageDialog(shell, title, null, message, MessageDialog.QUESTION, labels, def);
82         int answer = dialog.open();
83         if (answer < 0 || answer >= labels.length)
84             answer = 0;
85         return answer;
86     }
87     public static boolean confirm(Shell shell, String title, String message) {
88         String[] labels = new String[2];
89         labels[0] =  Messages.Util_Yes;
90         labels[1] = Messages.Util_No;
91         MessageDialog dialog = new MessageDialog(shell, title, null, message, MessageDialog.QUESTION, labels, 1);
92         int answer = dialog.open();
93         return answer == 0;
94     }
95     public static boolean openDefaultNo(Shell shell, String title, String message, int style) {
96         String[] labels = new String[2];
97         labels[0] =  Messages.Util_Yes;
98         labels[1] = Messages.Util_No;
99         MessageDialog dialog = new MessageDialog(shell, title, null, message, style, labels, 1);
100         int answer = dialog.open();
101         return answer == 0;
102     }
103     public static String getMessage(Throwable t) {
104         StringBuilder s = new StringBuilder(t.getMessage());
105         final int LIMIT = 10;
106         int i = 0;
107         for (Throwable c = t.getCause(); null != c && i < LIMIT; ++i, c = c.getCause())
108             s.append(NL + "cause: " + c.getMessage()); //$NON-NLS-1$
109         return s.toString();
110     }
111 }