X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.slc%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fcore%2Ftest%2Ftree%2FTreeTestResult.java;h=3124b055fcb3339c3aff75c241faa58cd6dfcd91;hb=5764eb4717599e8df700094e7f0360a155e2a3bb;hp=c333bf79f691baebd486faabcbd48d2a4a1b8b05;hpb=62ef12a06742ee09256c18e8db90fe83a108c116;p=gpl%2Fargeo-slc.git diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/TreeTestResult.java b/org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/TreeTestResult.java index c333bf79f..3124b055f 100644 --- a/org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/TreeTestResult.java +++ b/org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/TreeTestResult.java @@ -1,8 +1,13 @@ package org.argeo.slc.core.test.tree; +import java.util.Date; import java.util.List; import java.util.SortedMap; import java.util.TreeMap; +import java.util.Vector; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.argeo.slc.core.SlcException; import org.argeo.slc.core.structure.StructureAware; @@ -15,31 +20,46 @@ import org.argeo.slc.core.test.TestResultId; import org.argeo.slc.core.test.TestResultListener; import org.argeo.slc.core.test.TestResultPart; +/** + * Complex implementation of a test result compatible with a tree based + * structure. + */ public class TreeTestResult implements TestResult, StructureAware { + private Log log = LogFactory.getLog(TreeTestResult.class); /** For ORM */ private Long tid; private NumericTRId testResultId; - private List listeners; + private List listeners = new Vector(); private TreeSPath currentPath; + private Date closeDate; + + private boolean isClosed = false; + private SortedMap resultParts = new TreeMap(); + private StructureRegistry registry; - public TestResultId getTestResultId() { return testResultId; } + /** + * Use of a NumericTRId is required by Hibernate. It may + * change in the future. + */ public NumericTRId getNumericResultId() { return testResultId; } + /** Sets the test result id as a numeric test result id. */ public void setNumericResultId(NumericTRId testResultId) { this.testResultId = testResultId; } + /** Sets the list of listeners. */ public void setListeners(List listeners) { this.listeners = listeners; } @@ -56,27 +76,51 @@ public class TreeTestResult implements TestResult, StructureAware { subList.getParts().add(part); // notify listeners - for (TestResultListener listener : listeners) { - listener.resultPartAdded(this, part); + synchronized (listeners) { + for (TestResultListener listener : listeners) { + listener.resultPartAdded(this, part); + } } } public void notifyCurrentPath(StructureRegistry registry, StructurePath path) { currentPath = (TreeSPath) path; + this.registry = registry; } + /** Gets the current path. */ public TreeSPath getCurrentPath() { return currentPath; } + /** Gets all the results structured as a map of PartSubLists. */ public SortedMap getResultParts() { return resultParts; } + /** Used by ORM systems. */ void setResultParts(SortedMap resultParts) { this.resultParts = resultParts; } + public void close() { + if (isClosed) { + throw new SlcException("Test Result #" + getTestResultId() + + " alredy closed."); + } + closeDate = new Date(); + + synchronized (listeners) { + for (TestResultListener listener : listeners) { + listener.close(this); + } + listeners.clear(); + } + isClosed = true; + + log.info("Test Result #" + getTestResultId() + " closed."); + } + Long getTid() { return tid; } @@ -85,4 +129,23 @@ public class TreeTestResult implements TestResult, StructureAware { this.tid = tid; } + /** Gets the related registry (can be null). */ + public StructureRegistry getRegistry() { + return registry; + } + + /** Sets the related registry. */ + public void setRegistry(StructureRegistry registry) { + this.registry = registry; + } + + public Date getCloseDate() { + return closeDate; + } + + /** Sets the close date (for ORM) */ + public void setCloseDate(Date closeDate) { + this.closeDate = closeDate; + } + }