From 56843f86a70dd481b29113f863f918fcfc772d88 Mon Sep 17 00:00:00 2001
From: Nils Christian Ehmke <nie@informatik.uni-kiel.de>
Date: Thu, 18 Dec 2014 14:02:14 +0100
Subject: [PATCH] Refactoring

---
 src/main/java/kieker/gui/Main.java            |  4 +-
 .../kieker/gui/common/model/DataModel.java    |  2 +-
 .../importer/ImportAnalysisConfiguration.java | 16 ++--
 .../stages/FailedAggregatedTraceFilter.java   |  2 +-
 .../importer/stages/FailedTraceFilter.java    |  2 +-
 ...ailureContainingAggregatedTraceFilter.java |  2 +-
 .../stages/FailureContainingTraceFilter.java  |  2 +-
 .../importer/stages/RecordSimplificator.java  |  2 +-
 .../importer/stages/TraceAggregator.java      |  2 +-
 .../importer/stages/TraceReconstructor.java   |  2 +-
 .../java/kieker/gui/mainview/Controller.java  | 14 +--
 src/main/java/kieker/gui/mainview/Model.java  |  7 +-
 src/main/java/kieker/gui/mainview/View.java   | 21 +++--
 .../kieker/gui/subview/ISubController.java    |  1 -
 .../java/kieker/gui/subview/ISubView.java     |  5 +
 .../aggregatedtraces/AbstractController.java  | 42 ---------
 .../subview/aggregatedtraces/Controller.java  | 91 +++++++++++++------
 .../aggregatedtraces/FailedController.java    | 56 ------------
 .../aggregatedtraces/FailureController.java   | 56 ------------
 .../subview/traces/AbstractController.java    | 42 ---------
 .../kieker/gui/subview/traces/Controller.java | 75 +++++++++++++--
 .../gui/subview/traces/FailedController.java  | 56 ------------
 .../gui/subview/traces/FailureController.java | 56 ------------
 .../stages/RecordSimplificatorTest.java       |  4 +-
 .../stages/TraceReconstructorTest.java        |  4 +-
 25 files changed, 186 insertions(+), 380 deletions(-)
 rename src/main/java/kieker/gui/common/{ => model}/importer/ImportAnalysisConfiguration.java (93%)
 rename src/main/java/kieker/gui/common/{ => model}/importer/stages/FailedAggregatedTraceFilter.java (96%)
 rename src/main/java/kieker/gui/common/{ => model}/importer/stages/FailedTraceFilter.java (96%)
 rename src/main/java/kieker/gui/common/{ => model}/importer/stages/FailureContainingAggregatedTraceFilter.java (96%)
 rename src/main/java/kieker/gui/common/{ => model}/importer/stages/FailureContainingTraceFilter.java (96%)
 rename src/main/java/kieker/gui/common/{ => model}/importer/stages/RecordSimplificator.java (97%)
 rename src/main/java/kieker/gui/common/{ => model}/importer/stages/TraceAggregator.java (97%)
 rename src/main/java/kieker/gui/common/{ => model}/importer/stages/TraceReconstructor.java (98%)
 delete mode 100644 src/main/java/kieker/gui/subview/aggregatedtraces/AbstractController.java
 delete mode 100644 src/main/java/kieker/gui/subview/aggregatedtraces/FailedController.java
 delete mode 100644 src/main/java/kieker/gui/subview/aggregatedtraces/FailureController.java
 delete mode 100644 src/main/java/kieker/gui/subview/traces/AbstractController.java
 delete mode 100644 src/main/java/kieker/gui/subview/traces/FailedController.java
 delete mode 100644 src/main/java/kieker/gui/subview/traces/FailureController.java
 rename src/test/java/kieker/gui/common/{ => model}/importer/stages/RecordSimplificatorTest.java (93%)
 rename src/test/java/kieker/gui/common/{ => model}/importer/stages/TraceReconstructorTest.java (98%)

diff --git a/src/main/java/kieker/gui/Main.java b/src/main/java/kieker/gui/Main.java
index 48048b68..3600738d 100644
--- a/src/main/java/kieker/gui/Main.java
+++ b/src/main/java/kieker/gui/Main.java
@@ -23,11 +23,11 @@ import kieker.gui.mainview.Controller;
  *
  * @author Nils Christian Ehmke
  */
-public class Main {
+public final class Main {
 
 	/**
 	 * The main method of this application.
-	 * 
+	 *
 	 * @param args
 	 *            The command line arguments. They have no effect.
 	 */
diff --git a/src/main/java/kieker/gui/common/model/DataModel.java b/src/main/java/kieker/gui/common/model/DataModel.java
index 152c4cab..770c7356 100644
--- a/src/main/java/kieker/gui/common/model/DataModel.java
+++ b/src/main/java/kieker/gui/common/model/DataModel.java
@@ -27,7 +27,7 @@ import kieker.common.record.misc.KiekerMetadataRecord;
 import kieker.gui.common.domain.AggregatedExecution;
 import kieker.gui.common.domain.Execution;
 import kieker.gui.common.domain.Record;
-import kieker.gui.common.importer.ImportAnalysisConfiguration;
+import kieker.gui.common.model.importer.ImportAnalysisConfiguration;
 import teetime.framework.Analysis;
 
 /**
diff --git a/src/main/java/kieker/gui/common/importer/ImportAnalysisConfiguration.java b/src/main/java/kieker/gui/common/model/importer/ImportAnalysisConfiguration.java
similarity index 93%
rename from src/main/java/kieker/gui/common/importer/ImportAnalysisConfiguration.java
rename to src/main/java/kieker/gui/common/model/importer/ImportAnalysisConfiguration.java
index 92e0aa22..35f0a668 100644
--- a/src/main/java/kieker/gui/common/importer/ImportAnalysisConfiguration.java
+++ b/src/main/java/kieker/gui/common/model/importer/ImportAnalysisConfiguration.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  ***************************************************************************/
 
-package kieker.gui.common.importer;
+package kieker.gui.common.model.importer;
 
 import java.io.File;
 import java.util.List;
@@ -26,13 +26,13 @@ import kieker.common.record.misc.KiekerMetadataRecord;
 import kieker.gui.common.domain.AggregatedExecution;
 import kieker.gui.common.domain.Execution;
 import kieker.gui.common.domain.Record;
-import kieker.gui.common.importer.stages.FailedAggregatedTraceFilter;
-import kieker.gui.common.importer.stages.FailedTraceFilter;
-import kieker.gui.common.importer.stages.FailureContainingAggregatedTraceFilter;
-import kieker.gui.common.importer.stages.FailureContainingTraceFilter;
-import kieker.gui.common.importer.stages.RecordSimplificator;
-import kieker.gui.common.importer.stages.TraceAggregator;
-import kieker.gui.common.importer.stages.TraceReconstructor;
+import kieker.gui.common.model.importer.stages.FailedAggregatedTraceFilter;
+import kieker.gui.common.model.importer.stages.FailedTraceFilter;
+import kieker.gui.common.model.importer.stages.FailureContainingAggregatedTraceFilter;
+import kieker.gui.common.model.importer.stages.FailureContainingTraceFilter;
+import kieker.gui.common.model.importer.stages.RecordSimplificator;
+import kieker.gui.common.model.importer.stages.TraceAggregator;
+import kieker.gui.common.model.importer.stages.TraceReconstructor;
 import teetime.framework.AnalysisConfiguration;
 import teetime.framework.pipe.IPipeFactory;
 import teetime.framework.pipe.PipeFactoryRegistry.PipeOrdering;
diff --git a/src/main/java/kieker/gui/common/importer/stages/FailedAggregatedTraceFilter.java b/src/main/java/kieker/gui/common/model/importer/stages/FailedAggregatedTraceFilter.java
similarity index 96%
rename from src/main/java/kieker/gui/common/importer/stages/FailedAggregatedTraceFilter.java
rename to src/main/java/kieker/gui/common/model/importer/stages/FailedAggregatedTraceFilter.java
index c8958943..f02d0976 100644
--- a/src/main/java/kieker/gui/common/importer/stages/FailedAggregatedTraceFilter.java
+++ b/src/main/java/kieker/gui/common/model/importer/stages/FailedAggregatedTraceFilter.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  ***************************************************************************/
 
-package kieker.gui.common.importer.stages;
+package kieker.gui.common.model.importer.stages;
 
 import kieker.gui.common.domain.AggregatedExecution;
 import teetime.framework.AbstractConsumerStage;
diff --git a/src/main/java/kieker/gui/common/importer/stages/FailedTraceFilter.java b/src/main/java/kieker/gui/common/model/importer/stages/FailedTraceFilter.java
similarity index 96%
rename from src/main/java/kieker/gui/common/importer/stages/FailedTraceFilter.java
rename to src/main/java/kieker/gui/common/model/importer/stages/FailedTraceFilter.java
index a4039182..11e3d189 100644
--- a/src/main/java/kieker/gui/common/importer/stages/FailedTraceFilter.java
+++ b/src/main/java/kieker/gui/common/model/importer/stages/FailedTraceFilter.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  ***************************************************************************/
 
-package kieker.gui.common.importer.stages;
+package kieker.gui.common.model.importer.stages;
 
 import kieker.gui.common.domain.Execution;
 import teetime.framework.AbstractConsumerStage;
diff --git a/src/main/java/kieker/gui/common/importer/stages/FailureContainingAggregatedTraceFilter.java b/src/main/java/kieker/gui/common/model/importer/stages/FailureContainingAggregatedTraceFilter.java
similarity index 96%
rename from src/main/java/kieker/gui/common/importer/stages/FailureContainingAggregatedTraceFilter.java
rename to src/main/java/kieker/gui/common/model/importer/stages/FailureContainingAggregatedTraceFilter.java
index 352d4cb2..9bdf7959 100644
--- a/src/main/java/kieker/gui/common/importer/stages/FailureContainingAggregatedTraceFilter.java
+++ b/src/main/java/kieker/gui/common/model/importer/stages/FailureContainingAggregatedTraceFilter.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  ***************************************************************************/
 
-package kieker.gui.common.importer.stages;
+package kieker.gui.common.model.importer.stages;
 
 import kieker.gui.common.domain.AggregatedExecution;
 import teetime.framework.AbstractConsumerStage;
diff --git a/src/main/java/kieker/gui/common/importer/stages/FailureContainingTraceFilter.java b/src/main/java/kieker/gui/common/model/importer/stages/FailureContainingTraceFilter.java
similarity index 96%
rename from src/main/java/kieker/gui/common/importer/stages/FailureContainingTraceFilter.java
rename to src/main/java/kieker/gui/common/model/importer/stages/FailureContainingTraceFilter.java
index 6ce1c1be..5b71e3f3 100644
--- a/src/main/java/kieker/gui/common/importer/stages/FailureContainingTraceFilter.java
+++ b/src/main/java/kieker/gui/common/model/importer/stages/FailureContainingTraceFilter.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  ***************************************************************************/
 
-package kieker.gui.common.importer.stages;
+package kieker.gui.common.model.importer.stages;
 
 import kieker.gui.common.domain.Execution;
 import teetime.framework.AbstractConsumerStage;
diff --git a/src/main/java/kieker/gui/common/importer/stages/RecordSimplificator.java b/src/main/java/kieker/gui/common/model/importer/stages/RecordSimplificator.java
similarity index 97%
rename from src/main/java/kieker/gui/common/importer/stages/RecordSimplificator.java
rename to src/main/java/kieker/gui/common/model/importer/stages/RecordSimplificator.java
index 8a455e86..644a82c5 100644
--- a/src/main/java/kieker/gui/common/importer/stages/RecordSimplificator.java
+++ b/src/main/java/kieker/gui/common/model/importer/stages/RecordSimplificator.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  ***************************************************************************/
 
-package kieker.gui.common.importer.stages;
+package kieker.gui.common.model.importer.stages;
 
 import kieker.common.record.IMonitoringRecord;
 import kieker.gui.common.domain.Record;
diff --git a/src/main/java/kieker/gui/common/importer/stages/TraceAggregator.java b/src/main/java/kieker/gui/common/model/importer/stages/TraceAggregator.java
similarity index 97%
rename from src/main/java/kieker/gui/common/importer/stages/TraceAggregator.java
rename to src/main/java/kieker/gui/common/model/importer/stages/TraceAggregator.java
index 15f94627..652e56a3 100644
--- a/src/main/java/kieker/gui/common/importer/stages/TraceAggregator.java
+++ b/src/main/java/kieker/gui/common/model/importer/stages/TraceAggregator.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  ***************************************************************************/
 
-package kieker.gui.common.importer.stages;
+package kieker.gui.common.model.importer.stages;
 
 import java.util.HashMap;
 import java.util.Map;
diff --git a/src/main/java/kieker/gui/common/importer/stages/TraceReconstructor.java b/src/main/java/kieker/gui/common/model/importer/stages/TraceReconstructor.java
similarity index 98%
rename from src/main/java/kieker/gui/common/importer/stages/TraceReconstructor.java
rename to src/main/java/kieker/gui/common/model/importer/stages/TraceReconstructor.java
index b2c1a5a7..7bb687b9 100644
--- a/src/main/java/kieker/gui/common/importer/stages/TraceReconstructor.java
+++ b/src/main/java/kieker/gui/common/model/importer/stages/TraceReconstructor.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  ***************************************************************************/
 
-package kieker.gui.common.importer.stages;
+package kieker.gui.common.model.importer.stages;
 
 import java.util.Deque;
 import java.util.HashMap;
diff --git a/src/main/java/kieker/gui/mainview/Controller.java b/src/main/java/kieker/gui/mainview/Controller.java
index 0026df57..c279e1ba 100644
--- a/src/main/java/kieker/gui/mainview/Controller.java
+++ b/src/main/java/kieker/gui/mainview/Controller.java
@@ -23,6 +23,8 @@ import kieker.gui.common.model.DataModel;
 import kieker.gui.common.model.PropertiesModel;
 import kieker.gui.subview.ISubController;
 import kieker.gui.subview.ISubView;
+import kieker.gui.subview.aggregatedtraces.Controller.Filter;
+import kieker.gui.subview.traces.Controller.Type;
 
 import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.events.SelectionListener;
@@ -47,12 +49,12 @@ public final class Controller implements SelectionListener {
 
 		// Create the sub-controllers
 		final ISubController subViewController1 = new kieker.gui.subview.records.Controller(this.dataModel);
-		final ISubController subViewController2 = new kieker.gui.subview.aggregatedtraces.Controller(this.dataModel, this.propertiesModel);
-		final ISubController subViewController3 = new kieker.gui.subview.traces.FailedController(this.dataModel, this.propertiesModel);
-		final ISubController subViewController4 = new kieker.gui.subview.traces.Controller(this.dataModel, this.propertiesModel);
-		final ISubController subViewController5 = new kieker.gui.subview.traces.FailureController(this.dataModel, this.propertiesModel);
-		final ISubController subViewController6 = new kieker.gui.subview.aggregatedtraces.FailedController(this.dataModel, this.propertiesModel);
-		final ISubController subViewController7 = new kieker.gui.subview.aggregatedtraces.FailureController(this.dataModel, this.propertiesModel);
+		final ISubController subViewController2 = new kieker.gui.subview.aggregatedtraces.Controller(Filter.NONE, this.dataModel, this.propertiesModel);
+		final ISubController subViewController3 = new kieker.gui.subview.traces.Controller(Type.JUST_FAILED_TRACES, this.dataModel, this.propertiesModel);
+		final ISubController subViewController4 = new kieker.gui.subview.traces.Controller(Type.NONE, this.dataModel, this.propertiesModel);
+		final ISubController subViewController5 = new kieker.gui.subview.traces.Controller(Type.JUST_FAILURE_CONTAINING_TRACES, this.dataModel, this.propertiesModel);
+		final ISubController subViewController6 = new kieker.gui.subview.aggregatedtraces.Controller(Filter.JUST_FAILED_TRACES, this.dataModel, this.propertiesModel);
+		final ISubController subViewController7 = new kieker.gui.subview.aggregatedtraces.Controller(Filter.JUST_FAILURE_CONTAINING_TRACES, this.dataModel, this.propertiesModel);
 
 		// Get the sub-views from the controllers
 		final Map<String, ISubView> subViews = new HashMap<>();
diff --git a/src/main/java/kieker/gui/mainview/Model.java b/src/main/java/kieker/gui/mainview/Model.java
index a3d5a348..bd5bdcee 100644
--- a/src/main/java/kieker/gui/mainview/Model.java
+++ b/src/main/java/kieker/gui/mainview/Model.java
@@ -18,9 +18,14 @@ package kieker.gui.mainview;
 
 import java.util.Observable;
 
+/**
+ * The model of the main view.
+ *
+ * @author Nils Christian Ehmke
+ */
 public final class Model extends Observable {
 
-	private String currentActiveSubViewKey = "";
+	private String currentActiveSubViewKey;
 
 	public String getCurrentActiveSubViewKey() {
 		return this.currentActiveSubViewKey;
diff --git a/src/main/java/kieker/gui/mainview/View.java b/src/main/java/kieker/gui/mainview/View.java
index 13e09a6e..9e4ba0a2 100644
--- a/src/main/java/kieker/gui/mainview/View.java
+++ b/src/main/java/kieker/gui/mainview/View.java
@@ -36,7 +36,12 @@ import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Tree;
 import org.eclipse.swt.widgets.TreeItem;
 
-public class View implements Observer {
+/**
+ * The main view of the application. For the most part it uses sub-views to show data.
+ *
+ * @author Nils Christian Ehmke
+ */
+public final class View implements Observer {
 
 	private final DataModel dataModel;
 	private final Model mainViewModel;
@@ -46,20 +51,22 @@ public class View implements Observer {
 	private Shell shell;
 	private Composite subViewComposite;
 	private StackLayout subViewLayout;
-	private Tree tree;
-	private TreeItem trtmExplorer;
-	private TreeItem trtmRecords;
-	private TreeItem trtmTraces;
+
+	private DirectoryDialog dialog;
+
 	private MenuItem mntmExit;
 	private MenuItem mntmShortOperationNames;
 	private MenuItem mntmLongOperationNames;
 	private MenuItem mntmShortComponentNames;
 	private MenuItem mntmLongComponentNames;
 	private MenuItem mntmOpenMonitoringLog;
-	private DirectoryDialog dialog;
+
+	private Tree tree;
+	private TreeItem trtmExplorer;
+	private TreeItem trtmRecords;
+	private TreeItem trtmTraces;
 	private TreeItem trtmAggregatedTraces;
 	private TreeItem trtmJustFailedTraces;
-
 	private TreeItem trtmJustTracesContaining;
 	private TreeItem trtmJustFailedAggTraces;
 	private TreeItem trtmJustAggTracesContaining;
diff --git a/src/main/java/kieker/gui/subview/ISubController.java b/src/main/java/kieker/gui/subview/ISubController.java
index f5d51194..a59d5b16 100644
--- a/src/main/java/kieker/gui/subview/ISubController.java
+++ b/src/main/java/kieker/gui/subview/ISubController.java
@@ -16,7 +16,6 @@
 
 package kieker.gui.subview;
 
-
 /**
  * A commons interface for all sub-controllers to reduce dependencies.
  *
diff --git a/src/main/java/kieker/gui/subview/ISubView.java b/src/main/java/kieker/gui/subview/ISubView.java
index f3962248..982b393b 100644
--- a/src/main/java/kieker/gui/subview/ISubView.java
+++ b/src/main/java/kieker/gui/subview/ISubView.java
@@ -18,6 +18,11 @@ package kieker.gui.subview;
 
 import org.eclipse.swt.widgets.Composite;
 
+/**
+ * An interface for classes representing sub-views within the main view.
+ *
+ * @author Nils Christian Ehmke
+ */
 public interface ISubView {
 
 	public void createComposite(final Composite parent);
diff --git a/src/main/java/kieker/gui/subview/aggregatedtraces/AbstractController.java b/src/main/java/kieker/gui/subview/aggregatedtraces/AbstractController.java
deleted file mode 100644
index cd0eab52..00000000
--- a/src/main/java/kieker/gui/subview/aggregatedtraces/AbstractController.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package kieker.gui.subview.aggregatedtraces;
-
-import kieker.gui.common.domain.AggregatedExecution;
-import kieker.gui.common.model.DataModel;
-import kieker.gui.common.model.PropertiesModel;
-import kieker.gui.subview.ISubController;
-import kieker.gui.subview.ISubView;
-import kieker.gui.subview.util.IModel;
-
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
-
-public abstract class AbstractController implements ISubController, SelectionListener {
-
-	private final ISubView view;
-	private final Model model;
-
-	public AbstractController(final DataModel dataModel, final PropertiesModel propertiesModel) {
-		final IModel<AggregatedExecution> modelProxy = this.createModelProxy(dataModel);
-		this.model = new Model();
-
-		this.view = new View(modelProxy, this.model, propertiesModel, this);
-	}
-
-	@Override
-	public ISubView getView() {
-		return this.view;
-	}
-
-	@Override
-	public void widgetSelected(final SelectionEvent e) {
-		if (e.item.getData() instanceof AggregatedExecution) {
-			this.model.setCurrentActiveTrace((AggregatedExecution) e.item.getData());
-		}
-	}
-
-	@Override
-	public void widgetDefaultSelected(final SelectionEvent e) {}
-
-	protected abstract IModel<AggregatedExecution> createModelProxy(final DataModel dataModel);
-
-}
diff --git a/src/main/java/kieker/gui/subview/aggregatedtraces/Controller.java b/src/main/java/kieker/gui/subview/aggregatedtraces/Controller.java
index 8a0f312f..7a60deae 100644
--- a/src/main/java/kieker/gui/subview/aggregatedtraces/Controller.java
+++ b/src/main/java/kieker/gui/subview/aggregatedtraces/Controller.java
@@ -1,19 +1,3 @@
-/***************************************************************************
- * Copyright 2014 Kieker Project (http://kieker-monitoring.net)
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- ***************************************************************************/
-
 package kieker.gui.subview.aggregatedtraces;
 
 import java.util.List;
@@ -21,33 +5,58 @@ import java.util.List;
 import kieker.gui.common.domain.AggregatedExecution;
 import kieker.gui.common.model.DataModel;
 import kieker.gui.common.model.PropertiesModel;
+import kieker.gui.subview.ISubController;
+import kieker.gui.subview.ISubView;
 import kieker.gui.subview.util.AbstractDataModelProxy;
 import kieker.gui.subview.util.IModel;
 
 import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+
+public class Controller implements ISubController, SelectionListener {
+
+	private final ISubView view;
+	private final Model model;
 
-/**
- * The sub-controller responsible for the sub-view presenting the available aggregated traces.
- *
- * @author Nils Christian Ehmke
- */
-public final class Controller extends AbstractController {
+	public Controller(final Filter filter, final DataModel dataModel, final PropertiesModel propertiesModel) {
+		final IModel<AggregatedExecution> modelProxy = createModelProxy(dataModel, filter);
+		this.model = new Model();
 
-	public Controller(final DataModel dataModel, final PropertiesModel propertiesModel) {
-		super(dataModel, propertiesModel);
+		this.view = new View(modelProxy, this.model, propertiesModel, this);
 	}
 
 	@Override
-	protected IModel<AggregatedExecution> createModelProxy(final DataModel dataModel) {
-		return new ModelProxy(dataModel);
+	public ISubView getView() {
+		return this.view;
+	}
+
+	@Override
+	public void widgetSelected(final SelectionEvent e) {
+		if (e.item.getData() instanceof AggregatedExecution) {
+			this.model.setCurrentActiveTrace((AggregatedExecution) e.item.getData());
+		}
 	}
 
 	@Override
 	public void widgetDefaultSelected(final SelectionEvent e) {}
 
-	private final class ModelProxy extends AbstractDataModelProxy<AggregatedExecution> {
+	private static IModel<AggregatedExecution> createModelProxy(final DataModel dataModel, final Filter filter) {
+		if (filter == Filter.JUST_FAILED_TRACES) {
+			return new FailedTracesModelProxy(dataModel);
+		}
+		if (filter == Filter.JUST_FAILURE_CONTAINING_TRACES) {
+			return new FailureContainingTracesModelProxy(dataModel);
+		}
+		return new TracesModelProxy(dataModel);
+	}
+
+	public enum Filter {
+		NONE, JUST_FAILED_TRACES, JUST_FAILURE_CONTAINING_TRACES
+	}
+
+	private static final class TracesModelProxy extends AbstractDataModelProxy<AggregatedExecution> {
 
-		private ModelProxy(final DataModel dataModel) {
+		private TracesModelProxy(final DataModel dataModel) {
 			super(dataModel);
 		}
 
@@ -58,4 +67,30 @@ public final class Controller extends AbstractController {
 
 	}
 
+	private static final class FailedTracesModelProxy extends AbstractDataModelProxy<AggregatedExecution> {
+
+		private FailedTracesModelProxy(final DataModel dataModel) {
+			super(dataModel);
+		}
+
+		@Override
+		public List<AggregatedExecution> getContent() {
+			return super.dataModel.getFailedAggregatedTracesCopy();
+		}
+
+	}
+
+	private static final class FailureContainingTracesModelProxy extends AbstractDataModelProxy<AggregatedExecution> {
+
+		private FailureContainingTracesModelProxy(final DataModel dataModel) {
+			super(dataModel);
+		}
+
+		@Override
+		public List<AggregatedExecution> getContent() {
+			return super.dataModel.getFailureContainingAggregatedTracesCopy();
+		}
+
+	}
+
 }
diff --git a/src/main/java/kieker/gui/subview/aggregatedtraces/FailedController.java b/src/main/java/kieker/gui/subview/aggregatedtraces/FailedController.java
deleted file mode 100644
index 2f55b7e6..00000000
--- a/src/main/java/kieker/gui/subview/aggregatedtraces/FailedController.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/***************************************************************************
- * Copyright 2014 Kieker Project (http://kieker-monitoring.net)
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- ***************************************************************************/
-
-package kieker.gui.subview.aggregatedtraces;
-
-import java.util.List;
-
-import kieker.gui.common.domain.AggregatedExecution;
-import kieker.gui.common.model.DataModel;
-import kieker.gui.common.model.PropertiesModel;
-import kieker.gui.subview.util.AbstractDataModelProxy;
-import kieker.gui.subview.util.IModel;
-
-/**
- * The sub-controller responsible for the sub-view presenting the available aggregated traces.
- *
- * @author Nils Christian Ehmke
- */
-public final class FailedController extends AbstractController {
-
-	public FailedController(final DataModel dataModel, final PropertiesModel propertiesModel) {
-		super(dataModel, propertiesModel);
-	}
-
-	@Override
-	protected IModel<AggregatedExecution> createModelProxy(final DataModel dataModel) {
-		return new ModelProxy(dataModel);
-	}
-
-	private final class ModelProxy extends AbstractDataModelProxy<AggregatedExecution> {
-
-		private ModelProxy(final DataModel dataModel) {
-			super(dataModel);
-		}
-
-		@Override
-		public List<AggregatedExecution> getContent() {
-			return super.dataModel.getFailedAggregatedTracesCopy();
-		}
-
-	}
-
-}
diff --git a/src/main/java/kieker/gui/subview/aggregatedtraces/FailureController.java b/src/main/java/kieker/gui/subview/aggregatedtraces/FailureController.java
deleted file mode 100644
index d4effffa..00000000
--- a/src/main/java/kieker/gui/subview/aggregatedtraces/FailureController.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/***************************************************************************
- * Copyright 2014 Kieker Project (http://kieker-monitoring.net)
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- ***************************************************************************/
-
-package kieker.gui.subview.aggregatedtraces;
-
-import java.util.List;
-
-import kieker.gui.common.domain.AggregatedExecution;
-import kieker.gui.common.model.DataModel;
-import kieker.gui.common.model.PropertiesModel;
-import kieker.gui.subview.util.AbstractDataModelProxy;
-import kieker.gui.subview.util.IModel;
-
-/**
- * The sub-controller responsible for the sub-view presenting the available aggregated traces.
- *
- * @author Nils Christian Ehmke
- */
-public final class FailureController extends AbstractController {
-
-	public FailureController(final DataModel dataModel, final PropertiesModel propertiesModel) {
-		super(dataModel, propertiesModel);
-	}
-
-	@Override
-	protected IModel<AggregatedExecution> createModelProxy(final DataModel dataModel) {
-		return new ModelProxy(dataModel);
-	}
-
-	private final class ModelProxy extends AbstractDataModelProxy<AggregatedExecution> {
-
-		private ModelProxy(final DataModel dataModel) {
-			super(dataModel);
-		}
-
-		@Override
-		public List<AggregatedExecution> getContent() {
-			return super.dataModel.getFailureContainingAggregatedTracesCopy();
-		}
-
-	}
-
-}
diff --git a/src/main/java/kieker/gui/subview/traces/AbstractController.java b/src/main/java/kieker/gui/subview/traces/AbstractController.java
deleted file mode 100644
index be95a30a..00000000
--- a/src/main/java/kieker/gui/subview/traces/AbstractController.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package kieker.gui.subview.traces;
-
-import kieker.gui.common.domain.Execution;
-import kieker.gui.common.model.DataModel;
-import kieker.gui.common.model.PropertiesModel;
-import kieker.gui.subview.ISubController;
-import kieker.gui.subview.ISubView;
-import kieker.gui.subview.util.IModel;
-
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
-
-public abstract class AbstractController implements ISubController, SelectionListener {
-
-	private final ISubView view;
-	private final Model model;
-
-	public AbstractController(final DataModel dataModel, final PropertiesModel propertiesModel) {
-		final IModel<Execution> modelProxy = this.createModelProxy(dataModel);
-		this.model = new Model();
-
-		this.view = new View(modelProxy, this.model, propertiesModel, this);
-	}
-
-	@Override
-	public ISubView getView() {
-		return this.view;
-	}
-
-	@Override
-	public void widgetSelected(final SelectionEvent e) {
-		if (e.item.getData() instanceof Execution) {
-			this.model.setCurrentActiveTrace((Execution) e.item.getData());
-		}
-	}
-
-	@Override
-	public void widgetDefaultSelected(final SelectionEvent e) {}
-
-	protected abstract IModel<Execution> createModelProxy(final DataModel dataModel);
-
-}
diff --git a/src/main/java/kieker/gui/subview/traces/Controller.java b/src/main/java/kieker/gui/subview/traces/Controller.java
index 6c6b76ba..022e275f 100644
--- a/src/main/java/kieker/gui/subview/traces/Controller.java
+++ b/src/main/java/kieker/gui/subview/traces/Controller.java
@@ -21,28 +21,63 @@ import java.util.List;
 import kieker.gui.common.domain.Execution;
 import kieker.gui.common.model.DataModel;
 import kieker.gui.common.model.PropertiesModel;
+import kieker.gui.subview.ISubController;
+import kieker.gui.subview.ISubView;
 import kieker.gui.subview.util.AbstractDataModelProxy;
 import kieker.gui.subview.util.IModel;
 
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+
 /**
  * The sub-controller responsible for the sub-view presenting the available traces.
  *
  * @author Nils Christian Ehmke
  */
-public final class Controller extends AbstractController {
+public final class Controller implements ISubController, SelectionListener {
+
+	private final ISubView view;
+	private final Model model;
+
+	public Controller(final Type filter, final DataModel dataModel, final PropertiesModel propertiesModel) {
+		final IModel<Execution> modelProxy = createModelProxy(dataModel, filter);
+		this.model = new Model();
+
+		this.view = new View(modelProxy, this.model, propertiesModel, this);
+	}
 
-	public Controller(final DataModel dataModel, final PropertiesModel propertiesModel) {
-		super(dataModel, propertiesModel);
+	@Override
+	public ISubView getView() {
+		return this.view;
+	}
+
+	@Override
+	public void widgetSelected(final SelectionEvent e) {
+		if (e.item.getData() instanceof Execution) {
+			this.model.setCurrentActiveTrace((Execution) e.item.getData());
+		}
 	}
 
 	@Override
-	protected IModel<Execution> createModelProxy(final DataModel dataModel) {
-		return new ModelProxy(dataModel);
+	public void widgetDefaultSelected(final SelectionEvent e) {}
+
+	private static IModel<Execution> createModelProxy(final DataModel dataModel, final Type filter) {
+		if (filter == Type.JUST_FAILED_TRACES) {
+			return new FailedTracesModelProxy(dataModel);
+		}
+		if (filter == Type.JUST_FAILURE_CONTAINING_TRACES) {
+			return new FailureContainingTracesModelProxy(dataModel);
+		}
+		return new TracesModelProxy(dataModel);
 	}
 
-	private final class ModelProxy extends AbstractDataModelProxy<Execution> {
+	public enum Type {
+		NONE, JUST_FAILED_TRACES, JUST_FAILURE_CONTAINING_TRACES
+	}
 
-		private ModelProxy(final DataModel dataModel) {
+	private static final class TracesModelProxy extends AbstractDataModelProxy<Execution> {
+
+		private TracesModelProxy(final DataModel dataModel) {
 			super(dataModel);
 		}
 
@@ -53,4 +88,30 @@ public final class Controller extends AbstractController {
 
 	}
 
+	private static final class FailedTracesModelProxy extends AbstractDataModelProxy<Execution> {
+
+		private FailedTracesModelProxy(final DataModel dataModel) {
+			super(dataModel);
+		}
+
+		@Override
+		public List<Execution> getContent() {
+			return super.dataModel.getFailedTracesCopy();
+		}
+
+	}
+
+	private static final class FailureContainingTracesModelProxy extends AbstractDataModelProxy<Execution> {
+
+		private FailureContainingTracesModelProxy(final DataModel dataModel) {
+			super(dataModel);
+		}
+
+		@Override
+		public List<Execution> getContent() {
+			return super.dataModel.getFailureContainingTracesCopy();
+		}
+
+	}
+
 }
diff --git a/src/main/java/kieker/gui/subview/traces/FailedController.java b/src/main/java/kieker/gui/subview/traces/FailedController.java
deleted file mode 100644
index 4bd6798c..00000000
--- a/src/main/java/kieker/gui/subview/traces/FailedController.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/***************************************************************************
- * Copyright 2014 Kieker Project (http://kieker-monitoring.net)
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- ***************************************************************************/
-
-package kieker.gui.subview.traces;
-
-import java.util.List;
-
-import kieker.gui.common.domain.Execution;
-import kieker.gui.common.model.DataModel;
-import kieker.gui.common.model.PropertiesModel;
-import kieker.gui.subview.util.AbstractDataModelProxy;
-import kieker.gui.subview.util.IModel;
-
-/**
- * The sub-controller responsible for the sub-view presenting the available failed traces.
- *
- * @author Nils Christian Ehmke
- */
-public final class FailedController extends AbstractController {
-
-	public FailedController(final DataModel dataModel, final PropertiesModel propertiesModel) {
-		super(dataModel, propertiesModel);
-	}
-
-	@Override
-	protected IModel<Execution> createModelProxy(final DataModel dataModel) {
-		return new ModelProxy(dataModel);
-	}
-
-	private final class ModelProxy extends AbstractDataModelProxy<Execution> {
-
-		private ModelProxy(final DataModel dataModel) {
-			super(dataModel);
-		}
-
-		@Override
-		public List<Execution> getContent() {
-			return super.dataModel.getFailedTracesCopy();
-		}
-
-	}
-
-}
diff --git a/src/main/java/kieker/gui/subview/traces/FailureController.java b/src/main/java/kieker/gui/subview/traces/FailureController.java
deleted file mode 100644
index 2864ac4b..00000000
--- a/src/main/java/kieker/gui/subview/traces/FailureController.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/***************************************************************************
- * Copyright 2014 Kieker Project (http://kieker-monitoring.net)
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- ***************************************************************************/
-
-package kieker.gui.subview.traces;
-
-import java.util.List;
-
-import kieker.gui.common.domain.Execution;
-import kieker.gui.common.model.DataModel;
-import kieker.gui.common.model.PropertiesModel;
-import kieker.gui.subview.util.AbstractDataModelProxy;
-import kieker.gui.subview.util.IModel;
-
-/**
- * The sub-controller responsible for the sub-view presenting the available failure-containing traces.
- *
- * @author Nils Christian Ehmke
- */
-public final class FailureController extends AbstractController {
-
-	public FailureController(final DataModel dataModel, final PropertiesModel propertiesModel) {
-		super(dataModel, propertiesModel);
-	}
-
-	@Override
-	protected IModel<Execution> createModelProxy(final DataModel dataModel) {
-		return new ModelProxy(dataModel);
-	}
-
-	private final class ModelProxy extends AbstractDataModelProxy<Execution> {
-
-		private ModelProxy(final DataModel dataModel) {
-			super(dataModel);
-		}
-
-		@Override
-		public List<Execution> getContent() {
-			return super.dataModel.getFailureContainingTracesCopy();
-		}
-
-	}
-
-}
diff --git a/src/test/java/kieker/gui/common/importer/stages/RecordSimplificatorTest.java b/src/test/java/kieker/gui/common/model/importer/stages/RecordSimplificatorTest.java
similarity index 93%
rename from src/test/java/kieker/gui/common/importer/stages/RecordSimplificatorTest.java
rename to src/test/java/kieker/gui/common/model/importer/stages/RecordSimplificatorTest.java
index 3fac242a..16816888 100644
--- a/src/test/java/kieker/gui/common/importer/stages/RecordSimplificatorTest.java
+++ b/src/test/java/kieker/gui/common/model/importer/stages/RecordSimplificatorTest.java
@@ -1,4 +1,4 @@
-package kieker.gui.common.importer.stages;
+package kieker.gui.common.model.importer.stages;
 
 import static org.hamcrest.Matchers.hasSize;
 import static org.hamcrest.Matchers.is;
@@ -9,7 +9,7 @@ import java.util.List;
 
 import kieker.common.record.flow.trace.operation.BeforeOperationEvent;
 import kieker.gui.common.domain.Record;
-import kieker.gui.common.importer.stages.RecordSimplificator;
+import kieker.gui.common.model.importer.stages.RecordSimplificator;
 
 import org.junit.Before;
 import org.junit.Test;
diff --git a/src/test/java/kieker/gui/common/importer/stages/TraceReconstructorTest.java b/src/test/java/kieker/gui/common/model/importer/stages/TraceReconstructorTest.java
similarity index 98%
rename from src/test/java/kieker/gui/common/importer/stages/TraceReconstructorTest.java
rename to src/test/java/kieker/gui/common/model/importer/stages/TraceReconstructorTest.java
index c344c0d5..cd3a13f9 100644
--- a/src/test/java/kieker/gui/common/importer/stages/TraceReconstructorTest.java
+++ b/src/test/java/kieker/gui/common/model/importer/stages/TraceReconstructorTest.java
@@ -1,4 +1,4 @@
-package kieker.gui.common.importer.stages;
+package kieker.gui.common.model.importer.stages;
 
 import static org.hamcrest.Matchers.hasSize;
 import static org.hamcrest.Matchers.is;
@@ -13,7 +13,7 @@ import kieker.common.record.flow.trace.operation.AfterOperationEvent;
 import kieker.common.record.flow.trace.operation.AfterOperationFailedEvent;
 import kieker.common.record.flow.trace.operation.BeforeOperationEvent;
 import kieker.gui.common.domain.Execution;
-import kieker.gui.common.importer.stages.TraceReconstructor;
+import kieker.gui.common.model.importer.stages.TraceReconstructor;
 
 import org.junit.Before;
 import org.junit.Test;
-- 
GitLab