From 90194686ba8481ac648ea1f1219333419de3aeca Mon Sep 17 00:00:00 2001
From: Nelson Tavares de Sousa <stu103017@mail.uni-kiel.de>
Date: Fri, 24 Jul 2015 16:34:44 +0200
Subject: [PATCH] Config terminates itself on Exception, Renamed and adopted
 abstract service methods

---
 .../framework/AbstractRunnableStage.java      |  3 ++-
 .../teetime/framework/AbstractService.java    | 10 +++++---
 .../framework/ConfigurationContext.java       |  2 +-
 .../java/teetime/framework/Execution.java     |  8 +++---
 .../java/teetime/framework/ThreadService.java | 25 ++++++++-----------
 .../AbstractExceptionListener.java            |  2 +-
 6 files changed, 24 insertions(+), 26 deletions(-)

diff --git a/src/main/java/teetime/framework/AbstractRunnableStage.java b/src/main/java/teetime/framework/AbstractRunnableStage.java
index 2d4a24b2..b280d143 100644
--- a/src/main/java/teetime/framework/AbstractRunnableStage.java
+++ b/src/main/java/teetime/framework/AbstractRunnableStage.java
@@ -50,7 +50,8 @@ abstract class AbstractRunnableStage implements Runnable {
 					} while (!stage.shouldBeTerminated());
 				} catch (TerminateException e) {
 					this.stage.terminate();
-					throw e;
+					stage.owningContext.getRuntimeService().onTerminate();
+					throw e; // FIXME: Still needed?
 				} finally {
 					afterStageExecution();
 				}
diff --git a/src/main/java/teetime/framework/AbstractService.java b/src/main/java/teetime/framework/AbstractService.java
index 4ac0200d..fe716ca1 100644
--- a/src/main/java/teetime/framework/AbstractService.java
+++ b/src/main/java/teetime/framework/AbstractService.java
@@ -12,13 +12,15 @@ package teetime.framework;
  */
 public abstract class AbstractService<T> {
 
-	abstract void initialize();
+	abstract void onInitialize();
 
-	abstract void start();
+	abstract void onStart();
 
-	abstract void terminate();
+	abstract void onExecute();
 
-	abstract void finish();
+	abstract void onTerminate();
+
+	abstract void onFinish();
 
 	abstract void merge(T source);
 
diff --git a/src/main/java/teetime/framework/ConfigurationContext.java b/src/main/java/teetime/framework/ConfigurationContext.java
index 26c73142..2f539214 100644
--- a/src/main/java/teetime/framework/ConfigurationContext.java
+++ b/src/main/java/teetime/framework/ConfigurationContext.java
@@ -98,7 +98,7 @@ final class ConfigurationContext {
 	}
 
 	final void initializeServices() {
-		runtimeService.initialize();
+		runtimeService.onInitialize();
 	}
 
 	private void mergeContexts(final ConfigurationContext child) {
diff --git a/src/main/java/teetime/framework/Execution.java b/src/main/java/teetime/framework/Execution.java
index f77dc337..f309d496 100644
--- a/src/main/java/teetime/framework/Execution.java
+++ b/src/main/java/teetime/framework/Execution.java
@@ -113,14 +113,12 @@ public final class Execution<T extends Configuration> {
 	 * @since 2.0
 	 */
 	public void waitForTermination() {
-		getConfiguration().getContext().getRuntimeService().waitForTermination();
+		getConfiguration().getContext().getRuntimeService().onFinish();
 	}
 
 	// TODO: implement
 	private void abortEventually() {
-		for (Stage stage : configuration.getContext().getThreadableStages().keySet()) {
-			stage.terminate();
-		}
+		getConfiguration().getContext().getRuntimeService().onTerminate();
 		waitForTermination();
 	}
 
@@ -144,7 +142,7 @@ public final class Execution<T extends Configuration> {
 	 * @since 2.0
 	 */
 	public void executeNonBlocking() {
-		configuration.getContext().getRuntimeService().executeNonBlocking();
+		configuration.getContext().getRuntimeService().onExecute();
 	}
 
 	/**
diff --git a/src/main/java/teetime/framework/ThreadService.java b/src/main/java/teetime/framework/ThreadService.java
index e87d9f08..46e2315d 100644
--- a/src/main/java/teetime/framework/ThreadService.java
+++ b/src/main/java/teetime/framework/ThreadService.java
@@ -52,7 +52,7 @@ class ThreadService extends AbstractService<ThreadService> {
 	private final List<RunnableProducerStage> producerRunnables = new LinkedList<RunnableProducerStage>();
 
 	@Override
-	void initialize() {
+	void onInitialize() {
 		IExceptionListenerFactory factory;
 		try {
 			factory = ((Configuration) compositeStage).getFactory();
@@ -72,7 +72,7 @@ class ThreadService extends AbstractService<ThreadService> {
 			initializeIntraStages(intraStages, thread, newListener);
 		}
 
-		start();
+		onStart();
 	}
 
 	private void initializeIntraStages(final Set<Stage> intraStages, final Thread thread, final AbstractExceptionListener newListener) {
@@ -135,7 +135,8 @@ class ThreadService extends AbstractService<ThreadService> {
 		}
 	}
 
-	void waitForTermination() {
+	@Override
+	void onFinish() {
 		try {
 			runnableCounter.waitFor(0);
 
@@ -169,12 +170,13 @@ class ThreadService extends AbstractService<ThreadService> {
 		}
 	}
 
-	void executeNonBlocking() {
+	@Override
+	void onExecute() {
 		sendStartingSignal();
 	}
 
 	@Override
-	void start() {
+	void onStart() {
 		startThreads(this.consumerThreads);
 		startThreads(this.finiteProducerThreads);
 		startThreads(this.infiniteProducerThreads);
@@ -215,15 +217,10 @@ class ThreadService extends AbstractService<ThreadService> {
 	}
 
 	@Override
-	void terminate() {
-		// TODO Auto-generated method stub
-
-	}
-
-	@Override
-	void finish() {
-		// TODO Auto-generated method stub
-
+	void onTerminate() {
+		for (Stage stage : threadableStages.keySet()) {
+			stage.terminate();
+		}
 	}
 
 }
diff --git a/src/main/java/teetime/framework/exceptionHandling/AbstractExceptionListener.java b/src/main/java/teetime/framework/exceptionHandling/AbstractExceptionListener.java
index 2fa976b1..c34480fa 100644
--- a/src/main/java/teetime/framework/exceptionHandling/AbstractExceptionListener.java
+++ b/src/main/java/teetime/framework/exceptionHandling/AbstractExceptionListener.java
@@ -48,7 +48,7 @@ public abstract class AbstractExceptionListener {
 	 * @param throwingStage
 	 *            the stage, which has thrown the exception.
 	 * @return
-	 *         true, if the thread should be terminated, false otherwise
+	 * 		true, if the thread should be terminated, false otherwise
 	 */
 	public abstract FurtherExecution onStageException(Exception e, Stage throwingStage);
 
-- 
GitLab