From b8dd46cf38fe10108aed0f8318870143160665fa Mon Sep 17 00:00:00 2001
From: Nelson Tavares de Sousa <stu103017@mail.uni-kiel.de>
Date: Wed, 10 Jun 2015 15:53:17 +0200
Subject: [PATCH] the CompositeStage now extends AnalysisConfiguration

---
 .../framework/AbstractCompositeStage.java     | 84 +------------------
 .../framework/AnalysisConfiguration.java      | 19 +++--
 2 files changed, 12 insertions(+), 91 deletions(-)

diff --git a/src/main/java/teetime/framework/AbstractCompositeStage.java b/src/main/java/teetime/framework/AbstractCompositeStage.java
index 4a62b36f..3532a8b4 100644
--- a/src/main/java/teetime/framework/AbstractCompositeStage.java
+++ b/src/main/java/teetime/framework/AbstractCompositeStage.java
@@ -15,12 +15,6 @@
  */
 package teetime.framework;
 
-import java.util.LinkedList;
-import java.util.List;
-
-import teetime.framework.signal.ISignal;
-import teetime.framework.validation.InvalidPortConnection;
-import teetime.util.Connection;
 
 /**
  * Represents a minimal stage that composes several other stages.
@@ -32,84 +26,8 @@ import teetime.util.Connection;
  *
  */
 @Deprecated
-public abstract class AbstractCompositeStage extends Stage {
-
-	private final List<Connection> connections = new LinkedList<Connection>();
+public abstract class AbstractCompositeStage extends AnalysisConfiguration {
 
 	protected abstract Stage getFirstStage();
 
-	protected <T> void connectPorts(final OutputPort<? extends T> out, final InputPort<T> in) {
-		connections.add(new Connection(out, in));
-	}
-
-	public List<Connection> getConnections() {
-		return connections;
-	}
-
-	@Override
-	public final void validateOutputPorts(final List<InvalidPortConnection> invalidPortConnections) {
-		throw new IllegalStateException("This method must never be called");
-
-	}
-
-	@Override
-	protected final void executeStage() {
-		throw new IllegalStateException("This method must never be called");
-	}
-
-	@Override
-	protected final void onSignal(final ISignal signal, final InputPort<?> inputPort) {
-		throw new IllegalStateException("This method must never be called");
-	}
-
-	@Override
-	protected final TerminationStrategy getTerminationStrategy() {
-		throw new IllegalStateException("This method must never be called");
-	}
-
-	@Override
-	protected final void terminate() {
-		throw new IllegalStateException("This method must never be called");
-	}
-
-	@Override
-	protected final boolean shouldBeTerminated() {
-		throw new IllegalStateException("This method must never be called");
-	}
-
-	@Override
-	public final StageState getCurrentState() {
-		throw new IllegalStateException("This method must never be called");
-	}
-
-	@Override
-	protected final InputPort<?>[] getInputPorts() {
-		throw new IllegalStateException("This method must never be called");
-	}
-
-	@Override
-	protected final OutputPort<?>[] getOutputPorts() {
-		throw new IllegalStateException("This method must never be called");
-	}
-
-	@Override
-	public final void onValidating(final List<InvalidPortConnection> invalidPortConnections) {
-		throw new IllegalStateException("This method must never be called");
-	}
-
-	@Override
-	public final void onInitializing() throws Exception {
-		throw new IllegalStateException("This method must never be called");
-	}
-
-	@Override
-	public final void onStarting() throws Exception {
-		throw new IllegalStateException("This method must never be called");
-	}
-
-	@Override
-	public final void onTerminating() throws Exception {
-		throw new IllegalStateException("This method must never be called");
-	}
-
 }
diff --git a/src/main/java/teetime/framework/AnalysisConfiguration.java b/src/main/java/teetime/framework/AnalysisConfiguration.java
index 24f9bd19..c32f2a29 100644
--- a/src/main/java/teetime/framework/AnalysisConfiguration.java
+++ b/src/main/java/teetime/framework/AnalysisConfiguration.java
@@ -32,7 +32,7 @@ import teetime.util.Connection;
 public abstract class AnalysisConfiguration {
 
 	private final List<Stage> threadableStageJobs = new LinkedList<Stage>();
-	private final List<Connection> connections = new LinkedList<Connection>();
+	private final List<Connection<?>> connections = new LinkedList<Connection<?>>();
 
 	@SuppressWarnings("deprecation")
 	private static final PipeFactoryRegistry PIPE_FACTORY_REGISTRY = PipeFactoryRegistry.INSTANCE;
@@ -61,11 +61,14 @@ public abstract class AnalysisConfiguration {
 	 *            A arbitrary stage, which will be added to the configuration and executed in a thread.
 	 */
 	protected void addThreadableStage(final Stage stage) {
-		if (stage instanceof AbstractCompositeStage) {
-			this.threadableStageJobs.add(((AbstractCompositeStage) stage).getFirstStage());
-			this.connections.addAll(((AbstractCompositeStage) stage).getConnections());
-		} else {
-			this.threadableStageJobs.add(stage);
+		this.threadableStageJobs.add(stage);
+	}
+
+	protected void addThreadableStage(final AbstractCompositeStage stage) {
+		this.threadableStageJobs.add(stage.getFirstStage());
+		this.connections.addAll(stage.getConnections());
+		for (Stage threadableStage : stage.getThreadableStageJobs()) {
+			this.addThreadableStage(threadableStage);
 		}
 	}
 
@@ -169,7 +172,7 @@ public abstract class AnalysisConfiguration {
 	 *            the pipe is set to this capacity, if the value is greater than 0. If it is 0, than the pipe is unbounded, thus growing of the pipe is enabled.
 	 */
 	protected <T> void connectPorts(final OutputPort<? extends T> sourcePort, final InputPort<T> targetPort, final int capacity) {
-		connections.add(new Connection(sourcePort, targetPort, capacity));
+		connections.add(new Connection<T>(sourcePort, targetPort, capacity));
 	}
 
 	/**
@@ -177,7 +180,7 @@ public abstract class AnalysisConfiguration {
 	 *
 	 * @return a list of pairs of Out- and InputPorts, which are connected
 	 */
-	protected List<Connection> getConnections() {
+	protected List<Connection<?>> getConnections() {
 		return connections;
 	}
 
-- 
GitLab