Introduce Server JSON
[lgpl/argeo-commons.git] / server / runtime / org.argeo.server.json / src / main / java / org / argeo / server / json / mvc / JsonView.java
diff --git a/server/runtime/org.argeo.server.json/src/main/java/org/argeo/server/json/mvc/JsonView.java b/server/runtime/org.argeo.server.json/src/main/java/org/argeo/server/json/mvc/JsonView.java
new file mode 100644 (file)
index 0000000..fcd070a
--- /dev/null
@@ -0,0 +1,47 @@
+package org.argeo.slc.web.mvc;
+
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.springframework.web.servlet.view.AbstractView;
+
+/** Marshal one of the object of the map to the output. */
+public class JsonView extends AbstractView {
+       private String modelKey = null;
+
+       public JsonView() {
+       }
+
+       @Override
+       @SuppressWarnings(value = { "unchecked" })
+       protected void renderMergedOutputModel(Map model,
+                       HttpServletRequest request, HttpServletResponse response)
+                       throws Exception {
+               final Object answer;
+               if (modelKey != null) {
+                       if (!model.containsKey(modelKey))
+                               throw new SlcException("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();
+               }
+
+               if (answer instanceof JSONObject) {
+                       ((JSONObject) answer).write(response.getWriter());
+               } else {
+                       JSONObject jsonObject = new JSONObject(answer);
+                       jsonObject.write(response.getWriter());
+               }
+       }
+
+       public void setModelKey(String modelKey) {
+               this.modelKey = modelKey;
+       }
+
+}