Class SchemaBuilder

  • All Implemented Interfaces:
    Schema

    public class SchemaBuilder
    extends Object
    implements Schema

    SchemaBuilder provides a fluent API for constructing Schema objects. It allows you to set each of the properties for the schema and each call returns the SchemaBuilder so the calls can be chained. When nested types are required, use one of the predefined schemas from Schema or use a second SchemaBuilder inline.

    Here is an example of building a struct schema:

         Schema dateSchema = SchemaBuilder.struct()
             .name("com.example.CalendarDate").version(2).doc("A calendar date including month, day, and year.")
             .field("month", Schema.STRING_SCHEMA)
             .field("day", Schema.INT8_SCHEMA)
             .field("year", Schema.INT16_SCHEMA)
             .build();
         

    Here is an example of using a second SchemaBuilder to construct complex, nested types:

         Schema userListSchema = SchemaBuilder.array(
             SchemaBuilder.struct().name("com.example.User").field("username", Schema.STRING_SCHEMA).field("id", Schema.INT64_SCHEMA).build()
         ).build();
         

    • Constructor Detail

      • SchemaBuilder

        public SchemaBuilder​(Schema.Type type)
    • Method Detail

      • isOptional

        public boolean isOptional()
        Specified by:
        isOptional in interface Schema
        Returns:
        true if this field is optional, false otherwise
      • optional

        public SchemaBuilder optional()
        Set this schema as optional.
        Returns:
        the SchemaBuilder
      • required

        public SchemaBuilder required()
        Set this schema as required. This is the default, but this method can be used to make this choice explicit.
        Returns:
        the SchemaBuilder
      • defaultValue

        public Object defaultValue()
        Specified by:
        defaultValue in interface Schema
        Returns:
        the default value for this schema
      • defaultValue

        public SchemaBuilder defaultValue​(Object value)
        Set the default value for this schema. The value is validated against the schema type, throwing a SchemaBuilderException if it does not match.
        Parameters:
        value - the default value
        Returns:
        the SchemaBuilder
      • name

        public String name()
        Specified by:
        name in interface Schema
        Returns:
        the name of this schema
      • name

        public SchemaBuilder name​(String name)
        Set the name of this schema.
        Parameters:
        name - the schema name
        Returns:
        the SchemaBuilder
      • version

        public Integer version()
        Description copied from interface: Schema
        Get the optional version of the schema. If a version is included, newer versions *must* be larger than older ones.
        Specified by:
        version in interface Schema
        Returns:
        the version of this schema
      • version

        public SchemaBuilder version​(Integer version)
        Set the version of this schema. Schema versions are integers which, if provided, must indicate which schema is newer and which is older by their ordering.
        Parameters:
        version - the schema version
        Returns:
        the SchemaBuilder
      • doc

        public String doc()
        Specified by:
        doc in interface Schema
        Returns:
        the documentation for this schema
      • doc

        public SchemaBuilder doc​(String doc)
        Set the documentation for this schema.
        Parameters:
        doc - the documentation
        Returns:
        the SchemaBuilder
      • parameters

        public Map<String,​String> parameters()
        Description copied from interface: Schema
        Get a map of schema parameters.
        Specified by:
        parameters in interface Schema
        Returns:
        Map containing parameters for this schema, or null if there are no parameters
      • parameter

        public SchemaBuilder parameter​(String propertyName,
                                       String propertyValue)
        Set a schema parameter.
        Parameters:
        propertyName - name of the schema property to define
        propertyValue - value of the schema property to define, as a String
        Returns:
        the SchemaBuilder
      • parameters

        public SchemaBuilder parameters​(Map<String,​String> props)
        Set schema parameters. This operation is additive; it does not remove existing parameters that do not appear in the set of properties pass to this method.
        Parameters:
        props - Map of properties to set
        Returns:
        the SchemaBuilder
      • type

        public Schema.Type type()
        Specified by:
        type in interface Schema
        Returns:
        the type of this schema
      • type

        public static SchemaBuilder type​(Schema.Type type)
        Create a SchemaBuilder for the specified type. Usually it will be simpler to use one of the variants like string() or struct(), but this form can be useful when generating schemas dynamically.
        Parameters:
        type - the schema type
        Returns:
        a new SchemaBuilder
      • field

        public SchemaBuilder field​(String fieldName,
                                   Schema fieldSchema)
        Add a field to this struct schema. Throws a SchemaBuilderException if this is not a struct schema.
        Parameters:
        fieldName - the name of the field to add
        fieldSchema - the Schema for the field's value
        Returns:
        the SchemaBuilder
      • fields

        public List<Field> fields()
        Get the list of fields for this Schema. Throws a DataException if this schema is not a struct.
        Specified by:
        fields in interface Schema
        Returns:
        the list of fields for this Schema
      • field

        public Field field​(String fieldName)
        Description copied from interface: Schema
        Get a field for this Schema by name. Throws a DataException if this schema is not a struct.
        Specified by:
        field in interface Schema
        Parameters:
        fieldName - the name of the field to look up
        Returns:
        the Field object for the specified field, or null if there is no field with the given name
      • map

        public static SchemaBuilder map​(Schema keySchema,
                                        Schema valueSchema)
        Parameters:
        keySchema - the schema for keys in the map
        valueSchema - the schema for values in the map
        Returns:
        a new Schema.Type.MAP SchemaBuilder
      • keySchema

        public Schema keySchema()
        Description copied from interface: Schema
        Get the key schema for this map schema. Throws a DataException if this schema is not a map.
        Specified by:
        keySchema in interface Schema
        Returns:
        the key schema
      • valueSchema

        public Schema valueSchema()
        Description copied from interface: Schema
        Get the value schema for this map or array schema. Throws a DataException if this schema is not a map or array.
        Specified by:
        valueSchema in interface Schema
        Returns:
        the value schema
      • build

        public Schema build()
        Build the Schema using the current settings
        Returns:
        the Schema
      • schema

        public Schema schema()
        Return a concrete instance of the Schema specified by this builder
        Specified by:
        schema in interface Schema
        Returns:
        the Schema