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
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
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
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
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