]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - server/runtime/org.argeo.server.core/src/main/java/org/argeo/server/mvc/SerializingView.java
Role DAO
[lgpl/argeo-commons.git] / server / runtime / org.argeo.server.core / src / main / java / org / argeo / server / mvc / SerializingView.java
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
new file mode 100644 (file)
index 0000000..6acecf0
--- /dev/null
@@ -0,0 +1,54 @@
+package org.argeo.server.mvc;
+
+import java.util.Locale;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.argeo.server.ArgeoServerException;
+import org.argeo.server.ServerSerializer;
+import org.springframework.web.servlet.view.AbstractView;
+
+public class SerializingView extends AbstractView implements MvcConstants {
+       private final String viewName;
+       private final Locale locale;
+
+       private final ServerSerializer serializer;
+
+       public SerializingView(String viewName, Locale locale,
+                       ServerSerializer serializer) {
+               this.viewName = viewName;
+               this.locale = locale;
+               this.serializer = serializer;
+       }
+
+       @SuppressWarnings("unchecked")
+       @Override
+       protected void renderMergedOutputModel(Map model,
+                       HttpServletRequest request, HttpServletResponse response)
+                       throws Exception {
+               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(viewName)) {
+                       answer = model.get(viewName);
+               } else {
+                       throw new ArgeoServerException(
+                                       "Model has a size different from 1. Specify a modelKey.");
+               }
+
+               serializer.serialize(answer, request, response);
+       }
+
+       public String getViewName() {
+               return viewName;
+       }
+
+       public Locale getLocale() {
+               return locale;
+       }
+
+}