Search in sources :

Example 1 with Styles

use of com.structurizr.view.Styles in project cia by Hack23.

the class AppPublicSystemDocumentation method main.

/**
 * The main method.
 *
 * @param args
 *            the arguments
 * @throws Exception
 *             the exception
 */
public static void main(final String[] args) throws Exception {
    final Workspace workspace = new Workspace("Citizen Intelligence Agency", "Public System Documentation");
    final Model model = workspace.getModel();
    final ViewSet viewSet = workspace.getViews();
    final Person userPerson = model.addPerson("User", "User of the system");
    final Person adminPerson = model.addPerson("Admin", "Manager of the system");
    final SoftwareSystem ciaSystem = model.addSoftwareSystem("Citizen Intelligence Agency System", "Tracking politicians like bugs!");
    final SoftwareSystem riksdagenApiSystem = model.addSoftwareSystem(Location.External, "data.riksdagen.se", "Public API Swedish Parliament data");
    final SoftwareSystem worldBankApiSystem = model.addSoftwareSystem(Location.External, "data.worldbank.org", "Public API Country indicators");
    final SoftwareSystem valApiSystem = model.addSoftwareSystem(Location.External, "www.val.se", "Public API Swedish Election data");
    final SoftwareSystem esvApiSystem = model.addSoftwareSystem(Location.External, "www.esv.se", "Public Data Swedish public sector spending data");
    final Container loadBalancerContainer = ciaSystem.addContainer("Loadbalancer", "Loadbalancer", "ALB/ELB/Apache/Nginx/HaProxy");
    final Container ciaWebContainer = ciaSystem.addContainer("Web Application", "Web Application", "Jetty/Java");
    // final SpringComponentFinderStrategy springComponentFinderStrategy = new SpringComponentFinderStrategy(new FirstImplementationOfInterfaceSupportingTypesStrategy()
    // ,new ReferencedTypesSupportingTypesStrategy(),new ReferencedTypesInSamePackageSupportingTypesStrategy());
    // springComponentFinderStrategy.setIncludePublicTypesOnly(false);
    // final ComponentFinder componentFinderWeb = new ComponentFinder(ciaWebContainer, "com.hack23.cia",
    // springComponentFinderStrategy);
    // componentFinderWeb.exclude(".*ui.application.web.*");
    // componentFinderWeb.exclude(".*ui.application.views.common.pagelinks.*");
    // componentFinderWeb.exclude(".*ui.application.views.admin.*");
    // componentFinderWeb.exclude(".*ui.application.views.user.*");
    // 
    // componentFinderWeb.exclude(".*service.external.*");
    // componentFinderWeb.exclude(".*service.component.*");
    // componentFinderWeb.exclude(".*package.*");
    // componentFinderWeb.exclude(".*service.impl.action.*");
    // componentFinderWeb.exclude(".*service.impl.email.*");
    // componentFinderWeb.exclude(".*service.impl.rules.*");
    // componentFinderWeb.exclude(".*service.impl.task.*");
    // componentFinderWeb.exclude(".*service.data.impl.*");
    // componentFinderWeb.findComponents();
    final Container relationalDatabase = ciaSystem.addContainer("Database", "Stores information", "Postgresql");
    relationalDatabase.addTags("Database");
    adminPerson.uses(ciaSystem, "Manages");
    userPerson.uses(ciaSystem, "Uses");
    ciaSystem.uses(riksdagenApiSystem, "Loads data");
    ciaSystem.uses(worldBankApiSystem, "Loads data");
    ciaSystem.uses(valApiSystem, "Loads data");
    ciaSystem.uses(esvApiSystem, "Loads data");
    loadBalancerContainer.uses(ciaWebContainer, "HTTPS/H2");
    ciaWebContainer.uses(relationalDatabase, "JDBC");
    final SystemLandscapeView enterpriseContextView = viewSet.createSystemLandscapeView("\"Enterprise\"", "\"Enterprise\"");
    enterpriseContextView.addAllElements();
    final Enterprise enterprise = new Enterprise("Hack23");
    enterpriseContextView.getModel().setEnterprise(enterprise);
    viewSet.createSystemContextView(ciaSystem, "\"System context\"", "\"System context\"").addAllElements();
    viewSet.createContainerView(ciaSystem, "\"Container view\"", "\"Application Overview\"").addAllContainers();
    viewSet.createComponentView(ciaWebContainer, "\"Web\"", "\"Web\"").addAllComponents();
    final DeploymentNode awsAccountNode = model.addDeploymentNode("AppOrg Account", "AWS", "Aws Account");
    final DeploymentNode awsVpcNode = awsAccountNode.addDeploymentNode("Project Network", "AWS", "VPC");
    final DeploymentNode wafNode = awsAccountNode.addDeploymentNode("Web Application Firewall", "AWS", "WAF");
    final Container ciaWafContainer = ciaSystem.addContainer("WebACL Rules", "AWS", "WAF");
    wafNode.add(ciaWafContainer);
    ciaWafContainer.uses(loadBalancerContainer, "Protects/Filter");
    final DeploymentNode awsAuditAccountNode = model.addDeploymentNode("Audit Account", "AWS", "Aws Account");
    final DeploymentNode awsConfigNode = awsAuditAccountNode.addDeploymentNode("Config", "AWS", "Config");
    final Container awsConfigContainer = ciaSystem.addContainer("Rules", "AWS", "Config Rules");
    awsConfigNode.add(awsConfigContainer);
    final DeploymentNode awsInspectorNode = awsAccountNode.addDeploymentNode("System Compliance checks", "AWS", "Inspector");
    final Container awsInspectorContainer = ciaSystem.addContainer("ScanningRules", "AWS", "Scanning Rules");
    awsInspectorNode.add(awsInspectorContainer);
    awsInspectorContainer.uses(ciaWebContainer, "Inspects");
    final DeploymentNode awsSSMNode = awsAccountNode.addDeploymentNode("Patch Compliance", "AWS", "System Mananger");
    final Container awsSSMContainer = ciaSystem.addContainer("InventoryList", "AWS", "InventoryList");
    awsSSMNode.add(awsSSMContainer);
    awsSSMContainer.uses(ciaWebContainer, "Run Commands");
    final DeploymentNode awsQuickSightNode = awsAccountNode.addDeploymentNode("Business analytics", "AWS", "QuickSight");
    final Container awsQuickSightContainer = ciaSystem.addContainer("Dashboards", "AWS", "Dashboards");
    awsQuickSightNode.add(awsQuickSightContainer);
    awsQuickSightContainer.uses(relationalDatabase, "Loads Data");
    final DeploymentNode awsGuardDutyNode = awsAuditAccountNode.addDeploymentNode("Guard Duty", "AWS", "GuardDuty");
    final Container awsGuardDutyContainer = ciaSystem.addContainer("Intelligent threat detection and continuous monitoring", "AWS", "Intelligent threat detection and continuous monitoring");
    awsGuardDutyNode.add(awsGuardDutyContainer);
    final DeploymentNode awsMacieNode = awsAuditAccountNode.addDeploymentNode("A machine learning-powered security", "AWS", "macie");
    final Container awsMacieContainer = ciaSystem.addContainer("discover, classify, and protect sensitive data", "AWS", "discover, classify, and protect sensitive data");
    awsMacieNode.add(awsMacieContainer);
    final DeploymentNode awsLogGroupNode = awsAuditAccountNode.addDeploymentNode("LogGroup", "AWS", "Cloudwatch");
    final Container awsLogstreamContainer = ciaSystem.addContainer("Logstreams", "AWS", "LogStream");
    awsLogGroupNode.add(awsLogstreamContainer);
    ciaWebContainer.uses(awsLogstreamContainer, "Write logs");
    relationalDatabase.uses(awsLogstreamContainer, "Write logs");
    final DeploymentNode awsCloudtrailNode = awsAuditAccountNode.addDeploymentNode("Audit", "AWS", "Cloudtrail");
    final Container awsAuditLogBucketContainer = ciaSystem.addContainer("LogBucket", "AWS", "S3");
    awsCloudtrailNode.add(awsAuditLogBucketContainer);
    final DeploymentNode awsAcessLogsNode = awsAuditAccountNode.addDeploymentNode("Access Logs", "AWS", "S3");
    final Container awsAccessLogBucketContainer = ciaSystem.addContainer("AccessLogBucket", "AWS", "S3");
    awsAcessLogsNode.add(awsAccessLogBucketContainer);
    loadBalancerContainer.uses(awsAccessLogBucketContainer, "Write logs");
    final DeploymentNode applicationLoadbalancerNode = awsAccountNode.addDeploymentNode("Application Loadbalancer", "AWS", "ALB");
    applicationLoadbalancerNode.add(loadBalancerContainer);
    wafNode.uses(applicationLoadbalancerNode, "Protects", "filter rules");
    final DeploymentNode webNode = awsVpcNode.addDeploymentNode("Application", "AWS", "EC2", 2);
    webNode.addDeploymentNode("Jetty", "Jetty", "JVM").add(ciaWebContainer);
    applicationLoadbalancerNode.uses(webNode, "Uses", "https");
    final DeploymentNode databaseNode = awsVpcNode.addDeploymentNode("Database", "AWS", "RDS", 2);
    databaseNode.add(relationalDatabase);
    webNode.uses(databaseNode, "Uses", "jdbc");
    final DeploymentNode githubAccountNode = model.addDeploymentNode("Github Org", "Github", "Github Org");
    final Container sourceCodeContainer = ciaSystem.addContainer("SCM", "Github", "Scm");
    githubAccountNode.add(sourceCodeContainer);
    final Container documentationContainer = ciaSystem.addContainer("Documentation", "Github", "Documentation");
    githubAccountNode.add(documentationContainer);
    final DeploymentNode devNetworkNode = model.addDeploymentNode("Dev Network", "AWS", "Dev Network");
    final Container nexusContainer = ciaSystem.addContainer("Nexus", "Dev", "Nexus");
    devNetworkNode.add(nexusContainer);
    final Container sonarContainer = ciaSystem.addContainer("Sonarqube", "Dev", "Sonarqube");
    devNetworkNode.add(sonarContainer);
    final Container jenkinsContainer = ciaSystem.addContainer("Jenkins", "Dev", "Jenkins");
    jenkinsContainer.uses(sourceCodeContainer, "builds");
    jenkinsContainer.uses(sonarContainer, "Publish QA metrics", "https");
    jenkinsContainer.uses(nexusContainer, "publish artifacts", "https");
    jenkinsContainer.uses(documentationContainer, "publish Documentation", "https");
    devNetworkNode.add(jenkinsContainer);
    final DeploymentNode sumologicSecurityAccountNode = model.addDeploymentNode("Security Account", "Sumologic", "Sumologic Account");
    final DeploymentNode sumologicNetworkSecurityDashboardNode = sumologicSecurityAccountNode.addDeploymentNode("Nework Security Dashboard", "AWS", "Nework Security Dashboard");
    final DeploymentNode sumologicServerSecurityDashboardNode = sumologicSecurityAccountNode.addDeploymentNode("Server Security Dashboard", "AWS", "Server Security Dashboard");
    final DeploymentNode sumologicAwsAccountSecurityDashboardNode = sumologicSecurityAccountNode.addDeploymentNode("AWS Account Security Dashboard", "AWS", "AWS Account Security Dashboard");
    final DeploymentNode sumologicApplicationSecurityDashboardNode = sumologicSecurityAccountNode.addDeploymentNode("Application Security Dashboard", "AWS", "Application Security Dashboard");
    final Container sumologicVpcFlowLogsContainer = ciaSystem.addContainer("VpcFlowLogs", "Sumologic", "VpcFlowLogs");
    sumologicVpcFlowLogsContainer.uses(awsLogstreamContainer, "Recieve logs");
    sumologicNetworkSecurityDashboardNode.add(sumologicVpcFlowLogsContainer);
    final Container sumologicCloudtrailConfigContainer = ciaSystem.addContainer("CloudTrailLogs", "Sumologic", "CloudTrailLogs");
    sumologicCloudtrailConfigContainer.uses(awsAuditLogBucketContainer, "Recieve logs");
    sumologicAwsAccountSecurityDashboardNode.add(sumologicCloudtrailConfigContainer);
    final Container sumologicAwsConfigContainer = ciaSystem.addContainer("AwsConfigLogs", "Sumologic", "AwsConfigLogs");
    sumologicAwsConfigContainer.uses(awsConfigContainer, "Recieve logs");
    sumologicAwsAccountSecurityDashboardNode.add(sumologicAwsConfigContainer);
    final Container sumologicEc2SystemLogsContainer = ciaSystem.addContainer("Ec2SystemLogs", "Sumologic", "Ec2SystemLogs");
    sumologicEc2SystemLogsContainer.uses(awsLogstreamContainer, "Recieve logs");
    sumologicServerSecurityDashboardNode.add(sumologicEc2SystemLogsContainer);
    final Container sumologicEc2ApplicationLogsContainer = ciaSystem.addContainer("Ec2ApplicationLogs", "Sumologic", "Ec2ApplicationLogs");
    sumologicEc2ApplicationLogsContainer.uses(awsLogstreamContainer, "Recieve logs");
    sumologicApplicationSecurityDashboardNode.add(sumologicEc2ApplicationLogsContainer);
    final Container sumologicAwsInspectorResultsContainer = ciaSystem.addContainer("AwsInspectorResults", "Sumologic", "AwsInspectorResults");
    sumologicAwsInspectorResultsContainer.uses(awsInspectorContainer, "Recieve reports");
    sumologicServerSecurityDashboardNode.add(sumologicAwsInspectorResultsContainer);
    final Container sumologicAwsAlbLogsContainer = ciaSystem.addContainer("AwsLoadbalancerAccessLogs", "Sumologic", "AwsLoadbalancerAccessLogs");
    sumologicAwsAlbLogsContainer.uses(awsAccessLogBucketContainer, "Recieve logs");
    sumologicNetworkSecurityDashboardNode.add(sumologicAwsAlbLogsContainer);
    final DeploymentView developmentDeploymentView = viewSet.createDeploymentView(ciaSystem, "\"Deployment\"", "\"Deployment Aws.\"");
    developmentDeploymentView.add(awsAuditAccountNode);
    developmentDeploymentView.add(wafNode);
    developmentDeploymentView.add(awsQuickSightNode);
    developmentDeploymentView.add(awsInspectorNode);
    developmentDeploymentView.add(awsSSMNode);
    developmentDeploymentView.add(sumologicSecurityAccountNode);
    developmentDeploymentView.add(githubAccountNode);
    developmentDeploymentView.add(devNetworkNode);
    developmentDeploymentView.add(applicationLoadbalancerNode);
    developmentDeploymentView.add(webNode);
    developmentDeploymentView.add(databaseNode);
    final Styles styles = viewSet.getConfiguration().getStyles();
    styles.addElementStyle(Tags.COMPONENT).background("#1168bd").color("#ffffff");
    styles.addElementStyle(Tags.CONTAINER).background("#1168bd").color("#ffffff");
    styles.addElementStyle(Tags.SOFTWARE_SYSTEM).background("#1168bd").color("#ffffff");
    styles.addElementStyle(Tags.PERSON).background("#519823").color("#ffffff").shape(Shape.Person);
    styles.addElementStyle("Database").shape(Shape.Cylinder);
    // StructurizrClient structurizrClient = new StructurizrClient(API_KEY,
    // API_SECRET);
    // structurizrClient.putWorkspace(WORKSPACE_ID, workspace);
    printPlantUml(workspace);
    System.setProperty("PLANTUML_LIMIT_SIZE", "16384");
    Run.main(new String[] { Paths.get(".").toAbsolutePath().normalize().toString() + File.separator + "target" + File.separator + "site" + File.separator + "architecture" + File.separator });
}
Also used : Container(com.structurizr.model.Container) ViewSet(com.structurizr.view.ViewSet) DeploymentNode(com.structurizr.model.DeploymentNode) Model(com.structurizr.model.Model) Enterprise(com.structurizr.model.Enterprise) SoftwareSystem(com.structurizr.model.SoftwareSystem) SystemLandscapeView(com.structurizr.view.SystemLandscapeView) Person(com.structurizr.model.Person) Workspace(com.structurizr.Workspace) DeploymentView(com.structurizr.view.DeploymentView) Styles(com.structurizr.view.Styles)

Example 2 with Styles

use of com.structurizr.view.Styles in project tutorials by eugenp.

the class StructurizrSimple method addStyles.

private static void addStyles(ViewSet viewSet) {
    Styles styles = viewSet.getConfiguration().getStyles();
    styles.addElementStyle(Tags.ELEMENT).color("#000000");
    styles.addElementStyle(Tags.PERSON).background("#ffbf00").shape(Shape.Person);
    styles.addElementStyle(Tags.CONTAINER).background("#facc2E");
    styles.addRelationshipStyle(Tags.RELATIONSHIP).routing(Routing.Orthogonal);
    styles.addRelationshipStyle(Tags.ASYNCHRONOUS).dashed(true);
    styles.addRelationshipStyle(Tags.SYNCHRONOUS).dashed(false);
}
Also used : Styles(com.structurizr.view.Styles)

Example 3 with Styles

use of com.structurizr.view.Styles in project cia by Hack23.

the class AwsPublicSystemDocumentation method main.

/**
 * The main method.
 *
 * @param args
 *            the arguments
 * @throws Exception
 *             the exception
 */
public static void main(final String[] args) throws Exception {
    final Workspace workspace = new Workspace("Citizen Intelligence Agency", "Public Aws System Documentation");
    final Model model = workspace.getModel();
    final ViewSet viewSet = workspace.getViews();
    final SoftwareSystem ciaSystem = model.addSoftwareSystem("Citizen Intelligence Agency", "Tracking politicians like bugs!");
    final DeploymentNode masterAccountNode = model.addDeploymentNode("Master Account", "AWS", "Aws Account");
    final Container awsAccountContainer = ciaSystem.addContainer("Master Account", "AWS", "Aws Account");
    final DeploymentNode iamAccountNode = model.addDeploymentNode("IAM Account", "AWS", "Aws Account");
    final Container iamAccountContainer = ciaSystem.addContainer("IAM Account", "AWS", "Aws Account");
    final DeploymentNode devAccountNode = model.addDeploymentNode("Development Account", "AWS", "Aws Account");
    final Container devAccountContainer = ciaSystem.addContainer("Development Account", "AWS", "Aws Account");
    final DeploymentNode opCenterAccountNode = model.addDeploymentNode("Operation Center Account", "AWS", "Aws Account");
    final Container opCenterAccountContainer = ciaSystem.addContainer("Operation Center Account", "AWS", "Aws Account");
    final DeploymentNode auditAccountNode = model.addDeploymentNode("Audit Account", "AWS", "Aws Account");
    final Container auditAccountContainer = ciaSystem.addContainer("Audit Account", "AWS", "Aws Account");
    final DeploymentNode appAccountNode = model.addDeploymentNode("Application Account", "AWS", "Aws Account");
    final Container appAccountContainer = ciaSystem.addContainer("Application Account", "AWS", "Aws Account");
    awsAccountContainer.uses(iamAccountContainer, "create/restrict");
    awsAccountContainer.uses(devAccountContainer, "create/restrict");
    awsAccountContainer.uses(opCenterAccountContainer, "create/restrict");
    awsAccountContainer.uses(auditAccountContainer, "create/restrict");
    awsAccountContainer.uses(appAccountContainer, "create/restrict");
    awsAccountContainer.uses(auditAccountContainer, "publish event/audit");
    iamAccountContainer.uses(auditAccountContainer, "publish event/audit");
    devAccountContainer.uses(auditAccountContainer, "publish event/audit");
    opCenterAccountContainer.uses(auditAccountContainer, "publish event/audit");
    appAccountContainer.uses(auditAccountContainer, "publish event/audit");
    opCenterAccountContainer.uses(auditAccountContainer, "Monitor event/audit");
    iamAccountContainer.uses(devAccountContainer, "manage access");
    iamAccountContainer.uses(appAccountContainer, "manage access");
    iamAccountContainer.uses(opCenterAccountContainer, "manage access");
    opCenterAccountNode.add(opCenterAccountContainer);
    devAccountNode.add(devAccountContainer);
    auditAccountNode.add(auditAccountContainer);
    appAccountNode.add(appAccountContainer);
    iamAccountNode.add(iamAccountContainer);
    masterAccountNode.add(awsAccountContainer);
    final DeploymentView developmentDeploymentView = viewSet.createDeploymentView(ciaSystem, "\"Production Aws Account structure\"", "\"Production Aws Account structure\"");
    developmentDeploymentView.add(masterAccountNode);
    developmentDeploymentView.add(iamAccountNode);
    developmentDeploymentView.add(devAccountNode);
    developmentDeploymentView.add(opCenterAccountNode);
    developmentDeploymentView.add(auditAccountNode);
    developmentDeploymentView.add(appAccountNode);
    final Styles styles = viewSet.getConfiguration().getStyles();
    styles.addElementStyle(Tags.COMPONENT).background("#1168bd").color("#ffffff");
    styles.addElementStyle(Tags.CONTAINER).background("#1168bd").color("#ffffff");
    styles.addElementStyle(Tags.SOFTWARE_SYSTEM).background("#1168bd").color("#ffffff");
    styles.addElementStyle(Tags.PERSON).background("#519823").color("#ffffff").shape(Shape.Person);
    styles.addElementStyle("Database").shape(Shape.Cylinder);
    printPlantUml(workspace);
    System.setProperty("PLANTUML_LIMIT_SIZE", "8192");
    Run.main(new String[] { Paths.get(".").toAbsolutePath().normalize().toString() + File.separator + "target" + File.separator + "site" + File.separator + "architecture" + File.separator });
}
Also used : Container(com.structurizr.model.Container) ViewSet(com.structurizr.view.ViewSet) DeploymentNode(com.structurizr.model.DeploymentNode) Model(com.structurizr.model.Model) SoftwareSystem(com.structurizr.model.SoftwareSystem) Workspace(com.structurizr.Workspace) DeploymentView(com.structurizr.view.DeploymentView) Styles(com.structurizr.view.Styles)

Example 4 with Styles

use of com.structurizr.view.Styles in project moduliths by moduliths.

the class Documenter method addComponentsToView.

private void addComponentsToView(Supplier<Stream<Module>> modules, ComponentView view, Options options, Consumer<ComponentView> afterCleanup) {
    Styles styles = view.getViewSet().getConfiguration().getStyles();
    Map<Module, Component> components = getComponents(options);
    // 
    modules.get().distinct().filter(// 
    options.getExclusions().negate()).map(// 
    it -> applyBackgroundColor(it, components, options, styles)).filter(// 
    options.getComponentFilter()).forEach(view::add);
    // view.getViewSet().getConfiguration().getStyles().findElementStyle(element).getBackground()
    // Remove filtered dependency types
    // 
    DependencyType.allBut(options.getDependencyTypes()).map(// 
    Object::toString).forEach(it -> view.removeRelationshipsWithTag(it));
    afterCleanup.accept(view);
    // Filter outgoing relationships of target-only modules
    // 
    modules.get().filter(options.getTargetOnly()).forEach(module -> {
        Component component = components.get(module);
        // 
        view.getRelationships().stream().map(// 
        RelationshipView::getRelationship).filter(// 
        it -> it.getSource().equals(component)).forEach(it -> view.remove(it));
    });
    // … as well as all elements left without a relationship
    if (options.hideElementsWithoutRelationships()) {
        view.removeElementsWithNoRelationships();
    }
    afterCleanup.accept(view);
    // Remove default relationships if more qualified ones exist
    // 
    view.getRelationships().stream().map(// 
    RelationshipView::getRelationship).collect(// 
    Collectors.groupingBy(Connection::of)).values().stream().forEach(it -> potentiallyRemoveDefaultRelationship(view, it));
}
Also used : RequiredArgsConstructor(lombok.RequiredArgsConstructor) Diagram(com.structurizr.io.Diagram) C4PlantUMLExporter(com.structurizr.io.plantuml.C4PlantUMLExporter) BasicPlantUMLWriter(com.structurizr.io.plantuml.BasicPlantUMLWriter) SpringBean(org.moduliths.model.SpringBean) JavaClass(com.tngtech.archunit.core.domain.JavaClass) Path(java.nio.file.Path) With(lombok.With) Predicate(java.util.function.Predicate) SoftwareSystem(com.structurizr.model.SoftwareSystem) RelationshipView(com.structurizr.view.RelationshipView) Asciidoctor(org.moduliths.docs.Asciidoctor) Collectors(java.util.stream.Collectors) DependencyDepth(org.moduliths.model.Module.DependencyDepth) Shape(com.structurizr.view.Shape) Tags(com.structurizr.model.Tags) Stream(java.util.stream.Stream) Relationship(com.structurizr.model.Relationship) Writer(java.io.Writer) Entry(java.util.Map.Entry) Styles(com.structurizr.view.Styles) java.util(java.util) Getter(lombok.Getter) Function(java.util.function.Function) Supplier(java.util.function.Supplier) Component(com.structurizr.model.Component) Value(lombok.Value) Modules(org.moduliths.model.Modules) AccessLevel(lombok.AccessLevel) BiConsumer(java.util.function.BiConsumer) View(com.structurizr.view.View) Nullable(org.springframework.lang.Nullable) Model(com.structurizr.model.Model) Container(com.structurizr.model.Container) ComponentView(com.structurizr.view.ComponentView) Files(java.nio.file.Files) StringWriter(java.io.StringWriter) FileWriter(java.io.FileWriter) MultiValueMap(org.springframework.util.MultiValueMap) IOException(java.io.IOException) File(java.io.File) Workspace(com.structurizr.Workspace) Consumer(java.util.function.Consumer) DependencyType(org.moduliths.model.Module.DependencyType) Module(org.moduliths.model.Module) Paths(java.nio.file.Paths) PlantUMLWriter(com.structurizr.io.plantuml.PlantUMLWriter) AllArgsConstructor(lombok.AllArgsConstructor) LinkedMultiValueMap(org.springframework.util.LinkedMultiValueMap) Element(com.structurizr.model.Element) Assert(org.springframework.util.Assert) RelationshipView(com.structurizr.view.RelationshipView) Module(org.moduliths.model.Module) Component(com.structurizr.model.Component) Styles(com.structurizr.view.Styles)

Example 5 with Styles

use of com.structurizr.view.Styles in project moduliths by moduliths.

the class Documenter method applyBackgroundColor.

private static Component applyBackgroundColor(Module module, Map<Module, Component> components, Options options, Styles styles) {
    Component component = components.get(module);
    Function<Module, Optional<String>> selector = options.getColorSelector();
    // Apply custom color if configured
    selector.apply(module).ifPresent(color -> {
        String tag = module.getName() + "-" + color;
        component.addTags(tag);
        // Add or update background color
        styles.getElements().stream().filter(it -> it.getTag().equals(tag)).findFirst().orElseGet(() -> styles.addElementStyle(tag)).background(color);
    });
    return component;
}
Also used : RequiredArgsConstructor(lombok.RequiredArgsConstructor) Diagram(com.structurizr.io.Diagram) C4PlantUMLExporter(com.structurizr.io.plantuml.C4PlantUMLExporter) BasicPlantUMLWriter(com.structurizr.io.plantuml.BasicPlantUMLWriter) SpringBean(org.moduliths.model.SpringBean) JavaClass(com.tngtech.archunit.core.domain.JavaClass) Path(java.nio.file.Path) With(lombok.With) Predicate(java.util.function.Predicate) SoftwareSystem(com.structurizr.model.SoftwareSystem) RelationshipView(com.structurizr.view.RelationshipView) Asciidoctor(org.moduliths.docs.Asciidoctor) Collectors(java.util.stream.Collectors) DependencyDepth(org.moduliths.model.Module.DependencyDepth) Shape(com.structurizr.view.Shape) Tags(com.structurizr.model.Tags) Stream(java.util.stream.Stream) Relationship(com.structurizr.model.Relationship) Writer(java.io.Writer) Entry(java.util.Map.Entry) Styles(com.structurizr.view.Styles) java.util(java.util) Getter(lombok.Getter) Function(java.util.function.Function) Supplier(java.util.function.Supplier) Component(com.structurizr.model.Component) Value(lombok.Value) Modules(org.moduliths.model.Modules) AccessLevel(lombok.AccessLevel) BiConsumer(java.util.function.BiConsumer) View(com.structurizr.view.View) Nullable(org.springframework.lang.Nullable) Model(com.structurizr.model.Model) Container(com.structurizr.model.Container) ComponentView(com.structurizr.view.ComponentView) Files(java.nio.file.Files) StringWriter(java.io.StringWriter) FileWriter(java.io.FileWriter) MultiValueMap(org.springframework.util.MultiValueMap) IOException(java.io.IOException) File(java.io.File) Workspace(com.structurizr.Workspace) Consumer(java.util.function.Consumer) DependencyType(org.moduliths.model.Module.DependencyType) Module(org.moduliths.model.Module) Paths(java.nio.file.Paths) PlantUMLWriter(com.structurizr.io.plantuml.PlantUMLWriter) AllArgsConstructor(lombok.AllArgsConstructor) LinkedMultiValueMap(org.springframework.util.LinkedMultiValueMap) Element(com.structurizr.model.Element) Assert(org.springframework.util.Assert) Component(com.structurizr.model.Component) Module(org.moduliths.model.Module)

Aggregations

Styles (com.structurizr.view.Styles)5 Workspace (com.structurizr.Workspace)4 Container (com.structurizr.model.Container)4 Model (com.structurizr.model.Model)4 SoftwareSystem (com.structurizr.model.SoftwareSystem)4 Diagram (com.structurizr.io.Diagram)2 BasicPlantUMLWriter (com.structurizr.io.plantuml.BasicPlantUMLWriter)2 C4PlantUMLExporter (com.structurizr.io.plantuml.C4PlantUMLExporter)2 PlantUMLWriter (com.structurizr.io.plantuml.PlantUMLWriter)2 Component (com.structurizr.model.Component)2 Element (com.structurizr.model.Element)2 Relationship (com.structurizr.model.Relationship)2 Tags (com.structurizr.model.Tags)2 ComponentView (com.structurizr.view.ComponentView)2 RelationshipView (com.structurizr.view.RelationshipView)2 Shape (com.structurizr.view.Shape)2 View (com.structurizr.view.View)2 JavaClass (com.tngtech.archunit.core.domain.JavaClass)2 File (java.io.File)2 FileWriter (java.io.FileWriter)2