Subversion Repositories bacoAlunos

Rev

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