X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;ds=sidebyside;f=runtime%2Forg.argeo.slc.server%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fweb%2Fmvc%2FAbstractServiceController.java;fp=runtime%2Forg.argeo.slc.server%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fweb%2Fmvc%2FAbstractServiceController.java;h=3b10f0b22c5dbe1b1952e2eb4a8609eac45068f7;hb=71412758e17f020094abef5dc2569c3e6386309e;hp=0000000000000000000000000000000000000000;hpb=2086a63ded097d7a0525aeeb441e6a1dad05cba6;p=gpl%2Fargeo-slc.git 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 index 000000000..3b10f0b22 --- /dev/null +++ b/runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/AbstractServiceController.java @@ -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; + } + +}