Search in sources :

Example 1 with BuildingBlock

use of org.archifacts.core.model.BuildingBlock in project archifacts by archifacts.

the class C4ModelBuilderTest method assert_that_computation_rule_is_applied_to_relationship.

@Test
void assert_that_computation_rule_is_applied_to_relationship() {
    final JavaClasses javaClasses = new ClassFileImporter().importPackages("org.archifacts.integration.c4.model.domain");
    final Application application = Application.builder().descriptor(buildingBlockType1Descriptor).descriptor(defaultContainerDescriptor).descriptor(referenceDescriptor).buildApplication(javaClasses);
    final C4ModelBuilder c4ModelBuilder = C4Model.builder(new Workspace(this.getClass().getSimpleName(), null));
    application.getArtifacts().stream().forEach(c4ModelBuilder::artifact);
    application.getRelationships().stream().forEach(c4ModelBuilder::relationship);
    final BuildingBlock source = application.getBuildingBlocksOfType(buildingBlockType1).iterator().next();
    final Artifact target = application.getArtifacts().stream().filter(MiscArtifact.class::isInstance).findFirst().get();
    c4ModelBuilder.relartionshipRule().predicate(a -> true).computation((relationship, lookup) -> Set.of(lookup.component(source).uses(lookup.component(target), "uses"), lookup.component(target).uses(lookup.component(source), "is used by")));
    final C4Model c4Model = c4ModelBuilder.build();
    final Set<Container> containers = c4Model.softwareSystem().getContainers();
    assertThat(containers).hasSize(1).extracting(Container::getName, Container::getTechnology).containsExactly(tuple("DefaultContainer", "ContainerType1"));
    final Container container = containers.iterator().next();
    final Component class1ForBuildingBlockType1 = container.getComponentWithName("Class1ForBuildingBlockType1");
    assertThat(class1ForBuildingBlockType1).isNotNull();
    final Component miscArtifact1 = container.getComponentWithName("MiscArtifact1");
    assertThat(miscArtifact1).isNotNull();
    assertThat(container.getComponents()).flatMap(Component::getRelationships).hasSize(2).extracting(Relationship::getDescription, Relationship::getSource, Relationship::getDestination).containsExactlyInAnyOrder(tuple("uses", class1ForBuildingBlockType1, miscArtifact1), tuple("is used by", miscArtifact1, class1ForBuildingBlockType1));
}
Also used : ArtifactContainer(org.archifacts.core.model.ArtifactContainer) ArtifactContainerType(org.archifacts.core.model.ArtifactContainerType) ReplaceUnderscores(org.junit.jupiter.api.DisplayNameGenerator.ReplaceUnderscores) ClassFileImporter(com.tngtech.archunit.core.importer.ClassFileImporter) Assertions.assertThat(org.assertj.core.api.Assertions.assertThat) ArtifactContainerDescriptor(org.archifacts.core.descriptor.ArtifactContainerDescriptor) Component(com.structurizr.model.Component) JavaField(com.tngtech.archunit.core.domain.JavaField) Assertions.assertThatNoException(org.assertj.core.api.Assertions.assertThatNoException) JavaClass(com.tngtech.archunit.core.domain.JavaClass) Artifact(org.archifacts.core.model.Artifact) JavaClasses(com.tngtech.archunit.core.domain.JavaClasses) Assertions.assertThatIllegalStateException(org.assertj.core.api.Assertions.assertThatIllegalStateException) SourceBasedArtifactRelationshipDescriptor(org.archifacts.core.descriptor.SourceBasedArtifactRelationshipDescriptor) Container(com.structurizr.model.Container) MiscArtifact(org.archifacts.core.model.MiscArtifact) Assertions.tuple(org.assertj.core.api.Assertions.tuple) DisplayNameGeneration(org.junit.jupiter.api.DisplayNameGeneration) Set(java.util.Set) Workspace(com.structurizr.Workspace) Test(org.junit.jupiter.api.Test) Application(org.archifacts.core.model.Application) Stream(java.util.stream.Stream) ArtifactRelationshipRole(org.archifacts.core.model.ArtifactRelationshipRole) Relationship(com.structurizr.model.Relationship) BuildingBlockDescriptor(org.archifacts.core.descriptor.BuildingBlockDescriptor) BuildingBlock(org.archifacts.core.model.BuildingBlock) Optional(java.util.Optional) BuildingBlockType(org.archifacts.core.model.BuildingBlockType) JavaClasses(com.tngtech.archunit.core.domain.JavaClasses) BuildingBlock(org.archifacts.core.model.BuildingBlock) Artifact(org.archifacts.core.model.Artifact) MiscArtifact(org.archifacts.core.model.MiscArtifact) ClassFileImporter(com.tngtech.archunit.core.importer.ClassFileImporter) ArtifactContainer(org.archifacts.core.model.ArtifactContainer) Container(com.structurizr.model.Container) MiscArtifact(org.archifacts.core.model.MiscArtifact) Component(com.structurizr.model.Component) Application(org.archifacts.core.model.Application) Workspace(com.structurizr.Workspace) Test(org.junit.jupiter.api.Test)

Example 2 with BuildingBlock

use of org.archifacts.core.model.BuildingBlock in project archifacts by archifacts.

the class ContainedEntityDescriptor method isSource.

@Override
public boolean isSource(final Artifact sourceCandidateArtifact) {
    if (!(sourceCandidateArtifact instanceof BuildingBlock)) {
        return false;
    }
    final BuildingBlock buildingBlock = (BuildingBlock) sourceCandidateArtifact;
    final BuildingBlockType buildingBlockType = buildingBlock.getType();
    return buildingBlockType.equals(AggregateRootDescriptor.type()) || buildingBlockType.equals(EntityDescriptor.type());
}
Also used : BuildingBlock(org.archifacts.core.model.BuildingBlock) BuildingBlockType(org.archifacts.core.model.BuildingBlockType)

Example 3 with BuildingBlock

use of org.archifacts.core.model.BuildingBlock in project archifacts by archifacts.

the class JMoleculesDescriptorsTest method assertThat_building_blocks_are_recognized.

@ParameterizedTest
@MethodSource("getBuildingBlocks")
void assertThat_building_blocks_are_recognized(final BuildingBlockDescriptor buildingBlockDescriptor, @AggregateWith(VarargsAggregator.class) final Class<?>... matchingClasses) {
    final Application application = Application.builder().descriptor(buildingBlockDescriptor).buildApplication(DOMAIN);
    final Set<String> expectedClasses = Arrays.stream(matchingClasses).map(Class::getName).collect(Collectors.toSet());
    assertThat(application.getBuildingBlocksOfType(buildingBlockDescriptor.type())).map(BuildingBlock::getJavaClass).map(JavaClass::getName).containsExactlyInAnyOrderElementsOf(expectedClasses);
}
Also used : BuildingBlock(org.archifacts.core.model.BuildingBlock) Application(org.archifacts.core.model.Application) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest) MethodSource(org.junit.jupiter.params.provider.MethodSource)

Aggregations

BuildingBlock (org.archifacts.core.model.BuildingBlock)3 Application (org.archifacts.core.model.Application)2 BuildingBlockType (org.archifacts.core.model.BuildingBlockType)2 Workspace (com.structurizr.Workspace)1 Component (com.structurizr.model.Component)1 Container (com.structurizr.model.Container)1 Relationship (com.structurizr.model.Relationship)1 JavaClass (com.tngtech.archunit.core.domain.JavaClass)1 JavaClasses (com.tngtech.archunit.core.domain.JavaClasses)1 JavaField (com.tngtech.archunit.core.domain.JavaField)1 ClassFileImporter (com.tngtech.archunit.core.importer.ClassFileImporter)1 Optional (java.util.Optional)1 Set (java.util.Set)1 Stream (java.util.stream.Stream)1 ArtifactContainerDescriptor (org.archifacts.core.descriptor.ArtifactContainerDescriptor)1 BuildingBlockDescriptor (org.archifacts.core.descriptor.BuildingBlockDescriptor)1 SourceBasedArtifactRelationshipDescriptor (org.archifacts.core.descriptor.SourceBasedArtifactRelationshipDescriptor)1 Artifact (org.archifacts.core.model.Artifact)1 ArtifactContainer (org.archifacts.core.model.ArtifactContainer)1 ArtifactContainerType (org.archifacts.core.model.ArtifactContainerType)1