Allows to return HTML from serializing views
authorMathieu Baudier <mbaudier@argeo.org>
Fri, 27 Nov 2009 09:38:53 +0000 (09:38 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Fri, 27 Nov 2009 09:38:53 +0000 (09:38 +0000)
git-svn-id: https://svn.argeo.org/commons/trunk@3176 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

server/runtime/org.argeo.server.core/src/main/java/org/argeo/server/ServerAnswer.java
server/runtime/org.argeo.server.core/src/main/java/org/argeo/server/mvc/MvcConstants.java
server/runtime/org.argeo.server.core/src/main/java/org/argeo/server/mvc/SerializingView.java
server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/server/jcr/mvc/JcrManagerController.java
server/runtime/org.argeo.server.json/src/main/java/org/argeo/server/json/GenericJsonDeserializer.java
server/runtime/org.argeo.server.json/src/main/java/org/argeo/server/json/JsonServerMapper.java
server/runtime/org.argeo.server.json/src/main/java/org/argeo/server/json/JsonServerSerializer.java

index 163cdf87fc402a4c55a2de0192fb773baa41bde0..d0fc26a09508d1c1813965158a76d1b39376a474 100644 (file)
@@ -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);
index 78846b0e4c0727ac13fc8e32619311ae347988a9..93053ff54c90d48fd645b2b58b95bf07408e45fc 100644 (file)
@@ -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";
 }
index 02654e9ebf224d3928e9ff4c867649636c173d11..ed7ab9d1b65fbb286796c1f173d531fc17625f9b 100644 (file)
@@ -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("<pre>");
+                       response.getWriter().append(serverAnswer.getMessage());
+                       response.getWriter().append("</pre>");
+               } else {
+                       serializer.serialize(answer, request, response);
+               }
        }
 
        public String getViewName() {
index 453c4a4debd7a41835360c3796ae5b24b2baaee0..37fca841c1104366d1f3f1c581ac0ad9a39e88b8 100644 (file)
@@ -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(), "/");
index 18c7d3e520bb1472c1c31d1d180652bbb84c6ea3..5c865af961b845b5662efa05c68b75fd1130cbc5 100644 (file)
@@ -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<T> extends JsonDeserializer<T> {
                        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);
index 7ca8352d5998676df6e4847a02e13d9ffdfeed18..7a368f80c2d8efc9b1833e13eb383248338c7b76 100644 (file)
@@ -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);
                }
 
        }
index a5a7f43e3a0e5b51b5510bb58934e480a07f75e1..96e6d2765d2d2a9727990bc26472432edace50da 100644 (file)
@@ -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("<pre>");
+
                        serialize(response.getWriter(), obj);
+
+                       if (asHtml)
+                               response.getWriter().append("</pre>");
+
                } 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 {