Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

schema builder fluency #465

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
24 changes: 24 additions & 0 deletions core/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,30 @@
<binaryCompatible>true</binaryCompatible>
<sourceCompatible>true</sourceCompatible>
</overrideCompatibilityChangeParameter>
<overrideCompatibilityChangeParameter>
<compatibilityChange>METHOD_REMOVED</compatibilityChange>
<binaryCompatible>true</binaryCompatible>
<sourceCompatible>true</sourceCompatible>
<semanticVersionLevel>MAJOR</semanticVersionLevel>
</overrideCompatibilityChangeParameter>
<overrideCompatibilityChangeParameter>
<compatibilityChange>METHOD_RETURN_TYPE_CHANGED</compatibilityChange>
<binaryCompatible>true</binaryCompatible>
<sourceCompatible>true</sourceCompatible>
<semanticVersionLevel>MAJOR</semanticVersionLevel>
</overrideCompatibilityChangeParameter>
<overrideCompatibilityChangeParameter>
<compatibilityChange>CONSTRUCTOR_REMOVED</compatibilityChange>
<binaryCompatible>true</binaryCompatible>
<sourceCompatible>true</sourceCompatible>
<semanticVersionLevel>MAJOR</semanticVersionLevel>
</overrideCompatibilityChangeParameter>
<overrideCompatibilityChangeParameter>
<compatibilityChange>METHOD_ABSTRACT_ADDED_TO_CLASS</compatibilityChange>
<binaryCompatible>true</binaryCompatible>
<sourceCompatible>true</sourceCompatible>
<semanticVersionLevel>MAJOR</semanticVersionLevel>
</overrideCompatibilityChangeParameter>
</overrideCompatibilityChangeParameters>
</parameter>
</configuration>
Expand Down
8 changes: 7 additions & 1 deletion core/src/main/java/org/everit/json/schema/ArraySchema.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ public class ArraySchema
* Builder class for {@link ArraySchema}.
*/
public static class Builder
extends Schema.Builder<ArraySchema> {
extends Schema.Builder<ArraySchema, Builder> {

private boolean requiresArray = true;

Expand All @@ -39,6 +39,12 @@ public static class Builder

private Schema containedItemSchema;

@Override
protected Builder getBuilder()
{
return this;
}

/**
* Adds an item schema for tuple validation. The array items of the subject under validation
* will be matched to expected schemas by their index. In other words the {n}th
Expand Down
8 changes: 7 additions & 1 deletion core/src/main/java/org/everit/json/schema/BooleanSchema.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,13 @@ public class BooleanSchema extends Schema {
/**
* Builder class for {@link BooleanSchema}.
*/
public static class Builder extends Schema.Builder<BooleanSchema> {
public static class Builder extends Schema.Builder<BooleanSchema, Builder> {

@Override
protected Builder getBuilder()
{
return this;
}

@Override
public BooleanSchema build() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,20 @@ public class CombinedSchema extends Schema {
/**
* Builder class for {@link CombinedSchema}.
*/
public static class Builder extends Schema.Builder<CombinedSchema> {
public static class Builder extends Schema.Builder<CombinedSchema, Builder> {

private ValidationCriterion criterion;

private Collection<Schema> subschemas = new ArrayList<>();

private boolean synthetic;

@Override
protected Builder getBuilder()
{
return this;
}

@Override
public CombinedSchema build() {
return new CombinedSchema(this);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,17 @@ public class ConditionalSchema extends Schema {
/**
* Builder class for {@link ConditionalSchema}.
*/
public static class Builder extends Schema.Builder<ConditionalSchema> {
public static class Builder extends Schema.Builder<ConditionalSchema, Builder> {
private Schema ifSchema;
private Schema thenSchema;
private Schema elseSchema;

@Override
protected Builder getBuilder()
{
return this;
}

public Builder ifSchema(final Schema ifSchema) {
this.ifSchema = ifSchema;
return this;
Expand Down
23 changes: 18 additions & 5 deletions core/src/main/java/org/everit/json/schema/ConstSchema.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,27 +4,40 @@

public class ConstSchema extends Schema {

public static class ConstSchemaBuilder extends Schema.Builder<ConstSchema> {
/**
* @deprecated This class has been renamed to "Builder".
*/
@Deprecated
public static class ConstSchemaBuilder extends Builder {
}

public static class Builder extends Schema.Builder<ConstSchema, Builder> {

private Object permittedValue;

public ConstSchemaBuilder permittedValue(Object permittedValue) {
public Builder permittedValue(Object permittedValue) {
this.permittedValue = permittedValue;
return this;
}

@Override
protected Builder getBuilder()
{
return this;
}

@Override public ConstSchema build() {
return new ConstSchema(this);
}
}

public static ConstSchemaBuilder builder() {
return new ConstSchemaBuilder();
public static Builder builder() {
return new Builder();
}

private final Object permittedValue;

protected ConstSchema(ConstSchemaBuilder builder) {
protected ConstSchema(Builder builder) {
super(builder);
this.permittedValue = toJavaValue(builder.permittedValue);
}
Expand Down
8 changes: 7 additions & 1 deletion core/src/main/java/org/everit/json/schema/EmptySchema.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,13 @@ public class EmptySchema extends Schema {
/**
* Builder class for {@link EmptySchema}.
*/
public static class Builder extends Schema.Builder<EmptySchema> {
public static class Builder extends Schema.Builder<EmptySchema, Builder> {

@Override
protected Builder getBuilder()
{
return this;
}

@Override
public EmptySchema build() {
Expand Down
8 changes: 7 additions & 1 deletion core/src/main/java/org/everit/json/schema/EnumSchema.java
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,13 @@ static List<Object> toJavaValues(List<Object> orgJsons) {
/**
* Builder class for {@link EnumSchema}.
*/
public static class Builder extends Schema.Builder<EnumSchema> {
public static class Builder extends Schema.Builder<EnumSchema, Builder> {

@Override
protected Builder getBuilder()
{
return this;
}

private List<Object> possibleValues = new ArrayList<>();

Expand Down
8 changes: 7 additions & 1 deletion core/src/main/java/org/everit/json/schema/FalseSchema.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,13 @@
*/
public class FalseSchema extends Schema {

public static class Builder extends Schema.Builder<FalseSchema> {
public static class Builder extends Schema.Builder<FalseSchema, Builder> {

@Override
protected Builder getBuilder()
{
return this;
}

@Override public FalseSchema build() {
return new FalseSchema(this);
Expand Down
8 changes: 7 additions & 1 deletion core/src/main/java/org/everit/json/schema/NotSchema.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,13 @@ public class NotSchema extends Schema {
/**
* Builder class for {@link NotSchema}.
*/
public static class Builder extends Schema.Builder<NotSchema> {
public static class Builder extends Schema.Builder<NotSchema, Builder> {

@Override
protected Builder getBuilder()
{
return this;
}

private Schema mustNotMatch;

Expand Down
8 changes: 7 additions & 1 deletion core/src/main/java/org/everit/json/schema/NullSchema.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,13 @@ public class NullSchema extends Schema {
/**
* Builder class for {@link NullSchema}.
*/
public static class Builder extends Schema.Builder<NullSchema> {
public static class Builder extends Schema.Builder<NullSchema, Builder> {

@Override
protected Builder getBuilder()
{
return this;
}

@Override
public NullSchema build() {
Expand Down
8 changes: 7 additions & 1 deletion core/src/main/java/org/everit/json/schema/NumberSchema.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ public class NumberSchema extends Schema {
/**
* Builder class for {@link NumberSchema}.
*/
public static class Builder extends Schema.Builder<NumberSchema> {
public static class Builder extends Schema.Builder<NumberSchema, Builder> {

private Number minimum;

Expand All @@ -30,6 +30,12 @@ public static class Builder extends Schema.Builder<NumberSchema> {

private boolean requiresInteger = false;

@Override
protected Builder getBuilder()
{
return this;
}

@Override
public NumberSchema build() {
return new NumberSchema(this);
Expand Down
11 changes: 8 additions & 3 deletions core/src/main/java/org/everit/json/schema/ObjectSchema.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,11 @@ public class ObjectSchema extends Schema {
/**
* Builder class for {@link ObjectSchema}.
*/
public static class Builder extends Schema.Builder<ObjectSchema> {
public static class Builder extends Schema.Builder<ObjectSchema, Builder> {

private static final RegexpFactory DEFAULT_REGEXP_FACTORY = new JavaUtilRegexpFactory();

private static final Regexp toRegexp(String pattern) {
private static Regexp toRegexp(String pattern) {
return DEFAULT_REGEXP_FACTORY.createHandler(pattern);
}

Expand Down Expand Up @@ -59,6 +59,12 @@ private static final Regexp toRegexp(String pattern) {

public boolean oneOrMoreDefaultProperty = false;

@Override
protected Builder getBuilder()
{
return this;
}

public Builder additionalProperties(boolean additionalProperties) {
this.additionalProperties = additionalProperties;
return this;
Expand Down Expand Up @@ -159,7 +165,6 @@ public Builder propertyNameSchema(Schema propertyNameSchema) {
this.propertyNameSchema = propertyNameSchema;
return this;
}

}

public static Builder builder() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public class ReferenceSchema extends Schema {
/**
* Builder class for {@link ReferenceSchema}.
*/
public static class Builder extends Schema.Builder<ReferenceSchema> {
public static class Builder extends Schema.Builder<ReferenceSchema, Builder> {

private ReferenceSchema retval;

Expand All @@ -25,6 +25,12 @@ public static class Builder extends Schema.Builder<ReferenceSchema> {
*/
private String refValue = "";

@Override
protected Builder getBuilder()
{
return this;
}

/**
* This method caches its result, so multiple invocations will return referentially the same
* {@link ReferenceSchema} instance.
Expand Down