package org.drugis.common.threading.activity; import java.util.Collections; import java.util.List; import org.drugis.common.threading.Task; /** * A JoinTransition ends parallel processing (all source activities must terminate before it can be evaluated). */ public class JoinTransition implements Transition { private final List<? extends Task> d_source; private final Task d_target; public JoinTransition(List<? extends Task> source, Task target) { d_source = source; d_target = target; } public List<Task> getSources() { return Collections.unmodifiableList(d_source); } public List<Task> getTargets() { return Collections.singletonList(d_target); } public boolean isReady() { for (Task t : d_source) { if (!t.isFinished()) { return false; } } return true; } public List<Task> transition() { if (!isReady()) { throw new RuntimeException("Not ready for transition."); } return getTargets(); } }