From 8d8b560987e65494b52246de638da181f55d30d7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Lars=20Blu=CC=88mke?= <lbl@informatik.uni-kiel.de>
Date: Fri, 14 Oct 2016 11:25:07 +0200
Subject: [PATCH] migration and restructuring of TraceIdFilter

---
 .../filter/select/traceid/TraceIdFilter.java  | 85 +++++++++++++++++++
 .../components/AbstractTraceIdFilter.java     | 62 ++++++++++++++
 .../OperationExecutionTraceIdFilter.java      | 16 ++++
 .../components/TraceEventTraceIdFilter.java   | 16 ++++
 .../TraceMetadataTraceIdFilter.java           | 16 ++++
 5 files changed, 195 insertions(+)
 create mode 100644 src/main/java/kieker/analysis/plugin/filter/select/traceid/TraceIdFilter.java
 create mode 100644 src/main/java/kieker/analysis/plugin/filter/select/traceid/components/AbstractTraceIdFilter.java
 create mode 100644 src/main/java/kieker/analysis/plugin/filter/select/traceid/components/OperationExecutionTraceIdFilter.java
 create mode 100644 src/main/java/kieker/analysis/plugin/filter/select/traceid/components/TraceEventTraceIdFilter.java
 create mode 100644 src/main/java/kieker/analysis/plugin/filter/select/traceid/components/TraceMetadataTraceIdFilter.java

diff --git a/src/main/java/kieker/analysis/plugin/filter/select/traceid/TraceIdFilter.java b/src/main/java/kieker/analysis/plugin/filter/select/traceid/TraceIdFilter.java
new file mode 100644
index 00000000..e8de83a7
--- /dev/null
+++ b/src/main/java/kieker/analysis/plugin/filter/select/traceid/TraceIdFilter.java
@@ -0,0 +1,85 @@
+package kieker.analysis.plugin.filter.select.traceid;
+
+import kieker.analysis.plugin.filter.select.traceid.components.OperationExecutionTraceIdFilter;
+import kieker.analysis.plugin.filter.select.traceid.components.TraceEventTraceIdFilter;
+import kieker.analysis.plugin.filter.select.traceid.components.TraceMetadataTraceIdFilter;
+import kieker.common.record.IMonitoringRecord;
+import kieker.common.record.controlflow.OperationExecutionRecord;
+import kieker.common.record.flow.trace.AbstractTraceEvent;
+import kieker.common.record.flow.trace.TraceMetadata;
+
+import teetime.framework.CompositeStage;
+import teetime.framework.InputPort;
+import teetime.framework.OutputPort;
+import teetime.stage.MultipleInstanceOfFilter;
+import teetime.stage.basic.merger.Merger;
+
+public class TraceIdFilter extends CompositeStage {
+
+	private InputPort<IMonitoringRecord> monitoringRecordsCombinedInputPort;
+
+	private OutputPort<IMonitoringRecord> matchingTraceIdOutputPort;
+	private OutputPort<IMonitoringRecord> mismatchingTraceIdOutputPort;
+
+	private final MultipleInstanceOfFilter<IMonitoringRecord> instanceOfFilter;
+	private final TraceMetadataTraceIdFilter traceMetadataFilter;
+	private final TraceEventTraceIdFilter traceEventFilter;
+	private final OperationExecutionTraceIdFilter operationExecutionFilter;
+
+	private final Merger<IMonitoringRecord> matchingMerger;
+	private final Merger<IMonitoringRecord> mismatchingMerger;
+
+	/**
+	 * Creates a new instance of this class using the given parameters.
+	 *
+	 * @param acceptAllTraces
+	 *            Determining whether to accept all traces, regardless of the given trace IDs.
+	 * @param selectedTraceIds
+	 *            Determining which trace IDs should be accepted by this filter.
+	 */
+	public TraceIdFilter(final boolean acceptAllTraces, final String[] selectedTraceIds) {
+		// Initializing the internal filters
+		this.instanceOfFilter = new MultipleInstanceOfFilter<>();
+		this.traceMetadataFilter = new TraceMetadataTraceIdFilter(acceptAllTraces, selectedTraceIds);
+		this.traceEventFilter = new TraceEventTraceIdFilter(acceptAllTraces, selectedTraceIds);
+		this.operationExecutionFilter = new OperationExecutionTraceIdFilter(acceptAllTraces, selectedTraceIds);
+
+		this.matchingMerger = new Merger<>();
+		this.mismatchingMerger = new Merger<>();
+
+		this.monitoringRecordsCombinedInputPort = instanceOfFilter.getInputPort();
+		this.matchingTraceIdOutputPort = matchingMerger.getOutputPort();
+		this.mismatchingTraceIdOutputPort = mismatchingMerger.getOutputPort();
+
+		// Connecting the internal filters
+		this.monitoringRecordsCombinedInputPort = instanceOfFilter.getInputPort();
+
+		connectPorts(this.instanceOfFilter.getOutputPortForType(TraceMetadata.class), this.traceMetadataFilter.getInputPort());
+		connectPorts(this.instanceOfFilter.getOutputPortForType(AbstractTraceEvent.class), this.traceEventFilter.getInputPort());
+		connectPorts(this.instanceOfFilter.getOutputPortForType(OperationExecutionRecord.class), this.operationExecutionFilter.getInputPort());
+
+		connectPorts(this.traceMetadataFilter.getMatchingTraceIdOutputPort(), this.matchingMerger.getNewInputPort());
+		connectPorts(this.traceEventFilter.getMatchingTraceIdOutputPort(), this.matchingMerger.getNewInputPort());
+		connectPorts(this.operationExecutionFilter.getMatchingTraceIdOutputPort(), this.matchingMerger.getNewInputPort());
+
+		connectPorts(this.traceMetadataFilter.getMismatchingTraceIdOutputPort(), this.mismatchingMerger.getNewInputPort());
+		connectPorts(this.traceEventFilter.getMismatchingTraceIdOutputPort(), this.mismatchingMerger.getNewInputPort());
+		connectPorts(this.operationExecutionFilter.getMismatchingTraceIdOutputPort(), this.mismatchingMerger.getNewInputPort());
+
+		this.matchingTraceIdOutputPort = this.matchingMerger.getOutputPort();
+		this.mismatchingTraceIdOutputPort = this.mismatchingMerger.getOutputPort();
+	}
+
+	public InputPort<IMonitoringRecord> getMonitoringRecordsCombinedInputPort() {
+		return this.monitoringRecordsCombinedInputPort;
+	}
+
+	public OutputPort<IMonitoringRecord> getMatchingTraceIdOutputPort() {
+		return this.matchingTraceIdOutputPort;
+	}
+
+	public OutputPort<IMonitoringRecord> getMismatchingTraceIdOutputPort() {
+		return this.mismatchingTraceIdOutputPort;
+	}
+
+}
diff --git a/src/main/java/kieker/analysis/plugin/filter/select/traceid/components/AbstractTraceIdFilter.java b/src/main/java/kieker/analysis/plugin/filter/select/traceid/components/AbstractTraceIdFilter.java
new file mode 100644
index 00000000..0436f8fe
--- /dev/null
+++ b/src/main/java/kieker/analysis/plugin/filter/select/traceid/components/AbstractTraceIdFilter.java
@@ -0,0 +1,62 @@
+package kieker.analysis.plugin.filter.select.traceid.components;
+
+import java.util.Set;
+import java.util.TreeSet;
+
+import teetime.framework.AbstractConsumerStage;
+import teetime.framework.OutputPort;
+
+public abstract class AbstractTraceIdFilter<T> extends AbstractConsumerStage<T> {
+
+	private final boolean acceptAllTraces;
+	private final Set<Long> selectedTraceIds;
+
+	private final OutputPort<T> matchingTraceIdOutputPort = createOutputPort();
+	private final OutputPort<T> mismatchingTraceIdOutputPort = createOutputPort();
+
+	/**
+	 * Creates a new instance of this class using the given parameters.
+	 *
+	 * @param acceptAllTraces
+	 *            Determining whether to accept all traces, regardless of the given trace IDs.
+	 * @param selectedTraceIds
+	 *            Determining which trace IDs should be accepted by this filter.
+	 */
+	public AbstractTraceIdFilter(final boolean acceptAllTraces, final String[] selectedTraceIds) {
+
+		this.acceptAllTraces = acceptAllTraces;
+		this.selectedTraceIds = new TreeSet<Long>();
+		for (final String id : selectedTraceIds) {
+			this.selectedTraceIds.add(Long.parseLong(id));
+		}
+	}
+
+	private final boolean acceptId(final long traceId) {
+		if (this.acceptAllTraces || this.selectedTraceIds.contains(traceId)) {
+			return true;
+		}
+		return false;
+	}
+
+	@Override
+	protected void execute(final T record) {
+		if (this.acceptId(this.getRecordsTraceId(record))) {
+			this.matchingTraceIdOutputPort.send(record);
+		} else {
+			this.mismatchingTraceIdOutputPort.send(record);
+		}
+	}
+
+	protected abstract long getRecordsTraceId(T record);
+
+	/** Returns the output port delivering the records with matching IDs. */
+	public OutputPort<T> getMatchingTraceIdOutputPort() {
+		return matchingTraceIdOutputPort;
+	}
+
+	/** Returns the output port delivering the records with the non matching IDs. */
+	public OutputPort<T> getMismatchingTraceIdOutputPort() {
+		return mismatchingTraceIdOutputPort;
+	}
+
+}
diff --git a/src/main/java/kieker/analysis/plugin/filter/select/traceid/components/OperationExecutionTraceIdFilter.java b/src/main/java/kieker/analysis/plugin/filter/select/traceid/components/OperationExecutionTraceIdFilter.java
new file mode 100644
index 00000000..eaa9600e
--- /dev/null
+++ b/src/main/java/kieker/analysis/plugin/filter/select/traceid/components/OperationExecutionTraceIdFilter.java
@@ -0,0 +1,16 @@
+package kieker.analysis.plugin.filter.select.traceid.components;
+
+import kieker.common.record.controlflow.OperationExecutionRecord;
+
+public class OperationExecutionTraceIdFilter extends AbstractTraceIdFilter<OperationExecutionRecord> {
+
+	public OperationExecutionTraceIdFilter(final boolean acceptAllTraces, final String[] selectedTraceIds) {
+		super(acceptAllTraces, selectedTraceIds);
+	}
+
+	@Override
+	protected long getRecordsTraceId(final OperationExecutionRecord record) {
+		return record.getTraceId();
+	}
+
+}
diff --git a/src/main/java/kieker/analysis/plugin/filter/select/traceid/components/TraceEventTraceIdFilter.java b/src/main/java/kieker/analysis/plugin/filter/select/traceid/components/TraceEventTraceIdFilter.java
new file mode 100644
index 00000000..d3142c52
--- /dev/null
+++ b/src/main/java/kieker/analysis/plugin/filter/select/traceid/components/TraceEventTraceIdFilter.java
@@ -0,0 +1,16 @@
+package kieker.analysis.plugin.filter.select.traceid.components;
+
+import kieker.common.record.flow.trace.AbstractTraceEvent;
+
+public class TraceEventTraceIdFilter extends AbstractTraceIdFilter<AbstractTraceEvent> {
+
+	public TraceEventTraceIdFilter(final boolean acceptAllTraces, final String[] selectedTraceIds) {
+		super(acceptAllTraces, selectedTraceIds);
+	}
+
+	@Override
+	protected long getRecordsTraceId(final AbstractTraceEvent record) {
+		return record.getTraceId();
+	}
+
+}
diff --git a/src/main/java/kieker/analysis/plugin/filter/select/traceid/components/TraceMetadataTraceIdFilter.java b/src/main/java/kieker/analysis/plugin/filter/select/traceid/components/TraceMetadataTraceIdFilter.java
new file mode 100644
index 00000000..fc8f6543
--- /dev/null
+++ b/src/main/java/kieker/analysis/plugin/filter/select/traceid/components/TraceMetadataTraceIdFilter.java
@@ -0,0 +1,16 @@
+package kieker.analysis.plugin.filter.select.traceid.components;
+
+import kieker.common.record.flow.trace.TraceMetadata;
+
+public class TraceMetadataTraceIdFilter extends AbstractTraceIdFilter<TraceMetadata> {
+
+	public TraceMetadataTraceIdFilter(final boolean acceptAllTraces, final String[] selectedTraceIds) {
+		super(acceptAllTraces, selectedTraceIds);
+	}
+
+	@Override
+	protected long getRecordsTraceId(final TraceMetadata record) {
+		return record.getTraceId();
+	}
+
+}
-- 
GitLab