From e38c8ad82cb57e56ab246b1d65f440653bed78f8 Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Fri, 27 Nov 2009 09:38:53 +0000 Subject: [PATCH] Allows to return HTML from serializing views git-svn-id: https://svn.argeo.org/commons/trunk@3176 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- .../java/org/argeo/server/ServerAnswer.java | 2 ++ .../org/argeo/server/mvc/MvcConstants.java | 1 + .../org/argeo/server/mvc/SerializingView.java | 15 ++++++++++++- .../server/jcr/mvc/JcrManagerController.java | 4 ++-- .../server/json/GenericJsonDeserializer.java | 4 ++-- .../argeo/server/json/JsonServerMapper.java | 6 ++--- .../server/json/JsonServerSerializer.java | 22 ++++++++++++++----- 7 files changed, 41 insertions(+), 13 deletions(-) diff --git a/server/runtime/org.argeo.server.core/src/main/java/org/argeo/server/ServerAnswer.java b/server/runtime/org.argeo.server.core/src/main/java/org/argeo/server/ServerAnswer.java index 163cdf87f..d0fc26a09 100644 --- a/server/runtime/org.argeo.server.core/src/main/java/org/argeo/server/ServerAnswer.java +++ b/server/runtime/org.argeo.server.core/src/main/java/org/argeo/server/ServerAnswer.java @@ -14,6 +14,8 @@ public class ServerAnswer { private String status = OK; private String message = ""; + // TODO: add an exception field + /** Canonical constructor */ public ServerAnswer(String status, String message) { setStatus(status); diff --git a/server/runtime/org.argeo.server.core/src/main/java/org/argeo/server/mvc/MvcConstants.java b/server/runtime/org.argeo.server.core/src/main/java/org/argeo/server/mvc/MvcConstants.java index 78846b0e4..93053ff54 100644 --- a/server/runtime/org.argeo.server.core/src/main/java/org/argeo/server/mvc/MvcConstants.java +++ b/server/runtime/org.argeo.server.core/src/main/java/org/argeo/server/mvc/MvcConstants.java @@ -2,4 +2,5 @@ package org.argeo.server.mvc; public interface MvcConstants { public final static String ANSWER_MODEL_KEY = "org.argeo.server.mvc.ANSWER"; + public final static String ANSWER_MODEL_KEY_AS_HTML = "org.argeo.server.mvc.ANSWER_AS_HTML"; } diff --git a/server/runtime/org.argeo.server.core/src/main/java/org/argeo/server/mvc/SerializingView.java b/server/runtime/org.argeo.server.core/src/main/java/org/argeo/server/mvc/SerializingView.java index 02654e9eb..ed7ab9d1b 100644 --- a/server/runtime/org.argeo.server.core/src/main/java/org/argeo/server/mvc/SerializingView.java +++ b/server/runtime/org.argeo.server.core/src/main/java/org/argeo/server/mvc/SerializingView.java @@ -7,6 +7,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.argeo.ArgeoException; +import org.argeo.server.ServerAnswer; import org.argeo.server.ServerSerializer; import org.springframework.web.servlet.view.AbstractView; @@ -28,11 +29,15 @@ public class SerializingView extends AbstractView implements MvcConstants { protected void renderMergedOutputModel(Map model, HttpServletRequest request, HttpServletResponse response) throws Exception { + Boolean serverAnswersAsHtml = false; final Object answer; if (model.size() == 1) { answer = model.values().iterator().next(); } else if (model.containsKey(ANSWER_MODEL_KEY)) { answer = model.get(ANSWER_MODEL_KEY); + } else if (model.containsKey(ANSWER_MODEL_KEY_AS_HTML)) { + answer = model.get(ANSWER_MODEL_KEY_AS_HTML); + serverAnswersAsHtml = true; } else if (model.containsKey(viewName)) { answer = model.get(viewName); } else { @@ -40,7 +45,15 @@ public class SerializingView extends AbstractView implements MvcConstants { "Model has a size different from 1. Specify a modelKey."); } - serializer.serialize(answer, request, response); + if ((answer instanceof ServerAnswer) && serverAnswersAsHtml) { + response.setContentType("text/html"); + ServerAnswer serverAnswer = (ServerAnswer) answer; + response.getWriter().append("
");
+			response.getWriter().append(serverAnswer.getMessage());
+			response.getWriter().append("
"); + } else { + serializer.serialize(answer, request, response); + } } public String getViewName() { diff --git a/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/server/jcr/mvc/JcrManagerController.java b/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/server/jcr/mvc/JcrManagerController.java index 453c4a4de..37fca841c 100644 --- a/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/server/jcr/mvc/JcrManagerController.java +++ b/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/server/jcr/mvc/JcrManagerController.java @@ -35,7 +35,7 @@ public class JcrManagerController implements MvcConstants { @SuppressWarnings("unchecked") @RequestMapping("/upload/**") - @ModelAttribute(ANSWER_MODEL_KEY) + @ModelAttribute(ANSWER_MODEL_KEY_AS_HTML) public ServerAnswer upload(HttpServletRequest request, HttpServletResponse response) throws Exception { // Parse the request @@ -50,7 +50,7 @@ public class JcrManagerController implements MvcConstants { } ByteArrayResource res = new ByteArrayResource(arr); -// String pathInfo = request.getPathInfo(); + // String pathInfo = request.getPathInfo(); StringBuffer path = new StringBuffer("/"); StringTokenizer st = new StringTokenizer(request.getPathInfo(), "/"); diff --git a/server/runtime/org.argeo.server.json/src/main/java/org/argeo/server/json/GenericJsonDeserializer.java b/server/runtime/org.argeo.server.json/src/main/java/org/argeo/server/json/GenericJsonDeserializer.java index 18c7d3e52..5c865af96 100644 --- a/server/runtime/org.argeo.server.json/src/main/java/org/argeo/server/json/GenericJsonDeserializer.java +++ b/server/runtime/org.argeo.server.json/src/main/java/org/argeo/server/json/GenericJsonDeserializer.java @@ -7,7 +7,7 @@ import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.argeo.server.ArgeoServerException; +import org.argeo.ArgeoException; import org.codehaus.jackson.JsonFactory; import org.codehaus.jackson.JsonGenerator; import org.codehaus.jackson.JsonNode; @@ -61,7 +61,7 @@ public class GenericJsonDeserializer extends JsonDeserializer { objectFactory = defaultObjectFactory; if (objectFactory == null || !objectFactory.supports(type)) - throw new ArgeoServerException( + throw new ArgeoException( "Cannot find JSON object factory for type " + type); return (T) objectFactory.readValue(type, str); diff --git a/server/runtime/org.argeo.server.json/src/main/java/org/argeo/server/json/JsonServerMapper.java b/server/runtime/org.argeo.server.json/src/main/java/org/argeo/server/json/JsonServerMapper.java index 7ca8352d5..7a368f80c 100644 --- a/server/runtime/org.argeo.server.json/src/main/java/org/argeo/server/json/JsonServerMapper.java +++ b/server/runtime/org.argeo.server.json/src/main/java/org/argeo/server/json/JsonServerMapper.java @@ -9,7 +9,7 @@ import java.util.Map; import org.apache.commons.io.IOUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.argeo.server.ArgeoServerException; +import org.argeo.ArgeoException; import org.argeo.server.Deserializer; import org.argeo.server.ServerDeserializer; import org.codehaus.jackson.JsonProcessingException; @@ -64,7 +64,7 @@ public class JsonServerMapper extends JsonServerSerializer implements return getObjectMapper().readValue(reader, targetClass); } catch (Exception e) { - throw new ArgeoServerException("Cannot deserialize " + reader, e); + throw new ArgeoException("Cannot deserialize " + reader, e); } } @@ -79,7 +79,7 @@ public class JsonServerMapper extends JsonServerSerializer implements return getObjectMapper().readValue(reader, clss); } catch (Exception e) { - throw new ArgeoServerException("Cannot deserialize " + reader, e); + throw new ArgeoException("Cannot deserialize " + reader, e); } } diff --git a/server/runtime/org.argeo.server.json/src/main/java/org/argeo/server/json/JsonServerSerializer.java b/server/runtime/org.argeo.server.json/src/main/java/org/argeo/server/json/JsonServerSerializer.java index a5a7f43e3..96e6d2765 100644 --- a/server/runtime/org.argeo.server.json/src/main/java/org/argeo/server/json/JsonServerSerializer.java +++ b/server/runtime/org.argeo.server.json/src/main/java/org/argeo/server/json/JsonServerSerializer.java @@ -9,7 +9,7 @@ import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.argeo.server.ArgeoServerException; +import org.argeo.ArgeoException; import org.argeo.server.Serializer; import org.argeo.server.ServerSerializer; import org.codehaus.jackson.JsonFactory; @@ -25,15 +25,27 @@ public class JsonServerSerializer implements ServerSerializer, Serializer { private Boolean prettyPrint = false; + private Boolean asHtml = false; + // private String encoding = "UTF8"; public void serialize(Object obj, HttpServletRequest request, HttpServletResponse response) { - response.setContentType("application/json"); + if (asHtml) + response.setContentType("text/html"); + else + response.setContentType("application/json"); try { + if (asHtml) + response.getWriter().append("
");
+
 			serialize(response.getWriter(), obj);
+
+			if (asHtml)
+				response.getWriter().append("
"); + } catch (IOException e) { - throw new ArgeoServerException("Cannot open response stream.", e); + throw new ArgeoException("Cannot open response stream.", e); } } @@ -52,7 +64,7 @@ public class JsonServerSerializer implements ServerSerializer, Serializer { objectMapper.writeValue(jsonGenerator, obj); } catch (Exception e) { - throw new ArgeoServerException("Cannot serialize " + obj, e); + throw new ArgeoException("Cannot serialize " + obj, e); } finally { if (jsonGenerator != null) try { @@ -77,7 +89,7 @@ public class JsonServerSerializer implements ServerSerializer, Serializer { jsonGenerator.close(); log.debug(stringWriter.toString()); } catch (Exception e) { - throw new ArgeoServerException("Cannot log JSON", e); + throw new ArgeoException("Cannot log JSON", e); } finally { if (jsonGenerator != null) try { -- 2.30.2