diff --git a/src/main/java/teetime/framework/Pipeline.java b/src/main/java/teetime/framework/Pipeline.java index a993f6502ceea1150e805d169aa563c82b3bca2e..d81cc6f796a6dd9fb908839d54d7693903cf12d8 100644 --- a/src/main/java/teetime/framework/Pipeline.java +++ b/src/main/java/teetime/framework/Pipeline.java @@ -1,10 +1,9 @@ package teetime.framework; +import java.util.Collection; +import java.util.LinkedList; import java.util.List; -import teetime.framework.signal.ISignal; -import teetime.framework.validation.InvalidPortConnection; - /** * * @author Christian Wulf @@ -13,59 +12,29 @@ import teetime.framework.validation.InvalidPortConnection; * the type of the last stage in this pipeline */ // TODO Consider to move it in the framework -public final class Pipeline<L extends Stage> extends Stage { +public final class Pipeline<L extends Stage> extends CompositeStage { private final Stage firstStage; - private final L lastStage; + private final List<L> lastStages = new LinkedList<L>(); public Pipeline(final Stage firstStage, final L lastStage) { super(); this.firstStage = firstStage; - this.lastStage = lastStage; - } - - @Override - public TerminationStrategy getTerminationStrategy() { - return firstStage.getTerminationStrategy(); - } - - @Override - public void terminate() { - firstStage.terminate(); - } - - @Override - public boolean shouldBeTerminated() { - return firstStage.shouldBeTerminated(); + this.lastStages.add(lastStage); } @Override - public void executeWithPorts() { - firstStage.executeWithPorts(); - } - - @Override - public void onSignal(final ISignal signal, final InputPort<?> inputPort) { - firstStage.onSignal(signal, inputPort); - } - - @Override - public void validateOutputPorts(final List<InvalidPortConnection> invalidPortConnections) { - lastStage.validateOutputPorts(invalidPortConnections); + protected Stage getFirstStage() { + return firstStage; } public L getLastStage() { - return lastStage; - } - - @Override - protected InputPort<?>[] getInputPorts() { - return firstStage.getInputPorts(); + return lastStages.get(0); } @Override - protected boolean isStarted() { - return firstStage.isStarted(); + protected Collection<? extends Stage> getLastStages() { + return lastStages; } @Override