Introduce result reporting
authorMathieu Baudier <mbaudier@argeo.org>
Sun, 4 May 2008 10:51:52 +0000 (10:51 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Sun, 4 May 2008 10:51:52 +0000 (10:51 +0000)
git-svn-id: https://svn.argeo.org/slc/trunk@1097 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/result/ResultListController.java [new file with mode: 0644]
org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/result/ResultViewController.java [new file with mode: 0644]
org.argeo.slc.server/src/main/java/org/argeo/slc/ws/test/tree/CreateTreeTestResultRequestEp.java
org.argeo.slc.server/src/main/java/org/argeo/slc/ws/test/tree/ResultPartRequestEp.java [new file with mode: 0644]

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 (file)
index 0000000..16de958
--- /dev/null
@@ -0,0 +1,32 @@
+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
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 (file)
index 0000000..4a2c974
--- /dev/null
@@ -0,0 +1,112 @@
+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
index f8f710f100b2db14ff5b1d15c1c2c8ef6ac49e63..0258021068438be7f2a110c154efd232f06e1dea 100644 (file)
@@ -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 (file)
index 0000000..9fe4ccd
--- /dev/null
@@ -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;
+       }
+
+}