com.eucalyptus.auth.euare.identity.region.RegionInfo.java Source code

Java tutorial

Introduction

Here is the source code for com.eucalyptus.auth.euare.identity.region.RegionInfo.java

Source

/*************************************************************************
 * Copyright 2009-2015 Eucalyptus Systems, Inc.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; version 3 of the License.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see http://www.gnu.org/licenses/.
 *
 * Please contact Eucalyptus Systems, Inc., 6755 Hollister Ave., Goleta
 * CA 93117, USA or visit http://www.eucalyptus.com/licenses/ if you need
 * additional information or have any questions.
 ************************************************************************/
package com.eucalyptus.auth.euare.identity.region;

import static org.hamcrest.Matchers.greaterThan;
import static org.hamcrest.Matchers.hasSize;
import static org.hamcrest.Matchers.not;
import static org.hamcrest.Matchers.notNullValue;
import static org.hamcrest.text.IsEmptyString.isEmptyOrNullString;
import java.util.Collection;
import java.util.Collections;
import java.util.Set;
import javax.annotation.Nonnull;
import com.eucalyptus.util.Cidr;
import com.eucalyptus.util.NonNullFunction;
import com.eucalyptus.util.Parameters;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Sets;

/**
 *
 */
public class RegionInfo {
    private final String name;
    private final Set<Integer> partitions;
    private final Set<RegionService> services;
    private final Set<Cidr> remoteCidrs;
    private final Set<Cidr> forwardedForCidrs;
    private final String certificateFingerprintDigest;
    private final String certificateFingerprint;
    private final String sslCertificateFingerprintDigest;
    private final String sslCertificateFingerprint;

    public RegionInfo(final String name, final Collection<Integer> partitions,
            final Collection<RegionService> services, final Set<Cidr> remoteCidrs,
            final Set<Cidr> forwardedForCidrs, final String certificateFingerprintDigest,
            final String certificateFingerprint, final String sslCertificateFingerprintDigest,
            final String sslCertificateFingerprint) {
        Parameters.checkParam("name", name, not(isEmptyOrNullString()));
        Parameters.checkParam("partitions", partitions, hasSize(greaterThan(0)));
        Parameters.checkParam("services", services, hasSize(greaterThan(0)));
        this.name = name;
        this.partitions = ImmutableSet.copyOf(Sets.newTreeSet(partitions));
        this.services = ImmutableSet.copyOf(Sets.newTreeSet(services));
        this.remoteCidrs = remoteCidrs;
        this.forwardedForCidrs = forwardedForCidrs;
        this.certificateFingerprintDigest = certificateFingerprintDigest;
        this.certificateFingerprint = certificateFingerprint;
        this.sslCertificateFingerprintDigest = sslCertificateFingerprintDigest;
        this.sslCertificateFingerprint = sslCertificateFingerprint;
    }

    public String getName() {
        return name;
    }

    public Set<Integer> getPartitions() {
        return partitions;
    }

    public Set<RegionService> getServices() {
        return services;
    }

    public Set<Cidr> getRemoteCidrs() {
        return remoteCidrs;
    }

    public Set<Cidr> getForwardedForCidrs() {
        return forwardedForCidrs;
    }

    public String getCertificateFingerprintDigest() {
        return certificateFingerprintDigest;
    }

    public String getCertificateFingerprint() {
        return certificateFingerprint;
    }

    public String getSslCertificateFingerprintDigest() {
        return sslCertificateFingerprintDigest;
    }

    public String getSslCertificateFingerprint() {
        return sslCertificateFingerprint;
    }

    public static NonNullFunction<RegionInfo, Set<String>> serviceEndpoints(@Nonnull final String serviceType) {
        Parameters.checkParam("serviceType", serviceType, notNullValue());
        return new NonNullFunction<RegionInfo, Set<String>>() {
            @Nonnull
            @Override
            public Set<String> apply(final RegionInfo regionInfo) {
                for (final RegionInfo.RegionService service : regionInfo.getServices()) {
                    if (serviceType.equals(service.getType())) {
                        return service.getEndpoints();
                    }
                }
                return Collections.emptySet();
            }
        };
    }

    public static class RegionService implements Comparable<RegionService> {
        private final String type;
        private final Set<String> endpoints;

        public RegionService(final String type, final Collection<String> endpoints) {
            Parameters.checkParam("type", type, not(isEmptyOrNullString()));
            Parameters.checkParam("endpoints", endpoints, hasSize(greaterThan(0)));
            this.type = type;
            this.endpoints = ImmutableSet.copyOf(Sets.newTreeSet(endpoints));
        }

        public String getType() {
            return type;
        }

        public Set<String> getEndpoints() {
            return endpoints;
        }

        @Override
        public boolean equals(final Object o) {
            if (this == o)
                return true;
            if (o == null || getClass() != o.getClass())
                return false;

            final RegionService that = (RegionService) o;

            return endpoints.equals(that.endpoints) && type.equals(that.type);
        }

        @Override
        public int hashCode() {
            int result = type.hashCode();
            result = 31 * result + endpoints.hashCode();
            return result;
        }

        @Override
        public int compareTo(@Nonnull final RegionService regionService) {
            return type.compareTo(regionService.type);
        }
    }
}