package tw.com.pictures; import java.util.HashMap; import java.util.Map; import tw.com.exceptions.CfnAssistException; import tw.com.pictures.dot.Recorder; import com.amazonaws.services.ec2.model.Instance; import com.amazonaws.services.ec2.model.IpPermission; import com.amazonaws.services.ec2.model.RouteTable; import com.amazonaws.services.ec2.model.SecurityGroup; import com.amazonaws.services.ec2.model.Subnet; public class SubnetDiagramBuilder extends CommonBuilder implements HasDiagramId { private Map<String, String> instanceNames = new HashMap<String,String>(); // id -> name private NetworkChildDiagram networkChildDiagram; private SecurityChildDiagram securityChildDiagram; private String id; public SubnetDiagramBuilder(NetworkChildDiagram networkChildDiagram, SecurityChildDiagram securityDiagram, Subnet subnet) { instanceNames = new HashMap<String, String>(); this.networkChildDiagram = networkChildDiagram; this.securityChildDiagram = securityDiagram; this.id = subnet.getSubnetId(); } public void add(Instance instance) throws CfnAssistException { String instanceId = instance.getInstanceId(); String label = createInstanceLabel(instance); networkChildDiagram.addInstance(instanceId, label); securityChildDiagram.addInstance(instanceId, label); } public String createInstanceLabel(Instance instance) { String name = getNameForInstance(instance); String privateIp = instance.getPrivateIpAddress(); String id = instance.getInstanceId(); String label = ""; if (!name.isEmpty()) { label = String.format("%s\n[%s]\n(%s)", name, id, privateIp); } else { label = String.format("[%s]\n(%s)", id, privateIp); } return label; } private String getNameForInstance(Instance instance) { String instanceId = instance.getInstanceId(); if (instanceNames.containsKey(instanceId)) { return instanceNames.get(instanceId); } String name = AmazonVPCFacade.getNameFromTags(instance.getTags()); if (!name.isEmpty()) { instanceNames.put(instanceId, name); } return name; } public void addSecurityGroup(SecurityGroup group) throws CfnAssistException { String groupId = group.getGroupId(); String label = AmazonVPCFacade.labelForSecGroup(group); securityChildDiagram.addSecurityGroup(groupId, label); } public void render(Recorder recorder) { networkChildDiagram.render(recorder); } public static String formSubnetLabel(Subnet subnet, String tagName) { String name = subnet.getSubnetId(); if (!tagName.isEmpty()) { name = tagName; } return String.format("%s [%s]\n(%s)", name, subnet.getSubnetId(), subnet.getCidrBlock()); } public void addRouteTable(RouteTable routeTable) throws CfnAssistException { String name = AmazonVPCFacade.getNameFromTags(routeTable.getTags()); String routeTableId = routeTable.getRouteTableId(); String label = AmazonVPCFacade.createLabelFromNameAndID(routeTableId, name); String diagramIdForTable = formRouteTableIdForDiagram(id, routeTableId); networkChildDiagram.addRouteTable(diagramIdForTable, label); } public ChildDiagram getNetworkDiagram() { return networkChildDiagram; } @Override public String getIdAsString() { return networkChildDiagram.getId(); } public void addSecGroupInboundPerms(String groupId, IpPermission perms) throws CfnAssistException { addSecGroupInboundPerms(securityChildDiagram, groupId, perms); } public void addSecGroupOutboundPerms(String groupId, IpPermission perms) throws CfnAssistException { addSecGroupOutboundPerms(securityChildDiagram, groupId, perms); } }