-package org.argeo.slc.web.mvc.result;\r
-\r
-import java.util.SortedMap;\r
-import java.util.TreeMap;\r
-\r
-import javax.servlet.http.HttpServletRequest;\r
-import javax.servlet.http.HttpServletResponse;\r
-\r
-import org.springframework.web.servlet.ModelAndView;\r
-import org.springframework.web.servlet.mvc.ParameterizableViewController;\r
-\r
-import org.argeo.slc.core.structure.tree.TreeSPath;\r
-import org.argeo.slc.core.test.tree.PartSubList;\r
-import org.argeo.slc.core.test.tree.TreeTestResult;\r
-import org.argeo.slc.dao.test.tree.TreeTestResultDao;\r
-import org.argeo.slc.structure.StructureElement;\r
-import org.argeo.slc.test.TestResultPart;\r
-import org.argeo.slc.test.TestStatus;\r
-\r
-public class ResultViewController extends ParameterizableViewController {\r
- public final static String MODELKEY_RESULT = "result";\r
-\r
- private final TreeTestResultDao testResultDao;\r
-\r
- public ResultViewController(TreeTestResultDao testResultDao) {\r
- this.testResultDao = testResultDao;\r
- }\r
-\r
- @Override\r
- protected ModelAndView handleRequestInternal(HttpServletRequest request,\r
- HttpServletResponse response) throws Exception {\r
-\r
- String uuid = request.getParameter("uuid");\r
- TreeTestResult result = testResultDao.getTestResult(uuid);\r
-\r
- SortedMap<TreeSPath, String> toc = generateToc(result);\r
-\r
- SortedMap<TreeSPath, String> describedPaths = new TreeMap<TreeSPath, String>();\r
- for (TreeSPath path : toc.keySet()) {\r
- describedPaths.put(path, describedPath(path, result));\r
- }\r
-\r
- SortedMap<TreeSPath, String> anchors = new TreeMap<TreeSPath, String>();\r
- for (TreeSPath path : toc.keySet()) {\r
- anchors.put(path, anchor(path));\r
- }\r
-\r
- ModelAndView modelAndView = new ModelAndView();\r
-\r
- modelAndView.addObject(MODELKEY_RESULT, result);\r
- modelAndView.addObject("toc", toc);\r
- modelAndView.addObject("describedPaths", describedPaths);\r
- modelAndView.addObject("anchors", anchors);\r
- modelAndView.setViewName(getViewName());\r
- return modelAndView;\r
- }\r
-\r
- private SortedMap<TreeSPath, String> generateToc(TreeTestResult result) {\r
- SortedMap<TreeSPath, String> toc = new TreeMap<TreeSPath, String>();\r
- for (TreeSPath path : result.getResultParts().keySet()) {\r
- PartSubList subList = (PartSubList) result.getResultParts().get(\r
- path);\r
- boolean isFailed = false;\r
- for (TestResultPart part : subList.getParts()) {\r
- if (!part.getStatus().equals(TestStatus.PASSED)) {\r
- isFailed = true;\r
- break;\r
- }\r
- }\r
- fillToc(toc, path, isFailed);\r
- }\r
- return toc;\r
- }\r
-\r
- private void fillToc(SortedMap<TreeSPath, String> toc, TreeSPath path,\r
- boolean isFailed) {\r
- if (isFailed) {\r
- toc.put(path, "failed");\r
- } else {\r
- if (!toc.containsKey(path)) {\r
- toc.put(path, "passed");\r
- }\r
- }\r
-\r
- if (path.getParent() != null) {\r
- fillToc(toc, path.getParent(), isFailed);\r
- }\r
- }\r
-\r
- private static String anchor(TreeSPath path) {\r
- return path.getAsUniqueString().replace(path.getSeparator(), '_');\r
- }\r
-\r
- private static String describedPath(TreeSPath path, TreeTestResult ttr) {\r
- StringBuffer buf = new StringBuffer("");\r
- // TODO :optimize with hierarchy\r
- describedPath(path, buf, ttr);\r
- return buf.toString();\r
- }\r
-\r
- private static void describedPath(TreeSPath path, StringBuffer buf,\r
- TreeTestResult ttr) {\r
- if (path.getParent() != null) {\r
- describedPath(path.getParent(), buf, ttr);\r
- }\r
- String description = path.getName();\r
- StructureElement element = ttr.getElements().get(path);\r
- if (element != null) {\r
- description = element.getLabel();\r
- }\r
- buf.append('/').append(description);\r
- }\r
-\r
-}\r