X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;ds=sidebyside;f=server%2Fruntime%2Forg.argeo.slc.server.json%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fserver%2Fjson%2Fmvc%2FJsonView.java;fp=server%2Fruntime%2Forg.argeo.slc.server.json%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fserver%2Fjson%2Fmvc%2FJsonView.java;h=fcd070a4aa780622b899ceab9507f6207c89c864;hb=e44437193742218b221fed87d196d26e1b2b374c;hp=0000000000000000000000000000000000000000;hpb=05e68e148723e27148dccf6224b30e833aa58999;p=lgpl%2Fargeo-commons.git diff --git a/server/runtime/org.argeo.slc.server.json/src/main/java/org/argeo/server/json/mvc/JsonView.java b/server/runtime/org.argeo.slc.server.json/src/main/java/org/argeo/server/json/mvc/JsonView.java new file mode 100644 index 000000000..fcd070a4a --- /dev/null +++ b/server/runtime/org.argeo.slc.server.json/src/main/java/org/argeo/server/json/mvc/JsonView.java @@ -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; + } + +}