--- /dev/null
+package org.argeo.slc.web.mvc.result;\r
+\r
+import java.util.List;\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.test.tree.TreeTestResult;\r
+import org.argeo.slc.dao.test.tree.TreeTestResultDao;\r
+\r
+public class ResultListController extends ParameterizableViewController {\r
+ private final TreeTestResultDao testResultDao;\r
+\r
+ public ResultListController(TreeTestResultDao testResultDao) {\r
+ this.testResultDao = testResultDao;\r
+ }\r
+\r
+ @Override\r
+ protected ModelAndView handleRequestInternal(HttpServletRequest request,\r
+ HttpServletResponse response) throws Exception {\r
+\r
+ ModelAndView modelAndView = new ModelAndView();\r
+\r
+ List<TreeTestResult> results = testResultDao.listTestResults();\r
+ modelAndView.addObject("results", results);\r
+ modelAndView.setViewName(getViewName());\r
+ return modelAndView;\r
+ }\r
+}\r
--- /dev/null
+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.StructureElement;\r
+import org.argeo.slc.core.structure.tree.TreeSPath;\r
+import org.argeo.slc.core.test.TestResultPart;\r
+import org.argeo.slc.core.test.TestStatus;\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
+\r
+public class ResultViewController extends ParameterizableViewController {\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("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 hierarichy\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
--- /dev/null
+package org.argeo.slc.ws.test.tree;
+
+import org.springframework.ws.server.endpoint.AbstractMarshallingPayloadEndpoint;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import org.argeo.slc.core.SlcException;
+import org.argeo.slc.core.test.tree.PartSubList;
+import org.argeo.slc.core.test.tree.TreeTestResult;
+import org.argeo.slc.dao.test.tree.TreeTestResultDao;
+import org.argeo.slc.msg.test.tree.ResultPartRequest;
+
+public class ResultPartRequestEp extends AbstractMarshallingPayloadEndpoint {
+
+ private Log log = LogFactory.getLog(getClass());
+
+ private final TreeTestResultDao treeTestResultDao;
+
+ public ResultPartRequestEp(TreeTestResultDao treeTestResultDao) {
+ this.treeTestResultDao = treeTestResultDao;
+ }
+
+ @Override
+ protected Object invokeInternal(Object requestObject) throws Exception {
+ ResultPartRequest msg = (ResultPartRequest) requestObject;
+ TreeTestResult treeTestResult = treeTestResultDao.getTestResult(msg
+ .getResultUuid());
+ if (treeTestResult == null) {
+ throw new SlcException("No result with id " + msg.getResultUuid());
+ }
+
+ PartSubList lst = treeTestResult.getResultParts().get(msg.getPath());
+ if (lst == null) {
+ lst = new PartSubList();
+ treeTestResult.getResultParts().put(msg.getPath(), lst);
+ }
+ lst.getParts().add(msg.getResultPart());
+ treeTestResult.getElements().putAll(msg.getRelatedElements());
+
+ treeTestResultDao.update(treeTestResult);
+
+ if (log.isDebugEnabled())
+ log.debug("Update result with id " + treeTestResult.getUuid());
+ return null;
+ }
+
+}