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();
Schema.Type
BOOLEAN_SCHEMA, BYTES_SCHEMA, FLOAT32_SCHEMA, FLOAT64_SCHEMA, INT16_SCHEMA, INT32_SCHEMA, INT64_SCHEMA, INT8_SCHEMA, OPTIONAL_BOOLEAN_SCHEMA, OPTIONAL_BYTES_SCHEMA, OPTIONAL_FLOAT32_SCHEMA, OPTIONAL_FLOAT64_SCHEMA, OPTIONAL_INT16_SCHEMA, OPTIONAL_INT32_SCHEMA, OPTIONAL_INT64_SCHEMA, OPTIONAL_INT8_SCHEMA, OPTIONAL_STRING_SCHEMA, STRING_SCHEMA
Constructor and Description |
---|
SchemaBuilder(Schema.Type type) |
Modifier and Type | Method and Description |
---|---|
static SchemaBuilder |
array(Schema valueSchema) |
static SchemaBuilder |
bool() |
Schema |
build()
Build the Schema using the current settings
|
static SchemaBuilder |
bytes() |
Object |
defaultValue() |
SchemaBuilder |
defaultValue(Object value)
Set the default value for this schema.
|
String |
doc() |
SchemaBuilder |
doc(String doc)
Set the documentation for this schema.
|
Field |
field(String fieldName)
Get a
Field for this Schema by name. |
SchemaBuilder |
field(String fieldName,
Schema fieldSchema)
Add a field to this
Schema.Type.STRUCT schema. |
List<Field> |
fields()
Get the list of fields for this Schema.
|
static SchemaBuilder |
float32() |
static SchemaBuilder |
float64() |
static SchemaBuilder |
int16() |
static SchemaBuilder |
int32() |
static SchemaBuilder |
int64() |
static SchemaBuilder |
int8() |
boolean |
isOptional() |
Schema |
keySchema()
Get the key schema for this map schema.
|
static SchemaBuilder |
map(Schema keySchema,
Schema valueSchema) |
String |
name() |
SchemaBuilder |
name(String name)
Set the name of this schema.
|
SchemaBuilder |
optional()
Set this schema as optional.
|
SchemaBuilder |
parameter(String propertyName,
String propertyValue)
Set a schema parameter.
|
Map<String,String> |
parameters()
Get a map of schema parameters.
|
SchemaBuilder |
parameters(Map<String,String> props)
Set schema parameters.
|
SchemaBuilder |
required()
Set this schema as required.
|
Schema |
schema()
Return a concrete instance of the
Schema specified by this builder |
static SchemaBuilder |
string() |
static SchemaBuilder |
struct() |
Schema.Type |
type() |
static SchemaBuilder |
type(Schema.Type type)
Create a SchemaBuilder for the specified type.
|
Schema |
valueSchema()
Get the value schema for this map or array schema.
|
Integer |
version()
Get the optional version of the schema.
|
SchemaBuilder |
version(Integer version)
Set the version of this schema.
|
public SchemaBuilder(Schema.Type type)
public boolean isOptional()
isOptional
in interface Schema
public SchemaBuilder optional()
public SchemaBuilder required()
public Object defaultValue()
defaultValue
in interface Schema
public SchemaBuilder defaultValue(Object value)
SchemaBuilderException
if it does not match.value
- the default valuepublic SchemaBuilder name(String name)
name
- the schema namepublic Integer version()
Schema
public SchemaBuilder version(Integer version)
version
- the schema versionpublic String doc()
public SchemaBuilder doc(String doc)
doc
- the documentationpublic Map<String,String> parameters()
Schema
parameters
in interface Schema
public SchemaBuilder parameter(String propertyName, String propertyValue)
propertyName
- name of the schema property to definepropertyValue
- value of the schema property to define, as a Stringpublic SchemaBuilder parameters(Map<String,String> props)
props
- Map of properties to setpublic Schema.Type type()
public static SchemaBuilder type(Schema.Type 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.
type
- the schema typepublic static SchemaBuilder int8()
Schema.Type.INT8
SchemaBuilderpublic static SchemaBuilder int16()
Schema.Type.INT16
SchemaBuilderpublic static SchemaBuilder int32()
Schema.Type.INT32
SchemaBuilderpublic static SchemaBuilder int64()
Schema.Type.INT64
SchemaBuilderpublic static SchemaBuilder float32()
Schema.Type.FLOAT32
SchemaBuilderpublic static SchemaBuilder float64()
Schema.Type.FLOAT64
SchemaBuilderpublic static SchemaBuilder bool()
Schema.Type.BOOLEAN
SchemaBuilderpublic static SchemaBuilder string()
Schema.Type.STRING
SchemaBuilderpublic static SchemaBuilder bytes()
Schema.Type.BYTES
SchemaBuilderpublic static SchemaBuilder struct()
Schema.Type.STRUCT
SchemaBuilderpublic SchemaBuilder field(String fieldName, Schema fieldSchema)
Schema.Type.STRUCT
schema. Throws a SchemaBuilderException
if this is not a struct schema.fieldName
- the name of the field to addfieldSchema
- the Schema for the field's valuepublic List<Field> fields()
DataException
if this schema is not a Schema.Type.STRUCT
.public Field field(String fieldName)
Schema
Field
for this Schema by name. Throws a DataException
if this schema is not a
Schema.Type.STRUCT
.public static SchemaBuilder array(Schema valueSchema)
valueSchema
- the schema for elements of the arraySchema.Type.ARRAY
SchemaBuilderpublic static SchemaBuilder map(Schema keySchema, Schema valueSchema)
keySchema
- the schema for keys in the mapvalueSchema
- the schema for values in the mapSchema.Type.MAP
SchemaBuilderpublic Schema keySchema()
Schema
DataException
if this schema is not a map.public Schema valueSchema()
Schema
DataException
if this schema is not a map or array.valueSchema
in interface Schema