private ElementView findElementView(ElementView sourceElementView) { for (ElementView elementView : getElements()) { if (elementView.getElement().equals(sourceElementView.getElement())) { return elementView; } } return null; }
@Override public String toString() { return getElement().toString(); }
protected boolean isElementInView(Element element) { return this.elementViews.stream().filter(ev -> ev.getElement().equals(element)).count() > 0; }
/** * Removes all elements that cannot be reached by traversing the graph of relationships * starting with the specified element. * * @param element the starting element */ public void removeElementsThatAreUnreachableFrom(Element element) { if (element != null) { Set<Element> elementsToShow = new HashSet<>(); Set<Element> elementsVisited = new HashSet<>(); findElementsToShow(element, element, elementsToShow, elementsVisited); for (ElementView elementView : getElements()) { if (!elementsToShow.contains(elementView.getElement()) && canBeRemoved(elementView.getElement())) { removeElement(elementView.getElement()); } } } }
protected void write(DeploymentView view, Writer writer) { try { writeHeader(view, writer); view.getElements().stream() .filter(ev -> ev.getElement() instanceof DeploymentNode && ev.getElement().getParent() == null) .map(ev -> (DeploymentNode)ev.getElement()) .sorted((e1, e2) -> e1.getName().compareTo(e2.getName())) .forEach(e -> write(view, e, writer, 0)); writeRelationships(view, writer); writeFooter(writer); } catch (IOException e) { e.printStackTrace(); } }
/** * Removes all elements that have no relationships to other elements in this view. */ public void removeElementsWithNoRelationships() { Set<RelationshipView> relationships = getRelationships(); Set<String> elementIds = new HashSet<>(); relationships.forEach(rv -> elementIds.add(rv.getRelationship().getSourceId())); relationships.forEach(rv -> elementIds.add(rv.getRelationship().getDestinationId())); for (ElementView elementView : getElements()) { if (!elementIds.contains(elementView.getId())) { removeElement(elementView.getElement()); } } }
protected void write(ContainerView view, Writer writer) { try { writeHeader(view, writer); view.getElements().stream() .filter(ev -> !(ev.getElement() instanceof Container)) .map(ElementView::getElement) .sorted((e1, e2) -> e1.getName().compareTo(e2.getName())) .forEach(e -> write(view, e, writer, false)); writer.write("package \"" + view.getSoftwareSystem().getName() + "\" <<" + typeOf(view.getSoftwareSystem()) + ">> {"); writer.write(System.lineSeparator()); view.getElements().stream() .filter(ev -> ev.getElement() instanceof Container) .map(ElementView::getElement) .sorted((e1, e2) -> e1.getName().compareTo(e2.getName())) .forEach(e -> write(view, e, writer, true)); writer.write("}"); writer.write(System.lineSeparator()); writeRelationships(view, writer); writeFooter(writer); } catch (IOException e) { e.printStackTrace(); } }
protected void write(ComponentView view, Writer writer) { try { writeHeader(view, writer); view.getElements().stream() .filter(ev -> !(ev.getElement() instanceof Component)) .map(ElementView::getElement) .sorted((e1, e2) -> e1.getName().compareTo(e2.getName())) .forEach(e -> write(view, e, writer, false)); writer.write("package \"" + view.getContainer().getName() + "\" <<" + typeOf(view.getContainer()) + ">> {"); writer.write(System.lineSeparator()); view.getElements().stream() .filter(ev -> ev.getElement() instanceof Component) .map(ElementView::getElement) .sorted((e1, e2) -> e1.getName().compareTo(e2.getName())) .forEach(e -> write(view, e, writer, true)); writer.write("}"); writer.write(System.lineSeparator()); writeRelationships(view, writer); writeFooter(writer); } catch (IOException e) { e.printStackTrace(); } }
@Test public void test_add_DoesNothing_WhenTheContainerOfTheViewIsAdded() { assertEquals("the container itself is not added to the view", 0, view.getElements().stream().map(e -> e.getElement()).filter(e -> e.equals(webApplication)).count()); view.add(webApplication); assertEquals("the container itself is not added to the view", 0, view.getElements().stream().map(e -> e.getElement()).filter(e -> e.equals(webApplication)).count()); }
@Test public void test_add_DoesNothing_WhenTheContainerOfTheViewIsAddedViaDependency() { final SoftwareSystem softwareSystem = model.addSoftwareSystem(Location.External, "Some other system", "external system that uses our web application"); final Relationship relationshipFromExternalSystem = softwareSystem.uses(webApplication, ""); assertEquals("the container itself is not added to the view", 0, view.getElements().stream().map(e -> e.getElement()).filter(e -> e.equals(webApplication)).count()); view.add(relationshipFromExternalSystem); assertEquals("the container itself is not added to the view", 0, view.getElements().stream().map(e -> e.getElement()).filter(e -> e.equals(webApplication)).count()); }
@Test public void test_addAllSoftwareSystems_DoesAddAllSoftwareSystems_WhenThereAreSoftwareSystemsInTheModel() { SoftwareSystem softwareSystem = model.addSoftwareSystem(Location.Internal, "The System", "Description"); SoftwareSystem softwareSystemA = model.addSoftwareSystem(Location.Unspecified, "System A", "Description"); SoftwareSystem softwareSystemB = model.addSoftwareSystem(Location.Unspecified, "System B", "Description"); SoftwareSystem softwareSystemC = model.addSoftwareSystem(Location.Unspecified, "System C", "Description"); StaticView view = new SystemContextView(softwareSystem, "context", "Description"); view.addAllSoftwareSystems(); assertEquals(4, view.getElements().size()); Iterator<ElementView> it = view.getElements().iterator(); assertSame(softwareSystem, it.next().getElement()); assertSame(softwareSystemA, it.next().getElement()); assertSame(softwareSystemB, it.next().getElement()); assertSame(softwareSystemC, it.next().getElement()); }
@Test public void test_addAllPeople_DoesAddAllPeople_WhenThereArePeopleInTheModel() { SoftwareSystem softwareSystem = model.addSoftwareSystem(Location.Internal, "The System", "Description"); Person person1 = model.addPerson(Location.Unspecified, "Person 1", "Description"); Person person2 = model.addPerson(Location.Unspecified, "Person 2", "Description"); Person person3 = model.addPerson(Location.Unspecified, "Person 3", "Description"); StaticView view = new SystemContextView(softwareSystem, "context", "Description"); view.addAllPeople(); assertEquals(4, view.getElements().size()); Iterator<ElementView> it = view.getElements().iterator(); assertSame(softwareSystem, it.next().getElement()); assertSame(person1, it.next().getElement()); assertSame(person2, it.next().getElement()); assertSame(person3, it.next().getElement()); }
@Test public void test_addSoftwareSystem_AddsTheSoftwareSystem_WhenTheSoftwareSystemIsInTheModel() { SoftwareSystem softwareSystem = model.addSoftwareSystem(Location.Internal, "The System", "Description"); SoftwareSystem softwareSystemA = model.addSoftwareSystem(Location.Unspecified, "System A", "Description"); StaticView view = new SystemContextView(softwareSystem, "context", "Description"); view.add(softwareSystemA); assertEquals(2, view.getElements().size()); Iterator<ElementView> it = view.getElements().iterator(); assertSame(softwareSystem, it.next().getElement()); assertSame(softwareSystemA, it.next().getElement()); }
@Test public void test_addPerson_AddsThePerson_WhenThPersonIsInTheModel() { SoftwareSystem softwareSystem = model.addSoftwareSystem(Location.Internal, "The System", "Description"); StaticView view = new SystemContextView(softwareSystem, "context", "Description"); Person person1 = model.addPerson(Location.Unspecified, "Person 1", "Description"); view.add(person1); assertEquals(2, view.getElements().size()); Iterator<ElementView> it = view.getElements().iterator(); assertSame(softwareSystem, it.next().getElement()); assertSame(person1, it.next().getElement()); }
@Test public void test_copyLayoutInformationFrom_DoesNotDoAnythingIfThereIsNoDeploymentViewToCopyInformationFrom() { Workspace workspace1 = createWorkspace(); Workspace workspace2 = createWorkspace(); DeploymentNode deploymentNode2 = workspace2.getModel().getDeploymentNodeWithName("Deployment Node"); DeploymentView view2 = workspace2.getViews().createDeploymentView("key", "Description"); view2.add(deploymentNode2); workspace2.getViews().copyLayoutInformationFrom(workspace1.getViews()); assertEquals(0, view2.getElements().stream().filter(ev -> ev.getElement() instanceof ContainerInstance).findFirst().get().getX()); // default assertEquals(0, view2.getElements().stream().filter(ev -> ev.getElement() instanceof ContainerInstance).findFirst().get().getY()); // default assertNull(view2.getPaperSize()); // default }
@Test public void test_copyLayoutInformationFrom_WhenTheDeploymentViewKeysMatch() { Workspace workspace1 = createWorkspace(); DeploymentNode deploymentNode1 = workspace1.getModel().getDeploymentNodeWithName("Deployment Node"); DeploymentView view1 = workspace1.getViews().createDeploymentView("key", "Description"); view1.add(deploymentNode1); view1.getElements().stream().filter(ev -> ev.getElement() instanceof ContainerInstance).findFirst().get().setX(100); view1.getElements().stream().filter(ev -> ev.getElement() instanceof ContainerInstance).findFirst().get().setY(200); view1.setPaperSize(PaperSize.A3_Landscape); Workspace workspace2 = createWorkspace(); DeploymentNode deploymentNode2 = workspace2.getModel().getDeploymentNodeWithName("Deployment Node"); DeploymentView view2 = workspace2.getViews().createDeploymentView("key", "Description"); view2.add(deploymentNode2); workspace2.getViews().copyLayoutInformationFrom(workspace1.getViews()); assertEquals(100, view2.getElements().stream().filter(ev -> ev.getElement() instanceof ContainerInstance).findFirst().get().getX()); assertEquals(200, view2.getElements().stream().filter(ev -> ev.getElement() instanceof ContainerInstance).findFirst().get().getY()); assertEquals(PaperSize.A3_Landscape, view2.getPaperSize()); }
Element element = elementView.getElement();
@Test public void test_remove_ElementsWithTag() { final String TAG = "myTag"; Container webApplication = softwareSystem.addContainer("Web Application", "", ""); Container database = softwareSystem.addContainer("Database", "", ""); database.addTags(TAG); view.addAllContainers(); assertEquals(2, view.getElements().size()); view.removeElementsWithTag(TAG); assertEquals(1, view.getElements().size()); assertEquals(webApplication, view.getElements().iterator().next().getElement()); }
@Test public void test_construction() { assertEquals("The System - System Context", view.getName()); assertEquals(1, view.getElements().size()); assertSame(view.getElements().iterator().next().getElement(), softwareSystem); assertSame(softwareSystem, view.getSoftwareSystem()); assertEquals(softwareSystem.getId(), view.getSoftwareSystemId()); assertSame(model, view.getModel()); }
assertSame(person, systemLandscapeView.getElementView(person).getElement()); assertSame(softwareSystem, systemLandscapeView.getElementView(softwareSystem).getElement()); assertSame(personUsesSoftwareSystemRelationship, systemLandscapeView.getRelationshipView(personUsesSoftwareSystemRelationship).getRelationship()); assertSame(views, systemContextView.getViewSet()); assertSame(softwareSystem, systemContextView.getSoftwareSystem()); assertSame(softwareSystem, systemContextView.getElementView(softwareSystem).getElement()); assertSame(container, containerView.getElementView(container).getElement()); assertSame(softwareSystem, componentView.getSoftwareSystem()); assertSame(container, componentView.getContainer()); assertSame(component, componentView.getElementView(component).getElement()); assertSame(softwareSystem, dynamicView.getSoftwareSystem()); assertSame(softwareSystem, dynamicView.getElement()); assertSame(component, dynamicView.getElementView(component).getElement()); assertSame(deploymentNode, deploymentView.getElementView(deploymentNode).getElement()); assertSame(containerInstance, deploymentView.getElementView(containerInstance).getElement());