1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.kuali.student.common.ui.client.widgets;
17
18
19 import org.kuali.student.common.ui.client.application.Application;
20 import org.kuali.student.common.ui.client.application.ApplicationContext;
21 import org.kuali.student.common.ui.client.logging.Logger;
22 import org.kuali.student.common.ui.client.mvc.Callback;
23 import org.kuali.student.common.ui.client.widgets.buttongroups.OkGroup;
24 import org.kuali.student.common.ui.client.widgets.buttongroups.ButtonEnumerations.OkEnum;
25
26 import com.google.gwt.core.client.GWT;
27 import com.google.gwt.user.client.Command;
28 import com.google.gwt.user.client.DeferredCommand;
29 import com.google.gwt.user.client.ui.SimplePanel;
30 import com.google.gwt.user.client.ui.VerticalPanel;
31
32 public class KSErrorDialog {
33
34 final static ApplicationContext context = Application.getApplicationContext();
35
36 public enum MessagesRequired {
37 DIALOG_TITLE("errorDialogTitle"),
38 DESCRIBE_ACTION("describeAction"),
39 ERROR_DESCRIPTION("errorDescription");
40
41 private String messageId;
42 private MessagesRequired(String messageId) {
43 this.messageId = messageId;
44 }
45 public String toString() {
46 return this.messageId;
47 }
48 }
49
50 public static void bindUncaughtExceptionHandler() {
51 GWT.setUncaughtExceptionHandler(new GWT.UncaughtExceptionHandler() {
52 public void onUncaughtException(Throwable e) {
53 GWT.log(e.getMessage(), e);
54 KSErrorDialog.show(e);
55 }
56 });
57 }
58
59 public static void show(final Throwable error) {
60 final KSLightBox lightbox = new KSLightBox();
61
62 final VerticalPanel panel = new VerticalPanel();
63 panel.addStyleName("KS-Error-Dialog");
64
65 final KSLabel title = new KSLabel(context.getMessage(MessagesRequired.DIALOG_TITLE.toString()));
66 title.addStyleName("KS-Error-Dialog-Title");
67
68 final KSLabel errorDescriptionLabel = new KSLabel(context.getMessage(MessagesRequired.ERROR_DESCRIPTION.toString()));
69 errorDescriptionLabel.addStyleName("KS-Error-Dialog-Label");
70
71 final SimplePanel errorDescriptionPanel = new SimplePanel();
72 errorDescriptionPanel.addStyleName("KS-Error-Dialog-Panel");
73
74 final KSTextArea errorDescription = new KSTextArea();
75 errorDescription.setText(getErrorDescription(error));
76 errorDescription.addStyleName("KS-Error-Dialog-TextArea");
77 errorDescription.setReadOnly(true);
78
79 errorDescriptionPanel.add(errorDescription);
80
81
82
83
84
85
86
87
88
89
90
91 final OkGroup buttonPanel = new OkGroup(new Callback<OkEnum>(){
92
93 @Override
94 public void exec(OkEnum result) {
95 switch(result){
96 case Ok:
97 DeferredCommand.addCommand(new Command() {
98 public void execute() {
99 sendReport(error
100 lightbox.hide();
101 }
102 });
103 break;
104 }
105 }
106 });
107
108 panel.add(title);
109 panel.add(errorDescriptionLabel);
110 panel.add(errorDescriptionPanel);
111
112
113 panel.add(buttonPanel);
114
115 panel.setSize("100", "100");
116
117 lightbox.setWidget(panel);
118 lightbox.setSize(440, 200);
119 lightbox.show();
120
121 }
122
123 private static String getErrorDescription(Throwable error) {
124
125 return error.getMessage();
126 }
127
128 private static void sendReport(final Throwable error
129
130 Logger.getClientContextInfo().put("logType", "clientError");
131
132 Logger.error("Uncaught exception", error);
133 Logger.sendLogs();
134
135
136 Logger.getClientContextInfo().clear();
137 }
138
139 }