Rev 1863 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1863 | Rev 1936 | ||
---|---|---|---|
1 | package pt.estgp.estgweb.web.controllers.utils; |
1 | package pt.estgp.estgweb.web.controllers.utils; |
2 | 2 | ||
3 | import jomm.utils.MessageResources; |
3 | import jomm.utils.MessageResources; |
4 | import org.apache.log4j.Logger; |
4 | import org.apache.log4j.Logger; |
5 | import org.apache.struts.action.*; |
5 | import org.apache.struts.action.*; |
6 | import org.json.JSONArray; |
6 | import org.json.JSONArray; |
7 | import org.json.JSONException; |
7 | import org.json.JSONException; |
8 | import org.json.JSONObject; |
8 | import org.json.JSONObject; |
9 | import pt.estgp.estgweb.web.controllers.ApplicationDispatchController; |
9 | import pt.estgp.estgweb.web.controllers.ApplicationDispatchController; |
10 | import pt.utl.ist.berserk.logic.serviceManager.exceptions.FilterChainFailedException; |
10 | import pt.utl.ist.berserk.logic.serviceManager.exceptions.FilterChainFailedException; |
11 | 11 | ||
12 | import javax.servlet.ServletException; |
12 | import javax.servlet.ServletException; |
13 | import javax.servlet.http.HttpServletRequest; |
13 | import javax.servlet.http.HttpServletRequest; |
14 | import javax.servlet.http.HttpServletResponse; |
14 | import javax.servlet.http.HttpServletResponse; |
15 | import java.lang.reflect.InvocationTargetException; |
15 | import java.lang.reflect.InvocationTargetException; |
16 | import java.lang.reflect.Method; |
16 | import java.lang.reflect.Method; |
17 | import java.util.Iterator; |
17 | import java.util.Iterator; |
18 | 18 | ||
19 | /** |
19 | /** |
20 | * Created by jorgemachado on 27/12/16. |
20 | * Created by jorgemachado on 27/12/16. |
21 | * |
21 | * |
22 | * Classes extending this Controller must implment the following API in each service |
22 | * Classes extending this Controller must implment the following API in each service |
23 | * and must define the following service names in parameter : |
23 | * and must define the following service names in parameter : |
24 | * |
24 | * |
25 | * ->"serviceJson"<- |
25 | * ->"serviceJson"<- |
26 | * |
26 | * |
27 | * when dispatch = executeService |
27 | * when dispatch = executeService |
28 | * JSONObject serviceName(ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Throwable; |
28 | * JSONObject serviceName(ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Throwable; |
29 | * |
29 | * |
30 | * |
30 | * |
31 | * when dispatch = executeServiceOkFail |
31 | * when dispatch = executeServiceOkFail |
32 | * Boolean serviceName(ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Throwable; |
32 | * Boolean serviceName(ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Throwable; |
33 | * |
33 | * |
34 | */ |
34 | */ |
35 | public abstract class AbstractWidgetAjaxController extends ApplicationDispatchController |
35 | public abstract class AbstractWidgetAjaxController extends ApplicationDispatchController |
36 | { |
36 | { |
37 | private static final 1.5.0/docs/api/java/util/logging/Logger.html">Logger logger = 1.5.0/docs/api/java/util/logging/Logger.html">Logger.getLogger(AbstractWidgetAjaxController.class); |
37 | private static final 1.5.0/docs/api/java/util/logging/Logger.html">Logger logger = 1.5.0/docs/api/java/util/logging/Logger.html">Logger.getLogger(AbstractWidgetAjaxController.class); |
38 | 38 | ||
39 | public static final 1.5.0/docs/api/java/lang/String.html">String WIDGET_REPONSE_KEY = "pt.estgp.estgweb.web.controllers.utils.AbstractWidgetAjaxController"; |
39 | public static final 1.5.0/docs/api/java/lang/String.html">String WIDGET_REPONSE_KEY = "pt.estgp.estgweb.web.controllers.utils.AbstractWidgetAjaxController"; |
40 | 40 | ||
41 | 41 | ||
42 | public ActionForward executeService( |
42 | public ActionForward executeService( |
43 | ActionMapping mapping, |
43 | ActionMapping mapping, |
44 | ActionForm form, |
44 | ActionForm form, |
45 | HttpServletRequest request, |
45 | HttpServletRequest request, |
46 | HttpServletResponse response) |
46 | HttpServletResponse response) |
47 | throws 1.5.0/docs/api/java/lang/Throwable.html">Throwable, ServletException |
47 | throws 1.5.0/docs/api/java/lang/Throwable.html">Throwable, ServletException |
48 | { |
48 | { |
49 | try |
49 | try |
50 | { |
50 | { |
51 | 1.5.0/docs/api/java/lang/String.html">String serviceJson = request.getParameter("serviceJson"); |
51 | 1.5.0/docs/api/java/lang/String.html">String serviceJson = request.getParameter("serviceJson"); |
52 | logger.info("Calling abstract widget service: " + serviceJson); |
52 | logger.info("Calling abstract widget service: " + serviceJson); |
53 | 53 | ||
54 | 1.5.0/docs/api/java/lang/reflect/Method.html">Method serviceChild = this.getClass().getMethod(serviceJson,new 1.5.0/docs/api/java/lang/Class.html">Class[]{ActionForm.class,HttpServletRequest.class,HttpServletResponse.class}); |
54 | 1.5.0/docs/api/java/lang/reflect/Method.html">Method serviceChild = this.getClass().getMethod(serviceJson,new 1.5.0/docs/api/java/lang/Class.html">Class[]{ActionForm.class,HttpServletRequest.class,HttpServletResponse.class}); |
55 | 55 | ||
56 | JSONObject responseJson = (JSONObject) serviceChild.invoke(this, form, request, response); |
56 | JSONObject responseJson = (JSONObject) serviceChild.invoke(this, form, request, response); |
57 | 57 | ||
58 | prepareResponse(responseJson,request,response); |
58 | prepareResponse(responseJson,request,response); |
59 | 59 | ||
60 | return mapping.findForward("JSON_WidgetAjax_RESPONSE"); |
60 | return mapping.findForward("JSON_WidgetAjax_RESPONSE"); |
61 | } |
61 | } |
62 | catch(1.5.0/docs/api/java/lang/reflect/InvocationTargetException.html">InvocationTargetException e) |
62 | catch(1.5.0/docs/api/java/lang/reflect/InvocationTargetException.html">InvocationTargetException e) |
63 | { |
63 | { |
64 | 64 | ||
65 | 1.5.0/docs/api/java/lang/Throwable.html">Throwable cause = e; |
65 | 1.5.0/docs/api/java/lang/Throwable.html">Throwable cause = e; |
66 | if(e.getTargetException() != null) |
66 | if(e.getTargetException() != null) |
67 | { |
67 | { |
68 | cause = e.getTargetException(); |
68 | cause = e.getTargetException(); |
69 | if(e.getTargetException().getCause() != null) |
69 | if(e.getTargetException().getCause() != null) |
70 | cause = e.getTargetException().getCause(); |
70 | cause = e.getTargetException().getCause(); |
71 | } |
71 | } |
72 | prepareError(cause,request,response); |
72 | prepareError(cause,request,response); |
73 | return mapping.findForward("JSON_WidgetAjax_RESPONSE_ERROR"); |
73 | return mapping.findForward("JSON_WidgetAjax_RESPONSE_ERROR"); |
74 | } |
74 | } |
75 | catch(1.5.0/docs/api/java/lang/Throwable.html">Throwable e) |
75 | catch(1.5.0/docs/api/java/lang/Throwable.html">Throwable e) |
76 | { |
76 | { |
77 | if(e instanceof FilterChainFailedException) |
77 | if(e instanceof FilterChainFailedException) |
78 | { |
78 | { |
79 | logger.error(e,e); |
79 | logger.error(e,e); |
80 | } |
80 | } |
81 | else |
81 | else |
82 | { |
82 | { |
83 | prepareError(e,request,response); |
83 | prepareError(e,request,response); |
84 | } |
84 | } |
85 | return mapping.findForward("JSON_WidgetAjax_RESPONSE_ERROR"); |
85 | return mapping.findForward("JSON_WidgetAjax_RESPONSE_ERROR"); |
86 | } |
86 | } |
87 | } |
87 | } |
88 | 88 | ||
89 | public ActionForward executeSimpleServiceOkFail( |
89 | public ActionForward executeSimpleServiceOkFail( |
90 | ActionMapping mapping, |
90 | ActionMapping mapping, |
91 | ActionForm form, |
91 | ActionForm form, |
92 | HttpServletRequest request, |
92 | HttpServletRequest request, |
93 | HttpServletResponse response) |
93 | HttpServletResponse response) |
94 | throws 1.5.0/docs/api/java/lang/Throwable.html">Throwable, ServletException |
94 | throws 1.5.0/docs/api/java/lang/Throwable.html">Throwable, ServletException |
95 | { |
95 | { |
96 | try |
96 | try |
97 | { |
97 | { |
98 | 1.5.0/docs/api/java/lang/String.html">String serviceJson = request.getParameter("serviceJson"); |
98 | 1.5.0/docs/api/java/lang/String.html">String serviceJson = request.getParameter("serviceJson"); |
99 | logger.info("Calling abstract widget service: " + serviceJson); |
99 | logger.info("Calling abstract widget service: " + serviceJson); |
100 | 1.5.0/docs/api/java/lang/reflect/Method.html">Method serviceChild = this.getClass().getMethod(serviceJson,new 1.5.0/docs/api/java/lang/Class.html">Class[]{ActionForm.class,HttpServletRequest.class,HttpServletResponse.class}); |
100 | 1.5.0/docs/api/java/lang/reflect/Method.html">Method serviceChild = this.getClass().getMethod(serviceJson,new 1.5.0/docs/api/java/lang/Class.html">Class[]{ActionForm.class,HttpServletRequest.class,HttpServletResponse.class}); |
101 | 101 | ||
102 | 1.5.0/docs/api/java/lang/Boolean.html">Boolean responseBoolean = (1.5.0/docs/api/java/lang/Boolean.html">Boolean) serviceChild.invoke(this, form, request, response); |
102 | 1.5.0/docs/api/java/lang/Boolean.html">Boolean responseBoolean = (1.5.0/docs/api/java/lang/Boolean.html">Boolean) serviceChild.invoke(this, form, request, response); |
103 | 103 | ||
104 | if(responseBoolean) |
104 | if(responseBoolean) |
105 | { |
105 | { |
106 | /** |
106 | /** |
107 | * RESPONSE IS A JSON OBJECT LIKE THIS: |
107 | * RESPONSE IS A JSON OBJECT LIKE THIS: |
108 | * { |
108 | * { |
109 | * "service" : "ok" |
109 | * "service" : "ok" |
110 | * "messages" : "...." |
110 | * "messages" : "...." |
111 | * } |
111 | * } |
112 | */ |
112 | */ |
113 | JSONObject jsonObject = new JSONObject(); |
113 | JSONObject jsonObject = new JSONObject(); |
114 | jsonObject.put("service-simple-response","ok"); |
114 | jsonObject.put("service-simple-response","ok"); |
115 | prepareResponse(jsonObject, request, response); |
115 | prepareResponse(jsonObject, request, response); |
116 | return mapping.findForward("JSON_WidgetAjax_RESPONSE"); |
116 | return mapping.findForward("JSON_WidgetAjax_RESPONSE"); |
117 | } |
117 | } |
118 | else |
118 | else |
119 | { |
119 | { |
120 | /** |
120 | /** |
121 | * RESPONSE IS A JSON OBJECT LIKE THIS: |
121 | * RESPONSE IS A JSON OBJECT LIKE THIS: |
122 | * { |
122 | * { |
123 | * "service" : "fail", |
123 | * "service" : "fail", |
124 | * "errors" : "...." |
124 | * "errors" : "...." |
125 | * } |
125 | * } |
126 | */ |
126 | */ |
127 | JSONObject jsonObject = new JSONObject(); |
127 | JSONObject jsonObject = new JSONObject(); |
128 | jsonObject.put("service-simple-response","fail"); |
128 | jsonObject.put("service-simple-response","fail"); |
129 | prepareResponse(jsonObject, request, response); |
129 | prepareResponse(jsonObject, request, response); |
130 | return mapping.findForward("JSON_WidgetAjax_RESPONSE"); |
130 | return mapping.findForward("JSON_WidgetAjax_RESPONSE"); |
131 | } |
131 | } |
132 | 132 | ||
133 | } |
133 | } |
134 | catch(1.5.0/docs/api/java/lang/reflect/InvocationTargetException.html">InvocationTargetException e) |
134 | catch(1.5.0/docs/api/java/lang/reflect/InvocationTargetException.html">InvocationTargetException e) |
135 | { |
135 | { |
136 | 1.5.0/docs/api/java/lang/Throwable.html">Throwable cause = e.getCause(); |
136 | 1.5.0/docs/api/java/lang/Throwable.html">Throwable cause = e.getCause(); |
137 | if(e.getTargetException() != null) |
137 | if(e.getTargetException() != null) |
138 | { |
138 | { |
139 | cause = e.getTargetException(); |
139 | cause = e.getTargetException(); |
140 | if(e.getTargetException().getCause() != null) |
140 | if(e.getTargetException().getCause() != null) |
141 | cause = e.getTargetException().getCause(); |
141 | cause = e.getTargetException().getCause(); |
142 | } |
142 | } |
143 | prepareError(cause,request,response); |
143 | prepareError(cause,request,response); |
144 | return mapping.findForward("JSON_WidgetAjax_RESPONSE_ERROR"); |
144 | return mapping.findForward("JSON_WidgetAjax_RESPONSE_ERROR"); |
145 | } |
145 | } |
146 | catch(1.5.0/docs/api/java/lang/Throwable.html">Throwable e) |
146 | catch(1.5.0/docs/api/java/lang/Throwable.html">Throwable e) |
147 | { |
147 | { |
148 | if(e instanceof FilterChainFailedException) |
148 | if(e instanceof FilterChainFailedException) |
149 | { |
149 | { |
150 | logger.error(e,e); |
150 | logger.error(e,e); |
151 | } |
151 | } |
152 | else |
152 | else |
153 | { |
153 | { |
154 | prepareError(e,request,response); |
154 | prepareError(e,request,response); |
155 | } |
155 | } |
156 | return mapping.findForward("JSON_WidgetAjax_RESPONSE_ERROR"); |
156 | return mapping.findForward("JSON_WidgetAjax_RESPONSE_ERROR"); |
157 | } |
157 | } |
158 | 158 | ||
159 | } |
159 | } |
160 | 160 | ||
161 | 161 | ||
162 | /** |
162 | /** |
163 | * RESPONSE IS A JSON OBJECT LIKE THIS: |
163 | * RESPONSE IS A JSON OBJECT LIKE THIS: |
164 | * { |
164 | * { |
165 | * "service" : "ok" OR "fail" if has errors, |
165 | * "service" : "ok" OR "fail" if has errors, |
166 | * "response" : { userResponseJson }, |
166 | * "response" : { userResponseJson }, |
167 | * "messages" : |
167 | * "messages" : |
168 | * [ |
168 | * [ |
169 | * "MESSAGE 1", |
169 | * "MESSAGE 1", |
170 | * "MESSAGE 2", |
170 | * "MESSAGE 2", |
171 | * ], |
171 | * ], |
172 | * "errors" : |
172 | * "errors" : |
173 | * [ |
173 | * [ |
174 | * "ERROR 1", |
174 | * "ERROR 1", |
175 | * "ERROR 2", |
175 | * "ERROR 2", |
176 | * ] |
176 | * ] |
177 | * } |
177 | * } |
178 | * @param object |
178 | * @param object |
179 | * @param request |
179 | * @param request |
180 | * @param response |
180 | * @param response |
181 | * @throws JSONException |
181 | * @throws JSONException |
182 | */ |
182 | */ |
183 | private void prepareResponse(JSONObject object,HttpServletRequest request,HttpServletResponse response) |
183 | private void prepareResponse(JSONObject object,HttpServletRequest request,HttpServletResponse response) |
184 | throws JSONException |
184 | throws JSONException |
185 | { |
185 | { |
186 | ActionMessages messages = super.getMessages(request); |
186 | ActionMessages messages = super.getMessages(request); |
187 | ActionMessages errors = super.getErrors(request); |
187 | ActionMessages errors = super.getErrors(request); |
188 | JSONObject responseObject = new JSONObject(); |
188 | JSONObject responseObject = new JSONObject(); |
189 | if(object.has("service-simple-response")) |
189 | if(object.has("service-simple-response")) |
190 | { |
190 | { |
191 | responseObject.put("service",object.getString("service-simple-response")); |
191 | responseObject.put("service",object.getString("service-simple-response")); |
192 | responseObject.put("response",object.getString("service-simple-response")); |
192 | responseObject.put("response",object.getString("service-simple-response")); |
193 | 193 | ||
194 | } |
194 | } |
195 | else |
195 | else |
196 | { |
196 | { |
197 | 1.5.0/docs/api/java/lang/String.html">String service = errors == null || errors.isEmpty() ? "ok" : "fail"; |
197 | 1.5.0/docs/api/java/lang/String.html">String service = errors == null || errors.isEmpty() ? "ok" : "fail"; |
198 | responseObject.put("service",service); |
198 | responseObject.put("service",service); |
199 | responseObject.put("response",object); |
199 | responseObject.put("response",object); |
200 | } |
200 | } |
201 | 201 | ||
202 | 202 | ||
203 | 203 | ||
204 | 204 | ||
205 | 205 | ||
206 | if(messages != null) |
206 | if(messages != null) |
207 | { |
207 | { |
208 | JSONArray messagesJson = new JSONArray(); |
208 | JSONArray messagesJson = new JSONArray(); |
209 | responseObject.put("messages",messagesJson); |
209 | responseObject.put("messages",messagesJson); |
210 | 1.5.0/docs/api/java/util/Iterator.html">Iterator reports = messages.get(); |
210 | 1.5.0/docs/api/java/util/Iterator.html">Iterator reports = messages.get(); |
211 | while (reports.hasNext()) |
211 | while (reports.hasNext()) |
212 | { |
212 | { |
213 | ActionMessage report = (ActionMessage) reports.next(); |
213 | ActionMessage report = (ActionMessage) reports.next(); |
214 | if(report instanceof StringMessage) |
214 | if(report instanceof StringMessage) |
215 | { |
215 | { |
216 | 1.5.0/docs/api/java/lang/String.html">String messageTranslated = ((StringMessage)report).toString(); |
216 | 1.5.0/docs/api/java/lang/String.html">String messageTranslated = ((StringMessage)report).toString(); |
217 | if(messageTranslated != null) |
217 | if(messageTranslated != null) |
218 | messagesJson.put(messageTranslated); |
218 | messagesJson.put(messageTranslated); |
219 | } |
219 | } |
220 | else |
220 | else |
221 | { |
221 | { |
222 | 1.5.0/docs/api/java/lang/String.html">String messageTranslated = MessageResources.getMessage(request,report.getKey(),report.getValues()); |
222 | 1.5.0/docs/api/java/lang/String.html">String messageTranslated = MessageResources.getMessage(request,report.getKey(),report.getValues()); |
223 | if(messageTranslated != null) |
223 | if(messageTranslated != null) |
224 | messagesJson.put(messageTranslated); |
224 | messagesJson.put(messageTranslated); |
225 | } |
225 | } |
226 | 226 | ||
227 | } |
227 | } |
228 | } |
228 | } |
229 | if(errors != null) |
229 | if(errors != null) |
230 | { |
230 | { |
231 | JSONArray errorsJson = new JSONArray(); |
231 | JSONArray errorsJson = new JSONArray(); |
232 | responseObject.put("errors",errorsJson); |
232 | responseObject.put("errors",errorsJson); |
233 | 1.5.0/docs/api/java/util/Iterator.html">Iterator reports = errors.get(); |
233 | 1.5.0/docs/api/java/util/Iterator.html">Iterator reports = errors.get(); |
234 | while (reports.hasNext()) |
234 | while (reports.hasNext()) |
235 | { |
235 | { |
236 | ActionMessage report = (ActionMessage) reports.next(); |
236 | ActionMessage report = (ActionMessage) reports.next(); |
237 | if(report instanceof StringMessage) |
237 | if(report instanceof StringMessage) |
238 | { |
238 | { |
239 | 1.5.0/docs/api/java/lang/String.html">String messageTranslated = ((StringMessage)report).toString(); |
239 | 1.5.0/docs/api/java/lang/String.html">String messageTranslated = ((StringMessage)report).toString(); |
240 | if(messageTranslated != null) |
240 | if(messageTranslated != null) |
241 | errorsJson.put(messageTranslated); |
241 | errorsJson.put(messageTranslated); |
242 | } |
242 | } |
243 | else |
243 | else |
244 | { |
244 | { |
245 | 1.5.0/docs/api/java/lang/String.html">String messageTranslated = MessageResources.getMessage(request,report.getKey(),report.getValues()); |
245 | 1.5.0/docs/api/java/lang/String.html">String messageTranslated = MessageResources.getMessage(request,report.getKey(),report.getValues()); |
246 | if(messageTranslated != null) |
246 | if(messageTranslated != null) |
247 | errorsJson.put(messageTranslated); |
247 | errorsJson.put(messageTranslated); |
248 | } |
248 | } |
249 | } |
249 | } |
250 | } |
250 | } |
251 | request.setAttribute(WIDGET_REPONSE_KEY, responseObject); |
251 | request.setAttribute(WIDGET_REPONSE_KEY, responseObject); |
252 | } |
252 | } |
253 | 253 | ||
254 | /** |
254 | /** |
255 | * RESPONSE IS A JSON OBJECT LIKE THIS: |
255 | * RESPONSE IS A JSON OBJECT LIKE THIS: |
256 | * { |
256 | * { |
257 | * "service" : "error" |
257 | * "service" : "error" |
258 | * "exception" : "string with exception.toString()" |
258 | * "exception" : "string with exception.toString()" |
259 | * } |
259 | * } |
260 | * @param e |
260 | * @param e |
261 | * @param request |
261 | * @param request |
262 | * @param response |
262 | * @param response |
263 | * @throws JSONException |
263 | * @throws JSONException |
264 | */ |
264 | */ |
265 | public static void prepareError(1.5.0/docs/api/java/lang/Throwable.html">Throwable e,HttpServletRequest request,HttpServletResponse response) throws JSONException |
265 | public static void prepareError(1.5.0/docs/api/java/lang/Throwable.html">Throwable e,HttpServletRequest request,HttpServletResponse response) throws JSONException |
266 | { |
266 | { |
267 | logger.error(e,e); |
267 | logger.error(e,e); |
268 | //request.setAttribute(WIDGET_REPONSE_KEY,e.toString()); |
268 | //request.setAttribute(WIDGET_REPONSE_KEY,e.toString()); |
269 | JSONObject errorObject = new JSONObject(); |
269 | JSONObject errorObject = new JSONObject(); |
270 | errorObject.put("service","error"); |
270 | errorObject.put("service","error"); |
271 | errorObject.put("exception",e.toString()); |
271 | errorObject.put("exception",e.toString()); |
272 | request.setAttribute(WIDGET_REPONSE_KEY,errorObject); |
272 | request.setAttribute(WIDGET_REPONSE_KEY,errorObject); |
273 | } |
273 | } |
274 | - | ||
275 | } |
274 | } |
276 | 275 |