public boolean compare()

in plugins/network-elements/juniper-contrail/src/main/java/org/apache/cloudstack/network/contrail/model/VirtualNetworkModel.java [446:561]


    public boolean compare(ModelController controller, ModelObject o) {
        VirtualNetworkModel latest;
        assert _vn != null : "vnc virtual network current is not initialized";

        try {
            latest = (VirtualNetworkModel)o;
        } catch (ClassCastException ex) {
            logger.warn("Invalid model object is passed to cast to VirtualNetworkModel");
            return false;
        }

        try {
            latest.read(controller);
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
        assert latest._vn != null : "vnc virtual network new is not initialized";

        List<ObjectReference<VnSubnetsType>> currentIpamRefs = _vn.getNetworkIpam();
        List<ObjectReference<VnSubnetsType>> newIpamRefs = latest._vn.getNetworkIpam();
        List<String> currentSubnets = new ArrayList<String>();
        List<String> newSubnets = new ArrayList<String>();

        if ((currentIpamRefs == null && newIpamRefs != null) || (currentIpamRefs != null && newIpamRefs == null)) {  //Check for existence only
            logger.debug("ipams differ: current=" + currentIpamRefs + ", new=" + newIpamRefs);
            return false;
        }
        if (currentIpamRefs == null) {
            return true;
        }

        for (ObjectReference<VnSubnetsType> ref : currentIpamRefs) {
            VnSubnetsType vnSubnetType = ref.getAttr();
            if (vnSubnetType != null) {
                List<VnSubnetsType.IpamSubnetType> subnets = vnSubnetType.getIpamSubnets();
                if (subnets != null && !subnets.isEmpty()) {
                    VnSubnetsType.IpamSubnetType ipamSubnet = subnets.get(0);
                    currentSubnets.add(ipamSubnet.getDefaultGateway() + ipamSubnet.getSubnet().getIpPrefix() + "/" + ipamSubnet.getSubnet().getIpPrefixLen());
                }
            }
        }

        for (ObjectReference<VnSubnetsType> ref : newIpamRefs) {
            VnSubnetsType vnSubnetType = ref.getAttr();
            if (vnSubnetType != null) {
                List<VnSubnetsType.IpamSubnetType> subnets = vnSubnetType.getIpamSubnets();
                if (subnets != null && !subnets.isEmpty()) {
                    VnSubnetsType.IpamSubnetType ipamSubnet = subnets.get(0);
                    newSubnets.add(ipamSubnet.getDefaultGateway() + ipamSubnet.getSubnet().getIpPrefix() + "/" + ipamSubnet.getSubnet().getIpPrefixLen());
                }
            }
        }

        Set<String> diff = new HashSet<String>(currentSubnets);
        diff.removeAll(newSubnets);

        if (!diff.isEmpty()) {
            logger.debug(String.format("Subnets differ, network: [id: %d, uuid: %s, name: %s]; db: %s, vnc: %s, diff: %s", _id, _uuid, _name, currentSubnets, newSubnets, diff));
            return false;
        }

        List<ObjectReference<VirtualNetworkPolicyType>> currentPolicyRefs = _vn.getNetworkPolicy();
        List<ObjectReference<VirtualNetworkPolicyType>> latestPolicyRefs = latest._vn.getNetworkPolicy();

        if (currentPolicyRefs == null && latestPolicyRefs == null) {
            return true;
        }

        if ((currentPolicyRefs == null && latestPolicyRefs != null) || (currentPolicyRefs != null
                && latestPolicyRefs == null)) {
            return false;
        }

        if ((currentPolicyRefs != null && latestPolicyRefs != null) && (currentPolicyRefs.size() != latestPolicyRefs.size())) {
            return false;
        }

        if ((currentPolicyRefs != null && latestPolicyRefs != null) &&  currentPolicyRefs.isEmpty()
                && latestPolicyRefs.isEmpty()) {
            return true;
        }

        //both must be non empty lists
        ObjectReference<VirtualNetworkPolicyType> ref1 = null;

        if (currentPolicyRefs != null) {
            ref1 = currentPolicyRefs.get(0);
        }

        ObjectReference<VirtualNetworkPolicyType> ref2 = null;

        if (latestPolicyRefs != null) {
            ref2 = latestPolicyRefs.get(0);
        }

        if (ref1 == null && ref2 == null) {
            return true;
        }

        if ((ref1 != null && ref2 == null) || (ref1 == null && ref2 != null)) {
            return false;
        }

        if ((ref1 != null && ref2 != null) && ((ref1.getUuid() != null && ref2.getUuid() == null)
                || (ref1.getUuid() == null && ref2.getUuid() != null))) {
            return false;
        }
        if ((ref1 != null && ref2 != null) && (ref1.getUuid() == null && ref2.getUuid() == null)) {
            return true;
        }
        if ((ref1 != null && ref2 != null) && !ref1.getUuid().equals(ref2.getUuid())) {
            return false;
        }
        return true;
    }