]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/TreeTestResult.java
Introduce complex tree test definition
[gpl/argeo-slc.git] / org.argeo.slc / src / main / java / org / argeo / slc / core / test / tree / TreeTestResult.java
index c333bf79f691baebd486faabcbd48d2a4a1b8b05..3c5be7305e3547c33683abcf59bbfe59898b5662 100644 (file)
@@ -4,6 +4,9 @@ import java.util.List;
 import java.util.SortedMap;\r
 import java.util.TreeMap;\r
 \r
+import org.apache.commons.logging.Log;\r
+import org.apache.commons.logging.LogFactory;\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
@@ -16,6 +19,7 @@ import org.argeo.slc.core.test.TestResultListener;
 import org.argeo.slc.core.test.TestResultPart;\r
 \r
 public class TreeTestResult implements TestResult, StructureAware {\r
+       private Log log = LogFactory.getLog(TreeTestResult.class);\r
        /** For ORM */\r
        private Long tid;\r
 \r
@@ -23,11 +27,11 @@ public class TreeTestResult implements TestResult, StructureAware {
        private List<TestResultListener> listeners;\r
 \r
        private TreeSPath currentPath;\r
+       \r
+       private boolean isClosed = false;\r
 \r
        private SortedMap<TreeSPath, PartSubList> resultParts = new TreeMap<TreeSPath, PartSubList>();\r
 \r
-\r
-       \r
        public TestResultId getTestResultId() {\r
                return testResultId;\r
        }\r
@@ -56,8 +60,10 @@ public class TreeTestResult implements TestResult, StructureAware {
                subList.getParts().add(part);\r
 \r
                // notify listeners\r
-               for (TestResultListener listener : listeners) {\r
-                       listener.resultPartAdded(this, part);\r
+               synchronized (listeners) {\r
+                       for (TestResultListener listener : listeners) {\r
+                               listener.resultPartAdded(this, part);\r
+                       }\r
                }\r
        }\r
 \r
@@ -77,6 +83,21 @@ public class TreeTestResult implements TestResult, StructureAware {
                this.resultParts = resultParts;\r
        }\r
 \r
+       public void close() {\r
+               if(isClosed){\r
+                       throw new SlcException("Test Result #"+getTestResultId()+" alredy closed.");\r
+               }\r
+               \r
+               synchronized (listeners) {\r
+                       for (TestResultListener listener : listeners) {\r
+                               listener.close();\r
+                       }\r
+                       listeners.clear();\r
+               }\r
+               isClosed = true;\r
+               log.info("Test Result #"+getTestResultId()+" closed.");\r
+       }\r
+\r
        Long getTid() {\r
                return tid;\r
        }\r