]> git.argeo.org Git - lgpl/argeo-commons.git/blob - SerializingView.java
5957241a314b7edbf6d1fa0c099847547a8d5c7f
[lgpl/argeo-commons.git] / SerializingView.java
1 package org.argeo.server.mvc;
2
3 import java.util.Locale;
4 import java.util.Map;
5
6 import javax.servlet.http.HttpServletRequest;
7 import javax.servlet.http.HttpServletResponse;
8
9 import org.argeo.ArgeoException;
10 import org.argeo.server.ServerAnswer;
11 import org.argeo.server.ServerSerializer;
12 import org.springframework.web.servlet.view.AbstractView;
13
14 public class SerializingView extends AbstractView implements MvcConstants {
15 private final String viewName;
16 private final Locale locale;
17
18 private final ServerSerializer serializer;
19
20 public SerializingView(String viewName, Locale locale,
21 ServerSerializer serializer) {
22 this.viewName = viewName;
23 this.locale = locale;
24 this.serializer = serializer;
25 }
26
27 @SuppressWarnings("unchecked")
28 @Override
29 protected void renderMergedOutputModel(Map model,
30 HttpServletRequest request, HttpServletResponse response)
31 throws Exception {
32 Boolean serverAnswersAsHtml = false;
33 final Object answer;
34 if (model.size() == 1) {
35 answer = model.values().iterator().next();
36 } else if (model.containsKey(ANSWER_MODEL_KEY)) {
37 answer = model.get(ANSWER_MODEL_KEY);
38 } else if (model.containsKey(ANSWER_MODEL_KEY_AS_HTML)) {
39 answer = model.get(ANSWER_MODEL_KEY_AS_HTML);
40 serverAnswersAsHtml = true;
41 } else if (model.containsKey(viewName)) {
42 answer = model.get(viewName);
43 } else {
44 if (model.size() == 0)
45 throw new ArgeoException("Model is empty.");
46 else
47 throw new ArgeoException(
48 "Model has a size different from 1. Specify a modelKey.");
49 }
50
51 if ((answer instanceof ServerAnswer) && serverAnswersAsHtml) {
52 response.setContentType("text/html");
53 ServerAnswer serverAnswer = (ServerAnswer) answer;
54 response.getWriter().append("<pre>");
55 response.getWriter().append(serverAnswer.getMessage());
56 response.getWriter().append("</pre>");
57 } else {
58 serializer.serialize(answer, request, response);
59 }
60 }
61
62 public String getViewName() {
63 return viewName;
64 }
65
66 public Locale getLocale() {
67 return locale;
68 }
69
70 }