com.arakelian.elastic.model.ImmutableElasticDocConfig Maven / Gradle / Ivy
package com.arakelian.elastic.model;
import com.arakelian.elastic.doc.JsonNodeFunction;
import com.arakelian.elastic.doc.ValueProducer;
import com.arakelian.elastic.doc.plugins.ElasticDocBuilderPlugin;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.google.common.base.MoreObjects;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableMultimap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.LinkedHashMultimap;
import com.google.common.collect.Multimap;
import com.google.errorprone.annotations.CanIgnoreReturnValue;
import com.google.errorprone.annotations.Var;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import javax.annotation.CheckReturnValue;
import javax.annotation.Nullable;
import javax.annotation.ParametersAreNonnullByDefault;
import javax.annotation.concurrent.Immutable;
import javax.annotation.concurrent.NotThreadSafe;
import org.immutables.value.Generated;
/**
* Immutable implementation of {@link ElasticDocConfig}.
*
* Use the builder to create immutable instances:
* {@code ImmutableElasticDocConfig.builder()}.
*/
@Generated(from = "ElasticDocConfig", generator = "Immutables")
@SuppressWarnings({"all"})
@ParametersAreNonnullByDefault
@javax.annotation.processing.Generated("org.immutables.processor.ProxyProcessor")
@Immutable
@CheckReturnValue
public final class ImmutableElasticDocConfig extends ElasticDocConfig {
private final ImmutableMap functions;
private final ImmutableSet identityFields;
private final Mapping mapping;
private final ObjectMapper objectMapper;
private final ImmutableList plugins;
private transient final Set sourcePaths;
private final ImmutableMultimap targets;
private final ValueProducer valueProducer;
private final boolean compact;
private final boolean ignoreMissingAdditionalTargets;
private final boolean ignoreMissingFields;
private ImmutableElasticDocConfig(ImmutableElasticDocConfig.Builder builder) {
this.mapping = builder.mapping;
if (builder.functionsIsSet()) {
initShim.functions(builder.functions.build());
}
if (builder.identityFieldsIsSet()) {
initShim.identityFields(builder.identityFields.build());
}
if (builder.objectMapper != null) {
initShim.objectMapper(builder.objectMapper);
}
if (builder.pluginsIsSet()) {
initShim.plugins(builder.plugins.build());
}
if (builder.targetsIsSet()) {
initShim.targets(builder.targets.build());
}
if (builder.valueProducer != null) {
initShim.valueProducer(builder.valueProducer);
}
if (builder.compactIsSet()) {
initShim.compact(builder.compact);
}
if (builder.ignoreMissingAdditionalTargetsIsSet()) {
initShim.ignoreMissingAdditionalTargets(builder.ignoreMissingAdditionalTargets);
}
if (builder.ignoreMissingFieldsIsSet()) {
initShim.ignoreMissingFields(builder.ignoreMissingFields);
}
this.functions = initShim.getFunctions();
this.identityFields = initShim.getIdentityFields();
this.objectMapper = initShim.getObjectMapper();
this.plugins = initShim.getPlugins();
this.sourcePaths = initShim.getSourcePaths();
this.targets = initShim.getTargets();
this.valueProducer = initShim.getValueProducer();
this.compact = initShim.isCompact();
this.ignoreMissingAdditionalTargets = initShim.isIgnoreMissingAdditionalTargets();
this.ignoreMissingFields = initShim.isIgnoreMissingFields();
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 = "ElasticDocConfig", generator = "Immutables")
private final class InitShim {
private byte functionsBuildStage = STAGE_UNINITIALIZED;
private ImmutableMap functions;
ImmutableMap getFunctions() {
if (functionsBuildStage == STAGE_INITIALIZING) throw new IllegalStateException(formatInitCycleMessage());
if (functionsBuildStage == STAGE_UNINITIALIZED) {
functionsBuildStage = STAGE_INITIALIZING;
this.functions = ImmutableMap.copyOf(ImmutableElasticDocConfig.super.getFunctions());
functionsBuildStage = STAGE_INITIALIZED;
}
return this.functions;
}
void functions(ImmutableMap functions) {
this.functions = functions;
functionsBuildStage = STAGE_INITIALIZED;
}
private byte identityFieldsBuildStage = STAGE_UNINITIALIZED;
private ImmutableSet identityFields;
ImmutableSet getIdentityFields() {
if (identityFieldsBuildStage == STAGE_INITIALIZING) throw new IllegalStateException(formatInitCycleMessage());
if (identityFieldsBuildStage == STAGE_UNINITIALIZED) {
identityFieldsBuildStage = STAGE_INITIALIZING;
this.identityFields = ImmutableSet.copyOf(ImmutableElasticDocConfig.super.getIdentityFields());
identityFieldsBuildStage = STAGE_INITIALIZED;
}
return this.identityFields;
}
void identityFields(ImmutableSet identityFields) {
this.identityFields = identityFields;
identityFieldsBuildStage = STAGE_INITIALIZED;
}
private byte objectMapperBuildStage = STAGE_UNINITIALIZED;
private ObjectMapper objectMapper;
ObjectMapper getObjectMapper() {
if (objectMapperBuildStage == STAGE_INITIALIZING) throw new IllegalStateException(formatInitCycleMessage());
if (objectMapperBuildStage == STAGE_UNINITIALIZED) {
objectMapperBuildStage = STAGE_INITIALIZING;
this.objectMapper = Objects.requireNonNull(ImmutableElasticDocConfig.super.getObjectMapper(), "objectMapper");
objectMapperBuildStage = STAGE_INITIALIZED;
}
return this.objectMapper;
}
void objectMapper(ObjectMapper objectMapper) {
this.objectMapper = objectMapper;
objectMapperBuildStage = STAGE_INITIALIZED;
}
private byte pluginsBuildStage = STAGE_UNINITIALIZED;
private ImmutableList plugins;
ImmutableList getPlugins() {
if (pluginsBuildStage == STAGE_INITIALIZING) throw new IllegalStateException(formatInitCycleMessage());
if (pluginsBuildStage == STAGE_UNINITIALIZED) {
pluginsBuildStage = STAGE_INITIALIZING;
this.plugins = ImmutableList.copyOf(ImmutableElasticDocConfig.super.getPlugins());
pluginsBuildStage = STAGE_INITIALIZED;
}
return this.plugins;
}
void plugins(ImmutableList plugins) {
this.plugins = plugins;
pluginsBuildStage = STAGE_INITIALIZED;
}
private byte sourcePathsBuildStage = STAGE_UNINITIALIZED;
private Set sourcePaths;
Set getSourcePaths() {
if (sourcePathsBuildStage == STAGE_INITIALIZING) throw new IllegalStateException(formatInitCycleMessage());
if (sourcePathsBuildStage == STAGE_UNINITIALIZED) {
sourcePathsBuildStage = STAGE_INITIALIZING;
this.sourcePaths = Objects.requireNonNull(ImmutableElasticDocConfig.super.getSourcePaths(), "sourcePaths");
sourcePathsBuildStage = STAGE_INITIALIZED;
}
return this.sourcePaths;
}
private byte targetsBuildStage = STAGE_UNINITIALIZED;
private ImmutableMultimap targets;
ImmutableMultimap getTargets() {
if (targetsBuildStage == STAGE_INITIALIZING) throw new IllegalStateException(formatInitCycleMessage());
if (targetsBuildStage == STAGE_UNINITIALIZED) {
targetsBuildStage = STAGE_INITIALIZING;
this.targets = ImmutableMultimap.copyOf(ImmutableElasticDocConfig.super.getTargets());
targetsBuildStage = STAGE_INITIALIZED;
}
return this.targets;
}
void targets(ImmutableMultimap targets) {
this.targets = targets;
targetsBuildStage = STAGE_INITIALIZED;
}
private byte valueProducerBuildStage = STAGE_UNINITIALIZED;
private ValueProducer valueProducer;
ValueProducer getValueProducer() {
if (valueProducerBuildStage == STAGE_INITIALIZING) throw new IllegalStateException(formatInitCycleMessage());
if (valueProducerBuildStage == STAGE_UNINITIALIZED) {
valueProducerBuildStage = STAGE_INITIALIZING;
this.valueProducer = Objects.requireNonNull(ImmutableElasticDocConfig.super.getValueProducer(), "valueProducer");
valueProducerBuildStage = STAGE_INITIALIZED;
}
return this.valueProducer;
}
void valueProducer(ValueProducer valueProducer) {
this.valueProducer = valueProducer;
valueProducerBuildStage = STAGE_INITIALIZED;
}
private byte compactBuildStage = STAGE_UNINITIALIZED;
private boolean compact;
boolean isCompact() {
if (compactBuildStage == STAGE_INITIALIZING) throw new IllegalStateException(formatInitCycleMessage());
if (compactBuildStage == STAGE_UNINITIALIZED) {
compactBuildStage = STAGE_INITIALIZING;
this.compact = ImmutableElasticDocConfig.super.isCompact();
compactBuildStage = STAGE_INITIALIZED;
}
return this.compact;
}
void compact(boolean compact) {
this.compact = compact;
compactBuildStage = STAGE_INITIALIZED;
}
private byte ignoreMissingAdditionalTargetsBuildStage = STAGE_UNINITIALIZED;
private boolean ignoreMissingAdditionalTargets;
boolean isIgnoreMissingAdditionalTargets() {
if (ignoreMissingAdditionalTargetsBuildStage == STAGE_INITIALIZING) throw new IllegalStateException(formatInitCycleMessage());
if (ignoreMissingAdditionalTargetsBuildStage == STAGE_UNINITIALIZED) {
ignoreMissingAdditionalTargetsBuildStage = STAGE_INITIALIZING;
this.ignoreMissingAdditionalTargets = ImmutableElasticDocConfig.super.isIgnoreMissingAdditionalTargets();
ignoreMissingAdditionalTargetsBuildStage = STAGE_INITIALIZED;
}
return this.ignoreMissingAdditionalTargets;
}
void ignoreMissingAdditionalTargets(boolean ignoreMissingAdditionalTargets) {
this.ignoreMissingAdditionalTargets = ignoreMissingAdditionalTargets;
ignoreMissingAdditionalTargetsBuildStage = STAGE_INITIALIZED;
}
private byte ignoreMissingFieldsBuildStage = STAGE_UNINITIALIZED;
private boolean ignoreMissingFields;
boolean isIgnoreMissingFields() {
if (ignoreMissingFieldsBuildStage == STAGE_INITIALIZING) throw new IllegalStateException(formatInitCycleMessage());
if (ignoreMissingFieldsBuildStage == STAGE_UNINITIALIZED) {
ignoreMissingFieldsBuildStage = STAGE_INITIALIZING;
this.ignoreMissingFields = ImmutableElasticDocConfig.super.isIgnoreMissingFields();
ignoreMissingFieldsBuildStage = STAGE_INITIALIZED;
}
return this.ignoreMissingFields;
}
void ignoreMissingFields(boolean ignoreMissingFields) {
this.ignoreMissingFields = ignoreMissingFields;
ignoreMissingFieldsBuildStage = STAGE_INITIALIZED;
}
private String formatInitCycleMessage() {
List attributes = new ArrayList<>();
if (functionsBuildStage == STAGE_INITIALIZING) attributes.add("functions");
if (identityFieldsBuildStage == STAGE_INITIALIZING) attributes.add("identityFields");
if (objectMapperBuildStage == STAGE_INITIALIZING) attributes.add("objectMapper");
if (pluginsBuildStage == STAGE_INITIALIZING) attributes.add("plugins");
if (sourcePathsBuildStage == STAGE_INITIALIZING) attributes.add("sourcePaths");
if (targetsBuildStage == STAGE_INITIALIZING) attributes.add("targets");
if (valueProducerBuildStage == STAGE_INITIALIZING) attributes.add("valueProducer");
if (compactBuildStage == STAGE_INITIALIZING) attributes.add("compact");
if (ignoreMissingAdditionalTargetsBuildStage == STAGE_INITIALIZING) attributes.add("ignoreMissingAdditionalTargets");
if (ignoreMissingFieldsBuildStage == STAGE_INITIALIZING) attributes.add("ignoreMissingFields");
return "Cannot build ElasticDocConfig, attribute initializers form cycle " + attributes;
}
}
/**
* @return The value of the {@code functions} attribute
*/
@JsonProperty("functions")
@JsonIgnore
@Override
public ImmutableMap getFunctions() {
InitShim shim = this.initShim;
return shim != null
? shim.getFunctions()
: this.functions;
}
/**
* Returns a list of field names that are mapped to identical source paths.
* @return list of field names that are mapped to identical source paths.
*/
@JsonProperty("identityFields")
@JsonIgnore
@Override
public ImmutableSet getIdentityFields() {
InitShim shim = this.initShim;
return shim != null
? shim.getIdentityFields()
: this.identityFields;
}
/**
* @return The value of the {@code mapping} attribute
*/
@JsonProperty("mapping")
@Override
public Mapping getMapping() {
return mapping;
}
/**
* Returns the {@link ObjectMapper} used for parsing JSON documents.
* @return the {@link ObjectMapper} used for parsing JSON documents.
*/
@JsonProperty("objectMapper")
@JsonIgnore
@Override
public ObjectMapper getObjectMapper() {
InitShim shim = this.initShim;
return shim != null
? shim.getObjectMapper()
: this.objectMapper;
}
/**
* Returns a list of plugins configured for this mapping.
* @return list of plugins configured for this mapping.
*/
@JsonProperty("plugins")
@JsonIgnore
@Override
public ImmutableList getPlugins() {
InitShim shim = this.initShim;
return shim != null
? shim.getPlugins()
: this.plugins;
}
/**
* @return The computed-at-construction value of the {@code sourcePaths} attribute
*/
@JsonProperty("sourcePaths")
@JsonIgnore
@Override
public Set getSourcePaths() {
InitShim shim = this.initShim;
return shim != null
? shim.getSourcePaths()
: this.sourcePaths;
}
/**
* Returns a list of source paths that should be mapped to each Elastic field.
* @return list of source paths that should be mapped to each Elastic field.
*/
@JsonProperty("targets")
@JsonDeserialize(as = LinkedHashMultimap.class)
@Override
public ImmutableMultimap getTargets() {
InitShim shim = this.initShim;
return shim != null
? shim.getTargets()
: this.targets;
}
/**
* @return The value of the {@code valueProducer} attribute
*/
@JsonProperty("valueProducer")
@JsonIgnore
@Override
public ValueProducer getValueProducer() {
InitShim shim = this.initShim;
return shim != null
? shim.getValueProducer()
: this.valueProducer;
}
/**
* @return The value of the {@code compact} attribute
*/
@JsonProperty("compact")
@Override
public boolean isCompact() {
InitShim shim = this.initShim;
return shim != null
? shim.isCompact()
: this.compact;
}
/**
* @return The value of the {@code ignoreMissingAdditionalTargets} attribute
*/
@JsonProperty("ignoreMissingAdditionalTargets")
@Override
public boolean isIgnoreMissingAdditionalTargets() {
InitShim shim = this.initShim;
return shim != null
? shim.isIgnoreMissingAdditionalTargets()
: this.ignoreMissingAdditionalTargets;
}
/**
* @return The value of the {@code ignoreMissingFields} attribute
*/
@JsonProperty("ignoreMissingFields")
@Override
public boolean isIgnoreMissingFields() {
InitShim shim = this.initShim;
return shim != null
? shim.isIgnoreMissingFields()
: this.ignoreMissingFields;
}
/**
* This instance is equal to all instances of {@code ImmutableElasticDocConfig} that have equal attribute values.
* @return {@code true} if {@code this} is equal to {@code another} instance
*/
@Override
public boolean equals(@Nullable Object another) {
if (this == another) return true;
return another instanceof ImmutableElasticDocConfig
&& equalTo((ImmutableElasticDocConfig) another);
}
private boolean equalTo(ImmutableElasticDocConfig another) {
return identityFields.equals(another.identityFields)
&& sourcePaths.equals(another.sourcePaths)
&& targets.equals(another.targets);
}
/**
* Computes a hash code from attributes: {@code identityFields}, {@code sourcePaths}, {@code targets}.
* @return hashCode value
*/
@Override
public int hashCode() {
@Var int h = 5381;
h += (h << 5) + identityFields.hashCode();
h += (h << 5) + sourcePaths.hashCode();
h += (h << 5) + targets.hashCode();
return h;
}
/**
* Prints the immutable value {@code ElasticDocConfig} with attribute values.
* @return A string representation of the value
*/
@Override
public String toString() {
return MoreObjects.toStringHelper("ElasticDocConfig")
.omitNullValues()
.add("identityFields", identityFields)
.add("sourcePaths", sourcePaths)
.add("targets", targets)
.toString();
}
@SuppressWarnings("Immutable")
private transient volatile long lazyInitBitmap;
private static final long SOURCE_PATHS_MAPPING_LAZY_INIT_BIT = 0x1L;
@SuppressWarnings("Immutable")
private transient Multimap sourcePathsMapping;
/**
* {@inheritDoc}
*
* Returns a lazily initialized value of the {@link ElasticDocConfig#getSourcePathsMapping() sourcePathsMapping} attribute.
* Initialized once and only once and stored for subsequent access with proper synchronization.
* In case of any exception or error thrown by the lazy value initializer,
* the result will not be memoised (i.e. remembered) and on next call computation
* will be attempted again.
* @return A lazily initialized value of the {@code sourcePathsMapping} attribute
*/
@Override
protected Multimap getSourcePathsMapping() {
if ((lazyInitBitmap & SOURCE_PATHS_MAPPING_LAZY_INIT_BIT) == 0) {
synchronized (this) {
if ((lazyInitBitmap & SOURCE_PATHS_MAPPING_LAZY_INIT_BIT) == 0) {
this.sourcePathsMapping = Objects.requireNonNull(super.getSourcePathsMapping(), "sourcePathsMapping");
lazyInitBitmap |= SOURCE_PATHS_MAPPING_LAZY_INIT_BIT;
}
}
}
return sourcePathsMapping;
}
private static ImmutableElasticDocConfig validate(ImmutableElasticDocConfig instance) {
instance = (ImmutableElasticDocConfig) instance.normalizeTargets();
return instance;
}
/**
* Creates a builder for {@link ImmutableElasticDocConfig ImmutableElasticDocConfig}.
*
* ImmutableElasticDocConfig.builder()
* .putFunction|putAllFunctions(String => com.arakelian.elastic.doc.JsonNodeFunction) // {@link ElasticDocConfig#getFunctions() functions} mappings
* .addIdentityField|addAllIdentityFields(String) // {@link ElasticDocConfig#getIdentityFields() identityFields} elements
* .mapping(com.arakelian.elastic.model.Mapping) // required {@link ElasticDocConfig#getMapping() mapping}
* .objectMapper(com.fasterxml.jackson.databind.ObjectMapper) // optional {@link ElasticDocConfig#getObjectMapper() objectMapper}
* .addPlugin|addAllPlugins(com.arakelian.elastic.doc.plugins.ElasticDocBuilderPlugin) // {@link ElasticDocConfig#getPlugins() plugins} elements
* .putTarget|putAllTargets(String => com.arakelian.elastic.model.JsonSelector) // {@link ElasticDocConfig#getTargets() targets} mappings
* .valueProducer(com.arakelian.elastic.doc.ValueProducer) // optional {@link ElasticDocConfig#getValueProducer() valueProducer}
* .compact(boolean) // optional {@link ElasticDocConfig#isCompact() compact}
* .ignoreMissingAdditionalTargets(boolean) // optional {@link ElasticDocConfig#isIgnoreMissingAdditionalTargets() ignoreMissingAdditionalTargets}
* .ignoreMissingFields(boolean) // optional {@link ElasticDocConfig#isIgnoreMissingFields() ignoreMissingFields}
* .build();
*
* @return A new ImmutableElasticDocConfig builder
*/
public static ImmutableElasticDocConfig.Builder builder() {
return new ImmutableElasticDocConfig.Builder();
}
/**
* Builds instances of type {@link ImmutableElasticDocConfig ImmutableElasticDocConfig}.
* 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 = "ElasticDocConfig", generator = "Immutables")
@NotThreadSafe
@JsonPropertyOrder({"targets", "mapping"})
public static final class Builder {
private static final long INIT_BIT_MAPPING = 0x1L;
private static final long OPT_BIT_FUNCTIONS = 0x1L;
private static final long OPT_BIT_IDENTITY_FIELDS = 0x2L;
private static final long OPT_BIT_PLUGINS = 0x4L;
private static final long OPT_BIT_TARGETS = 0x8L;
private static final long OPT_BIT_COMPACT = 0x10L;
private static final long OPT_BIT_IGNORE_MISSING_ADDITIONAL_TARGETS = 0x20L;
private static final long OPT_BIT_IGNORE_MISSING_FIELDS = 0x40L;
private long initBits = 0x1L;
private long optBits;
private ImmutableMap.Builder functions = ImmutableMap.builder();
private ImmutableSet.Builder identityFields = ImmutableSet.builder();
private @Nullable Mapping mapping;
private @Nullable ObjectMapper objectMapper;
private ImmutableList.Builder plugins = ImmutableList.builder();
private ImmutableMultimap.Builder targets = ImmutableMultimap.builder();
private @Nullable ValueProducer valueProducer;
private boolean compact;
private boolean ignoreMissingAdditionalTargets;
private boolean ignoreMissingFields;
private Builder() {
}
/**
* Fill a builder with attribute values from the provided {@code ElasticDocConfig} 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(ElasticDocConfig instance) {
Objects.requireNonNull(instance, "instance");
putAllFunctions(instance.getFunctions());
addAllIdentityFields(instance.getIdentityFields());
mapping(instance.getMapping());
objectMapper(instance.getObjectMapper());
addAllPlugins(instance.getPlugins());
putAllTargets(instance.getTargets());
valueProducer(instance.getValueProducer());
compact(instance.isCompact());
ignoreMissingAdditionalTargets(instance.isIgnoreMissingAdditionalTargets());
ignoreMissingFields(instance.isIgnoreMissingFields());
return this;
}
/**
* Put one entry to the {@link ElasticDocConfig#getFunctions() functions} map.
* @param key The key in the functions map
* @param value The associated value in the functions map
* @return {@code this} builder for use in a chained invocation
*/
@CanIgnoreReturnValue
public final Builder putFunction(String key, JsonNodeFunction value) {
this.functions.put(key, value);
optBits |= OPT_BIT_FUNCTIONS;
return this;
}
/**
* Put one entry to the {@link ElasticDocConfig#getFunctions() functions} map. Nulls are not permitted
* @param entry The key and value entry
* @return {@code this} builder for use in a chained invocation
*/
@CanIgnoreReturnValue
public final Builder putFunction(Map.Entry entry) {
this.functions.put(entry);
optBits |= OPT_BIT_FUNCTIONS;
return this;
}
/**
* Sets or replaces all mappings from the specified map as entries for the {@link ElasticDocConfig#getFunctions() functions} map. Nulls are not permitted
* @param entries The entries that will be added to the functions map
* @return {@code this} builder for use in a chained invocation
*/
@CanIgnoreReturnValue
@JsonProperty("functions")
@JsonIgnore
public final Builder functions(Map entries) {
this.functions = ImmutableMap.builder();
optBits |= OPT_BIT_FUNCTIONS;
return putAllFunctions(entries);
}
/**
* Put all mappings from the specified map as entries to {@link ElasticDocConfig#getFunctions() functions} map. Nulls are not permitted
* @param entries The entries that will be added to the functions map
* @return {@code this} builder for use in a chained invocation
*/
@CanIgnoreReturnValue
public final Builder putAllFunctions(Map entries) {
this.functions.putAll(entries);
optBits |= OPT_BIT_FUNCTIONS;
return this;
}
/**
* Adds one element to {@link ElasticDocConfig#getIdentityFields() identityFields} set.
* @param element A identityFields element
* @return {@code this} builder for use in a chained invocation
*/
@CanIgnoreReturnValue
public final Builder addIdentityField(String element) {
this.identityFields.add(element);
optBits |= OPT_BIT_IDENTITY_FIELDS;
return this;
}
/**
* Adds elements to {@link ElasticDocConfig#getIdentityFields() identityFields} set.
* @param elements An array of identityFields elements
* @return {@code this} builder for use in a chained invocation
*/
@CanIgnoreReturnValue
public final Builder addIdentityFields(String... elements) {
this.identityFields.add(elements);
optBits |= OPT_BIT_IDENTITY_FIELDS;
return this;
}
/**
* Sets or replaces all elements for {@link ElasticDocConfig#getIdentityFields() identityFields} set.
* @param elements An iterable of identityFields elements
* @return {@code this} builder for use in a chained invocation
*/
@CanIgnoreReturnValue
@JsonProperty("identityFields")
@JsonIgnore
public final Builder identityFields(Iterable elements) {
this.identityFields = ImmutableSet.builder();
return addAllIdentityFields(elements);
}
/**
* Adds elements to {@link ElasticDocConfig#getIdentityFields() identityFields} set.
* @param elements An iterable of identityFields elements
* @return {@code this} builder for use in a chained invocation
*/
@CanIgnoreReturnValue
public final Builder addAllIdentityFields(Iterable elements) {
this.identityFields.addAll(elements);
optBits |= OPT_BIT_IDENTITY_FIELDS;
return this;
}
/**
* Initializes the value for the {@link ElasticDocConfig#getMapping() mapping} attribute.
* @param mapping The value for mapping
* @return {@code this} builder for use in a chained invocation
*/
@CanIgnoreReturnValue
@JsonProperty("mapping")
public final Builder mapping(Mapping mapping) {
this.mapping = Objects.requireNonNull(mapping, "mapping");
initBits &= ~INIT_BIT_MAPPING;
return this;
}
/**
* Initializes the value for the {@link ElasticDocConfig#getObjectMapper() objectMapper} attribute.
* If not set, this attribute will have a default value as returned by the initializer of {@link ElasticDocConfig#getObjectMapper() objectMapper}.
* @param objectMapper The value for objectMapper
* @return {@code this} builder for use in a chained invocation
*/
@CanIgnoreReturnValue
@JsonProperty("objectMapper")
@JsonIgnore
public final Builder objectMapper(ObjectMapper objectMapper) {
this.objectMapper = Objects.requireNonNull(objectMapper, "objectMapper");
return this;
}
/**
* Adds one element to {@link ElasticDocConfig#getPlugins() plugins} list.
* @param element A plugins element
* @return {@code this} builder for use in a chained invocation
*/
@CanIgnoreReturnValue
public final Builder addPlugin(ElasticDocBuilderPlugin element) {
this.plugins.add(element);
optBits |= OPT_BIT_PLUGINS;
return this;
}
/**
* Adds elements to {@link ElasticDocConfig#getPlugins() plugins} list.
* @param elements An array of plugins elements
* @return {@code this} builder for use in a chained invocation
*/
@CanIgnoreReturnValue
public final Builder addPlugins(ElasticDocBuilderPlugin... elements) {
this.plugins.add(elements);
optBits |= OPT_BIT_PLUGINS;
return this;
}
/**
* Sets or replaces all elements for {@link ElasticDocConfig#getPlugins() plugins} list.
* @param elements An iterable of plugins elements
* @return {@code this} builder for use in a chained invocation
*/
@CanIgnoreReturnValue
@JsonProperty("plugins")
@JsonIgnore
public final Builder plugins(Iterable extends ElasticDocBuilderPlugin> elements) {
this.plugins = ImmutableList.builder();
return addAllPlugins(elements);
}
/**
* Adds elements to {@link ElasticDocConfig#getPlugins() plugins} list.
* @param elements An iterable of plugins elements
* @return {@code this} builder for use in a chained invocation
*/
@CanIgnoreReturnValue
public final Builder addAllPlugins(Iterable extends ElasticDocBuilderPlugin> elements) {
this.plugins.addAll(elements);
optBits |= OPT_BIT_PLUGINS;
return this;
}
/**
* Put all mappings from the specified key to values for {@link ElasticDocConfig#getTargets() targets} true. Nulls are not permitted
* @param key The key for targets
* @param values The values for targets
* @return {@code this} builder for use in a chained invocation
*/
@CanIgnoreReturnValue
public final Builder putTargets(String key, JsonSelector... values) {
this.targets.putAll(key, Arrays.asList(values));
optBits |= OPT_BIT_TARGETS;
return this;
}
/**
* Put all mappings from the specified key to values for {@link ElasticDocConfig#getTargets() targets} true. Nulls are not permitted
* @param key The key for targets
* @param values The values for targets
* @return {@code this} builder for use in a chained invocation
*/
@CanIgnoreReturnValue
public final Builder putAllTargets(String key, Iterable values) {
this.targets.putAll(key, values);
optBits |= OPT_BIT_TARGETS;
return this;
}
/**
* Put one entry to the {@link ElasticDocConfig#getTargets() targets} map.
* @param key The key in the targets map
* @param value The associated value in the targets map
* @return {@code this} builder for use in a chained invocation
*/
@CanIgnoreReturnValue
public final Builder putTarget(String key, JsonSelector value) {
this.targets.put(key, value);
optBits |= OPT_BIT_TARGETS;
return this;
}
/**
* Put one entry to the {@link ElasticDocConfig#getTargets() targets} map. Nulls are not permitted
* @param entry The key and value entry
* @return {@code this} builder for use in a chained invocation
*/
@CanIgnoreReturnValue
public final Builder putTarget(Map.Entry entry) {
this.targets.put(entry);
optBits |= OPT_BIT_TARGETS;
return this;
}
/**
* Sets or replaces all mappings from the specified map as entries for the {@link ElasticDocConfig#getTargets() targets} map. Nulls are not permitted
* @param entries The entries that will be added to the targets map
* @return {@code this} builder for use in a chained invocation
*/
@CanIgnoreReturnValue
@JsonProperty("targets")
@JsonDeserialize(as = LinkedHashMultimap.class)
public final Builder targets(Multimap entries) {
this.targets = ImmutableMultimap.builder();
optBits |= OPT_BIT_TARGETS;
return putAllTargets(entries);
}
/**
* Put all mappings from the specified map as entries to {@link ElasticDocConfig#getTargets() targets} map. Nulls are not permitted
* @param entries The entries that will be added to the targets map
* @return {@code this} builder for use in a chained invocation
*/
@CanIgnoreReturnValue
public final Builder putAllTargets(Multimap entries) {
this.targets.putAll(entries);
optBits |= OPT_BIT_TARGETS;
return this;
}
/**
* Initializes the value for the {@link ElasticDocConfig#getValueProducer() valueProducer} attribute.
* If not set, this attribute will have a default value as returned by the initializer of {@link ElasticDocConfig#getValueProducer() valueProducer}.
* @param valueProducer The value for valueProducer
* @return {@code this} builder for use in a chained invocation
*/
@CanIgnoreReturnValue
@JsonProperty("valueProducer")
@JsonIgnore
public final Builder valueProducer(ValueProducer valueProducer) {
this.valueProducer = Objects.requireNonNull(valueProducer, "valueProducer");
return this;
}
/**
* Initializes the value for the {@link ElasticDocConfig#isCompact() compact} attribute.
*
If not set, this attribute will have a default value as returned by the initializer of {@link ElasticDocConfig#isCompact() compact}.
* @param compact The value for compact
* @return {@code this} builder for use in a chained invocation
*/
@CanIgnoreReturnValue
@JsonProperty("compact")
public final Builder compact(boolean compact) {
this.compact = compact;
optBits |= OPT_BIT_COMPACT;
return this;
}
/**
* Initializes the value for the {@link ElasticDocConfig#isIgnoreMissingAdditionalTargets() ignoreMissingAdditionalTargets} attribute.
*
If not set, this attribute will have a default value as returned by the initializer of {@link ElasticDocConfig#isIgnoreMissingAdditionalTargets() ignoreMissingAdditionalTargets}.
* @param ignoreMissingAdditionalTargets The value for ignoreMissingAdditionalTargets
* @return {@code this} builder for use in a chained invocation
*/
@CanIgnoreReturnValue
@JsonProperty("ignoreMissingAdditionalTargets")
public final Builder ignoreMissingAdditionalTargets(boolean ignoreMissingAdditionalTargets) {
this.ignoreMissingAdditionalTargets = ignoreMissingAdditionalTargets;
optBits |= OPT_BIT_IGNORE_MISSING_ADDITIONAL_TARGETS;
return this;
}
/**
* Initializes the value for the {@link ElasticDocConfig#isIgnoreMissingFields() ignoreMissingFields} attribute.
*
If not set, this attribute will have a default value as returned by the initializer of {@link ElasticDocConfig#isIgnoreMissingFields() ignoreMissingFields}.
* @param ignoreMissingFields The value for ignoreMissingFields
* @return {@code this} builder for use in a chained invocation
*/
@CanIgnoreReturnValue
@JsonProperty("ignoreMissingFields")
public final Builder ignoreMissingFields(boolean ignoreMissingFields) {
this.ignoreMissingFields = ignoreMissingFields;
optBits |= OPT_BIT_IGNORE_MISSING_FIELDS;
return this;
}
/**
* Builds a new {@link ImmutableElasticDocConfig ImmutableElasticDocConfig}.
* @return An immutable instance of ElasticDocConfig
* @throws java.lang.IllegalStateException if any required attributes are missing
*/
public ImmutableElasticDocConfig build() {
if (initBits != 0) {
throw new IllegalStateException(formatRequiredAttributesMessage());
}
return ImmutableElasticDocConfig.validate(new ImmutableElasticDocConfig(this));
}
private boolean functionsIsSet() {
return (optBits & OPT_BIT_FUNCTIONS) != 0;
}
private boolean identityFieldsIsSet() {
return (optBits & OPT_BIT_IDENTITY_FIELDS) != 0;
}
private boolean pluginsIsSet() {
return (optBits & OPT_BIT_PLUGINS) != 0;
}
private boolean targetsIsSet() {
return (optBits & OPT_BIT_TARGETS) != 0;
}
private boolean compactIsSet() {
return (optBits & OPT_BIT_COMPACT) != 0;
}
private boolean ignoreMissingAdditionalTargetsIsSet() {
return (optBits & OPT_BIT_IGNORE_MISSING_ADDITIONAL_TARGETS) != 0;
}
private boolean ignoreMissingFieldsIsSet() {
return (optBits & OPT_BIT_IGNORE_MISSING_FIELDS) != 0;
}
private String formatRequiredAttributesMessage() {
List attributes = new ArrayList<>();
if ((initBits & INIT_BIT_MAPPING) != 0) attributes.add("mapping");
return "Cannot build ElasticDocConfig, some of required attributes are not set " + attributes;
}
}
}