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));
}
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());
}
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);
}
Aggregations