From 625f26fdf0edbc002c3b33ac1588fb82905bd26f Mon Sep 17 00:00:00 2001 From: Nelson Tavares de Sousa <stu103017@mail.uni-kiel.de> Date: Thu, 2 Jul 2015 12:58:24 +0200 Subject: [PATCH] #192 working prototype --- .../framework/AbstractCompositeStage.java | 7 ++----- .../java/teetime/framework/Configuration.java | 4 ---- .../teetime/framework/ConfigurationContext.java | 16 +++++++++++++++- .../java/teetime/framework/EmptyContext.java | 15 +++++++++++++++ src/main/java/teetime/framework/Stage.java | 2 ++ .../java/teetime/stage/io/EveryXthPrinter.java | 1 - .../java/teetime/stage/string/WordCounter.java | 1 - src/site/markdown/wiki | 1 + 8 files changed, 35 insertions(+), 12 deletions(-) create mode 100644 src/main/java/teetime/framework/EmptyContext.java create mode 160000 src/site/markdown/wiki diff --git a/src/main/java/teetime/framework/AbstractCompositeStage.java b/src/main/java/teetime/framework/AbstractCompositeStage.java index 26e8685e..07aa5c98 100644 --- a/src/main/java/teetime/framework/AbstractCompositeStage.java +++ b/src/main/java/teetime/framework/AbstractCompositeStage.java @@ -32,11 +32,8 @@ public abstract class AbstractCompositeStage { private final ConfigurationContext context; - public AbstractCompositeStage(final ConfigurationContext context) { - if (null == context) { - throw new IllegalArgumentException("Context may not be null."); - } - this.context = context; + public AbstractCompositeStage() { + this.context = new ConfigurationContext(); } protected ConfigurationContext getContext() { diff --git a/src/main/java/teetime/framework/Configuration.java b/src/main/java/teetime/framework/Configuration.java index bfaf9215..f9722644 100644 --- a/src/main/java/teetime/framework/Configuration.java +++ b/src/main/java/teetime/framework/Configuration.java @@ -25,8 +25,4 @@ package teetime.framework; */ public abstract class Configuration extends AbstractCompositeStage { - public Configuration() { - super(new ConfigurationContext()); - } - } diff --git a/src/main/java/teetime/framework/ConfigurationContext.java b/src/main/java/teetime/framework/ConfigurationContext.java index 483b1ecb..236f4c38 100644 --- a/src/main/java/teetime/framework/ConfigurationContext.java +++ b/src/main/java/teetime/framework/ConfigurationContext.java @@ -29,7 +29,7 @@ import teetime.framework.pipe.InstantiationPipe; * * @since 2.0 */ -public final class ConfigurationContext { +public class ConfigurationContext { private static final Logger LOGGER = LoggerFactory.getLogger(ConfigurationContext.class); @@ -63,7 +63,21 @@ public final class ConfigurationContext { LOGGER.warn("Overwriting existing pipe while connecting stages " + sourcePort.getOwningStage().getId() + " and " + targetPort.getOwningStage().getId() + "."); } + mergeContexts(sourcePort.getOwningStage(), targetPort.getOwningStage()); new InstantiationPipe(sourcePort, targetPort, capacity); } + final void mergeContexts(final Stage sourceStage, final Stage targetStage) { + if (!sourceStage.owningContext.equals(EmptyContext.getInstance())) { + this.threadableStages.putAll(sourceStage.owningContext.threadableStages); + } else { + sourceStage.owningContext = this; + } + if (!targetStage.owningContext.equals(EmptyContext.getInstance())) { + this.threadableStages.putAll(targetStage.owningContext.threadableStages); + } else { + targetStage.owningContext = this; + } + } + } diff --git a/src/main/java/teetime/framework/EmptyContext.java b/src/main/java/teetime/framework/EmptyContext.java new file mode 100644 index 00000000..3a676ebc --- /dev/null +++ b/src/main/java/teetime/framework/EmptyContext.java @@ -0,0 +1,15 @@ +package teetime.framework; + +class EmptyContext extends ConfigurationContext { + + private static final EmptyContext INSTANCE = new EmptyContext(); + + private EmptyContext() { + + } + + static EmptyContext getInstance() { + return EmptyContext.INSTANCE; + } + +} diff --git a/src/main/java/teetime/framework/Stage.java b/src/main/java/teetime/framework/Stage.java index 1c9ce2e2..7b9398ca 100644 --- a/src/main/java/teetime/framework/Stage.java +++ b/src/main/java/teetime/framework/Stage.java @@ -48,6 +48,8 @@ public abstract class Stage { /** The owning thread of this stage if this stage is directly executed by a {@link AbstractRunnableStage}, <code>null</code> otherwise. */ protected Thread owningThread; + protected ConfigurationContext owningContext = EmptyContext.getInstance(); + protected Stage() { this.id = this.createId(); this.logger = LoggerFactory.getLogger(this.getClass().getCanonicalName() + ":" + id); diff --git a/src/main/java/teetime/stage/io/EveryXthPrinter.java b/src/main/java/teetime/stage/io/EveryXthPrinter.java index 6f38fbab..4b62916d 100644 --- a/src/main/java/teetime/stage/io/EveryXthPrinter.java +++ b/src/main/java/teetime/stage/io/EveryXthPrinter.java @@ -33,7 +33,6 @@ public final class EveryXthPrinter<T> extends AbstractCompositeStage { private final List<Stage> lastStages = new ArrayList<Stage>(); public EveryXthPrinter(final int threshold, final ConfigurationContext context) { - super(context); distributor = new Distributor<T>(new CopyByReferenceStrategy()); EveryXthStage<T> everyXthStage = new EveryXthStage<T>(threshold); Printer<Integer> printer = new Printer<Integer>(); diff --git a/src/main/java/teetime/stage/string/WordCounter.java b/src/main/java/teetime/stage/string/WordCounter.java index 1508c15e..6d15a3f2 100644 --- a/src/main/java/teetime/stage/string/WordCounter.java +++ b/src/main/java/teetime/stage/string/WordCounter.java @@ -37,7 +37,6 @@ public final class WordCounter extends AbstractCompositeStage { private final MappingCounter<String> mapCounter; public WordCounter(final ConfigurationContext context) { - super(context); this.tokenizer = new Tokenizer(" "); final ToLowerCase toLowerCase = new ToLowerCase(); diff --git a/src/site/markdown/wiki b/src/site/markdown/wiki new file mode 160000 index 00000000..709c839c --- /dev/null +++ b/src/site/markdown/wiki @@ -0,0 +1 @@ +Subproject commit 709c839c447a50c93b37fcc633a01297115d4823 -- GitLab