From b1ea9feb973d9e20f0404dabd83f2fb6ba6471e3 Mon Sep 17 00:00:00 2001
From: Christian Wulf <chw@informatik.uni-kiel.de>
Date: Thu, 26 Jun 2014 13:22:18 +0200
Subject: [PATCH] added DirWith*2RecordFilter

---
 hints.txt                                     |  6 +++
 ...ecordFilter.java => Dir2RecordFilter.java} |  6 +--
 .../stage/kieker/DirWithBin2RecordFilter.java | 40 +++++++++++++++++++
 .../stage/kieker/DirWithDat2RecordFilter.java | 40 +++++++++++++++++++
 .../recordReader/RecordReaderAnalysis.java    |  4 +-
 5 files changed, 91 insertions(+), 5 deletions(-)
 rename src/main/java/teetime/variant/methodcallWithPorts/stage/kieker/{File2RecordFilter.java => Dir2RecordFilter.java} (96%)
 create mode 100644 src/main/java/teetime/variant/methodcallWithPorts/stage/kieker/DirWithBin2RecordFilter.java
 create mode 100644 src/main/java/teetime/variant/methodcallWithPorts/stage/kieker/DirWithDat2RecordFilter.java

diff --git a/hints.txt b/hints.txt
index 44162609..1785a5d5 100644
--- a/hints.txt
+++ b/hints.txt
@@ -1,4 +1,10 @@
 -a pipeline needs to be a stage, too, to allow the composition of stages
 -instead of using work-stealing, sort the input in desc order to process the most computationally intensive elements first (load-balancing)
 -for a novice programmer, it is difficult to select the best choice and combination of patterns to maximize performance
+-switch vs. farm:
+	-switch: different branch logics
+	-farm: same branch logics 
+-if executed send() method, execute the corresponding successor stage at once to avoid scheduling, i.e., waste of performance
+	-same thread:		send = put to pipe & execute corresponding successor stage
+	-different thread:	send = put to pipe (only)
 -
\ No newline at end of file
diff --git a/src/main/java/teetime/variant/methodcallWithPorts/stage/kieker/File2RecordFilter.java b/src/main/java/teetime/variant/methodcallWithPorts/stage/kieker/Dir2RecordFilter.java
similarity index 96%
rename from src/main/java/teetime/variant/methodcallWithPorts/stage/kieker/File2RecordFilter.java
rename to src/main/java/teetime/variant/methodcallWithPorts/stage/kieker/Dir2RecordFilter.java
index 6132236d..65c5dad6 100644
--- a/src/main/java/teetime/variant/methodcallWithPorts/stage/kieker/File2RecordFilter.java
+++ b/src/main/java/teetime/variant/methodcallWithPorts/stage/kieker/Dir2RecordFilter.java
@@ -38,14 +38,14 @@ import kieker.common.util.filesystem.FSUtil;
  * 
  * @since 1.10
  */
-public class File2RecordFilter extends Pipeline<File, IMonitoringRecord> {
+public class Dir2RecordFilter extends Pipeline<File, IMonitoringRecord> {
 
 	private ClassNameRegistryRepository classNameRegistryRepository;
 
 	/**
 	 * @since 1.10
 	 */
-	public File2RecordFilter(final ClassNameRegistryRepository classNameRegistryRepository) {
+	public Dir2RecordFilter(final ClassNameRegistryRepository classNameRegistryRepository) {
 		this.classNameRegistryRepository = classNameRegistryRepository;
 
 		// FIXME does not yet work with more than one thread due to classNameRegistryRepository: classNameRegistryRepository is set after the ctor
@@ -91,7 +91,7 @@ public class File2RecordFilter extends Pipeline<File, IMonitoringRecord> {
 	/**
 	 * @since 1.10
 	 */
-	public File2RecordFilter() {
+	public Dir2RecordFilter() {
 		this(null);
 	}
 
diff --git a/src/main/java/teetime/variant/methodcallWithPorts/stage/kieker/DirWithBin2RecordFilter.java b/src/main/java/teetime/variant/methodcallWithPorts/stage/kieker/DirWithBin2RecordFilter.java
new file mode 100644
index 00000000..9d63b583
--- /dev/null
+++ b/src/main/java/teetime/variant/methodcallWithPorts/stage/kieker/DirWithBin2RecordFilter.java
@@ -0,0 +1,40 @@
+package teetime.variant.methodcallWithPorts.stage.kieker;
+
+import java.io.File;
+
+import teetime.variant.methodcallWithPorts.framework.core.Pipeline;
+import teetime.variant.methodcallWithPorts.stage.io.Directory2FilesFilter;
+import teetime.variant.methodcallWithPorts.stage.kieker.className.ClassNameRegistryCreationFilter;
+import teetime.variant.methodcallWithPorts.stage.kieker.className.ClassNameRegistryRepository;
+import teetime.variant.methodcallWithPorts.stage.kieker.fileToRecord.BinaryFile2RecordFilter;
+
+import kieker.common.record.IMonitoringRecord;
+
+public class DirWithBin2RecordFilter extends Pipeline<File, IMonitoringRecord> {
+
+	private ClassNameRegistryRepository classNameRegistryRepository;
+
+	public DirWithBin2RecordFilter(final ClassNameRegistryRepository classNameRegistryRepository) {
+		this.classNameRegistryRepository = classNameRegistryRepository;
+
+		final ClassNameRegistryCreationFilter classNameRegistryCreationFilter = new ClassNameRegistryCreationFilter(classNameRegistryRepository);
+		final Directory2FilesFilter directory2FilesFilter = new Directory2FilesFilter();
+		final BinaryFile2RecordFilter binaryFile2RecordFilter = new BinaryFile2RecordFilter(classNameRegistryRepository);
+
+		this.setFirstStage(classNameRegistryCreationFilter);
+		this.addIntermediateStage(directory2FilesFilter);
+		this.setLastStage(binaryFile2RecordFilter);
+	}
+
+	public DirWithBin2RecordFilter() {
+		this(null);
+	}
+
+	public ClassNameRegistryRepository getClassNameRegistryRepository() {
+		return this.classNameRegistryRepository;
+	}
+
+	public void setClassNameRegistryRepository(final ClassNameRegistryRepository classNameRegistryRepository) {
+		this.classNameRegistryRepository = classNameRegistryRepository;
+	}
+}
diff --git a/src/main/java/teetime/variant/methodcallWithPorts/stage/kieker/DirWithDat2RecordFilter.java b/src/main/java/teetime/variant/methodcallWithPorts/stage/kieker/DirWithDat2RecordFilter.java
new file mode 100644
index 00000000..e41429e2
--- /dev/null
+++ b/src/main/java/teetime/variant/methodcallWithPorts/stage/kieker/DirWithDat2RecordFilter.java
@@ -0,0 +1,40 @@
+package teetime.variant.methodcallWithPorts.stage.kieker;
+
+import java.io.File;
+
+import teetime.variant.methodcallWithPorts.framework.core.Pipeline;
+import teetime.variant.methodcallWithPorts.stage.io.Directory2FilesFilter;
+import teetime.variant.methodcallWithPorts.stage.kieker.className.ClassNameRegistryCreationFilter;
+import teetime.variant.methodcallWithPorts.stage.kieker.className.ClassNameRegistryRepository;
+import teetime.variant.methodcallWithPorts.stage.kieker.fileToRecord.DatFile2RecordFilter;
+
+import kieker.common.record.IMonitoringRecord;
+
+public class DirWithDat2RecordFilter extends Pipeline<File, IMonitoringRecord> {
+
+	private ClassNameRegistryRepository classNameRegistryRepository;
+
+	public DirWithDat2RecordFilter(final ClassNameRegistryRepository classNameRegistryRepository) {
+		this.classNameRegistryRepository = classNameRegistryRepository;
+
+		final ClassNameRegistryCreationFilter classNameRegistryCreationFilter = new ClassNameRegistryCreationFilter(classNameRegistryRepository);
+		final Directory2FilesFilter directory2FilesFilter = new Directory2FilesFilter();
+		final DatFile2RecordFilter datFile2RecordFilter = new DatFile2RecordFilter(classNameRegistryRepository);
+
+		this.setFirstStage(classNameRegistryCreationFilter);
+		this.addIntermediateStage(directory2FilesFilter);
+		this.setLastStage(datFile2RecordFilter);
+	}
+
+	public DirWithDat2RecordFilter() {
+		this(null);
+	}
+
+	public ClassNameRegistryRepository getClassNameRegistryRepository() {
+		return this.classNameRegistryRepository;
+	}
+
+	public void setClassNameRegistryRepository(final ClassNameRegistryRepository classNameRegistryRepository) {
+		this.classNameRegistryRepository = classNameRegistryRepository;
+	}
+}
diff --git a/src/test/java/teetime/variant/methodcallWithPorts/examples/recordReader/RecordReaderAnalysis.java b/src/test/java/teetime/variant/methodcallWithPorts/examples/recordReader/RecordReaderAnalysis.java
index c9551b0a..8a1b3397 100644
--- a/src/test/java/teetime/variant/methodcallWithPorts/examples/recordReader/RecordReaderAnalysis.java
+++ b/src/test/java/teetime/variant/methodcallWithPorts/examples/recordReader/RecordReaderAnalysis.java
@@ -25,7 +25,7 @@ import teetime.variant.methodcallWithPorts.framework.core.RunnableStage;
 import teetime.variant.methodcallWithPorts.framework.core.pipe.SingleElementPipe;
 import teetime.variant.methodcallWithPorts.framework.core.pipe.SpScPipe;
 import teetime.variant.methodcallWithPorts.stage.CollectorSink;
-import teetime.variant.methodcallWithPorts.stage.kieker.File2RecordFilter;
+import teetime.variant.methodcallWithPorts.stage.kieker.Dir2RecordFilter;
 import teetime.variant.methodcallWithPorts.stage.kieker.className.ClassNameRegistryRepository;
 
 import kieker.common.record.IMonitoringRecord;
@@ -53,7 +53,7 @@ public class RecordReaderAnalysis extends Analysis {
 	private Pipeline<File, Object> buildProducerPipeline() {
 		this.classNameRegistryRepository = new ClassNameRegistryRepository();
 		// create stages
-		File2RecordFilter file2RecordFilter = new File2RecordFilter(this.classNameRegistryRepository);
+		Dir2RecordFilter file2RecordFilter = new Dir2RecordFilter(this.classNameRegistryRepository);
 		CollectorSink<IMonitoringRecord> collector = new CollectorSink<IMonitoringRecord>(this.elementCollection);
 
 		final Pipeline<File, Object> pipeline = new Pipeline<File, Object>();
-- 
GitLab