/** * Creates a component view, where the scope of the view is the specified container. * * @param container the Container object representing the scope of the view * @param key the key for the view (must be unique) * @param description a description of the view * @return a ContainerView object * @throws IllegalArgumentException if the container is null or the key is not unique */ public ComponentView createComponentView(Container container, String key, String description) { assertThatTheContainerIsNotNull(container); assertThatTheViewKeyIsSpecifiedAndUnique(key); ComponentView view = new ComponentView(container, key, description); view.setViewSet(this); componentViews.add(view); return view; }
@Before public void setUp() { softwareSystem = model.addSoftwareSystem(Location.Internal, "The System", "Description"); webApplication = softwareSystem.addContainer("Web Application", "Does something", "Apache Tomcat"); view = new ComponentView(webApplication, "Key", "Some description"); }
@Test public void test_add_ThrowsAnException_WhenTheSpecifiedComponentIsInADifferentContainer() { try { SoftwareSystem softwareSystemA = model.addSoftwareSystem("System A", "Description"); final Container containerA1 = softwareSystemA.addContainer("Container A1", "Description", "Tec"); final Container containerA2 = softwareSystemA.addContainer("Container A2", "Description", "Tec"); final Component componentA2_1 = containerA2.addComponent("Component A2-1", "Description"); view = new ComponentView(containerA1, "components", "Description"); view.add(componentA2_1); } catch (Exception e) { assertEquals("Only components belonging to Container A1 can be added to this view.", e.getMessage()); } }
@Test public void test_addExternalDependencies_AddsOrphanedElements_WhenThereAreNoDirectRelationshipsWithAComponent() { SoftwareSystem source = model.addSoftwareSystem("Source", ""); SoftwareSystem destination = model.addSoftwareSystem("Destination", ""); SoftwareSystem a = model.addSoftwareSystem("A", ""); Container aa = a.addContainer("AA", "", ""); Component aaa = aa.addComponent("AAA", "", ""); source.uses(aa, ""); aa.uses(destination, ""); view = new ComponentView(aa, "components", "Description"); view.addAllComponents(); view.addExternalDependencies(); // check that the view includes the desired elements Set<Element> elementsInView = view.getElements().stream().map(ElementView::getElement).collect(Collectors.toSet()); assertTrue(elementsInView.contains(aaa)); // but there are no relationships (because component AAA isn't directly related to anything) assertEquals(0, view.getRelationships().size()); }
@Test public void test_addExternalDependencies_AddsTheContainer_WhenAComponentHasARelationshipFromAContainerInTheSameSoftwareSystem() { SoftwareSystem softwareSystemA = model.addSoftwareSystem("Software System A", ""); Container containerA = softwareSystemA.addContainer("Container A", "", ""); Component componentA = containerA.addComponent("Component A", "", ""); Container containerB = softwareSystemA.addContainer("Container B", "", ""); containerB.uses(componentA, "uses"); view = new ComponentView(containerA, "key", "description"); view.addAllComponents(); view.addExternalDependencies(); assertEquals(2, view.getElements().size()); assertTrue(view.getElements().contains(new ElementView(componentA))); assertTrue(view.getElements().contains(new ElementView(containerB))); }
@Test public void test_addExternalDependencies_AddsTheParentSoftwareSystem_WhenAComponentHasARelationshipFromAContainerInAnotherSoftwareSystem() { SoftwareSystem softwareSystemA = model.addSoftwareSystem("Software System A", ""); Container containerA = softwareSystemA.addContainer("Container A", "", ""); Component componentA = containerA.addComponent("Component A", "", ""); SoftwareSystem softwareSystemB = model.addSoftwareSystem("Software System B", ""); Container containerB = softwareSystemB.addContainer("Container B", "", ""); containerB.uses(componentA, "uses"); view = new ComponentView(containerA, "key", "description"); view.addAllComponents(); view.addExternalDependencies(); assertEquals(2, view.getElements().size()); assertTrue(view.getElements().contains(new ElementView(componentA))); assertTrue(view.getElements().contains(new ElementView(softwareSystemB))); }
@Test public void test_addExternalDependencies_AddsTheContainer_WhenAComponentHasARelationshipToAContainerInTheSameSoftwareSystem() { SoftwareSystem softwareSystemA = model.addSoftwareSystem("Software System A", ""); Container containerA = softwareSystemA.addContainer("Container A", "", ""); Component componentA = containerA.addComponent("Component A", "", ""); Container containerB = softwareSystemA.addContainer("Container B", "", ""); componentA.uses(containerB, "uses"); view = new ComponentView(containerA, "key", "description"); view.addAllComponents(); view.addExternalDependencies(); assertEquals(2, view.getElements().size()); assertTrue(view.getElements().contains(new ElementView(componentA))); assertTrue(view.getElements().contains(new ElementView(containerB))); }
@Test public void test_addExternalDependencies_AddsTheParentSoftwareSystem_WhenAComponentHasARelationshipToAContainerInAnotherSoftwareSystem() { SoftwareSystem softwareSystemA = model.addSoftwareSystem("Software System A", ""); Container containerA = softwareSystemA.addContainer("Container A", "", ""); Component componentA = containerA.addComponent("Component A", "", ""); SoftwareSystem softwareSystemB = model.addSoftwareSystem("Software System B", ""); Container containerB = softwareSystemB.addContainer("Container B", "", ""); componentA.uses(containerB, "uses"); view = new ComponentView(containerA, "key", "description"); view.addAllComponents(); view.addExternalDependencies(); assertEquals(2, view.getElements().size()); assertTrue(view.getElements().contains(new ElementView(componentA))); assertTrue(view.getElements().contains(new ElementView(softwareSystemB))); }
@Test public void test_addExternalDependencies_AddsTheParentContainer_WhenAComponentHasARelationshipToAComponentInADifferentContainerInTheSameSoftwareSystem() { SoftwareSystem softwareSystemA = model.addSoftwareSystem("Software System A", ""); Container containerA = softwareSystemA.addContainer("Container A", "", ""); Component componentA = containerA.addComponent("Component A", "", ""); Container containerB = softwareSystemA.addContainer("Container B", "", ""); Component componentB = containerB.addComponent("Component B", "", ""); componentA.uses(componentB, "uses"); view = new ComponentView(containerA, "key", "description"); view.addAllComponents(); view.addExternalDependencies(); assertEquals(2, view.getElements().size()); assertTrue(view.getElements().contains(new ElementView(componentA))); assertTrue(view.getElements().contains(new ElementView(containerB))); }
@Test public void test_addExternalDependencies_AddsTheParentContainer_WhenAComponentHasARelationshipFromAComponentInADifferentContainerInTheSameSoftwareSystem() { SoftwareSystem softwareSystemA = model.addSoftwareSystem("Software System A", ""); Container containerA = softwareSystemA.addContainer("Container A", "", ""); Component componentA = containerA.addComponent("Component A", "", ""); Container containerB = softwareSystemA.addContainer("Container B", "", ""); Component componentB = containerB.addComponent("Component B", "", ""); componentB.uses(componentA, "uses"); view = new ComponentView(containerA, "key", "description"); view.addAllComponents(); view.addExternalDependencies(); assertEquals(2, view.getElements().size()); assertTrue(view.getElements().contains(new ElementView(componentA))); assertTrue(view.getElements().contains(new ElementView(containerB))); }
@Test public void test_addExternalDependencies_AddsTheParentSoftwareSystem_WhenAComponentHasARelationshipToAComponentInAnotherSoftwareSystem() { SoftwareSystem softwareSystemA = model.addSoftwareSystem("Software System A", ""); Container containerA = softwareSystemA.addContainer("Container A", "", ""); Component componentA = containerA.addComponent("Component A", "", ""); SoftwareSystem softwareSystemB = model.addSoftwareSystem("Software System B", ""); Container containerB = softwareSystemB.addContainer("Container B", "", ""); Component componentB = containerB.addComponent("Component B", "", ""); componentA.uses(componentB, "uses"); view = new ComponentView(containerA, "key", "description"); view.addAllComponents(); view.addExternalDependencies(); assertEquals(2, view.getElements().size()); assertTrue(view.getElements().contains(new ElementView(componentA))); assertTrue(view.getElements().contains(new ElementView(softwareSystemB))); }
@Test public void test_addExternalDependencies_AddsTheParentSoftwareSystem_WhenAComponentHasARelationshipFromAComponentInAnotherSoftwareSystem() { SoftwareSystem softwareSystemA = model.addSoftwareSystem("Software System A", ""); Container containerA = softwareSystemA.addContainer("Container A", "", ""); Component componentA = containerA.addComponent("Component A", "", ""); SoftwareSystem softwareSystemB = model.addSoftwareSystem("Software System B", ""); Container containerB = softwareSystemB.addContainer("Container B", "", ""); Component componentB = containerB.addComponent("Component B", "", ""); componentB.uses(componentA, "uses"); view = new ComponentView(containerA, "key", "description"); view.addAllComponents(); view.addExternalDependencies(); assertEquals(2, view.getElements().size()); assertTrue(view.getElements().contains(new ElementView(componentA))); assertTrue(view.getElements().contains(new ElementView(softwareSystemB))); }
assertTrue(view.getElements().contains(new ElementView(softwareSystemB))); view = new ComponentView(webApplication, "components", "Description"); view.addNearestNeighbours(softwareSystemA); assertTrue(view.getElements().contains(new ElementView(controller))); view = new ComponentView(webApplication, "components", "Description"); view.addNearestNeighbours(webApplication); assertTrue(view.getElements().contains(new ElementView(softwareSystemB))); view = new ComponentView(webApplication, "components", "Description"); view.addNearestNeighbours(controller); assertTrue(view.getElements().contains(new ElementView(service))); view = new ComponentView(webApplication, "components", "Description"); view.addNearestNeighbours(service);
views.setContainerViews(Collections.singleton(containerView)); ComponentView componentView = new ComponentView(); componentView.setSoftwareSystemId(softwareSystem.getId()); componentView.setContainerId(container.getId());