From 41da0b3531ab0622883e443fc59dbd5bf8466f45 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=B6ren=20Henning?= <stu114708@informatik.uni-kiel.de>
Date: Fri, 13 May 2016 13:37:25 +0200
Subject: [PATCH] added SystemEntitySet

---
 .../analysis/dev/DependencyCreator.java       |  28 +++--
 .../domain/systemdependency/Component.java    |  16 +--
 .../domain/systemdependency/Container.java    |  14 +--
 .../domain/systemdependency/Operation.java    |   2 +-
 .../systemdependency/SoftwareSystem.java      |  13 +-
 .../systemdependency/SystemEntitySet.java     | 111 ++++++++++++++++++
 6 files changed, 144 insertions(+), 40 deletions(-)
 create mode 100644 src/main/java/kieker/analysis/domain/systemdependency/SystemEntitySet.java

diff --git a/src/main/java/kieker/analysis/dev/DependencyCreator.java b/src/main/java/kieker/analysis/dev/DependencyCreator.java
index 419f4340..d53d9c3c 100644
--- a/src/main/java/kieker/analysis/dev/DependencyCreator.java
+++ b/src/main/java/kieker/analysis/dev/DependencyCreator.java
@@ -1,26 +1,40 @@
 package kieker.analysis.dev;
 
 import kieker.analysis.domain.AggregatedOperationCall;
-import kieker.analysis.domain.OperationsDependency;
+import kieker.analysis.domain.systemdependency.SoftwareSystem;
 import kieker.analysis.trace.traversal.OperationCallVisitor;
 
 public class DependencyCreator extends OperationCallVisitor<AggregatedOperationCall> {
 
-	private final OperationsDependency operationsDependency;
+	private final SoftwareSystem softwareSystem;
 
-	public DependencyCreator(final OperationsDependency operationsDependency) {
-		this.operationsDependency = operationsDependency;
+	public DependencyCreator(final SoftwareSystem softwareSystem) {
+		this.softwareSystem = softwareSystem;
 	}
 
 	@Override
 	public void visit(final AggregatedOperationCall operationCall) {
 
-		operationsDependency.addCall(operationCall);
+		// softwareSystem.getContainers().contains()
 
+		// ist container in software system?
+		// softwareSystem.getContainers().add(e)
+		// wenn nein -> hinzufügen
+		// getContainer
+
+		// ist component in container?
+		// wenn nein -> hinzufügen
+		// getComponent
+
+		// ist operation in component?
+		// wenn nein -> hinzufügen
+		// getOperation
+
+		// Jetzt die Dependencies eintragen
 	}
 
-	public OperationsDependency getOperationsDependency() {
-		return operationsDependency;
+	public SoftwareSystem getSoftwareSystem() {
+		return softwareSystem;
 	}
 
 }
diff --git a/src/main/java/kieker/analysis/domain/systemdependency/Component.java b/src/main/java/kieker/analysis/domain/systemdependency/Component.java
index f69346e5..2820a411 100644
--- a/src/main/java/kieker/analysis/domain/systemdependency/Component.java
+++ b/src/main/java/kieker/analysis/domain/systemdependency/Component.java
@@ -1,30 +1,22 @@
 package kieker.analysis.domain.systemdependency;
 
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-
 public class Component extends SystemEntity {
 
 	private final Container container;
-	private final Map<String, Operation> operations = new HashMap<>();
+	private final SystemEntitySet<Operation> operations = new SystemEntitySet<>();
 
 	public Component(final String name, final Container container) {
 		super(name, container.getIdentifier() + ',' + name);
 		this.container = container;
-		container.addComponent(this);
+		container.getComponents().add(this);
 	}
 
 	public Container getContainer() {
 		return container;
 	}
 
-	public Collection<Operation> getOperations() {
-		return operations.values();
-	}
-
-	protected void addOperation(final Operation operation) {
-		this.operations.put(operation.getName(), operation);
+	public SystemEntitySet<Operation> getOperations() {
+		return operations;
 	}
 
 }
diff --git a/src/main/java/kieker/analysis/domain/systemdependency/Container.java b/src/main/java/kieker/analysis/domain/systemdependency/Container.java
index 65f2a62e..152845e9 100644
--- a/src/main/java/kieker/analysis/domain/systemdependency/Container.java
+++ b/src/main/java/kieker/analysis/domain/systemdependency/Container.java
@@ -1,23 +1,15 @@
 package kieker.analysis.domain.systemdependency;
 
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-
 public class Container extends SystemEntity {
 
-	private final Map<String, Component> components = new HashMap<>();
+	private final SystemEntitySet<Component> components = new SystemEntitySet<>();
 
 	public Container(final String name) {
 		super(name, name);
 	}
 
-	public Collection<Component> getComponents() {
-		return components.values();
-	}
-
-	protected void addComponent(final Component component) {
-		this.components.put(component.getName(), component);
+	public SystemEntitySet<Component> getComponents() {
+		return components;
 	}
 
 }
diff --git a/src/main/java/kieker/analysis/domain/systemdependency/Operation.java b/src/main/java/kieker/analysis/domain/systemdependency/Operation.java
index 5444c14d..7e36ddbb 100644
--- a/src/main/java/kieker/analysis/domain/systemdependency/Operation.java
+++ b/src/main/java/kieker/analysis/domain/systemdependency/Operation.java
@@ -7,7 +7,7 @@ public class Operation extends SystemEntity {
 	public Operation(final String name, final Component component) {
 		super(name, component.getIdentifier() + ',' + name);
 		this.component = component;
-		component.addOperation(this);
+		component.getOperations().add(this);
 	}
 
 	public Component getComponent() {
diff --git a/src/main/java/kieker/analysis/domain/systemdependency/SoftwareSystem.java b/src/main/java/kieker/analysis/domain/systemdependency/SoftwareSystem.java
index de8f0552..824a3671 100644
--- a/src/main/java/kieker/analysis/domain/systemdependency/SoftwareSystem.java
+++ b/src/main/java/kieker/analysis/domain/systemdependency/SoftwareSystem.java
@@ -2,12 +2,11 @@ package kieker.analysis.domain.systemdependency;
 
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
+import java.util.Set;
 
 public class SoftwareSystem {
 
-	private final Map<String, Container> containers = new HashMap<>();
+	private final SystemEntitySet<Container> containers = new SystemEntitySet<>();
 
 	private Collection<Dependency<Container>> containerDependencies = new ArrayList<>();
 	private Collection<Dependency<Component>> componentDependencies = new ArrayList<>();
@@ -15,12 +14,8 @@ public class SoftwareSystem {
 
 	public SoftwareSystem() {}
 
-	public Collection<Container> getContainers() {
-		return containers.values();
-	}
-
-	public void addContainer(final Container container) {
-		containers.put(container.getName(), container);
+	public Set<Container> getContainers() {
+		return containers;
 	}
 
 	public Collection<Dependency<Container>> getContainerDependencies() {
diff --git a/src/main/java/kieker/analysis/domain/systemdependency/SystemEntitySet.java b/src/main/java/kieker/analysis/domain/systemdependency/SystemEntitySet.java
new file mode 100644
index 00000000..1ffbcdcb
--- /dev/null
+++ b/src/main/java/kieker/analysis/domain/systemdependency/SystemEntitySet.java
@@ -0,0 +1,111 @@
+package kieker.analysis.domain.systemdependency;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+public class SystemEntitySet<E extends SystemEntity> implements Set<E> {
+
+	private final Map<String, E> entries;
+
+	public SystemEntitySet() {
+		this.entries = new HashMap<>();
+	}
+
+	@Override
+	public int size() {
+		return entries.size();
+	}
+
+	@Override
+	public boolean isEmpty() {
+		return entries.isEmpty();
+	}
+
+	@Override
+	public boolean contains(final Object o) {
+		return this.entries.containsValue(o);
+	}
+
+	@Override
+	public Iterator<E> iterator() {
+		return this.entries.values().iterator();
+	}
+
+	@Override
+	public Object[] toArray() {
+		return this.entries.values().toArray();
+	}
+
+	@Override
+	public <T> T[] toArray(final T[] a) {
+		return this.entries.values().toArray(a);
+	}
+
+	@Override
+	public boolean add(final E e) {
+		if (this.entries.containsKey(e)) {
+			return false;
+		}
+		this.entries.put(e.getName(), e);
+		return true;
+	}
+
+	@Override
+	public boolean remove(final Object o) {
+		return this.entries.values().remove(o);
+	}
+
+	@Override
+	public boolean containsAll(final Collection<?> c) {
+		return this.entries.values().containsAll(c);
+	}
+
+	@Override
+	public boolean addAll(final Collection<? extends E> c) {
+		return c.stream().map(e -> add(e)).reduce(false, (r, s) -> r || s);
+	}
+
+	@Override
+	public boolean removeAll(final Collection<?> c) {
+		return this.entries.values().removeAll(c);
+	}
+
+	@Override
+	public boolean retainAll(final Collection<?> c) {
+		return this.entries.values().retainAll(c);
+	}
+
+	@Override
+	public void clear() {
+		this.entries.clear();
+
+	}
+
+	public E getByName(final String name) {
+		return this.entries.get(name);
+	}
+
+	public boolean containsByName(final Object o) {
+		return this.entries.containsKey(o);
+	}
+
+	public boolean removeByName(final Object o) {
+		return this.entries.keySet().remove(o);
+	}
+
+	public boolean containsAllByName(final Collection<?> c) {
+		return this.entries.keySet().containsAll(c);
+	}
+
+	public boolean removeAllByName(final Collection<?> c) {
+		return this.entries.keySet().removeAll(c);
+	}
+
+	public boolean retainAllByName(final Collection<?> c) {
+		return this.entries.keySet().retainAll(c);
+	}
+
+}
-- 
GitLab