]> git.argeo.org Git - gpl/argeo-slc.git/blob - runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/AbstractServiceController.java
@update:79; Simplify the execution of flows
[gpl/argeo-slc.git] / runtime / org.argeo.slc.server / src / main / java / org / argeo / slc / web / mvc / AbstractServiceController.java
1 package org.argeo.slc.web.mvc;
2
3 import java.io.PrintWriter;
4 import java.io.StringWriter;
5
6 import javax.servlet.http.HttpServletRequest;
7 import javax.servlet.http.HttpServletResponse;
8
9 import org.argeo.slc.msg.ExecutionAnswer;
10 import org.springframework.web.servlet.ModelAndView;
11 import org.springframework.web.servlet.mvc.AbstractController;
12
13 public abstract class AbstractServiceController extends AbstractController {
14 public final static String KEY_ANSWER = "__answer";
15
16 private String viewName = null;
17
18 @Override
19 protected final ModelAndView handleRequestInternal(
20 HttpServletRequest request, HttpServletResponse response)
21 throws Exception {
22 ModelAndView mv = new ModelAndView();
23 mv.setViewName(getViewName());
24 try {
25 handleServiceRequest(request, response, mv);
26 } catch (Exception e) {
27 e.printStackTrace();
28 StringWriter writer = new StringWriter();
29 e.printStackTrace(new PrintWriter(writer));
30 ExecutionAnswer answer = ExecutionAnswer.error(writer.toString());
31 ModelAndView errorMv = new ModelAndView();
32 errorMv.addObject(KEY_ANSWER, answer);
33 errorMv.setViewName(KEY_ANSWER);
34 return errorMv;
35 }
36
37 if (mv.getModel().size() == 0) {
38 mv.addObject(KEY_ANSWER, ExecutionAnswer
39 .ok("Execution completed properly"));
40 }
41
42 if (mv.getViewName() == null && mv.getModel().size() == 1)
43 mv.setViewName(mv.getModel().keySet().iterator().next().toString());
44
45 return mv;
46 }
47
48 protected abstract void handleServiceRequest(HttpServletRequest request,
49 HttpServletResponse response, ModelAndView modelAndView)
50 throws Exception;
51
52 public void setViewName(String viewName) {
53 this.viewName = viewName;
54 }
55
56 public String getViewName() {
57 return viewName;
58 }
59
60 }