]> git.argeo.org Git - lgpl/argeo-commons.git/blob - cms/ui/dialogs/CmsFeedback.java
Prepare next development cycle
[lgpl/argeo-commons.git] / cms / ui / dialogs / CmsFeedback.java
1 package org.argeo.cms.ui.dialogs;
2
3 import java.io.PrintWriter;
4 import java.io.StringWriter;
5
6 import org.apache.commons.logging.Log;
7 import org.apache.commons.logging.LogFactory;
8 import org.argeo.cms.CmsMsg;
9 import org.argeo.eclipse.ui.Selected;
10 import org.eclipse.swt.SWT;
11 import org.eclipse.swt.layout.GridData;
12 import org.eclipse.swt.layout.GridLayout;
13 import org.eclipse.swt.widgets.Button;
14 import org.eclipse.swt.widgets.Composite;
15 import org.eclipse.swt.widgets.Control;
16 import org.eclipse.swt.widgets.Label;
17 import org.eclipse.swt.widgets.Shell;
18 import org.eclipse.swt.widgets.Text;
19
20 /** A dialog feedback based on a {@link LightweightDialog}. */
21 public class CmsFeedback extends LightweightDialog {
22 private final static Log log = LogFactory.getLog(CmsFeedback.class);
23
24 private String message;
25 private Throwable exception;
26
27 public CmsFeedback(Shell parentShell, String message, Throwable e) {
28 super(parentShell);
29 this.message = message;
30 this.exception = e;
31 log.error(message, e);
32 }
33
34 public static CmsFeedback show(String message, Throwable e) {
35 // rethrow ThreaDeath in order to make sure that RAP will properly clean
36 // up the UI thread
37 if (e instanceof ThreadDeath)
38 throw (ThreadDeath) e;
39
40 try {
41 CmsFeedback cmsFeedback = new CmsFeedback(null, message, e);
42 cmsFeedback.setBlockOnOpen(false);
43 cmsFeedback.open();
44 return cmsFeedback;
45 } catch (Throwable e1) {
46 log.error("Cannot open error feedback (" + e.getMessage() + "), original error below", e);
47 return null;
48 }
49 }
50
51 public static CmsFeedback show(String message) {
52 CmsFeedback cmsFeedback = new CmsFeedback(null, message, null);
53 cmsFeedback.open();
54 return cmsFeedback;
55 }
56
57 /** Tries to find a display */
58 // private static Display getDisplay() {
59 // try {
60 // Display display = Display.getCurrent();
61 // if (display != null)
62 // return display;
63 // else
64 // return Display.getDefault();
65 // } catch (Exception e) {
66 // return Display.getCurrent();
67 // }
68 // }
69
70 protected Control createDialogArea(Composite parent) {
71 parent.setLayout(new GridLayout(2, false));
72
73 Label messageLbl = new Label(parent, SWT.WRAP);
74 if (message != null)
75 messageLbl.setText(message);
76 else if (exception != null)
77 messageLbl.setText(exception.getLocalizedMessage());
78
79 Button close = new Button(parent, SWT.FLAT);
80 close.setText(CmsMsg.close.lead());
81 close.setLayoutData(new GridData(SWT.END, SWT.TOP, false, false));
82 close.addSelectionListener((Selected) (e) -> closeShell(OK));
83
84 // Composite composite = new Composite(dialogarea, SWT.NONE);
85 // composite.setLayout(new GridLayout(2, false));
86 // composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
87
88 if (exception != null) {
89 Text stack = new Text(parent, SWT.MULTI | SWT.LEAD | SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
90 stack.setEditable(false);
91 stack.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1));
92 StringWriter sw = new StringWriter();
93 exception.printStackTrace(new PrintWriter(sw));
94 stack.setText(sw.toString());
95 }
96
97 // parent.pack();
98 return messageLbl;
99 }
100
101 }