1 package org
.argeo
.server
.mvc
;
3 import java
.util
.Locale
;
6 import javax
.servlet
.http
.HttpServletRequest
;
7 import javax
.servlet
.http
.HttpServletResponse
;
9 import org
.argeo
.ArgeoException
;
10 import org
.argeo
.server
.ServerAnswer
;
11 import org
.argeo
.server
.ServerSerializer
;
12 import org
.springframework
.validation
.BindingResult
;
13 import org
.springframework
.web
.servlet
.view
.AbstractView
;
15 public class SerializingView
extends AbstractView
implements MvcConstants
{
16 private final String viewName
;
17 private final Locale locale
;
19 private final ServerSerializer serializer
;
21 public SerializingView(String viewName
, Locale locale
,
22 ServerSerializer serializer
) {
23 this.viewName
= viewName
;
25 this.serializer
= serializer
;
28 @SuppressWarnings({ "unchecked", "restriction" })
30 protected void renderMergedOutputModel(Map model
,
31 HttpServletRequest request
, HttpServletResponse response
)
33 Boolean serverAnswersAsHtml
= model
34 .containsKey(ANSWER_MODEL_KEY_AS_HTML
);
36 final Object answer
= findAnswerInModel(model
);
38 if ((answer
instanceof ServerAnswer
) && serverAnswersAsHtml
) {
39 response
.setContentType("text/html");
40 ServerAnswer serverAnswer
= (ServerAnswer
) answer
;
41 response
.getWriter().append("<pre>");
42 response
.getWriter().append(serverAnswer
.getMessage());
43 response
.getWriter().append("</pre>");
45 serializer
.serialize(answer
, request
, response
);
49 @SuppressWarnings("unchecked")
50 protected Object
findAnswerInModel(Map model
) {
51 if (model
.size() == 1) {
52 return model
.values().iterator().next();
53 } else if (model
.size() == 2) {
54 boolean otherIsBindingResult
= false;
55 Object answerValue
= null;
56 for (Object value
: model
.values()) {
57 if (value
instanceof BindingResult
)
58 otherIsBindingResult
= true;
63 if (otherIsBindingResult
)
67 if (model
.containsKey(ANSWER_MODEL_KEY
)) {
68 return model
.get(ANSWER_MODEL_KEY
);
69 } else if (model
.containsKey(ANSWER_MODEL_KEY_AS_HTML
)) {
70 return model
.get(ANSWER_MODEL_KEY_AS_HTML
);
71 } else if (model
.containsKey(viewName
)) {
72 return model
.get(viewName
);
74 if (model
.size() == 0)
75 throw new ArgeoException("Model is empty.");
77 throw new ArgeoException(
78 "Model has a size different from 1. Specify a modelKey.");
82 public String
getViewName() {
86 public Locale
getLocale() {