private ElementView findElementView(ElementView sourceElementView) { for (ElementView elementView : getElements()) { if (elementView.getElement().equals(sourceElementView.getElement())) { return elementView; } } return null; }
@Test public void test_copyLayoutInformationFrom_CopiesXAndY_WhenANonNullElementViewIsPassed() { Element element = model.addSoftwareSystem(Location.External, "SystemA", ""); ElementView elementView1 = new ElementView(element); assertEquals(0, elementView1.getX()); assertEquals(0, elementView1.getY()); ElementView elementView2 = new ElementView(element); elementView2.setX(123); elementView2.setY(456); elementView1.copyLayoutInformationFrom(elementView2); assertEquals(123, elementView1.getX()); assertEquals(456, elementView1.getY()); }
/** * 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()); } } }
private void findElementsToShow(Element startingElement, Element element, Set<Element> elementsToShow, Set<Element> elementsVisited) { if (!elementsVisited.contains(element) && getElements().contains(new ElementView(element))) { elementsVisited.add(element); elementsToShow.add(element); // check that we've not gone back to the starting point of the graph if (!element.hasEfferentRelationshipWith(startingElement)) { element.getRelationships().forEach(r -> findElementsToShow(startingElement, r.getDestination(), elementsToShow, elementsVisited)); } } }
@Test public void test_copyLayoutInformationFrom_WhenTheSystemLandscapeViewKeysMatch() { Workspace workspace1 = createWorkspace(); SoftwareSystem softwareSystem1 = workspace1.getModel().getSoftwareSystemWithName("Software System"); SystemLandscapeView view1 = workspace1.getViews().createSystemLandscapeView("landscape", "Description"); view1.addAllElements(); view1.getElements().iterator().next().setX(100); view1.setPaperSize(PaperSize.A3_Landscape); Workspace workspace2 = createWorkspace(); SoftwareSystem softwareSystem2 = workspace2.getModel().getSoftwareSystemWithName("Software System"); SystemLandscapeView view2 = workspace2.getViews().createSystemLandscapeView("context", "Description"); view2.addAllElements(); workspace2.getViews().copyLayoutInformationFrom(workspace1.getViews()); assertEquals(100, view2.getElements().iterator().next().getX()); assertEquals(PaperSize.A3_Landscape, view2.getPaperSize()); }
@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_DoesNothing_WhenNullIsPassed() { Element element = model.addSoftwareSystem(Location.External, "SystemA", ""); ElementView elementView = new ElementView(element); elementView.copyLayoutInformationFrom(null); }
@Test public void test_copyLayoutInformationFrom_DoesNotDoAnythingIfThereIsNoSystemContextViewToCopyInformationFrom() { Workspace workspace1 = createWorkspace(); Workspace workspace2 = createWorkspace(); SoftwareSystem softwareSystem2 = workspace2.getModel().getSoftwareSystemWithName("Software System"); SystemContextView view2 = workspace2.getViews().createSystemContextView(softwareSystem2, "context", "Description"); view2.addAllElements(); workspace2.getViews().copyLayoutInformationFrom(workspace1.getViews()); assertEquals(0, view2.getElements().iterator().next().getX()); // default assertNull(view2.getPaperSize()); // default }
private HashSet<ElementView> elementViewsFor(Element... elements) { HashSet<ElementView> set = new HashSet<>(); for (Element element : elements) { ElementView elementView = new ElementView(); elementView.setId(element.getId()); set.add(elementView); } return set; }
/** * Attempts to copy the visual layout information (e.g. x,y coordinates) of elements and relationships * from the specified source view into this view. * * @param source the source View */ void copyLayoutInformationFrom(@Nonnull View source) { if (this.getPaperSize() == null) { this.setPaperSize(source.getPaperSize()); } for (ElementView sourceElementView : source.getElements()) { ElementView destinationElementView = findElementView(sourceElementView); if (destinationElementView != null) { destinationElementView.copyLayoutInformationFrom(sourceElementView); } } for (RelationshipView sourceRelationshipView : source.getRelationships()) { RelationshipView destinationRelationshipView = findRelationshipView(sourceRelationshipView); if (destinationRelationshipView != null) { destinationRelationshipView.copyLayoutInformationFrom(sourceRelationshipView); } } }
@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()); }
protected final void addElement(Element element, boolean addRelationships) { if (element == null) { throw new IllegalArgumentException("An element must be specified."); } if (getModel().contains(element)) { elementViews.add(new ElementView(element)); if (addRelationships) { addRelationships(element); } } else { throw new IllegalArgumentException("The element named " + element.getName() + " does not exist in the model associated with this view."); } }
@Test public void test_copyLayoutInformationFrom_WhenTheSystemContextViewKeysMatch() { Workspace workspace1 = createWorkspace(); SoftwareSystem softwareSystem1 = workspace1.getModel().getSoftwareSystemWithName("Software System"); SystemContextView view1 = workspace1.getViews().createSystemContextView(softwareSystem1, "context", "Description"); view1.addAllElements(); view1.getElements().iterator().next().setX(100); view1.setPaperSize(PaperSize.A3_Landscape); Workspace workspace2 = createWorkspace(); SoftwareSystem softwareSystem2 = workspace2.getModel().getSoftwareSystemWithName("Software System"); SystemContextView view2 = workspace2.getViews().createSystemContextView(softwareSystem2, "context", "Description"); view2.addAllElements(); workspace2.getViews().copyLayoutInformationFrom(workspace1.getViews()); assertEquals(100, view2.getElements().iterator().next().getX()); assertEquals(PaperSize.A3_Landscape, view2.getPaperSize()); }
@Test public void test_copyLayoutInformationFrom_DoesNotDoAnythingIfThereIsNoContainerViewToCopyInformationFrom() { Workspace workspace1 = createWorkspace(); Workspace workspace2 = createWorkspace(); SoftwareSystem softwareSystem2 = workspace2.getModel().getSoftwareSystemWithName("Software System"); ContainerView view2 = workspace2.getViews().createContainerView(softwareSystem2, "containers", "Description"); view2.addAllElements(); workspace2.getViews().copyLayoutInformationFrom(workspace1.getViews()); assertEquals(0, view2.getElements().iterator().next().getX()); // default assertNull(view2.getPaperSize()); // default }
view1.getElementView(softwareSystem1B).setX(123); view1.getElementView(softwareSystem1B).setY(321); view1.add(person1); view1.getElementView(person1).setX(456); view1.getElementView(person1).setY(654); view1.getRelationshipView(personUsesSoftwareSystem1).setVertices(Arrays.asList(new Vertex(123, 456))); view1.getRelationshipView(personUsesSoftwareSystem1).setPosition(70); view2.add(softwareSystem2B); view2.add(person2); assertEquals(0, view2.getElementView(softwareSystem2B).getX()); assertEquals(0, view2.getElementView(softwareSystem2B).getY()); assertEquals(0, view2.getElementView(softwareSystem2B).getX()); assertEquals(0, view2.getElementView(softwareSystem2B).getY()); assertEquals(0, view2.getElementView(person2).getX()); assertEquals(0, view2.getElementView(person2).getY()); assertTrue(view2.getRelationshipView(personUsesSoftwareSystem2).getVertices().isEmpty()); assertEquals(0, view2.getElementView(softwareSystem2A).getX()); assertEquals(0, view2.getElementView(softwareSystem2A).getY()); assertEquals(123, view2.getElementView(softwareSystem2B).getX()); assertEquals(321, view2.getElementView(softwareSystem2B).getY()); assertEquals(456, view2.getElementView(person2).getX()); assertEquals(654, view2.getElementView(person2).getY()); Vertex vertex = view2.getRelationshipView(personUsesSoftwareSystem2).getVertices().iterator().next(); assertEquals(123, vertex.getX());
@Override public String toString() { return getElement().toString(); }
protected void removeElement(Element element) { if (element == null) { throw new IllegalArgumentException("An element must be specified."); } if (!canBeRemoved(element)) { throw new IllegalArgumentException("The element named '" + element.getName() + "' cannot be removed from this view."); } ElementView elementView = new ElementView(element); elementViews.remove(elementView); for (RelationshipView relationshipView : getRelationships()) { if (relationshipView.getRelationship().getSource().equals(element) || relationshipView.getRelationship().getDestination().equals(element)) { remove(relationshipView.getRelationship()); } } }
@Test public void test_copyLayoutInformationFrom_WhenTheContainerViewKeysMatch() { Workspace workspace1 = createWorkspace(); SoftwareSystem softwareSystem1 = workspace1.getModel().getSoftwareSystemWithName("Software System"); ContainerView view1 = workspace1.getViews().createContainerView(softwareSystem1, "containers", "Description"); view1.addAllElements(); view1.getElements().iterator().next().setX(100); view1.setPaperSize(PaperSize.A3_Landscape); Workspace workspace2 = createWorkspace(); SoftwareSystem softwareSystem2 = workspace2.getModel().getSoftwareSystemWithName("Software System"); ContainerView view2 = workspace2.getViews().createContainerView(softwareSystem2, "containers", "Description"); view2.addAllElements(); workspace2.getViews().copyLayoutInformationFrom(workspace1.getViews()); assertEquals(100, view2.getElements().iterator().next().getX()); assertEquals(PaperSize.A3_Landscape, view2.getPaperSize()); }
@Test public void test_copyLayoutInformationFrom_DoesNotDoAnythingIfThereIsNoSystemLandscapeViewToCopyInformationFrom() { Workspace workspace1 = createWorkspace(); Workspace workspace2 = createWorkspace(); SoftwareSystem softwareSystem2 = workspace2.getModel().getSoftwareSystemWithName("Software System"); SystemLandscapeView view2 = workspace2.getViews().createSystemLandscapeView("landscape", "Description"); view2.addAllElements(); workspace2.getViews().copyLayoutInformationFrom(workspace1.getViews()); assertEquals(0, view2.getElements().iterator().next().getX()); // default assertNull(view2.getPaperSize()); // default }