package tw.com.pictures;
import java.util.List;
import tw.com.exceptions.CfnAssistException;
import tw.com.providers.RDSClient;
import tw.com.repository.CloudRepository;
import tw.com.repository.ELBRepository;
import com.amazonaws.services.ec2.model.Address;
import com.amazonaws.services.ec2.model.GroupIdentifier;
import com.amazonaws.services.ec2.model.Instance;
import com.amazonaws.services.ec2.model.NetworkAcl;
import com.amazonaws.services.ec2.model.RouteTable;
import com.amazonaws.services.ec2.model.SecurityGroup;
import com.amazonaws.services.ec2.model.Subnet;
import com.amazonaws.services.ec2.model.Tag;
import com.amazonaws.services.ec2.model.Vpc;
import com.amazonaws.services.elasticloadbalancing.model.LoadBalancerDescription;
import com.amazonaws.services.rds.model.DBInstance;
public class AmazonVPCFacade {
private CloudRepository cloudRepository;
private ELBRepository elbClient;
private RDSClient rdsClient;
public AmazonVPCFacade(CloudRepository cloudRepository, ELBRepository elbClient,RDSClient rdsClient) {
this.cloudRepository = cloudRepository;
this.elbClient = elbClient;
this.rdsClient = rdsClient;
}
public List<Vpc> getVpcs() {
return cloudRepository.getAllVpcs();
}
public List<Subnet> getSubnetFors(String vpcId) {
return cloudRepository.getSubnetsForVpc(vpcId);
}
public Subnet getSubnet(String subnetId) {
return cloudRepository.getSubnetById(subnetId);
}
public List<Instance> getInstancesFor(String subnetId) {
return cloudRepository.getInstancesForSubnet(subnetId);
}
public SecurityGroup getSecurityGroupDetails(GroupIdentifier groupIdentifier) throws CfnAssistException {
return getSecurityGroupDetailsById(groupIdentifier.getGroupId());
}
public SecurityGroup getSecurityGroupDetailsByName(String groupName) throws CfnAssistException {
return cloudRepository.getSecurityGroupByName(groupName);
}
public SecurityGroup getSecurityGroupDetailsById(String groupId) throws CfnAssistException {
return cloudRepository.getSecurityGroupById(groupId);
}
public List<NetworkAcl> getACLs(String vpcId) {
return cloudRepository.getALCsForVPC(vpcId);
}
public List<RouteTable> getRouteTablesFor(String vpcId) {
return cloudRepository.getRouteTablesForVPC(vpcId);
}
public List<LoadBalancerDescription> getLBsFor(String vpcId) {
return elbClient.findELBForVPC(vpcId);
}
public List<DBInstance> getRDSFor(String vpcId) {
return rdsClient.getDBInstancesForVpc(vpcId);
}
public List<Address> getEIPFor(String vpcId) throws CfnAssistException {
return cloudRepository.getEIPForVPCId(vpcId);
}
public static String getNameFromTags(List<Tag> tags) {
String name = getValueFromTag(tags, "Name");
if (name.isEmpty()) {
name = getValueFromTag(tags, "aws:cloudformation:logical-id");
}
return name;
}
public static String getValueFromTag(List<Tag> tags, String nameOfTag) {
for(Tag tag : tags) {
if (tag.getKey().equals(nameOfTag)) {
return tag.getValue();
}
}
return "";
}
public static String createLabelFromNameAndID(String id, String name) {
return String.format("%s [%s]", name, id);
}
public List<SecurityGroup> getSecurityGroupsFor(String vpcId) {
return cloudRepository.getSecurityGroupsFor(vpcId);
}
public static String labelForSecGroup(SecurityGroup group) {
String name = getNameFromTags(group.getTags());
if (name.isEmpty()) {
name = group.getGroupName();
}
return createLabelFromNameAndID(group.getGroupId(), name);
}
}