
com.structurizr.dsl.DeploymentViewExpressionParser Maven / Gradle / Ivy
The newest version!
package com.structurizr.dsl;
import com.structurizr.model.*;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.stream.Collectors;
import static com.structurizr.dsl.StructurizrDslExpressions.ELEMENT_TYPE_EQUALS_EXPRESSION;
final class DeploymentViewExpressionParser extends ExpressionParser {
@Override
protected Set evaluateElementTypeExpression(String expr, DslContext context) {
Set elements = new LinkedHashSet<>();
String type = expr.substring(ELEMENT_TYPE_EQUALS_EXPRESSION.length());
switch (type.toLowerCase()) {
case "custom":
context.getWorkspace().getModel().getElements().stream().filter(e -> e instanceof CustomElement).forEach(elements::add);
break;
case "deploymentnode":
context.getWorkspace().getModel().getElements().stream().filter(e -> e instanceof DeploymentNode).forEach(elements::add);
break;
case "infrastructurenode":
context.getWorkspace().getModel().getElements().stream().filter(e -> e instanceof InfrastructureNode).forEach(elements::add);
break;
case "softwaresystem":
context.getWorkspace().getModel().getElements().stream().filter(e -> e instanceof SoftwareSystem).forEach(elements::add);
break;
case "softwaresysteminstance":
context.getWorkspace().getModel().getElements().stream().filter(e -> e instanceof SoftwareSystemInstance).forEach(elements::add);
break;
case "container":
context.getWorkspace().getModel().getElements().stream().filter(e -> e instanceof Container).forEach(elements::add);
break;
case "containerinstance":
context.getWorkspace().getModel().getElements().stream().filter(e -> e instanceof ContainerInstance).forEach(elements::add);
break;
default:
throw new RuntimeException("The element type of \"" + type + "\" is not valid for this view");
}
return elements;
}
@Override
protected Set getElements(String identifier, DslContext context) {
Set elements = new LinkedHashSet<>();
for (Element element : super.getElements(identifier, context)) {
if (element instanceof SoftwareSystem) {
Set elementInstances = context.getWorkspace().getModel().getElements().stream().filter(e -> e instanceof SoftwareSystemInstance).map(e -> (SoftwareSystemInstance) e).filter(ssi -> ssi.getSoftwareSystem().equals(element)).collect(Collectors.toSet());
elements.addAll(elementInstances);
} else if (element instanceof Container) {
Set elementInstances = context.getWorkspace().getModel().getElements().stream().filter(e -> e instanceof ContainerInstance).map(e -> (ContainerInstance)e).filter(ci -> ci.getContainer().equals(element)).collect(Collectors.toSet());
elements.addAll(elementInstances);
} else {
elements.add(element);
}
}
return elements;
}
protected Set findAfferentCouplings(Element element) {
Set elements = new LinkedHashSet<>();
elements.addAll(findAfferentCouplings(element, CustomElement.class));
elements.addAll(findAfferentCouplings(element, DeploymentNode.class));
elements.addAll(findAfferentCouplings(element, InfrastructureNode.class));
elements.addAll(findAfferentCouplings(element, SoftwareSystemInstance.class));
elements.addAll(findAfferentCouplings(element, ContainerInstance.class));
return elements;
}
protected Set findEfferentCouplings(Element element) {
Set elements = new LinkedHashSet<>();
elements.addAll(findEfferentCouplings(element, CustomElement.class));
elements.addAll(findEfferentCouplings(element, DeploymentNode.class));
elements.addAll(findEfferentCouplings(element, InfrastructureNode.class));
elements.addAll(findEfferentCouplings(element, SoftwareSystemInstance.class));
elements.addAll(findEfferentCouplings(element, ContainerInstance.class));
return elements;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy