software.amazon.awssdk.services.cloudfront.model.GeoRestriction Maven / Gradle / Ivy
Show all versions of cloudfront Show documentation
/*
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance with
* the License. A copy of the License is located at
*
* http://aws.amazon.com/apache2.0
*
* or in the "license" file accompanying this file. This file 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 software.amazon.awssdk.services.cloudfront.model;
import java.io.Serializable;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.function.BiConsumer;
import java.util.function.Function;
import software.amazon.awssdk.annotations.Generated;
import software.amazon.awssdk.core.SdkField;
import software.amazon.awssdk.core.SdkPojo;
import software.amazon.awssdk.core.protocol.MarshallLocation;
import software.amazon.awssdk.core.protocol.MarshallingType;
import software.amazon.awssdk.core.traits.ListTrait;
import software.amazon.awssdk.core.traits.LocationTrait;
import software.amazon.awssdk.core.util.DefaultSdkAutoConstructList;
import software.amazon.awssdk.core.util.SdkAutoConstructList;
import software.amazon.awssdk.utils.ToString;
import software.amazon.awssdk.utils.builder.CopyableBuilder;
import software.amazon.awssdk.utils.builder.ToCopyableBuilder;
/**
*
* A complex type that controls the countries in which your content is distributed. CloudFront determines the location
* of your users using MaxMind
GeoIP databases.
*
*/
@Generated("software.amazon.awssdk:codegen")
public final class GeoRestriction implements SdkPojo, Serializable, ToCopyableBuilder {
private static final SdkField RESTRICTION_TYPE_FIELD = SdkField
. builder(MarshallingType.STRING)
.memberName("RestrictionType")
.getter(getter(GeoRestriction::restrictionTypeAsString))
.setter(setter(Builder::restrictionType))
.traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("RestrictionType")
.unmarshallLocationName("RestrictionType").build()).build();
private static final SdkField QUANTITY_FIELD = SdkField
. builder(MarshallingType.INTEGER)
.memberName("Quantity")
.getter(getter(GeoRestriction::quantity))
.setter(setter(Builder::quantity))
.traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("Quantity")
.unmarshallLocationName("Quantity").build()).build();
private static final SdkField> ITEMS_FIELD = SdkField
.> builder(MarshallingType.LIST)
.memberName("Items")
.getter(getter(GeoRestriction::items))
.setter(setter(Builder::items))
.traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("Items")
.unmarshallLocationName("Items").build(),
ListTrait
.builder()
.memberLocationName("Location")
.memberFieldInfo(
SdkField. builder(MarshallingType.STRING)
.traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD)
.locationName("Location").unmarshallLocationName("Location").build()).build())
.build()).build();
private static final List> SDK_FIELDS = Collections.unmodifiableList(Arrays.asList(RESTRICTION_TYPE_FIELD,
QUANTITY_FIELD, ITEMS_FIELD));
private static final long serialVersionUID = 1L;
private final String restrictionType;
private final Integer quantity;
private final List items;
private GeoRestriction(BuilderImpl builder) {
this.restrictionType = builder.restrictionType;
this.quantity = builder.quantity;
this.items = builder.items;
}
/**
*
* The method that you want to use to restrict distribution of your content by country:
*
*
* -
*
* none
: No geo restriction is enabled, meaning access to content is not restricted by client geo
* location.
*
*
* -
*
* blacklist
: The Location
elements specify the countries in which you don't want
* CloudFront to distribute your content.
*
*
* -
*
* whitelist
: The Location
elements specify the countries in which you want CloudFront to
* distribute your content.
*
*
*
*
* If the service returns an enum value that is not available in the current SDK version, {@link #restrictionType}
* will return {@link GeoRestrictionType#UNKNOWN_TO_SDK_VERSION}. The raw value returned by the service is available
* from {@link #restrictionTypeAsString}.
*
*
* @return The method that you want to use to restrict distribution of your content by country:
*
* -
*
* none
: No geo restriction is enabled, meaning access to content is not restricted by client
* geo location.
*
*
* -
*
* blacklist
: The Location
elements specify the countries in which you don't want
* CloudFront to distribute your content.
*
*
* -
*
* whitelist
: The Location
elements specify the countries in which you want
* CloudFront to distribute your content.
*
*
* @see GeoRestrictionType
*/
public final GeoRestrictionType restrictionType() {
return GeoRestrictionType.fromValue(restrictionType);
}
/**
*
* The method that you want to use to restrict distribution of your content by country:
*
*
* -
*
* none
: No geo restriction is enabled, meaning access to content is not restricted by client geo
* location.
*
*
* -
*
* blacklist
: The Location
elements specify the countries in which you don't want
* CloudFront to distribute your content.
*
*
* -
*
* whitelist
: The Location
elements specify the countries in which you want CloudFront to
* distribute your content.
*
*
*
*
* If the service returns an enum value that is not available in the current SDK version, {@link #restrictionType}
* will return {@link GeoRestrictionType#UNKNOWN_TO_SDK_VERSION}. The raw value returned by the service is available
* from {@link #restrictionTypeAsString}.
*
*
* @return The method that you want to use to restrict distribution of your content by country:
*
* -
*
* none
: No geo restriction is enabled, meaning access to content is not restricted by client
* geo location.
*
*
* -
*
* blacklist
: The Location
elements specify the countries in which you don't want
* CloudFront to distribute your content.
*
*
* -
*
* whitelist
: The Location
elements specify the countries in which you want
* CloudFront to distribute your content.
*
*
* @see GeoRestrictionType
*/
public final String restrictionTypeAsString() {
return restrictionType;
}
/**
*
* When geo restriction is enabled
, this is the number of countries in your whitelist
or
* blacklist
. Otherwise, when it is not enabled, Quantity
is 0
, and you can
* omit Items
.
*
*
* @return When geo restriction is enabled
, this is the number of countries in your
* whitelist
or blacklist
. Otherwise, when it is not enabled,
* Quantity
is 0
, and you can omit Items
.
*/
public final Integer quantity() {
return quantity;
}
/**
* For responses, this returns true if the service returned a value for the Items property. This DOES NOT check that
* the value is non-empty (for which, you should check the {@code isEmpty()} method on the property). This is useful
* because the SDK will never return a null collection or map, but you may need to differentiate between the service
* returning nothing (or null) and the service returning an empty collection or map. For requests, this returns true
* if a value for the property was specified in the request builder, and false if a value was not specified.
*/
public final boolean hasItems() {
return items != null && !(items instanceof SdkAutoConstructList);
}
/**
*
* A complex type that contains a Location
element for each country in which you want CloudFront either
* to distribute your content (whitelist
) or not distribute your content (blacklist
).
*
*
* The Location
element is a two-letter, uppercase country code for a country that you want to include
* in your blacklist
or whitelist
. Include one Location
element for each
* country.
*
*
* CloudFront and MaxMind
both use ISO 3166
country codes. For the current list of
* countries and the corresponding codes, see ISO 3166-1-alpha-2
code on the International
* Organization for Standardization website. You can also refer to the country list on the CloudFront console,
* which includes both country names and codes.
*
*
* Attempts to modify the collection returned by this method will result in an UnsupportedOperationException.
*
*
* This method will never return null. If you would like to know whether the service returned this field (so that
* you can differentiate between null and empty), you can use the {@link #hasItems} method.
*
*
* @return A complex type that contains a Location
element for each country in which you want
* CloudFront either to distribute your content (whitelist
) or not distribute your content (
* blacklist
).
*
* The Location
element is a two-letter, uppercase country code for a country that you want to
* include in your blacklist
or whitelist
. Include one Location
* element for each country.
*
*
* CloudFront and MaxMind
both use ISO 3166
country codes. For the current list of
* countries and the corresponding codes, see ISO 3166-1-alpha-2
code on the International
* Organization for Standardization website. You can also refer to the country list on the CloudFront
* console, which includes both country names and codes.
*/
public final List items() {
return items;
}
@Override
public Builder toBuilder() {
return new BuilderImpl(this);
}
public static Builder builder() {
return new BuilderImpl();
}
public static Class serializableBuilderClass() {
return BuilderImpl.class;
}
@Override
public final int hashCode() {
int hashCode = 1;
hashCode = 31 * hashCode + Objects.hashCode(restrictionTypeAsString());
hashCode = 31 * hashCode + Objects.hashCode(quantity());
hashCode = 31 * hashCode + Objects.hashCode(hasItems() ? items() : null);
return hashCode;
}
@Override
public final boolean equals(Object obj) {
return equalsBySdkFields(obj);
}
@Override
public final boolean equalsBySdkFields(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (!(obj instanceof GeoRestriction)) {
return false;
}
GeoRestriction other = (GeoRestriction) obj;
return Objects.equals(restrictionTypeAsString(), other.restrictionTypeAsString())
&& Objects.equals(quantity(), other.quantity()) && hasItems() == other.hasItems()
&& Objects.equals(items(), other.items());
}
/**
* Returns a string representation of this object. This is useful for testing and debugging. Sensitive data will be
* redacted from this string using a placeholder value.
*/
@Override
public final String toString() {
return ToString.builder("GeoRestriction").add("RestrictionType", restrictionTypeAsString()).add("Quantity", quantity())
.add("Items", hasItems() ? items() : null).build();
}
public final Optional getValueForField(String fieldName, Class clazz) {
switch (fieldName) {
case "RestrictionType":
return Optional.ofNullable(clazz.cast(restrictionTypeAsString()));
case "Quantity":
return Optional.ofNullable(clazz.cast(quantity()));
case "Items":
return Optional.ofNullable(clazz.cast(items()));
default:
return Optional.empty();
}
}
@Override
public final List> sdkFields() {
return SDK_FIELDS;
}
private static Function
*
* -
*
* none
: No geo restriction is enabled, meaning access to content is not restricted by
* client geo location.
*
*
* -
*
* blacklist
: The Location
elements specify the countries in which you don't
* want CloudFront to distribute your content.
*
*
* -
*
* whitelist
: The Location
elements specify the countries in which you want
* CloudFront to distribute your content.
*
*
* @see GeoRestrictionType
* @return Returns a reference to this object so that method calls can be chained together.
* @see GeoRestrictionType
*/
Builder restrictionType(String restrictionType);
/**
*
* The method that you want to use to restrict distribution of your content by country:
*
*
* -
*
* none
: No geo restriction is enabled, meaning access to content is not restricted by client geo
* location.
*
*
* -
*
* blacklist
: The Location
elements specify the countries in which you don't want
* CloudFront to distribute your content.
*
*
* -
*
* whitelist
: The Location
elements specify the countries in which you want CloudFront
* to distribute your content.
*
*
*
*
* @param restrictionType
* The method that you want to use to restrict distribution of your content by country:
*
* -
*
* none
: No geo restriction is enabled, meaning access to content is not restricted by
* client geo location.
*
*
* -
*
* blacklist
: The Location
elements specify the countries in which you don't
* want CloudFront to distribute your content.
*
*
* -
*
* whitelist
: The Location
elements specify the countries in which you want
* CloudFront to distribute your content.
*
*
* @see GeoRestrictionType
* @return Returns a reference to this object so that method calls can be chained together.
* @see GeoRestrictionType
*/
Builder restrictionType(GeoRestrictionType restrictionType);
/**
*
* When geo restriction is enabled
, this is the number of countries in your whitelist
* or blacklist
. Otherwise, when it is not enabled, Quantity
is 0
, and
* you can omit Items
.
*
*
* @param quantity
* When geo restriction is enabled
, this is the number of countries in your
* whitelist
or blacklist
. Otherwise, when it is not enabled,
* Quantity
is 0
, and you can omit Items
.
* @return Returns a reference to this object so that method calls can be chained together.
*/
Builder quantity(Integer quantity);
/**
*
* A complex type that contains a Location
element for each country in which you want CloudFront
* either to distribute your content (whitelist
) or not distribute your content (
* blacklist
).
*
*
* The Location
element is a two-letter, uppercase country code for a country that you want to
* include in your blacklist
or whitelist
. Include one Location
element
* for each country.
*
*
* CloudFront and MaxMind
both use ISO 3166
country codes. For the current list of
* countries and the corresponding codes, see ISO 3166-1-alpha-2
code on the International
* Organization for Standardization website. You can also refer to the country list on the CloudFront
* console, which includes both country names and codes.
*
*
* @param items
* A complex type that contains a Location
element for each country in which you want
* CloudFront either to distribute your content (whitelist
) or not distribute your content (
* blacklist
).
*
* The Location
element is a two-letter, uppercase country code for a country that you want
* to include in your blacklist
or whitelist
. Include one Location
* element for each country.
*
*
* CloudFront and MaxMind
both use ISO 3166
country codes. For the current list
* of countries and the corresponding codes, see ISO 3166-1-alpha-2
code on the
* International Organization for Standardization website. You can also refer to the country list
* on the CloudFront console, which includes both country names and codes.
* @return Returns a reference to this object so that method calls can be chained together.
*/
Builder items(Collection items);
/**
*
* A complex type that contains a Location
element for each country in which you want CloudFront
* either to distribute your content (whitelist
) or not distribute your content (
* blacklist
).
*
*
* The Location
element is a two-letter, uppercase country code for a country that you want to
* include in your blacklist
or whitelist
. Include one Location
element
* for each country.
*
*
* CloudFront and MaxMind
both use ISO 3166
country codes. For the current list of
* countries and the corresponding codes, see ISO 3166-1-alpha-2
code on the International
* Organization for Standardization website. You can also refer to the country list on the CloudFront
* console, which includes both country names and codes.
*
*
* @param items
* A complex type that contains a Location
element for each country in which you want
* CloudFront either to distribute your content (whitelist
) or not distribute your content (
* blacklist
).
*
* The Location
element is a two-letter, uppercase country code for a country that you want
* to include in your blacklist
or whitelist
. Include one Location
* element for each country.
*
*
* CloudFront and MaxMind
both use ISO 3166
country codes. For the current list
* of countries and the corresponding codes, see ISO 3166-1-alpha-2
code on the
* International Organization for Standardization website. You can also refer to the country list
* on the CloudFront console, which includes both country names and codes.
* @return Returns a reference to this object so that method calls can be chained together.
*/
Builder items(String... items);
}
static final class BuilderImpl implements Builder {
private String restrictionType;
private Integer quantity;
private List items = DefaultSdkAutoConstructList.getInstance();
private BuilderImpl() {
}
private BuilderImpl(GeoRestriction model) {
restrictionType(model.restrictionType);
quantity(model.quantity);
items(model.items);
}
public final String getRestrictionType() {
return restrictionType;
}
public final void setRestrictionType(String restrictionType) {
this.restrictionType = restrictionType;
}
@Override
public final Builder restrictionType(String restrictionType) {
this.restrictionType = restrictionType;
return this;
}
@Override
public final Builder restrictionType(GeoRestrictionType restrictionType) {
this.restrictionType(restrictionType == null ? null : restrictionType.toString());
return this;
}
public final Integer getQuantity() {
return quantity;
}
public final void setQuantity(Integer quantity) {
this.quantity = quantity;
}
@Override
public final Builder quantity(Integer quantity) {
this.quantity = quantity;
return this;
}
public final Collection getItems() {
if (items instanceof SdkAutoConstructList) {
return null;
}
return items;
}
public final void setItems(Collection items) {
this.items = LocationListCopier.copy(items);
}
@Override
public final Builder items(Collection items) {
this.items = LocationListCopier.copy(items);
return this;
}
@Override
@SafeVarargs
public final Builder items(String... items) {
items(Arrays.asList(items));
return this;
}
@Override
public GeoRestriction build() {
return new GeoRestriction(this);
}
@Override
public List> sdkFields() {
return SDK_FIELDS;
}
}
}