package tw.com.pictures.dot; import tw.com.exceptions.CfnAssistException; import tw.com.pictures.ChildDiagram; import tw.com.pictures.Diagram; import tw.com.pictures.HasDiagramId; import tw.com.pictures.SubnetDiagramBuilder; public class GraphFacade implements Diagram { public static final int SUBNET_TITLE_FONT_SIZE = 12; private Graph graph; private CommonElements commonElements; public GraphFacade() { graph = new Graph(); commonElements = new CommonDiagramElements(graph); } @Override public ChildDiagram createSubDiagram(String uniqueId, String label) throws CfnAssistException { SubGraph cluster = graph.createDiagramCluster(uniqueId, label, SUBNET_TITLE_FONT_SIZE); cluster.addNode(uniqueId).makeInvisible(); ChildDiagram child = new SubGraphFacade(cluster); return child; } @Override public void addTitle(String title) { graph.addTitle(title); } @Override public void render(Recorder recorder) { graph.render(recorder); } @Override public void addRouteTable(String routeTableId, String label) throws CfnAssistException { graph.addNode(routeTableId).addLabel(label); } @Override public void addConnectionBetween(String uniqueIdA, String uniqueIdB) { graph.addEdge(uniqueIdA, uniqueIdB); } @Override public void associate(String uniqueIdA, String uniqueIdB) { graph.addEdge(uniqueIdA, uniqueIdB).withDottedLine().withDot(); } @Override public void addPublicIPAddress(String uniqueId, String label) throws CfnAssistException { graph.addNode(uniqueId).withShape(Shape.Diamond).withLabel(label); } @Override public void addLoadBalancer(String uniqueId, String label) throws CfnAssistException { graph.addNode(uniqueId).withShape(Shape.InvHouse).withLabel(label); } private void addConnectionFromSubDiagram(String target, String start, HasDiagramId childDigram, String edgeLabel, boolean blocked) throws CfnAssistException { Edge edge = graph.addEdge(start, target).beginsAt(childDigram.getIdAsString()).withLabel(edgeLabel); if (blocked) { edge.withBox().withColour(Colour.Red); } } private void addConnectionToSubDiagram(String start, String end, HasDiagramId childDigram, String label, boolean blocked) throws CfnAssistException { Edge edge = graph.addEdge(start, end).endsAt(childDigram.getIdAsString()).withLabel(label); if (blocked) { edge.withBox().withColour(Colour.Red); } } @Override public void addConnectionFromSubDiagram(String start, String end, HasDiagramId childDigram, String label) throws CfnAssistException { addConnectionFromSubDiagram(start, end, childDigram, label, false); } @Override public void addConnectionToSubDiagram(String start, String end, HasDiagramId childDigram, String label) throws CfnAssistException { addConnectionToSubDiagram(start, end, childDigram, label, false); } @Override public void addBlockedConnectionFromSubDiagram(String start, String end, HasDiagramId childDigram, String label) throws CfnAssistException { addConnectionFromSubDiagram(start, end, childDigram, label, true); } @Override public void addBlockedConnectionToSubDiagram(String start, String end, HasDiagramId childDigram, String label) throws CfnAssistException { addConnectionToSubDiagram(start, end, childDigram, label, true); } @Override public void associateWithSubDiagram(String begin, String end, HasDiagramId childDiagram) { graph.addEdge(begin, end).withDot().endsAt(childDiagram.getIdAsString()).withDottedLine(); } @Override public void addDBInstance(String uniqueId, String label) throws CfnAssistException { graph.addNode(uniqueId).withShape(Shape.Octogon).withLabel(label); } @Override public void addACL(String uniqueId, String label) throws CfnAssistException { graph.addNode(uniqueId).withLabel(label).withShape(Shape.Box); } @Override public void addCidr(String uniqueId, String label) throws CfnAssistException { graph.addNode(uniqueId).withLabel(label).withShape(Shape.Diamond); } @Override public void addSecurityGroup(String id, String label) throws CfnAssistException { commonElements.addSecurityGroup(id, label); } @Override public void addPortRange(String uniqueId, String label) throws CfnAssistException { commonElements.addPortRange(uniqueId, label); } @Override public void connectWithLabel(String uniqueIdA, String uniqueIdB, String label) { commonElements.connectWithLabel(uniqueIdA, uniqueIdB, label); } @Override public void addRouteToInstance(String instanceId, String routeTableId, SubnetDiagramBuilder subnetDiagramBuilder, String cidr) throws CfnAssistException { addConnectionFromSubDiagram(instanceId, routeTableId, subnetDiagramBuilder, cidr); } }