From 9a301fb423cfa8faae799181ec0fa4b08b582a66 Mon Sep 17 00:00:00 2001
From: Nelson Tavares de Sousa <stu103017@mail.uni-kiel.de>
Date: Tue, 2 Jun 2015 12:52:59 +0200
Subject: [PATCH] modeled the connections with a dedicated class and marked
 pair as deprecated (see the class file for a explanation)

---
 src/main/java/teetime/framework/Analysis.java | 13 +++----
 .../framework/AnalysisConfiguration.java      |  9 +++--
 src/main/java/teetime/util/Connection.java    | 34 +++++++++++++++++++
 src/main/java/teetime/util/Pair.java          |  9 +++++
 4 files changed, 54 insertions(+), 11 deletions(-)
 create mode 100644 src/main/java/teetime/util/Connection.java

diff --git a/src/main/java/teetime/framework/Analysis.java b/src/main/java/teetime/framework/Analysis.java
index 5385dab6..35674e8a 100644
--- a/src/main/java/teetime/framework/Analysis.java
+++ b/src/main/java/teetime/framework/Analysis.java
@@ -35,6 +35,7 @@ import teetime.framework.pipe.UnboundedSpScPipeFactory;
 import teetime.framework.signal.InitializingSignal;
 import teetime.framework.signal.ValidatingSignal;
 import teetime.framework.validation.AnalysisNotValidException;
+import teetime.util.Connection;
 import teetime.util.Pair;
 
 /**
@@ -177,15 +178,15 @@ public final class Analysis<T extends AnalysisConfiguration> implements Uncaught
 
 	private void instantiatePipes() {
 		List<Stage> threadableStageJobs = configuration.getThreadableStageJobs();
-		for (Pair<Pair<OutputPort, InputPort>, Integer> connection : configuration.getConnections()) {
-			if (threadableStageJobs.contains(connection.getFirst().getSecond().getOwningStage())) {
-				if (connection.getSecond() != 0) {
-					interBoundedThreadPipeFactory.create(connection.getFirst().getFirst(), connection.getFirst().getSecond(), connection.getSecond());
+		for (Connection connection : configuration.getConnections()) {
+			if (threadableStageJobs.contains(connection.getTargetPort().getOwningStage())) {
+				if (connection.getCapacity() != 0) {
+					interBoundedThreadPipeFactory.create(connection.getSourcePort(), connection.getTargetPort(), connection.getCapacity());
 				} else {
-					interUnboundedThreadPipeFactory.create(connection.getFirst().getFirst(), connection.getFirst().getSecond(), connection.getSecond());
+					interUnboundedThreadPipeFactory.create(connection.getSourcePort(), connection.getTargetPort(), connection.getCapacity());
 				}
 			} else {
-				intraThreadPipeFactory.create(connection.getFirst().getFirst(), connection.getFirst().getSecond());
+				intraThreadPipeFactory.create(connection.getSourcePort(), connection.getTargetPort());
 			}
 		}
 	}
diff --git a/src/main/java/teetime/framework/AnalysisConfiguration.java b/src/main/java/teetime/framework/AnalysisConfiguration.java
index ac0b85b1..9755a33c 100644
--- a/src/main/java/teetime/framework/AnalysisConfiguration.java
+++ b/src/main/java/teetime/framework/AnalysisConfiguration.java
@@ -23,7 +23,7 @@ import teetime.framework.pipe.IPipeFactory;
 import teetime.framework.pipe.PipeFactoryRegistry;
 import teetime.framework.pipe.PipeFactoryRegistry.PipeOrdering;
 import teetime.framework.pipe.PipeFactoryRegistry.ThreadCommunication;
-import teetime.util.Pair;
+import teetime.util.Connection;
 
 /**
  * Represents a configuration of connected stages, which is needed to run a analysis.
@@ -32,7 +32,7 @@ import teetime.util.Pair;
 public abstract class AnalysisConfiguration {
 
 	private final List<Stage> threadableStageJobs = new LinkedList<Stage>();
-	private final List<Pair<Pair<OutputPort, InputPort>, Integer>> connections = new LinkedList<Pair<Pair<OutputPort, InputPort>, Integer>>();
+	private final List<Connection> connections = new LinkedList<Connection>();
 
 	@SuppressWarnings("deprecation")
 	private static final PipeFactoryRegistry PIPE_FACTORY_REGISTRY = PipeFactoryRegistry.INSTANCE;
@@ -150,8 +150,7 @@ public abstract class AnalysisConfiguration {
 	}
 
 	protected <T> void connectPorts(final OutputPort<? extends T> sourcePort, final InputPort<T> targetPort, final int capacity) {
-		connections.add(new Pair(new Pair<OutputPort, InputPort>(sourcePort, targetPort), capacity));
-
+		connections.add(new Connection(sourcePort, targetPort, capacity));
 	}
 
 	/**
@@ -159,7 +158,7 @@ public abstract class AnalysisConfiguration {
 	 *
 	 * @return a list of pairs of Out- and InputPorts, which are connected
 	 */
-	protected List<Pair<Pair<OutputPort, InputPort>, Integer>> getConnections() {
+	protected List<Connection> getConnections() {
 		return connections;
 	}
 
diff --git a/src/main/java/teetime/util/Connection.java b/src/main/java/teetime/util/Connection.java
new file mode 100644
index 00000000..f66d2c2a
--- /dev/null
+++ b/src/main/java/teetime/util/Connection.java
@@ -0,0 +1,34 @@
+package teetime.util;
+
+import teetime.framework.InputPort;
+import teetime.framework.OutputPort;
+
+public class Connection<T> {
+
+	private final OutputPort<? extends T> sourcePort;
+	private final InputPort<T> targetPort;
+	private final int capacity;
+
+	public Connection(final OutputPort<? extends T> sourcePort, final InputPort<T> targetPort) {
+		this(sourcePort, targetPort, 4);
+	}
+
+	public Connection(final OutputPort<? extends T> sourcePort, final InputPort<T> targetPort, final int capacity) {
+		this.sourcePort = sourcePort;
+		this.targetPort = targetPort;
+		this.capacity = capacity;
+	}
+
+	public int getCapacity() {
+		return capacity;
+	}
+
+	public OutputPort<? extends T> getSourcePort() {
+		return sourcePort;
+	}
+
+	public InputPort<T> getTargetPort() {
+		return targetPort;
+	}
+
+}
diff --git a/src/main/java/teetime/util/Pair.java b/src/main/java/teetime/util/Pair.java
index 96ea6a61..dda98834 100644
--- a/src/main/java/teetime/util/Pair.java
+++ b/src/main/java/teetime/util/Pair.java
@@ -15,6 +15,15 @@
  */
 package teetime.util;
 
+/**
+ *
+ * @param <F>
+ * @param <S>
+ *
+ * @deprecated since 1.2
+ */
+@Deprecated
+// See http://stackoverflow.com/questions/156275/what-is-the-equivalent-of-the-c-pairl-r-in-java
 public final class Pair<F, S> {
 
 	private final F first;
-- 
GitLab