--- /dev/null
+package org.argeo.slc.core.test.tree;\r
+\r
+import java.util.List;\r
+import java.util.SortedMap;\r
+import java.util.TreeMap;\r
+import java.util.Vector;\r
+\r
+import org.argeo.slc.core.SlcException;\r
+import org.argeo.slc.core.structure.StructureAware;\r
+import org.argeo.slc.core.structure.StructurePath;\r
+import org.argeo.slc.core.structure.StructureRegistry;\r
+import org.argeo.slc.core.structure.tree.TreeSPath;\r
+import org.argeo.slc.core.test.TestResult;\r
+import org.argeo.slc.core.test.TestResultId;\r
+import org.argeo.slc.core.test.TestResultListener;\r
+import org.argeo.slc.core.test.TestResultPart;\r
+\r
+public class TreeTestResult implements TestResult, StructureAware {\r
+ private TestResultId testResultId;\r
+ private List<TestResultListener> listeners;\r
+\r
+ private TreeSPath currentPath;\r
+\r
+ private SortedMap<TreeSPath, List<TestResultPart>> resultParts = new TreeMap<TreeSPath, List<TestResultPart>>();\r
+\r
+ public TestResultId getTestResultId() {\r
+ return testResultId;\r
+ }\r
+\r
+ public void setTestResultId(TestResultId testResultId) {\r
+ this.testResultId = testResultId;\r
+ }\r
+\r
+ public void setListeners(List<TestResultListener> listeners) {\r
+ this.listeners = listeners;\r
+ }\r
+ \r
+ public void addResultPart(TestResultPart part) {\r
+ if(currentPath==null){\r
+ throw new SlcException("No current path set.");\r
+ }\r
+ List<TestResultPart> list = resultParts.get(currentPath);\r
+ if(list == null){\r
+ list = new Vector<TestResultPart>();\r
+ resultParts.put(currentPath, list);\r
+ }\r
+ list.add(part);\r
+ \r
+ // notify listeners\r
+ for(TestResultListener listener: listeners){\r
+ listener.resultPartAdded(this, part);\r
+ }\r
+ }\r
+\r
+ public List<TestResultPart> listResultParts() {\r
+ List<TestResultPart> all = new Vector<TestResultPart>();\r
+ for(TreeSPath path:resultParts.keySet()){\r
+ all.addAll(resultParts.get(path));\r
+ }\r
+ return all;\r
+ }\r
+\r
+ public void notifyCurrentPath(StructureRegistry registry, StructurePath path) {\r
+ currentPath = (TreeSPath) path;\r
+ }\r
+\r
+ public TreeSPath getCurrentPath() {\r
+ return currentPath;\r
+ }\r
+\r
+ public SortedMap<TreeSPath, List<TestResultPart>> getResultParts() {\r
+ return resultParts;\r
+ }\r
+\r
+ \r
+}\r