com.edmunds.etm.management.api.ManagementVips.java Source code

Java tutorial

Introduction

Here is the source code for com.edmunds.etm.management.api.ManagementVips.java

Source

/*
 * Copyright 2011 Edmunds.com, Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.edmunds.etm.management.api;

import com.google.common.collect.Sets;
import org.apache.commons.lang.Validate;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;

import java.util.Collection;
import java.util.Collections;
import java.util.Map;
import java.util.Set;

import static com.edmunds.etm.management.api.ManagementVip.MAVEN_MODULE_FUNCTION;
import static com.edmunds.etm.management.api.ManagementVip.MAVEN_MODULE_VALID;
import static com.edmunds.etm.management.api.ManagementVip.createSortedMap;
import static com.google.common.collect.Collections2.filter;

/**
 * Wrapper that contains the vips.
 *
 * @author David Trott
 * @author Ryan Holmes
 */
public class ManagementVips {
    public static final ManagementVips EMPTY_INSTANCE = new ManagementVips(ManagementVipType.COMPLETE,
            Collections.<ManagementVip>emptyList());

    private final Map<MavenModule, ManagementVip> vipsByMavenModule;
    private final int hashCode;
    private final ManagementVipType vipType;

    public ManagementVips(ManagementVipType vipType, Collection<ManagementVip> vips) {
        Validate.isTrue(filter(vips, vipType.getCannotContainVipPredicate()).isEmpty());

        this.vipType = vipType;
        vipsByMavenModule = createSortedMap(filter(vips, MAVEN_MODULE_VALID), MAVEN_MODULE_FUNCTION);
        hashCode = new HashCodeBuilder().append(vipsByMavenModule).toHashCode();
    }

    public ManagementVipType getVipType() {
        return vipType;
    }

    public ManagementVip getVip(MavenModule mavenModule) {
        return vipsByMavenModule.get(mavenModule);
    }

    /**
     * Fetches the collection of vips.
     *
     * @return the collection of vips
     */
    public Collection<ManagementVip> getVips() {
        return vipsByMavenModule.values();
    }

    /**
     * Returns a collection of vips that match the specified load balancer state.
     *
     * @param state the load balancer state to match
     * @return collection of matching vips
     */
    public Collection<ManagementVip> getVipsWithLoadBalancerState(ManagementLoadBalancerState state) {
        Set<ManagementVip> matchingVips = Sets.newHashSet();
        for (ManagementVip vip : getVips()) {
            if (vip.getLoadBalancerState() == state) {
                matchingVips.add(vip);
            }
        }
        return matchingVips;
    }

    /**
     * Adds the specified vips and returns the resulting ManagementVips object.
     * <p/>
     * This method does not modify the receiver, but instead creates a copy with the specified vips added.
     *
     * @param vips the vips to add
     * @return a new ManagementVips object
     */
    public ManagementVips addAll(Collection<ManagementVip> vips) {
        Set<ManagementVip> vipSet = Sets.newHashSet(getVips());
        vipSet.addAll(vips);
        return new ManagementVips(this.vipType, vipSet);
    }

    /**
     * Removes the specified vips and returns the resulting ManagementVips object.
     * <p/>
     * This method does not modify the receiver, but instead creates a copy with the specified vips removed.
     *
     * @param vips the vips to remove
     * @return a new ManagementVips object
     */
    public ManagementVips removeAll(Collection<ManagementVip> vips) {
        Set<ManagementVip> vipSet = Sets.newHashSet(getVips());
        vipSet.removeAll(vips);
        return new ManagementVips(this.vipType, vipSet);
    }

    public boolean containsChanges() {
        for (ManagementVip vip : getVips()) {
            if (vip.hasChanges()) {
                return true;
            }
        }
        return false;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }

        // Optimize using the hashCode.
        if (o == null || getClass() != o.getClass() || hashCode != o.hashCode()) {
            return false;
        }
        ManagementVips other = (ManagementVips) o;

        return new EqualsBuilder().append(vipsByMavenModule, other.vipsByMavenModule).isEquals();
    }

    @Override
    public int hashCode() {
        return hashCode;
    }
}