All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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 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 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; } } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy