package com.clouck.model.aws.ec2; import static com.clouck.util.ResourceUtil.notEqual; import static com.clouck.util.ResourceUtil.notEqualCollection; import java.util.Collections; import java.util.List; import org.springframework.data.annotation.TypeAlias; import org.springframework.data.mongodb.core.mapping.Document; import com.amazonaws.services.elasticloadbalancing.model.BackendServerDescription; import com.amazonaws.services.elasticloadbalancing.model.ListenerDescription; import com.amazonaws.services.elasticloadbalancing.model.LoadBalancerDescription; import com.amazonaws.services.elasticloadbalancing.model.Policies; import com.clouck.model.aws.AbstractResource; @Document(collection = "ec2_load_balancer") @TypeAlias(value = "ec2_load_balancer") @SuppressWarnings("serial") public class Ec2LoadBalancer extends AbstractResource<LoadBalancerDescription> { @Override @SuppressWarnings("rawtypes") protected boolean isEqual(AbstractResource newResource) { LoadBalancerDescription oldLoadBalancer = this.getResource(); Ec2LoadBalancer newEc2LoadBalancer = (Ec2LoadBalancer) newResource; LoadBalancerDescription newLoadBalancer = newEc2LoadBalancer.getResource(); if (notEqual(oldLoadBalancer.getLoadBalancerName(), newLoadBalancer.getLoadBalancerName())) return false; if (notEqual(oldLoadBalancer.getDNSName(), newLoadBalancer.getDNSName())) return false; if (notEqual(oldLoadBalancer.getCanonicalHostedZoneName(), newLoadBalancer.getCanonicalHostedZoneName())) return false; if (notEqual(oldLoadBalancer.getCanonicalHostedZoneNameID(), newLoadBalancer.getCanonicalHostedZoneNameID())) return false; if (notEqualListenerDescriptions(oldLoadBalancer.getListenerDescriptions(), newLoadBalancer.getListenerDescriptions())) return false; Policies oldPolicies = oldLoadBalancer.getPolicies(); Policies newPolicies = newLoadBalancer.getPolicies(); if (notEqualCollection(oldPolicies.getAppCookieStickinessPolicies(), newPolicies.getAppCookieStickinessPolicies())) return false; if (notEqualCollection(oldPolicies.getLBCookieStickinessPolicies(), newPolicies.getLBCookieStickinessPolicies())) return false; if (notEqualCollection(oldPolicies.getOtherPolicies(), newPolicies.getOtherPolicies())) return false; if (notBackendServerDescriptions(oldLoadBalancer.getBackendServerDescriptions(), newLoadBalancer.getBackendServerDescriptions())) return false; if (notEqualCollection(oldLoadBalancer.getAvailabilityZones(), newLoadBalancer.getAvailabilityZones())) return false; if (notEqualCollection(oldLoadBalancer.getSubnets(), newLoadBalancer.getSubnets())) return false; if (notEqual(oldLoadBalancer.getVPCId(), newLoadBalancer.getVPCId())) return false; if (notEqualCollection(oldLoadBalancer.getInstances(), newLoadBalancer.getInstances())) return false; if (notEqual(oldLoadBalancer.getHealthCheck(), newLoadBalancer.getHealthCheck())) return false; if (notEqual(oldLoadBalancer.getSourceSecurityGroup(), newLoadBalancer.getSourceSecurityGroup())) return false; if (notEqualCollection(oldLoadBalancer.getSecurityGroups(), newLoadBalancer.getSecurityGroups())) return false; if (notEqual(oldLoadBalancer.getCreatedTime(), newLoadBalancer.getCreatedTime())) return false; if (notEqual(oldLoadBalancer.getScheme(), newLoadBalancer.getScheme())) return false; return true; } public boolean notEqualListenerDescriptions(List<ListenerDescription> l1, List<ListenerDescription> l2) { for (ListenerDescription ld1 : l1) { Collections.sort(ld1.getPolicyNames()); } for (ListenerDescription ld2 : l2) { Collections.sort(ld2.getPolicyNames()); } return notEqualCollection(l1, l2); } public boolean notBackendServerDescriptions(List<BackendServerDescription> l1, List<BackendServerDescription> l2) { for (BackendServerDescription bsd1 : l1) { Collections.sort(bsd1.getPolicyNames()); } for (BackendServerDescription bsd2 : l2) { Collections.sort(bsd2.getPolicyNames()); } return notEqualCollection(l1, l2); } }