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) { e.printStackTrace(); 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; } }