Security Demo
[lgpl/argeo-commons.git] / server / runtime / org.argeo.server.json / src / main / java / org / argeo / server / json / mvc / JsonView.java
index fcd070a4aa780622b899ceab9507f6207c89c864..2d342e9b3eaf2da1840a1c9ba8501be89b8fe80c 100644 (file)
@@ -1,17 +1,25 @@
-package org.argeo.slc.web.mvc;
+package org.argeo.server.json.mvc;
 
 import java.util.Map;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import org.argeo.server.ArgeoServerException;
+import org.codehaus.jackson.JsonFactory;
+import org.codehaus.jackson.JsonGenerator;
+import org.codehaus.jackson.map.ObjectMapper;
 import org.springframework.web.servlet.view.AbstractView;
 
 /** Marshal one of the object of the map to the output. */
 public class JsonView extends AbstractView {
+       private JsonFactory jsonFactory = new JsonFactory();
+       private ObjectMapper objectMapper = new ObjectMapper();
+
        private String modelKey = null;
 
-       public JsonView() {
+       public JsonView(String modelKey) {
+               this.modelKey = modelKey;
        }
 
        @Override
@@ -20,24 +28,26 @@ public class JsonView extends AbstractView {
                        HttpServletRequest request, HttpServletResponse response)
                        throws Exception {
                final Object answer;
-               if (modelKey != null) {
+               if (model.size() == 1)
+                       answer = model.values().iterator().next();
+               else if (modelKey != null) {
                        if (!model.containsKey(modelKey))
-                               throw new SlcException("Key " + modelKey
+                               throw new ArgeoServerException("Key " + modelKey
                                                + " not found in model.");
                        answer = model.get(modelKey);
-               } else {
-                       if (model.size() != 1)
-                               throw new SlcException(
-                                               "Model has a size different from 1. Specify a modelKey.");
-                       answer = model.values().iterator().next();
+               } else {// models.size!=1 and no modelKey
+                       throw new ArgeoServerException(
+                                       "Model has a size different from 1. Specify a modelKey.");
                }
 
-               if (answer instanceof JSONObject) {
-                       ((JSONObject) answer).write(response.getWriter());
-               } else {
-                       JSONObject jsonObject = new JSONObject(answer);
-                       jsonObject.write(response.getWriter());
-               }
+               response.setContentType("application/json");
+
+               JsonGenerator jsonGenerator = jsonFactory.createJsonGenerator(response
+                               .getWriter());
+               jsonGenerator.useDefaultPrettyPrinter();
+
+               objectMapper.writeValue(jsonGenerator, answer);
+
        }
 
        public void setModelKey(String modelKey) {