com.arakelian.elastic.doc.plugins.ImmutableComputeDigestConfig Maven / Gradle / Ivy
package com.arakelian.elastic.doc.plugins;
import com.arakelian.core.feature.Nullable;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.common.base.MoreObjects;
import com.google.common.collect.ImmutableSet;
import com.google.errorprone.annotations.CanIgnoreReturnValue;
import com.google.errorprone.annotations.Var;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.function.Predicate;
import javax.annotation.CheckReturnValue;
import javax.annotation.ParametersAreNonnullByDefault;
import javax.annotation.concurrent.Immutable;
import javax.annotation.concurrent.NotThreadSafe;
import org.immutables.value.Generated;
/**
* Immutable implementation of {@link ComputeDigestPlugin.ComputeDigestConfig}.
*
* Use the builder to create immutable instances:
* {@code ImmutableComputeDigestConfig.builder()}.
*/
@Generated(from = "ComputeDigestPlugin.ComputeDigestConfig", generator = "Immutables")
@SuppressWarnings({"all"})
@ParametersAreNonnullByDefault
@javax.annotation.Generated("org.immutables.processor.ProxyProcessor")
@Immutable
@CheckReturnValue
public final class ImmutableComputeDigestConfig
implements ComputeDigestPlugin.ComputeDigestConfig {
private final String algorithm;
private final ImmutableSet excludeFields;
private final String fieldName;
private final ImmutableSet includeFields;
private final Predicate predicate;
private final @Nullable String provider;
private ImmutableComputeDigestConfig(ImmutableComputeDigestConfig.Builder builder) {
this.fieldName = builder.fieldName;
this.provider = builder.provider;
if (builder.algorithm != null) {
initShim.algorithm(builder.algorithm);
}
if (builder.excludeFieldsIsSet()) {
initShim.excludeFields(builder.excludeFields.build());
}
if (builder.includeFieldsIsSet()) {
initShim.includeFields(builder.includeFields.build());
}
if (builder.predicate != null) {
initShim.predicate(builder.predicate);
}
this.algorithm = initShim.getAlgorithm();
this.excludeFields = initShim.getExcludeFields();
this.includeFields = initShim.getIncludeFields();
this.predicate = initShim.getPredicate();
this.initShim = null;
}
private static final byte STAGE_INITIALIZING = -1;
private static final byte STAGE_UNINITIALIZED = 0;
private static final byte STAGE_INITIALIZED = 1;
@SuppressWarnings("Immutable")
private transient volatile InitShim initShim = new InitShim();
@Generated(from = "ComputeDigestPlugin.ComputeDigestConfig", generator = "Immutables")
private final class InitShim {
private byte algorithmBuildStage = STAGE_UNINITIALIZED;
private String algorithm;
String getAlgorithm() {
if (algorithmBuildStage == STAGE_INITIALIZING) throw new IllegalStateException(formatInitCycleMessage());
if (algorithmBuildStage == STAGE_UNINITIALIZED) {
algorithmBuildStage = STAGE_INITIALIZING;
this.algorithm = Objects.requireNonNull(getAlgorithmInitialize(), "algorithm");
algorithmBuildStage = STAGE_INITIALIZED;
}
return this.algorithm;
}
void algorithm(String algorithm) {
this.algorithm = algorithm;
algorithmBuildStage = STAGE_INITIALIZED;
}
private byte excludeFieldsBuildStage = STAGE_UNINITIALIZED;
private ImmutableSet excludeFields;
ImmutableSet getExcludeFields() {
if (excludeFieldsBuildStage == STAGE_INITIALIZING) throw new IllegalStateException(formatInitCycleMessage());
if (excludeFieldsBuildStage == STAGE_UNINITIALIZED) {
excludeFieldsBuildStage = STAGE_INITIALIZING;
this.excludeFields = ImmutableSet.copyOf(getExcludeFieldsInitialize());
excludeFieldsBuildStage = STAGE_INITIALIZED;
}
return this.excludeFields;
}
void excludeFields(ImmutableSet excludeFields) {
this.excludeFields = excludeFields;
excludeFieldsBuildStage = STAGE_INITIALIZED;
}
private byte includeFieldsBuildStage = STAGE_UNINITIALIZED;
private ImmutableSet includeFields;
ImmutableSet getIncludeFields() {
if (includeFieldsBuildStage == STAGE_INITIALIZING) throw new IllegalStateException(formatInitCycleMessage());
if (includeFieldsBuildStage == STAGE_UNINITIALIZED) {
includeFieldsBuildStage = STAGE_INITIALIZING;
this.includeFields = ImmutableSet.copyOf(getIncludeFieldsInitialize());
includeFieldsBuildStage = STAGE_INITIALIZED;
}
return this.includeFields;
}
void includeFields(ImmutableSet includeFields) {
this.includeFields = includeFields;
includeFieldsBuildStage = STAGE_INITIALIZED;
}
private byte predicateBuildStage = STAGE_UNINITIALIZED;
private Predicate predicate;
Predicate getPredicate() {
if (predicateBuildStage == STAGE_INITIALIZING) throw new IllegalStateException(formatInitCycleMessage());
if (predicateBuildStage == STAGE_UNINITIALIZED) {
predicateBuildStage = STAGE_INITIALIZING;
this.predicate = Objects.requireNonNull(getPredicateInitialize(), "predicate");
predicateBuildStage = STAGE_INITIALIZED;
}
return this.predicate;
}
void predicate(Predicate predicate) {
this.predicate = predicate;
predicateBuildStage = STAGE_INITIALIZED;
}
private String formatInitCycleMessage() {
List attributes = new ArrayList<>();
if (algorithmBuildStage == STAGE_INITIALIZING) attributes.add("algorithm");
if (excludeFieldsBuildStage == STAGE_INITIALIZING) attributes.add("excludeFields");
if (includeFieldsBuildStage == STAGE_INITIALIZING) attributes.add("includeFields");
if (predicateBuildStage == STAGE_INITIALIZING) attributes.add("predicate");
return "Cannot build ComputeDigestConfig, attribute initializers form cycle " + attributes;
}
}
private String getAlgorithmInitialize() {
return ComputeDigestPlugin.ComputeDigestConfig.super.getAlgorithm();
}
private Set getExcludeFieldsInitialize() {
return ComputeDigestPlugin.ComputeDigestConfig.super.getExcludeFields();
}
private Set getIncludeFieldsInitialize() {
return ComputeDigestPlugin.ComputeDigestConfig.super.getIncludeFields();
}
private Predicate getPredicateInitialize() {
return ComputeDigestPlugin.ComputeDigestConfig.super.getPredicate();
}
/**
* @return The value of the {@code algorithm} attribute
*/
@JsonProperty("algorithm")
@Override
public String getAlgorithm() {
InitShim shim = this.initShim;
return shim != null
? shim.getAlgorithm()
: this.algorithm;
}
/**
* Returns a list of field names that should be excluded from the plugin.
* @return a list of field names that should be excluded from the plugin.
*/
@JsonProperty("excludeFields")
@Override
public ImmutableSet getExcludeFields() {
InitShim shim = this.initShim;
return shim != null
? shim.getExcludeFields()
: this.excludeFields;
}
/**
* @return The value of the {@code fieldName} attribute
*/
@JsonProperty("fieldName")
@Override
public String getFieldName() {
return fieldName;
}
/**
* Returns a list of field names that should be included by the plugin.
* @return a list of field names that should be included by the plugin.
*/
@JsonProperty("includeFields")
@Override
public ImmutableSet getIncludeFields() {
InitShim shim = this.initShim;
return shim != null
? shim.getIncludeFields()
: this.includeFields;
}
/**
* @return The value of the {@code predicate} attribute
*/
@JsonProperty("predicate")
@Override
public Predicate getPredicate() {
InitShim shim = this.initShim;
return shim != null
? shim.getPredicate()
: this.predicate;
}
/**
* @return The value of the {@code provider} attribute
*/
@JsonProperty("provider")
@Override
public @Nullable String getProvider() {
return provider;
}
/**
* This instance is equal to all instances of {@code ImmutableComputeDigestConfig} that have equal attribute values.
* @return {@code true} if {@code this} is equal to {@code another} instance
*/
@Override
public boolean equals(@javax.annotation.Nullable Object another) {
if (this == another) return true;
return another instanceof ImmutableComputeDigestConfig
&& equalTo((ImmutableComputeDigestConfig) another);
}
private boolean equalTo(ImmutableComputeDigestConfig another) {
return algorithm.equals(another.algorithm)
&& excludeFields.equals(another.excludeFields)
&& fieldName.equals(another.fieldName)
&& includeFields.equals(another.includeFields)
&& Objects.equals(provider, another.provider);
}
/**
* Computes a hash code from attributes: {@code algorithm}, {@code excludeFields}, {@code fieldName}, {@code includeFields}, {@code provider}.
* @return hashCode value
*/
@Override
public int hashCode() {
@Var int h = 5381;
h += (h << 5) + algorithm.hashCode();
h += (h << 5) + excludeFields.hashCode();
h += (h << 5) + fieldName.hashCode();
h += (h << 5) + includeFields.hashCode();
h += (h << 5) + Objects.hashCode(provider);
return h;
}
/**
* Prints the immutable value {@code ComputeDigestConfig} with attribute values.
* @return A string representation of the value
*/
@Override
public String toString() {
return MoreObjects.toStringHelper("ComputeDigestConfig")
.omitNullValues()
.add("algorithm", algorithm)
.add("excludeFields", excludeFields)
.add("fieldName", fieldName)
.add("includeFields", includeFields)
.add("provider", provider)
.toString();
}
/**
* Creates a builder for {@link ImmutableComputeDigestConfig ImmutableComputeDigestConfig}.
* @return A new ImmutableComputeDigestConfig builder
*/
public static ImmutableComputeDigestConfig.Builder builder() {
return new ImmutableComputeDigestConfig.Builder();
}
/**
* Builds instances of type {@link ImmutableComputeDigestConfig ImmutableComputeDigestConfig}.
* Initialize attributes and then invoke the {@link #build()} method to create an
* immutable instance.
* {@code Builder} is not thread-safe and generally should not be stored in a field or collection,
* but instead used immediately to create instances.
*/
@Generated(from = "ComputeDigestPlugin.ComputeDigestConfig", generator = "Immutables")
@NotThreadSafe
public static final class Builder {
private static final long INIT_BIT_FIELD_NAME = 0x1L;
private static final long OPT_BIT_EXCLUDE_FIELDS = 0x1L;
private static final long OPT_BIT_INCLUDE_FIELDS = 0x2L;
private long initBits = 0x1L;
private long optBits;
private @javax.annotation.Nullable String algorithm;
private ImmutableSet.Builder excludeFields = ImmutableSet.builder();
private @javax.annotation.Nullable String fieldName;
private ImmutableSet.Builder includeFields = ImmutableSet.builder();
private @javax.annotation.Nullable Predicate predicate;
private @javax.annotation.Nullable String provider;
private Builder() {
}
/**
* Fill a builder with attribute values from the provided {@code ComputeDigestConfig} instance.
* Regular attribute values will be replaced with those from the given instance.
* Absent optional values will not replace present values.
* Collection elements and entries will be added, not replaced.
* @param instance The instance from which to copy values
* @return {@code this} builder for use in a chained invocation
*/
@CanIgnoreReturnValue
public final Builder from(ComputeDigestPlugin.ComputeDigestConfig instance) {
Objects.requireNonNull(instance, "instance");
algorithm(instance.getAlgorithm());
addAllExcludeFields(instance.getExcludeFields());
fieldName(instance.getFieldName());
addAllIncludeFields(instance.getIncludeFields());
predicate(instance.getPredicate());
String providerValue = instance.getProvider();
if (providerValue != null) {
provider(providerValue);
}
return this;
}
/**
* Initializes the value for the {@link ComputeDigestPlugin.ComputeDigestConfig#getAlgorithm() algorithm} attribute.
* If not set, this attribute will have a default value as returned by the initializer of {@link ComputeDigestPlugin.ComputeDigestConfig#getAlgorithm() algorithm}.
* @param algorithm The value for algorithm
* @return {@code this} builder for use in a chained invocation
*/
@CanIgnoreReturnValue
@JsonProperty("algorithm")
public final Builder algorithm(String algorithm) {
this.algorithm = Objects.requireNonNull(algorithm, "algorithm");
return this;
}
/**
* Adds one element to {@link ComputeDigestPlugin.ComputeDigestConfig#getExcludeFields() excludeFields} set.
* @param element A excludeFields element
* @return {@code this} builder for use in a chained invocation
*/
@CanIgnoreReturnValue
public final Builder addExcludeField(String element) {
this.excludeFields.add(element);
optBits |= OPT_BIT_EXCLUDE_FIELDS;
return this;
}
/**
* Adds elements to {@link ComputeDigestPlugin.ComputeDigestConfig#getExcludeFields() excludeFields} set.
* @param elements An array of excludeFields elements
* @return {@code this} builder for use in a chained invocation
*/
@CanIgnoreReturnValue
public final Builder addExcludeFields(String... elements) {
this.excludeFields.add(elements);
optBits |= OPT_BIT_EXCLUDE_FIELDS;
return this;
}
/**
* Sets or replaces all elements for {@link ComputeDigestPlugin.ComputeDigestConfig#getExcludeFields() excludeFields} set.
* @param elements An iterable of excludeFields elements
* @return {@code this} builder for use in a chained invocation
*/
@CanIgnoreReturnValue
@JsonProperty("excludeFields")
public final Builder excludeFields(Iterable elements) {
this.excludeFields = ImmutableSet.builder();
return addAllExcludeFields(elements);
}
/**
* Adds elements to {@link ComputeDigestPlugin.ComputeDigestConfig#getExcludeFields() excludeFields} set.
* @param elements An iterable of excludeFields elements
* @return {@code this} builder for use in a chained invocation
*/
@CanIgnoreReturnValue
public final Builder addAllExcludeFields(Iterable elements) {
this.excludeFields.addAll(elements);
optBits |= OPT_BIT_EXCLUDE_FIELDS;
return this;
}
/**
* Initializes the value for the {@link ComputeDigestPlugin.ComputeDigestConfig#getFieldName() fieldName} attribute.
* @param fieldName The value for fieldName
* @return {@code this} builder for use in a chained invocation
*/
@CanIgnoreReturnValue
@JsonProperty("fieldName")
public final Builder fieldName(String fieldName) {
this.fieldName = Objects.requireNonNull(fieldName, "fieldName");
initBits &= ~INIT_BIT_FIELD_NAME;
return this;
}
/**
* Adds one element to {@link ComputeDigestPlugin.ComputeDigestConfig#getIncludeFields() includeFields} set.
* @param element A includeFields element
* @return {@code this} builder for use in a chained invocation
*/
@CanIgnoreReturnValue
public final Builder addIncludeField(String element) {
this.includeFields.add(element);
optBits |= OPT_BIT_INCLUDE_FIELDS;
return this;
}
/**
* Adds elements to {@link ComputeDigestPlugin.ComputeDigestConfig#getIncludeFields() includeFields} set.
* @param elements An array of includeFields elements
* @return {@code this} builder for use in a chained invocation
*/
@CanIgnoreReturnValue
public final Builder addIncludeFields(String... elements) {
this.includeFields.add(elements);
optBits |= OPT_BIT_INCLUDE_FIELDS;
return this;
}
/**
* Sets or replaces all elements for {@link ComputeDigestPlugin.ComputeDigestConfig#getIncludeFields() includeFields} set.
* @param elements An iterable of includeFields elements
* @return {@code this} builder for use in a chained invocation
*/
@CanIgnoreReturnValue
@JsonProperty("includeFields")
public final Builder includeFields(Iterable elements) {
this.includeFields = ImmutableSet.builder();
return addAllIncludeFields(elements);
}
/**
* Adds elements to {@link ComputeDigestPlugin.ComputeDigestConfig#getIncludeFields() includeFields} set.
* @param elements An iterable of includeFields elements
* @return {@code this} builder for use in a chained invocation
*/
@CanIgnoreReturnValue
public final Builder addAllIncludeFields(Iterable elements) {
this.includeFields.addAll(elements);
optBits |= OPT_BIT_INCLUDE_FIELDS;
return this;
}
/**
* Initializes the value for the {@link ComputeDigestPlugin.ComputeDigestConfig#getPredicate() predicate} attribute.
* If not set, this attribute will have a default value as returned by the initializer of {@link ComputeDigestPlugin.ComputeDigestConfig#getPredicate() predicate}.
* @param predicate The value for predicate
* @return {@code this} builder for use in a chained invocation
*/
@CanIgnoreReturnValue
@JsonProperty("predicate")
public final Builder predicate(Predicate predicate) {
this.predicate = Objects.requireNonNull(predicate, "predicate");
return this;
}
/**
* Initializes the value for the {@link ComputeDigestPlugin.ComputeDigestConfig#getProvider() provider} attribute.
* @param provider The value for provider (can be {@code null})
* @return {@code this} builder for use in a chained invocation
*/
@CanIgnoreReturnValue
@JsonProperty("provider")
public final Builder provider(@Nullable String provider) {
this.provider = provider;
return this;
}
/**
* Builds a new {@link ImmutableComputeDigestConfig ImmutableComputeDigestConfig}.
* @return An immutable instance of ComputeDigestConfig
* @throws java.lang.IllegalStateException if any required attributes are missing
*/
public ImmutableComputeDigestConfig build() {
if (initBits != 0) {
throw new IllegalStateException(formatRequiredAttributesMessage());
}
return new ImmutableComputeDigestConfig(this);
}
private boolean excludeFieldsIsSet() {
return (optBits & OPT_BIT_EXCLUDE_FIELDS) != 0;
}
private boolean includeFieldsIsSet() {
return (optBits & OPT_BIT_INCLUDE_FIELDS) != 0;
}
private String formatRequiredAttributesMessage() {
List attributes = new ArrayList<>();
if ((initBits & INIT_BIT_FIELD_NAME) != 0) attributes.add("fieldName");
return "Cannot build ComputeDigestConfig, some of required attributes are not set " + attributes;
}
}
}