X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;ds=sidebyside;f=org.argeo.slc%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fcore%2Ftest%2Ftree%2FAsynchronousTreeTestResultListener.java;fp=org.argeo.slc%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fcore%2Ftest%2Ftree%2FAsynchronousTreeTestResultListener.java;h=d6f0c935d2aa2d03657f23e3ade019617119f042;hb=7756b44bff90cc8cb20e16e426c39f82ba89705e;hp=0000000000000000000000000000000000000000;hpb=2052d0beab9c68880b3e8b0172a707274004b35f;p=gpl%2Fargeo-slc.git diff --git a/org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/AsynchronousTreeTestResultListener.java b/org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/AsynchronousTreeTestResultListener.java new file mode 100644 index 000000000..d6f0c935d --- /dev/null +++ b/org.argeo.slc/src/main/java/org/argeo/slc/core/test/tree/AsynchronousTreeTestResultListener.java @@ -0,0 +1,76 @@ +package org.argeo.slc.core.test.tree; + +import java.util.Vector; + +import org.argeo.slc.core.structure.tree.TreeSPath; +import org.argeo.slc.core.test.TestResult; +import org.argeo.slc.core.test.TestResultId; +import org.argeo.slc.core.test.TestResultListener; +import org.argeo.slc.core.test.TestResultPart; + +public abstract class AsynchronousTreeTestResultListener implements + TestResultListener, Runnable { + private Vector partStructs = new Vector(); + private Thread thread; + + public void init() { + thread = new Thread(this); + thread.start(); + } + + public void destroy() { + thread = null; + synchronized (partStructs) { + partStructs.notifyAll(); + } + } + + public final void resultPartAdded(TestResult testResult, + TestResultPart testResultPart) { + TreeTestResult result = (TreeTestResult) testResult; + synchronized (partStructs) { + partStructs.add(new PartStruct(result.getCurrentPath(), result + .getTestResultId(), testResultPart, result)); + partStructs.notifyAll(); + } + } + + public void run() { + while (thread != null) { + for (PartStruct partStruct : partStructs) { + resultPartAdded(partStruct); + } + + synchronized (partStructs) { + partStructs.clear(); + while (partStructs.size() == 0) { + try { + partStructs.wait(); + } catch (InterruptedException e) { + // silent + } + } + } + } + } + + protected abstract void resultPartAdded(PartStruct partStruct); + + protected static class PartStruct { + public final TreeSPath path; + public final TestResultId resultId; + public final TestResultPart part; + public final TreeTestResult result; + + public PartStruct(TreeSPath path, TestResultId resultId, + TestResultPart part, TreeTestResult result) { + super(); + this.path = path; + this.resultId = resultId; + this.part = part; + this.result = result; + } + + } + +}