]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/AbstractServiceController.java
Introduce service servlet
[gpl/argeo-slc.git] / runtime / org.argeo.slc.server / src / main / java / org / argeo / slc / web / mvc / AbstractServiceController.java
diff --git a/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/AbstractServiceController.java b/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/AbstractServiceController.java
new file mode 100644 (file)
index 0000000..3b10f0b
--- /dev/null
@@ -0,0 +1,59 @@
+package org.argeo.slc.web.mvc;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.argeo.slc.msg.ExecutionAnswer;
+import org.springframework.web.servlet.ModelAndView;
+import org.springframework.web.servlet.mvc.AbstractController;
+
+public abstract class AbstractServiceController extends AbstractController {
+       public final static String KEY_ANSWER = "__answer";
+
+       private String viewName = null;
+
+       @Override
+       protected final ModelAndView handleRequestInternal(
+                       HttpServletRequest request, HttpServletResponse response)
+                       throws Exception {
+               ModelAndView mv = new ModelAndView();
+               mv.setViewName(getViewName());
+               try {
+                       handleServiceRequest(request, response, mv);
+               } catch (Exception e) {
+                       StringWriter writer = new StringWriter();
+                       e.printStackTrace(new PrintWriter(writer));
+                       ExecutionAnswer answer = ExecutionAnswer.error(writer.toString());
+                       ModelAndView errorMv = new ModelAndView();
+                       errorMv.addObject(KEY_ANSWER, answer);
+                       errorMv.setViewName(KEY_ANSWER);
+                       return errorMv;
+               }
+
+               if (mv.getModel().size() == 0) {
+                       mv.addObject(KEY_ANSWER, ExecutionAnswer
+                                       .ok("Execution completed properly"));
+               }
+
+               if (mv.getViewName() == null && mv.getModel().size() == 1)
+                       mv.setViewName(mv.getModel().keySet().iterator().next().toString());
+
+               return mv;
+       }
+
+       protected abstract void handleServiceRequest(HttpServletRequest request,
+                       HttpServletResponse response, ModelAndView modelAndView)
+                       throws Exception;
+
+       public void setViewName(String viewName) {
+               this.viewName = viewName;
+       }
+
+       public String getViewName() {
+               return viewName;
+       }
+
+}