Class Field

java.lang.Object
io.debezium.config.Field

@Immutable public final class Field extends Object
An immutable definition of a field that make appear within a Configuration instance.
Author:
Randall Hauch
  • Field Details

    • LOGGER

      private static final org.slf4j.Logger LOGGER
    • INTERNAL_PREFIX

      public static final String INTERNAL_PREFIX
      See Also:
    • EMPTY_STRING

      private static final String EMPTY_STRING
      See Also:
    • SPACE

      private static final CharSequence SPACE
    • name

      private final String name
    • displayName

      private final String displayName
    • desc

      private final String desc
    • defaultValueGenerator

      private final Supplier<Object> defaultValueGenerator
    • validator

      private final Field.Validator validator
    • width

      private final org.apache.kafka.common.config.ConfigDef.Width width
    • type

      private final org.apache.kafka.common.config.ConfigDef.Type type
    • importance

      private final org.apache.kafka.common.config.ConfigDef.Importance importance
    • dependents

      private final List<String> dependents
    • valueDependants

      private final Map<Object,List<String>> valueDependants
    • valueDependantMatchers

      private final Map<Object,List<DependentFieldMatcher>> valueDependantMatchers
    • recommender

      private final Field.Recommender recommender
    • allowedValues

      private final Set<?> allowedValues
    • group

      private final Field.GroupEntry group
    • isRequired

      private final boolean isRequired
    • deprecatedAliases

      private final Set<String> deprecatedAliases
    • enableKafkaValidation

      private boolean enableKafkaValidation
  • Constructor Details

  • Method Details

    • setOf

      public static Field.Set setOf(Field... fields)
      Create a set of fields.
      Parameters:
      fields - the fields to include
      Returns:
      the field set; never null
    • setOf

      public static Field.Set setOf(Iterable<Field> fields)
      Create a set of fields.
      Parameters:
      fields - the fields to include
      Returns:
      the field set; never null
    • createGroupEntry

      public static Field.GroupEntry createGroupEntry(Field.Group group)
    • createGroupEntry

      public static Field.GroupEntry createGroupEntry(Field.Group group, int positionInGroup)
    • create

      public static Field create(String name)
      Create an immutable Field instance with the given property name.
      Parameters:
      name - the name of the field; may not be null
      Returns:
      the field; never null
    • createInternal

      public static Field createInternal(String name)
      Create an immutable internal Field instance with the given property name. The name will be prefixed with internal. prefix.
      Parameters:
      name - the name of the field; may not be null
      Returns:
      the field; never null
    • create

      public static Field create(String name, String displayName)
      Create an immutable Field instance with the given property name.
      Parameters:
      name - the name of the field; may not be null
      displayName - the display name of the field; may not be null
      Returns:
      the field; never null
    • create

      public static Field create(String name, String displayName, String description)
      Create an immutable Field instance with the given property name and description.
      Parameters:
      name - the name of the field; may not be null
      displayName - the display name of the field; may not be null
      description - the description
      Returns:
      the field; never null
    • create

      public static Field create(String name, String displayName, String description, String defaultValue)
      Create an immutable Field instance with the given property name, description, and default value.
      Parameters:
      name - the name of the field; may not be null
      displayName - the display name of the field; may not be null
      description - the description
      defaultValue - the default value for the field
      Returns:
      the field; never null
    • create

      public static Field create(String name, String displayName, String description, int defaultValue)
      Create an immutable Field instance with the given property name, description, and default value.
      Parameters:
      name - the name of the field; may not be null
      displayName - the display name of the field; may not be null
      description - the description
      defaultValue - the default value for the field
      Returns:
      the field; never null
    • create

      public static Field create(String name, String displayName, String description, long defaultValue)
      Create an immutable Field instance with the given property name, description, and default value.
      Parameters:
      name - the name of the field; may not be null
      displayName - the display name of the field; may not be null
      description - the description
      defaultValue - the default value for the field
      Returns:
      the field; never null
    • create

      public static Field create(String name, String displayName, String description, boolean defaultValue)
      Create an immutable Field instance with the given property name, description, and default value.
      Parameters:
      name - the name of the field; may not be null
      displayName - the display name of the field; may not be null
      description - the description
      defaultValue - the default value for the field
      Returns:
      the field; never null
    • create

      public static Field create(String name, String displayName, String description, Supplier<Object> defaultValueGenerator)
      Create an immutable Field instance with the given property name, description, and default value.
      Parameters:
      name - the name of the field; may not be null
      displayName - the display name of the field; may not be null
      description - the description
      defaultValueGenerator - the generator for the default value for the field
      Returns:
      the field; never null
    • create

      public static Field create(String name, String displayName, String description, BooleanSupplier defaultValueGenerator)
      Create an immutable Field instance with the given property name, description, and default value.
      Parameters:
      name - the name of the field; may not be null
      displayName - the display name of the field; may not be null
      description - the description
      defaultValueGenerator - the generator for the default value for the field
      Returns:
      the field; never null
    • create

      public static Field create(String name, String displayName, String description, IntSupplier defaultValueGenerator)
      Create an immutable Field instance with the given property name, description, and default value.
      Parameters:
      name - the name of the field; may not be null
      displayName - the display name of the field; may not be null
      description - the description
      defaultValueGenerator - the generator for the default value for the field
      Returns:
      the field; never null
    • create

      public static Field create(String name, String displayName, String description, LongSupplier defaultValueGenerator)
      Create an immutable Field instance with the given property name, description, and default value.
      Parameters:
      name - the name of the field; may not be null
      displayName - the display name of the field; may not be null
      description - the description
      defaultValueGenerator - the generator for the default value for the field
      Returns:
      the field; never null
    • group

      public static org.apache.kafka.common.config.ConfigDef group(org.apache.kafka.common.config.ConfigDef configDef, String groupName, Field... fields)
      Add this field to the given configuration definition.
      Parameters:
      configDef - the definition of the configuration; may be null if none of the fields are to be added
      groupName - the name of the group; may be null
      fields - the fields to be added as a group to the definition of the configuration
      Returns:
      the updated configuration; never null
    • buildRecommenders

      private static Map<String,org.apache.kafka.common.config.ConfigDef.Recommender> buildRecommenders(List<Field> fieldsWithDependents)
    • convertToKafkaValidator

      private static org.apache.kafka.common.config.ConfigDef.Validator convertToKafkaValidator(Field field)
    • createRecommendersForDependents

      private static Stream<Map.Entry<String,org.apache.kafka.common.config.ConfigDef.Recommender>> createRecommendersForDependents(Field parentField, Map.Entry<Object,List<String>> valueDependantEntry)
    • buildRecommender

      private static Map.Entry<String,org.apache.kafka.common.config.ConfigDef.Recommender> buildRecommender(String name, Field parentField, Object parentValue)
    • mergeRecommenders

      private static org.apache.kafka.common.config.ConfigDef.Recommender mergeRecommenders(org.apache.kafka.common.config.ConfigDef.Recommender r1, org.apache.kafka.common.config.ConfigDef.Recommender r2)
    • hasValueDependents

      private static Predicate<Field> hasValueDependents()
    • name

      public String name()
      Get the name of the field.
      Returns:
      the name; never null
    • defaultValue

      public Object defaultValue()
      Get the default value of the field.
      Returns:
      the default value, or null if there is no default value
    • defaultValueAsString

      public String defaultValueAsString()
      Get the string representation of the default value of the field.
      Returns:
      the default value, or null if there is no default value
    • description

      public String description()
      Get the description of the field.
      Returns:
      the description; never null
    • displayName

      public String displayName()
      Get the display name of the field.
      Returns:
      the display name; never null
    • width

      public org.apache.kafka.common.config.ConfigDef.Width width()
      Get the width of this field.
      Returns:
      the width; never null
    • type

      public org.apache.kafka.common.config.ConfigDef.Type type()
      Get the type of this field.
      Returns:
      the type; never null
    • importance

      public org.apache.kafka.common.config.ConfigDef.Importance importance()
      Get the importance of this field.
      Returns:
      the importance; never null
    • dependents

      public List<String> dependents()
      Get the names of the fields that are or may be dependent upon this field.
      Returns:
      the list of dependents; never null but possibly empty
    • valueDependants

      public Map<Object,List<String>> valueDependants()
      Get the map of value-based dependents for this field. The map key is the parent field value, and the value is the list of dependent field names.
      Returns:
      the map of value-based dependents
    • dependents

      public List<String> dependents(Object value)
      Get the names of the fields that are or may be dependent upon this field based on the field value
      Parameters:
      value - the value which dependents are related
      Returns:
      the list of dependents; never null but possibly empty
    • validator

      public Field.Validator validator()
      Get the validator for this field.
      Returns:
      the validator; may be null if there is no validator
    • recommender

      public Field.Recommender recommender()
      Get the Field.Recommender for this field.
      Returns:
      the recommender; may be null if there is no recommender
    • isRequired

      public boolean isRequired()
      Get if the field is required/mandatory.
      Returns:
      if the field is required; true or false
    • group

      public Field.GroupEntry group()
      Get the group of this field.
      Returns:
      the group
    • allowedValues

      public Set<?> allowedValues()
      Get the allowed values for this field.
      Returns:
      the java.util.Set of allowed values; may be null if there's no set of specific values
    • deprecatedAliases

      public Set<String> deprecatedAliases()
      Get the deprecated alias names for this field.
      Returns:
      the java.util.Set of aliases that are deprecated; may be null if there's no set of specific values
    • validate

      public boolean validate(Configuration config, Field.ValidationOutput problems)
      Validate the supplied value for this field, and report any problems to the designated consumer.
      Parameters:
      config - the field values keyed by their name; may not be null
      problems - the consumer to be called with each problem; never null
      Returns:
      true if the value is considered valid, or false if it is not valid
    • validate

      protected void validate(Configuration config, Function<String,Field> fieldSupplier, Map<String,org.apache.kafka.common.config.ConfigValue> results)
      Validate this field in the supplied configuration, updating the ConfigValue for the field with the results.
      Parameters:
      config - the configuration to be validated; may not be null
      fieldSupplier - the supplier for dependent fields by name; may not be null
      results - the set of configuration results keyed by field name; may not be null
    • withDescription

      public Field withDescription(String description)
      Create and return a new Field instance that is a copy of this field but with the given description.
      Parameters:
      description - the new description for the new field
      Returns:
      the new field; never null
    • withDisplayName

      public Field withDisplayName(String displayName)
      Create and return a new Field instance that is a copy of this field but with the given display name.
      Parameters:
      displayName - the new display name for the field
      Returns:
      the new field; never null
    • withWidth

      public Field withWidth(org.apache.kafka.common.config.ConfigDef.Width width)
      Create and return a new Field instance that is a copy of this field but with the given width.
      Parameters:
      width - the new width for the field
      Returns:
      the new field; never null
    • withType

      public Field withType(org.apache.kafka.common.config.ConfigDef.Type type)
      Create and return a new Field instance that is a copy of this field but with the given type.
      Parameters:
      type - the new type for the field
      Returns:
      the new field; never null
    • withEnum

      public <T extends Enum<T> & EnumeratedValue> Field withEnum(Class<T> enumType)
      Create and return a new Field instance that is a copy of this field but has a type of Schema.Type.STRING, a recommender that returns a list of Enum names as valid values, and a validator that verifies values are valid enumeration names.
      Parameters:
      enumType - the enumeration type for the field
      Returns:
      the new field; never null
    • withEnum

      public <T extends Enum<T> & EnumeratedValue> Field withEnum(Class<T> enumType, T defaultOption)
      Create and return a new Field instance that is a copy of this field but has a type of Schema.Type.STRING, a recommender that returns a list of Enum names as valid values, and a validator that verifies values are valid enumeration names.
      Parameters:
      enumType - the enumeration type for the field
      defaultOption - the default enumeration value; may be null
      Returns:
      the new field; never null
    • required

      public Field required()
    • optional

      public Field optional()
    • withGroup

      public Field withGroup(Field.GroupEntry group)
    • withAllowedValues

      public Field withAllowedValues(Set<?> allowedValues)
    • withImportance

      public Field withImportance(org.apache.kafka.common.config.ConfigDef.Importance importance)
      Create and return a new Field instance that is a copy of this field but with the given importance.
      Parameters:
      importance - the new importance for the field
      Returns:
      the new field; never null
    • withDependents

      public Field withDependents(List<String> dependents)
      Create and return a new Field instance that is a copy of this field but with the given display name.
      Parameters:
      dependents - the names of the fields that depend on this field (simple, non-value-based dependencies)
      Returns:
      the new field; never null
    • withDependents

      public Field withDependents(String dependent)
      Create and return a new Field instance that is a copy of this field but with the given display name.
      Parameters:
      dependent - the name of the field that depend on this field (simple, non-value-based dependencies)
      Returns:
      the new field; never null
    • withDependents

      public Field withDependents(String value, DependentFieldMatcher... matchers)
      Create and return a new Field instance that is a copy of this field but with dependent fields resolved using matchers. Matchers allow flexible specification of dependent fields using patterns, prefixes, or exact names.
      Parameters:
      value - the field value that triggers the dependents
      matchers - the matchers that will resolve to dependent field names
      Returns:
      the new field; never null
    • withDependents

      public Field withDependents(List<String> values, DependentFieldMatcher... matchers)
      Create and return a new Field instance that is a copy of this field but with the same matchers associated with multiple parent field values. This is useful when multiple values require the same set of dependent fields matched by the same patterns.
      Parameters:
      values - the list of field values that share the same dependent matchers
      matchers - the matchers that will resolve to dependent field names
      Returns:
      the new field; never null
    • withDefault

      public Field withDefault(String defaultValue)
      Create and return a new Field instance that is a copy of this field but with the given default value.
      Parameters:
      defaultValue - the new default value for the new field
      Returns:
      the new field; never null
    • withDefault

      public Field withDefault(boolean defaultValue)
      Create and return a new Field instance that is a copy of this field but with the given default value.
      Parameters:
      defaultValue - the new default value for the new field
      Returns:
      the new field; never null
    • withDefault

      public Field withDefault(int defaultValue)
      Create and return a new Field instance that is a copy of this field but with the given default value.
      Parameters:
      defaultValue - the new default value for the new field
      Returns:
      the new field; never null
    • withDefault

      public Field withDefault(long defaultValue)
      Create and return a new Field instance that is a copy of this field but with the given default value.
      Parameters:
      defaultValue - the new default value for the new field
      Returns:
      the new field; never null
    • withDefault

      public Field withDefault(BooleanSupplier defaultValueGenerator)
      Create and return a new Field instance that is a copy of this field but with the given default value.
      Parameters:
      defaultValueGenerator - the supplier for the new default value for the new field, called whenever a default value is needed
      Returns:
      the new field; never null
    • withDefault

      public Field withDefault(IntSupplier defaultValueGenerator)
      Create and return a new Field instance that is a copy of this field but with the given default value.
      Parameters:
      defaultValueGenerator - the supplier for the new default value for the new field, called whenever a default value is needed
      Returns:
      the new field; never null
    • withDefault

      public Field withDefault(LongSupplier defaultValueGenerator)
      Create and return a new Field instance that is a copy of this field but with the given default value.
      Parameters:
      defaultValueGenerator - the supplier for the new default value for the new field, called whenever a default value is needed
      Returns:
      the new field; never null
    • withRecommender

      public Field withRecommender(Field.Recommender recommender)
      Create and return a new Field instance that is a copy of this field but with the given recommender.
      Parameters:
      recommender - the recommender; may be null
      Returns:
      the new field; never null
    • withInvisibleRecommender

      public Field withInvisibleRecommender()
    • withNoValidation

      public Field withNoValidation()
      Create and return a new Field instance that is a copy of this field but that uses no validation.
      Returns:
      the new field; never null
    • withValidation

      public Field withValidation(Field.Validator... validators)
      Create and return a new Field instance that is a copy of this field but that in addition to existing validation the supplied validation function(s) are also used.
      Parameters:
      validators - the additional validation function(s); may be null
      Returns:
      the new field; never null
    • withDeprecatedAliases

      public Field withDeprecatedAliases(String... deprecatedAliases)
    • withConfigDefValidation

      public Field withConfigDefValidation()
      Opt-in to having this field's validator passed to Kafka Connect's ConfigDef during Field.group(). This enables Kafka Connect's REST API to reject invalid values at connector creation time, rather than failing later during task startup. Must be called as the LAST method in the builder chain since other builder methods create copies that do not preserve this flag.
      Returns:
      the new field with Kafka validation enabled; never null
    • isKafkaValidationEnabled

      public boolean isKafkaValidationEnabled()
      Returns whether this field has opted in to Kafka Connect ConfigDef validation.
    • resolvePatterns

      Field resolvePatterns(Set<String> allFieldNames)
      Package-private helper method to resolve pattern-based dependent field matchers into concrete field names. This is called by ConfigDefinitionEditor.create() to resolve all matchers before creating the ConfigDefinition.
      Parameters:
      allFieldNames - all available field names in the configuration
      Returns:
      a new Field with resolved dependents, or this field if no matchers are present
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Object
    • equals

      public boolean equals(Object obj)
      Overrides:
      equals in class Object
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • getEnumLiterals

      private static <T extends Enum<T> & EnumeratedValue> Set<String> getEnumLiterals(Class<T> enumType)
    • validatorForType

      public static Field.Validator validatorForType(org.apache.kafka.common.config.ConfigDef.Type type)
    • isListOfRegex

      public static int isListOfRegex(Configuration config, Field field, Field.ValidationOutput problems)
    • isListOfMap

      public static int isListOfMap(Configuration config, Field field, Field.ValidationOutput problems)
    • isRegex

      public static int isRegex(Configuration config, Field field, Field.ValidationOutput problems)
    • isClassName

      public static int isClassName(Configuration config, Field field, Field.ValidationOutput problems)
    • isRequired

      public static int isRequired(Configuration config, Field field, Field.ValidationOutput problems)
    • isOptional

      public static int isOptional(Configuration config, Field field, Field.ValidationOutput problems)
    • isBoolean

      public static int isBoolean(Configuration config, Field field, Field.ValidationOutput problems)
    • isInteger

      public static int isInteger(Configuration config, Field field, Field.ValidationOutput problems)
    • isPositiveInteger

      public static int isPositiveInteger(Configuration config, Field field, Field.ValidationOutput problems)
    • isNonNegativeInteger

      public static int isNonNegativeInteger(Configuration config, Field field, Field.ValidationOutput problems)
    • isLong

      public static int isLong(Configuration config, Field field, Field.ValidationOutput problems)
    • isPositiveLong

      public static int isPositiveLong(Configuration config, Field field, Field.ValidationOutput problems)
    • isNonNegativeLong

      public static int isNonNegativeLong(Configuration config, Field field, Field.ValidationOutput problems)
    • isShort

      public static int isShort(Configuration config, Field field, Field.ValidationOutput problems)
    • isDouble

      public static int isDouble(Configuration config, Field field, Field.ValidationOutput problems)
    • isZoneOffset

      public static int isZoneOffset(Configuration config, Field field, Field.ValidationOutput problems)
    • notContainEmptyElements

      public static int notContainEmptyElements(Configuration config, Field field, Field.ValidationOutput problems)
    • notContainSpaceInAnyElement

      public static int notContainSpaceInAnyElement(Configuration config, Field field, Field.ValidationOutput problems)
    • deprecatedFieldWarning

      public static int deprecatedFieldWarning(Configuration config, Field field, Field.ValidationOutput problems)
    • validationOutput

      public static String validationOutput(Field field, String problem)