Java tutorial
/************************************************************************* * 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); } } }