From 973acfe14e6f14e3aaeb7b1cbcecbd3d23061ed0 Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Sun, 4 May 2008 10:51:52 +0000 Subject: [PATCH] Introduce result reporting git-svn-id: https://svn.argeo.org/slc/trunk@1097 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- .../web/mvc/result/ResultListController.java | 32 +++++ .../web/mvc/result/ResultViewController.java | 112 ++++++++++++++++++ .../tree/CreateTreeTestResultRequestEp.java | 8 +- .../slc/ws/test/tree/ResultPartRequestEp.java | 48 ++++++++ 4 files changed, 196 insertions(+), 4 deletions(-) create mode 100644 org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/result/ResultListController.java create mode 100644 org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/result/ResultViewController.java create mode 100644 org.argeo.slc.server/src/main/java/org/argeo/slc/ws/test/tree/ResultPartRequestEp.java diff --git a/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/result/ResultListController.java b/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/result/ResultListController.java new file mode 100644 index 000000000..16de95840 --- /dev/null +++ b/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/result/ResultListController.java @@ -0,0 +1,32 @@ +package org.argeo.slc.web.mvc.result; + +import java.util.List; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.web.servlet.ModelAndView; +import org.springframework.web.servlet.mvc.ParameterizableViewController; + +import org.argeo.slc.core.test.tree.TreeTestResult; +import org.argeo.slc.dao.test.tree.TreeTestResultDao; + +public class ResultListController extends ParameterizableViewController { + private final TreeTestResultDao testResultDao; + + public ResultListController(TreeTestResultDao testResultDao) { + this.testResultDao = testResultDao; + } + + @Override + protected ModelAndView handleRequestInternal(HttpServletRequest request, + HttpServletResponse response) throws Exception { + + ModelAndView modelAndView = new ModelAndView(); + + List results = testResultDao.listTestResults(); + modelAndView.addObject("results", results); + modelAndView.setViewName(getViewName()); + return modelAndView; + } +} diff --git a/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/result/ResultViewController.java b/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/result/ResultViewController.java new file mode 100644 index 000000000..4a2c974a6 --- /dev/null +++ b/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/result/ResultViewController.java @@ -0,0 +1,112 @@ +package org.argeo.slc.web.mvc.result; + +import java.util.SortedMap; +import java.util.TreeMap; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.web.servlet.ModelAndView; +import org.springframework.web.servlet.mvc.ParameterizableViewController; + +import org.argeo.slc.core.structure.StructureElement; +import org.argeo.slc.core.structure.tree.TreeSPath; +import org.argeo.slc.core.test.TestResultPart; +import org.argeo.slc.core.test.TestStatus; +import org.argeo.slc.core.test.tree.PartSubList; +import org.argeo.slc.core.test.tree.TreeTestResult; +import org.argeo.slc.dao.test.tree.TreeTestResultDao; + +public class ResultViewController extends ParameterizableViewController { + private final TreeTestResultDao testResultDao; + + public ResultViewController(TreeTestResultDao testResultDao) { + this.testResultDao = testResultDao; + } + + @Override + protected ModelAndView handleRequestInternal(HttpServletRequest request, + HttpServletResponse response) throws Exception { + + String uuid = request.getParameter("uuid"); + TreeTestResult result = testResultDao.getTestResult(uuid); + + SortedMap toc = generateToc(result); + + SortedMap describedPaths = new TreeMap(); + for (TreeSPath path : toc.keySet()) { + describedPaths.put(path, describedPath(path, result)); + } + + SortedMap anchors = new TreeMap(); + for (TreeSPath path : toc.keySet()) { + anchors.put(path, anchor(path)); + } + + ModelAndView modelAndView = new ModelAndView(); + + modelAndView.addObject("result", result); + modelAndView.addObject("toc", toc); + modelAndView.addObject("describedPaths", describedPaths); + modelAndView.addObject("anchors", anchors); + modelAndView.setViewName(getViewName()); + return modelAndView; + } + + private SortedMap generateToc(TreeTestResult result) { + SortedMap toc = new TreeMap(); + for (TreeSPath path : result.getResultParts().keySet()) { + PartSubList subList = (PartSubList) result.getResultParts().get( + path); + boolean isFailed = false; + for (TestResultPart part : subList.getParts()) { + if (!part.getStatus().equals(TestStatus.PASSED)) { + isFailed = true; + break; + } + } + fillToc(toc, path, isFailed); + } + return toc; + } + + private void fillToc(SortedMap toc, TreeSPath path, + boolean isFailed) { + if (isFailed) { + toc.put(path, "failed"); + } else { + if (!toc.containsKey(path)) { + toc.put(path, "passed"); + } + } + + if (path.getParent() != null) { + fillToc(toc, path.getParent(), isFailed); + } + } + + private static String anchor(TreeSPath path) { + return path.getAsUniqueString().replace(path.getSeparator(), '_'); + } + + private static String describedPath(TreeSPath path, TreeTestResult ttr) { + StringBuffer buf = new StringBuffer(""); + // TODO :optimize with hierarichy + describedPath(path, buf, ttr); + return buf.toString(); + } + + private static void describedPath(TreeSPath path, StringBuffer buf, + TreeTestResult ttr) { + if (path.getParent() != null) { + describedPath(path.getParent(), buf, ttr); + } + String description = path.getName(); + StructureElement element = ttr.getElements().get(path); + if (element != null) { + description = element.getLabel(); + } + buf.append('/').append(description); + } + +} diff --git a/org.argeo.slc.server/src/main/java/org/argeo/slc/ws/test/tree/CreateTreeTestResultRequestEp.java b/org.argeo.slc.server/src/main/java/org/argeo/slc/ws/test/tree/CreateTreeTestResultRequestEp.java index f8f710f10..025802106 100644 --- a/org.argeo.slc.server/src/main/java/org/argeo/slc/ws/test/tree/CreateTreeTestResultRequestEp.java +++ b/org.argeo.slc.server/src/main/java/org/argeo/slc/ws/test/tree/CreateTreeTestResultRequestEp.java @@ -9,7 +9,8 @@ import org.argeo.slc.core.test.tree.TreeTestResult; import org.argeo.slc.dao.test.tree.TreeTestResultDao; import org.argeo.slc.msg.test.tree.CreateTreeTestResultRequest; -public class CreateTreeTestResultRequestEp extends AbstractMarshallingPayloadEndpoint { +public class CreateTreeTestResultRequestEp extends + AbstractMarshallingPayloadEndpoint { private Log log = LogFactory.getLog(getClass()); @@ -25,10 +26,9 @@ public class CreateTreeTestResultRequestEp extends AbstractMarshallingPayloadEnd TreeTestResult treeTestResult = msg.getTreeTestResult(); treeTestResultDao.create(treeTestResult); - + if (log.isDebugEnabled()) - log.debug("Created TreeTestResult with uuid " - + treeTestResult.getUuid()); + log.debug("Created result with id " + treeTestResult.getUuid()); return null; } diff --git a/org.argeo.slc.server/src/main/java/org/argeo/slc/ws/test/tree/ResultPartRequestEp.java b/org.argeo.slc.server/src/main/java/org/argeo/slc/ws/test/tree/ResultPartRequestEp.java new file mode 100644 index 000000000..9fe4ccd67 --- /dev/null +++ b/org.argeo.slc.server/src/main/java/org/argeo/slc/ws/test/tree/ResultPartRequestEp.java @@ -0,0 +1,48 @@ +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; + } + +} -- 2.39.5