package org.radargun.stages.test; import org.radargun.logging.Log; import org.radargun.logging.LogFactory; import org.radargun.utils.TimeService; /** * @author Radim Vansa <rvansa@redhat.com> */ public abstract class AbstractCompletion implements Completion { protected static final Log log = LogFactory.getLog(Completion.class); protected boolean started, completed; protected long startTime; private Runnable handler; @Override public synchronized void start() { if (!started) { startTime = TimeService.nanoTime(); started = true; } } @Override public synchronized void setCompletionHandler(Runnable handler) { if (completed) throw new IllegalStateException(); this.handler = handler; } protected synchronized void runCompletionHandler() { if (completed) return; completed = true; if (handler != null) { handler.run(); } } }