private <T extends View> T findView(Collection<T> views, T sourceView) { for (T view : views) { if (view.getKey() != null && view.getKey().equals(sourceView.getKey())) { return view; } } for (T view : views) { if (view.getName().equals(sourceView.getName())) { if (view.getDescription() != null) { if (view.getDescription().equals(sourceView.getDescription())) { return view; } } else { return view; } } } return null; }
/** * 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); } } }
protected void writeHeader(View view, Writer writer) throws IOException { writer.write(format("@startuml(id=%s)", view.getKey().replace(' ', '_'))); writer.write(System.lineSeparator()); PaperSize size = view.getPaperSize(); int width; int height; writer.write(System.lineSeparator()); String viewTitle = view.getTitle(); if (StringUtils.isNullOrEmpty(viewTitle)) { viewTitle = view.getName(); if (view.getDescription() != null && view.getDescription().trim().length() > 0) { writer.write("caption " + view.getDescription()); writer.write(System.lineSeparator());
private void write(View view, Element clusterElement, Writer writer) { try { DotGraph graph = new DotGraph(view.getName()); DotGraph.Digraph digraph = graph.getDigraph(); DotGraph.Cluster cluster = null; for (ElementView elementView : view.getElements()) { Element element = elementView.getElement(); for (RelationshipView relationshipView : view.getRelationships()) { Relationship relationship = relationshipView.getRelationship(); digraph.addAssociation(
/** * 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 hydrateView(View view) { view.setViewSet(this); for (ElementView elementView : view.getElements()) { elementView.setElement(model.getElement(elementView.getId())); } for (RelationshipView relationshipView : view.getRelationships()) { relationshipView.setRelationship(model.getRelationship(relationshipView.getId())); } }
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()); } } }
/** * Removes relationships that are not connected to the specified element. * * @param element the Element to test against */ public void removeRelationshipsNotConnectedToElement(Element element) { if (element != null) { getRelationships().stream() .map(RelationshipView::getRelationship) .filter(r -> !r.getSource().equals(element) && !r.getDestination().equals(element)) .forEach(this::remove); } }
/** * Sets the view that should be shown by default. * * @param view a View object */ public void setDefaultView(View view) { if (view != null) { this.defaultView = view.getKey(); } }
private ElementView findElementView(ElementView sourceElementView) { for (ElementView elementView : getElements()) { if (elementView.getElement().equals(sourceElementView.getElement())) { return elementView; } } return null; }
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."); } }
protected RelationshipView addRelationship(Relationship relationship, String description, String order) { RelationshipView relationshipView = addRelationship(relationship); if (relationshipView != null) { relationshipView.setDescription(description); relationshipView.setOrder(order); } return relationshipView; }
protected RelationshipView findRelationshipView(@Nonnull RelationshipView sourceRelationshipView) { for (RelationshipView relationshipView : getRelationships()) { if (relationshipView.getRelationship().equals(sourceRelationshipView.getRelationship())) { return relationshipView; } } return null; }
public String getBaseViewKey() { if (view != null) { return view.getKey(); } else { return this.baseViewKey; } }
private void addRelationships(Element element) { Set<Element> elements = getElements().stream() .map(ElementView::getElement) .collect(Collectors.toSet()); // add relationships where the destination exists in the view already for (Relationship relationship : element.getRelationships()) { if (elements.contains(relationship.getDestination())) { this.relationshipViews.add(new RelationshipView(relationship)); } } // add relationships where the source exists in the view already for (Element e : elements) { for (Relationship r : e.getRelationships()) { if (r.getDestination().equals(element)) { this.relationshipViews.add(new RelationshipView(r)); } } } }
protected void writeRelationships(View view, Writer writer) { view.getRelationships().stream() .map(RelationshipView::getRelationship) .sorted((r1, r2) -> (r1.getSource().getName() + r1.getDestination().getName()).compareTo(r2.getSource().getName() + r2.getDestination().getName())) .forEach(r -> writeRelationship(view, r, writer)); }
/** * Finds the view with the specified key, or null if the view does not exist. * * @param key the key * @return a View object, or null if a view with the specified key could not be found */ View getViewWithKey(String key) { if (key == null) { throw new IllegalArgumentException("A key must be specified."); } Set<View> views = new HashSet<>(); views.addAll(systemLandscapeViews); views.addAll(systemContextViews); views.addAll(containerViews); views.addAll(componentViews); views.addAll(dynamicViews); views.addAll(deploymentViews); return views.stream().filter(v -> key.equals(v.getKey())).findFirst().orElse(null); }