diff --git a/src/main/java/kieker/analysis/dev/DependencyCreator.java b/src/main/java/kieker/analysis/dev/DependencyCreator.java index 124ab890626c77d39667405373a44de630c83b25..d22e2a39b233f67dcdb040651157a48b0f30d922 100644 --- a/src/main/java/kieker/analysis/dev/DependencyCreator.java +++ b/src/main/java/kieker/analysis/dev/DependencyCreator.java @@ -1,6 +1,9 @@ package kieker.analysis.dev; import kieker.analysis.domain.AggregatedOperationCall; +import kieker.analysis.domain.systemdependency.Component; +import kieker.analysis.domain.systemdependency.Container; +import kieker.analysis.domain.systemdependency.Operation; import kieker.analysis.domain.systemdependency.SoftwareSystem; import kieker.analysis.trace.traversal.OperationCallVisitor; @@ -15,32 +18,9 @@ public class DependencyCreator extends OperationCallVisitor<AggregatedOperationC @Override public void visit(final AggregatedOperationCall operationCall) { - // softwareSystem.getContainers().contains() - - // SystemEntitySet<Container> containers = softwareSystem.getContainers(); - // containers.add(new Container(operationCall.getContainer())); - // Container container = containers.getByName(operationCall.getContainer()); - // - // Component component; - // if (container.getComponents().containsByName(operationCall.getComponent())) { - // component = new Component(operationCall.getComponent(), container); - // } else { - // container.getComponents().add(component); //TODO - // } - // - - // 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 + Container calleeContainer = softwareSystem.addContainer(operationCall.getContainer()); + Component calleeComponent = calleeContainer.addComponent(operationCall.getComponent()); + Operation calleeOperation = calleeComponent.addOperation(operationCall.getOperation()); // Jetzt die Dependencies eintragen } diff --git a/src/main/java/kieker/analysis/dev/DependencyCreatorStage.java b/src/main/java/kieker/analysis/dev/DependencyCreatorStage.java index 3fb0665b95a92556f9f90b4d2840c00ac2d18c91..9e825d5d2018139dedc7ed91e4a808a67547a772 100644 --- a/src/main/java/kieker/analysis/dev/DependencyCreatorStage.java +++ b/src/main/java/kieker/analysis/dev/DependencyCreatorStage.java @@ -1,24 +1,25 @@ package kieker.analysis.dev; import kieker.analysis.domain.AggregatedTrace; -import kieker.analysis.domain.OperationsDependency; +import kieker.analysis.domain.systemdependency.SoftwareSystem; +import kieker.analysis.trace.traversal.TraceTraverser; import teetime.stage.basic.AbstractTransformation; -public class DependencyCreatorStage extends AbstractTransformation<AggregatedTrace, OperationsDependency> { +public class DependencyCreatorStage extends AbstractTransformation<AggregatedTrace, SoftwareSystem> { - private final OperationsDependency operationsDependency = new OperationsDependency(); - // private final DependencyCreator dependencyCreator = new DependencyCreator(operationsDependency); + private final SoftwareSystem softwareSystem = new SoftwareSystem(); + private final DependencyCreator dependencyCreator = new DependencyCreator(softwareSystem); @Override protected void execute(final AggregatedTrace trace) { - // new TraceTraverser<>(dependencyCreator).traverse(trace); + new TraceTraverser<>(dependencyCreator).traverse(trace); } @Override public void onTerminating() throws Exception { // NOPMD (the throws clause is forced by the framework) - this.getOutputPort().send(operationsDependency); + this.getOutputPort().send(softwareSystem); super.onTerminating(); } diff --git a/src/main/java/kieker/analysis/domain/systemdependency/Component.java b/src/main/java/kieker/analysis/domain/systemdependency/Component.java index 2820a411cffc382d329c6bb6580468d0cce7d7df..f40c39a491e1385de80bc51f9c867c88f43c034d 100644 --- a/src/main/java/kieker/analysis/domain/systemdependency/Component.java +++ b/src/main/java/kieker/analysis/domain/systemdependency/Component.java @@ -1,22 +1,32 @@ 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 SystemEntitySet<Operation> operations = new SystemEntitySet<>(); + private final Map<String, Operation> operations = new HashMap<>(); - public Component(final String name, final Container container) { + protected Component(final String name, final Container container) { super(name, container.getIdentifier() + ',' + name); this.container = container; - container.getComponents().add(this); } public Container getContainer() { return container; } - public SystemEntitySet<Operation> getOperations() { - return operations; + public Collection<Operation> getOperations() { + return operations.values(); + } + + public Operation addOperation(final String name) { + if (this.operations.containsKey(name)) { + this.operations.put(name, new Operation(name, this)); + } + return this.operations.get(name); } } diff --git a/src/main/java/kieker/analysis/domain/systemdependency/Container.java b/src/main/java/kieker/analysis/domain/systemdependency/Container.java index 152845e95c518635f589c79a70ef28f6af542f35..e4607505b494b02cce0a00e93075b81bf4e78e53 100644 --- a/src/main/java/kieker/analysis/domain/systemdependency/Container.java +++ b/src/main/java/kieker/analysis/domain/systemdependency/Container.java @@ -1,15 +1,26 @@ package kieker.analysis.domain.systemdependency; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; + public class Container extends SystemEntity { - private final SystemEntitySet<Component> components = new SystemEntitySet<>(); + private final Map<String, Component> components = new HashMap<>(); public Container(final String name) { super(name, name); } - public SystemEntitySet<Component> getComponents() { - return components; + public Collection<Component> getComponents() { + return components.values(); + } + + public Component addComponent(final String name) { + if (this.components.containsKey(name)) { + this.components.put(name, new Component(name, this)); + } + return this.components.get(name); } } diff --git a/src/main/java/kieker/analysis/domain/systemdependency/Operation.java b/src/main/java/kieker/analysis/domain/systemdependency/Operation.java index 7e36ddbb0ce1afc8a308ee6946edcc6344287ae6..af8c07ebd66876e600d12b7f32de381efc0adcbf 100644 --- a/src/main/java/kieker/analysis/domain/systemdependency/Operation.java +++ b/src/main/java/kieker/analysis/domain/systemdependency/Operation.java @@ -4,10 +4,9 @@ public class Operation extends SystemEntity { private final Component component; - public Operation(final String name, final Component component) { + protected Operation(final String name, final Component component) { super(name, component.getIdentifier() + ',' + name); this.component = component; - 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 e615716e9c6c9446e117c1ede47f798bfee90f2e..d647aab07d8db3e75add3b66179ce9e5fa33bb50 100644 --- a/src/main/java/kieker/analysis/domain/systemdependency/SoftwareSystem.java +++ b/src/main/java/kieker/analysis/domain/systemdependency/SoftwareSystem.java @@ -2,10 +2,12 @@ package kieker.analysis.domain.systemdependency; import java.util.ArrayList; import java.util.Collection; +import java.util.HashMap; +import java.util.Map; public class SoftwareSystem { - private final SystemEntitySet<Container> containers = new SystemEntitySet<>(); + private final Map<String, Container> containers = new HashMap<>(); private Collection<Dependency<Container>> containerDependencies = new ArrayList<>(); private Collection<Dependency<Component>> componentDependencies = new ArrayList<>(); @@ -13,8 +15,15 @@ public class SoftwareSystem { public SoftwareSystem() {} - public SystemEntitySet<Container> getContainers() { - return containers; + public Collection<Container> getContainers() { + return containers.values(); + } + + public Container addContainer(final String name) { + if (this.containers.containsKey(name)) { + this.containers.put(name, new Container(name)); + } + return this.containers.get(name); } public Collection<Dependency<Container>> getContainerDependencies() {