package tw.com.pictures; import java.util.HashSet; import java.util.List; import java.util.Set; import com.amazonaws.services.ec2.model.IpRange; import tw.com.exceptions.CfnAssistException; import tw.com.pictures.dot.CommonElements; import com.amazonaws.services.ec2.model.IpPermission; public class CommonBuilder { private Set<String> addedIpPerms; public CommonBuilder() { addedIpPerms = new HashSet<>(); } protected void addSecGroupInboundPerms(CommonElements diagram, String groupId, IpPermission perms) throws CfnAssistException { String range = createRange(perms); String uniqueId = createUniqueId(groupId, perms, range, "in"); if (haveAddedPerm(uniqueId)) { return; } addedIpPerms.add(uniqueId); String label = createLabel(perms); diagram.addPortRange(uniqueId, range); diagram.connectWithLabel(uniqueId, groupId, label); } protected void addSecGroupOutboundPerms(CommonElements diagram, String groupId, IpPermission perms) throws CfnAssistException { String range = createRange(perms); String uniqueId = createUniqueId(groupId, perms, range, "out"); if (haveAddedPerm(uniqueId)) { return; } addedIpPerms.add(uniqueId); String label = createLabel(perms); diagram.addPortRange(uniqueId, range); diagram.connectWithLabel(groupId, uniqueId, label); } private String createRange(IpPermission perms) { Integer to = perms.getToPort(); Integer from = perms.getFromPort(); if (to==null) { if (from==null) { return "all"; } return from.toString(); } if (to.equals(from)) { if (to.equals(-1)) { return "all"; } return to.toString(); } return String.format("%s-%s",from, to); } private String createUniqueId(String groupId, IpPermission perms, String range, String dir) { return String.format("%s_%s_%s_%s", groupId, perms.getIpProtocol(), range, dir); } private String createLabel(IpPermission perms) { List<IpRange> ipRanges = perms.getIpv4Ranges(); String ipProtocol = perms.getIpProtocol(); if (ipProtocol.equals("-1")) { ipProtocol = "all"; } if (ipRanges.isEmpty()) { return String.format("[%s]", ipProtocol); } return String.format("(%s)\n[%s]", ipRangesIntoTextList(ipRanges) ,ipProtocol); } private String ipRangesIntoTextList(List<IpRange> ipRanges) { StringBuilder rangesPart = new StringBuilder(); for (IpRange range : ipRanges) { if (rangesPart.length()!=0) { rangesPart.append(",\n"); } if (range.getCidrIp().equals("0.0.0.0/0")) { rangesPart.append("all"); } else { rangesPart.append(range.getCidrIp()); } } return rangesPart.toString(); } private boolean haveAddedPerm(String uniqueId) { return addedIpPerms.contains(uniqueId); } String formRouteTableIdForDiagram(String subnetId, String routeTableId) { return String.format("%s_%s", subnetId, routeTableId); } }