Search in sources :

Example 16 with Container

use of com.structurizr.model.Container in project java by structurizr.

the class DefaultLayoutMergeStrategyTests method test_copyLayoutInformation_WhenAnElementNameAndDescriptionHaveChangedButTheIdHasNotChanged.

@Test
public void test_copyLayoutInformation_WhenAnElementNameAndDescriptionHaveChangedButTheIdHasNotChanged() {
    Workspace workspace1 = new Workspace("1", "");
    SoftwareSystem softwareSystem1 = workspace1.getModel().addSoftwareSystem("Software System");
    Container container1 = softwareSystem1.addContainer("Container", "Container description", "");
    ContainerView view1 = workspace1.getViews().createContainerView(softwareSystem1, "key", "");
    view1.add(container1);
    view1.getElementView(container1).setX(123);
    view1.getElementView(container1).setY(456);
    Workspace workspace2 = new Workspace("2", "");
    SoftwareSystem softwareSystem2 = workspace2.getModel().addSoftwareSystem("Software System");
    Container container2 = softwareSystem2.addContainer("Container with a new name", "Container with a new description", "");
    ContainerView view2 = workspace2.getViews().createContainerView(softwareSystem2, "key", "");
    view2.add(container2);
    DefaultLayoutMergeStrategy strategy = new DefaultLayoutMergeStrategy();
    strategy.copyLayoutInformation(view1, view2);
    assertEquals(123, view2.getElementView(container2).getX());
    assertEquals(456, view2.getElementView(container2).getY());
}
Also used : Container(com.structurizr.model.Container) SoftwareSystem(com.structurizr.model.SoftwareSystem) Workspace(com.structurizr.Workspace) Test(org.junit.Test)

Example 17 with Container

use of com.structurizr.model.Container in project java by structurizr.

the class DefaultLayoutMergeStrategyTests method test_copyLayoutInformation_WhenAnElementNameAndDescriptionAndIdHaveChangedAndDescriptionWasNull.

@Test
public void test_copyLayoutInformation_WhenAnElementNameAndDescriptionAndIdHaveChangedAndDescriptionWasNull() {
    Workspace workspace1 = new Workspace("1", "");
    SoftwareSystem softwareSystem1 = workspace1.getModel().addSoftwareSystem("Software System");
    Container container1 = softwareSystem1.addContainer("Container");
    container1.setDescription(null);
    ContainerView view1 = workspace1.getViews().createContainerView(softwareSystem1, "key", "");
    view1.add(container1);
    view1.getElementView(container1).setX(123);
    view1.getElementView(container1).setY(456);
    Workspace workspace2 = new Workspace("2", "");
    SoftwareSystem softwareSystem2 = workspace2.getModel().addSoftwareSystem("Software System");
    // this element has ID 2
    softwareSystem2.addContainer("Web Application", "Description", "");
    Container container2 = softwareSystem2.addContainer("Database", "Description", "");
    ContainerView view2 = workspace2.getViews().createContainerView(softwareSystem2, "key", "");
    view2.add(container2);
    DefaultLayoutMergeStrategy strategy = new DefaultLayoutMergeStrategy();
    strategy.copyLayoutInformation(view1, view2);
    assertEquals(0, view2.getElementView(container2).getX());
    assertEquals(0, view2.getElementView(container2).getY());
}
Also used : Container(com.structurizr.model.Container) SoftwareSystem(com.structurizr.model.SoftwareSystem) Workspace(com.structurizr.Workspace) Test(org.junit.Test)

Example 18 with Container

use of com.structurizr.model.Container in project tutorials by eugenp.

the class StructurizrSimple method addContainers.

private static void addContainers(Workspace workspace) {
    Model model = workspace.getModel();
    SoftwareSystem paymentTerminal = model.getSoftwareSystemWithName(PAYMENT_TERMINAL);
    Container f5 = paymentTerminal.addContainer("Payment Load Balancer", "Payment Load Balancer", "F5");
    Container jvm1 = paymentTerminal.addContainer("JVM-1", "JVM-1", "Java Virtual Machine");
    Container jvm2 = paymentTerminal.addContainer("JVM-2", "JVM-2", "Java Virtual Machine");
    Container jvm3 = paymentTerminal.addContainer("JVM-3", "JVM-3", "Java Virtual Machine");
    Container oracle = paymentTerminal.addContainer("oracleDB", "Oracle Database", "RDBMS");
    f5.uses(jvm1, "route");
    f5.uses(jvm2, "route");
    f5.uses(jvm3, "route");
    jvm1.uses(oracle, "storage");
    jvm2.uses(oracle, "storage");
    jvm3.uses(oracle, "storage");
    ContainerView view = workspace.getViews().createContainerView(paymentTerminal, CONTAINER_VIEW, "Container View");
    view.addAllContainers();
}
Also used : Container(com.structurizr.model.Container) Model(com.structurizr.model.Model) SoftwareSystem(com.structurizr.model.SoftwareSystem) ContainerView(com.structurizr.view.ContainerView)

Example 19 with Container

use of com.structurizr.model.Container 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 20 with Container

use of com.structurizr.model.Container in project agile-architecture-documentation-system by Riduidel.

the class SequenceDiagramVisitor method parseAllSources.

private Map<String, CompilationUnit> parseAllSources(ProjectRoot projectRoot) {
    List<CompilationUnit> allParsed = new ArrayList<CompilationUnit>();
    // Now we have a big project root full of things to parse!
    for (SourceRoot sourceRoot : projectRoot.getSourceRoots()) {
        try {
            sourceRoot.parseParallelized(new SourceRoot.Callback() {

                @Override
                public Result process(Path localPath, Path absolutePath, ParseResult<CompilationUnit> result) {
                    result.ifSuccessful(unit -> allParsed.add(unit));
                    // We don't want to modify any line of code here !
                    return Result.DONT_SAVE;
                }
            });
        } catch (IOException e) {
            Container associated = pathsToContainers.get(sourceRoot.getRoot().toString());
            logger.log(Level.SEVERE, String.format("Unable to parse source root %s (associated to container %s)", sourceRoot.getRoot(), StructurizrUtils.getCanonicalPath(associated)), e);
        }
    }
    Map<String, CompilationUnit> namesToSources = new TreeMap<String, CompilationUnit>();
    // Now they're parsed, let's try to map them to public classes or interfaces contained
    allParsed.stream().parallel().forEach(cu -> cu.getPrimaryTypeName().ifPresent(name -> cu.getPrimaryType().ifPresent(primaryType -> primaryType.getFullyQualifiedName().ifPresent(fullyQualifiedName -> namesToSources.put(fullyQualifiedName, cu)))));
    return namesToSources;
}
Also used : CompilationUnit(com.github.javaparser.ast.CompilationUnit) Path(java.nio.file.Path) SequenceGenerator(org.ndx.agile.architecture.sequence.generator.SequenceGenerator) ParseResult(com.github.javaparser.ParseResult) OutputBuilder(org.ndx.agile.architecture.base.OutputBuilder) ModelElementAdapter(org.ndx.agile.architecture.base.enhancers.ModelElementAdapter) Function(java.util.function.Function) Component(com.structurizr.model.Component) ConfigProperty(org.apache.deltaspike.core.api.config.ConfigProperty) ModelElementKeys(org.ndx.agile.architecture.base.enhancers.ModelElementKeys) ArrayList(java.util.ArrayList) Level(java.util.logging.Level) HashSet(java.util.HashSet) LinkedHashMap(java.util.LinkedHashMap) Inject(javax.inject.Inject) CodeElement(com.structurizr.model.CodeElement) StructurizrUtils(org.ndx.agile.architecture.base.utils.StructurizrUtils) Map(java.util.Map) CompilationUnit(com.github.javaparser.ast.CompilationUnit) LinkedList(java.util.LinkedList) ProjectRoot(com.github.javaparser.utils.ProjectRoot) Method(java.lang.reflect.Method) Path(java.nio.file.Path) Model(com.structurizr.model.Model) SourceRoot(com.github.javaparser.utils.SourceRoot) Container(com.structurizr.model.Container) Collection(java.util.Collection) Set(java.util.Set) IOException(java.io.IOException) Logger(java.util.logging.Logger) Collectors(java.util.stream.Collectors) CallGraphModel(org.ndx.agile.architecture.sequence.generator.javaparser.adapter.CallGraphModel) File(java.io.File) List(java.util.List) Stream(java.util.stream.Stream) TreeMap(java.util.TreeMap) Modifier(java.lang.reflect.Modifier) ArrayList(java.util.ArrayList) IOException(java.io.IOException) SourceRoot(com.github.javaparser.utils.SourceRoot) TreeMap(java.util.TreeMap) ParseResult(com.github.javaparser.ParseResult) Container(com.structurizr.model.Container)

Aggregations

Container (com.structurizr.model.Container)44 Test (org.junit.jupiter.api.Test)25 SoftwareSystem (com.structurizr.model.SoftwareSystem)23 Workspace (com.structurizr.Workspace)22 Component (com.structurizr.model.Component)21 JavaClasses (com.tngtech.archunit.core.domain.JavaClasses)10 ClassFileImporter (com.tngtech.archunit.core.importer.ClassFileImporter)10 Application (org.archifacts.core.model.Application)10 ArtifactContainer (org.archifacts.core.model.ArtifactContainer)10 Model (com.structurizr.model.Model)8 Test (org.junit.Test)7 ArrayList (java.util.ArrayList)5 Set (java.util.Set)5 Stream (java.util.stream.Stream)5 DynamicView (com.structurizr.view.DynamicView)4 Relationship (com.structurizr.model.Relationship)3 ComponentView (com.structurizr.view.ComponentView)3 JavaClass (com.tngtech.archunit.core.domain.JavaClass)3 JavaField (com.tngtech.archunit.core.domain.JavaField)3 File (java.io.File)3