Skip to content

Commit ff0e317

Browse files
committed
adding further event types and ValidationListener methods
1 parent 6ec2666 commit ff0e317

15 files changed

+265
-200
lines changed

core/src/main/java/org/everit/json/schema/ValidatingVisitor.java

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@
1010
import java.util.Collection;
1111
import java.util.List;
1212

13+
import org.everit.json.schema.listener.SchemaReferencedEvent;
1314
import org.everit.json.schema.listener.SubschemaMatchEvent;
1415
import org.everit.json.schema.listener.SubschemaMismatchEvent;
15-
import org.everit.json.schema.listener.SchemaReferencedEvent;
1616
import org.json.JSONArray;
1717
import org.json.JSONObject;
1818

@@ -36,7 +36,7 @@ private static boolean isNull(Object obj) {
3636

3737
protected Object subject;
3838

39-
private final SchemaVisitorListener schemaVisitorListener;
39+
private final ValidationListener validationListener;
4040

4141
private ValidationFailureReporter failureReporter;
4242

@@ -51,14 +51,15 @@ void visit(Schema schema) {
5151
super.visit(schema);
5252
}
5353

54-
ValidatingVisitor(Object subject, ValidationFailureReporter failureReporter, ReadWriteValidator readWriteValidator, SchemaVisitorListener schemaVisitorListener) {
54+
ValidatingVisitor(Object subject, ValidationFailureReporter failureReporter, ReadWriteValidator readWriteValidator,
55+
ValidationListener validationListener) {
5556
if (subject != null && !VALIDATED_TYPES.stream().anyMatch(type -> type.isAssignableFrom(subject.getClass()))) {
5657
throw new IllegalArgumentException(format(TYPE_FAILURE_MSG, subject.getClass().getSimpleName()));
5758
}
5859
this.subject = subject;
5960
this.failureReporter = failureReporter;
6061
this.readWriteValidator = readWriteValidator;
61-
this.schemaVisitorListener = schemaVisitorListener;
62+
this.validationListener = validationListener;
6263
}
6364

6465
@Override
@@ -131,7 +132,9 @@ void visitReferenceSchema(ReferenceSchema referenceSchema) {
131132
if (failure != null) {
132133
failureReporter.failure(failure);
133134
}
134-
reportSchemaReferencedEvent(referenceSchema, failure);
135+
if (validationListener != null) {
136+
validationListener.schemaReferenced(new SchemaReferencedEvent(referenceSchema, subject, referredSchema));
137+
}
135138
}
136139

137140
@Override
@@ -175,21 +178,15 @@ void visitConditionalSchema(ConditionalSchema conditionalSchema) {
175178
}
176179

177180
void reportSchemaMatchEvent(Schema schema, ValidationException rval) {
178-
if (schemaVisitorListener != null) {
181+
if (validationListener != null) {
179182
if (rval == null) {
180-
schemaVisitorListener.subschemaMatch(new SubschemaMatchEvent(schema));
183+
validationListener.subschemaMatch(new SubschemaMatchEvent(schema));
181184
} else {
182-
schemaVisitorListener.subschemaMismatch(new SubschemaMismatchEvent(schema, rval));
185+
validationListener.subschemaMismatch(new SubschemaMismatchEvent(schema, rval));
183186
}
184187
}
185188
}
186189

187-
void reportSchemaReferencedEvent(Schema schema, ValidationException rval) {
188-
if (schemaVisitorListener != null) {
189-
schemaVisitorListener.schemaReferenced(new SchemaReferencedEvent(schema, rval));
190-
}
191-
}
192-
193190
ValidationException getFailureOfSchema(Schema schema, Object input) {
194191
Object origSubject = this.subject;
195192
this.subject = input;
Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,32 @@
11
package org.everit.json.schema;
22

3-
43
import org.everit.json.schema.listener.SchemaReferencedEvent;
54
import org.everit.json.schema.listener.SubschemaMatchEvent;
65
import org.everit.json.schema.listener.SubschemaMismatchEvent;
76

87
/**
98
* Interface to capture which schemas are matching against a specific event in the {@link ValidatingVisitor}.
109
*/
11-
public interface SchemaVisitorListener {
10+
public interface ValidationListener {
1211

1312
void subschemaMatch(SubschemaMatchEvent matchEvent);
1413

1514
void subschemaMismatch(SubschemaMismatchEvent mismatchEvent);
1615

1716
void schemaReferenced(SchemaReferencedEvent referencedEvent);
1817

18+
// --
19+
20+
void ifSchemaMatch();
21+
22+
void ifSchemaMismatch();
23+
24+
void thenSchemaMatch();
25+
26+
void thenSchemaMismatch();
27+
28+
void elseSchemaMatch();
29+
30+
void elseSchemaMismatch();
1931
}
2032

core/src/main/java/org/everit/json/schema/Validator.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ class ValidatorBuilder {
1010

1111
private ReadWriteContext readWriteContext;
1212

13-
private SchemaVisitorListener schemaVisitorListener;
13+
private ValidationListener validationListener;
1414

1515
public ValidatorBuilder failEarly() {
1616
this.failEarly = true;
@@ -22,13 +22,13 @@ public ValidatorBuilder readWriteContext(ReadWriteContext readWriteContext) {
2222
return this;
2323
}
2424

25-
public ValidatorBuilder withListener(SchemaVisitorListener schemaVisitorListener) {
26-
this.schemaVisitorListener = schemaVisitorListener;
25+
public ValidatorBuilder withListener(ValidationListener validationListener) {
26+
this.validationListener = validationListener;
2727
return this;
2828
}
2929

3030
public Validator build() {
31-
return new DefaultValidator(failEarly, readWriteContext, schemaVisitorListener);
31+
return new DefaultValidator(failEarly, readWriteContext, validationListener);
3232
}
3333

3434
}
@@ -48,22 +48,22 @@ class DefaultValidator implements Validator {
4848

4949
private final ReadWriteContext readWriteContext;
5050

51-
private final SchemaVisitorListener schemaVisitorListener;
51+
private final ValidationListener validationListener;
5252

5353
DefaultValidator(boolean failEarly, ReadWriteContext readWriteContext) {
5454
this(failEarly, readWriteContext, null);
5555
}
5656

57-
DefaultValidator(boolean failEarly, ReadWriteContext readWriteContext, SchemaVisitorListener schemaVisitorListener) {
57+
DefaultValidator(boolean failEarly, ReadWriteContext readWriteContext, ValidationListener validationListener) {
5858
this.failEarly = failEarly;
5959
this.readWriteContext = readWriteContext;
60-
this.schemaVisitorListener = schemaVisitorListener;
60+
this.validationListener = validationListener;
6161
}
6262

6363
@Override public void performValidation(Schema schema, Object input) {
6464
ValidationFailureReporter failureReporter = createFailureReporter(schema);
6565
ReadWriteValidator readWriteValidator = ReadWriteValidator.createForContext(readWriteContext, failureReporter);
66-
ValidatingVisitor visitor = new ValidatingVisitor(input, failureReporter, readWriteValidator, schemaVisitorListener);
66+
ValidatingVisitor visitor = new ValidatingVisitor(input, failureReporter, readWriteValidator, validationListener);
6767
visitor.visit(schema);
6868
visitor.failIfErrorFound();
6969
}

core/src/main/java/org/everit/json/schema/listener/AbstractSchemaEvent.java

Lines changed: 0 additions & 24 deletions
This file was deleted.
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package org.everit.json.schema.listener;
2+
3+
import org.everit.json.schema.CombinedSchema;
4+
import org.everit.json.schema.ValidationException;
5+
6+
public class CombinedSchemaMismatchEvent extends CombinedSchemaValidationEvent implements MismatchEvent {
7+
8+
private final ValidationException failure;
9+
10+
protected CombinedSchemaMismatchEvent(CombinedSchema schema, Object instance, ValidationException failure) {
11+
super(schema, instance);
12+
this.failure = failure;
13+
}
14+
15+
@Override public ValidationException getFailure() {
16+
return failure;
17+
}
18+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package org.everit.json.schema.listener;
2+
3+
import org.everit.json.schema.CombinedSchema;
4+
5+
public class CombinedSchemaValidationEvent extends ValidationEvent<CombinedSchema> {
6+
7+
protected CombinedSchemaValidationEvent(CombinedSchema schema, Object instance) {
8+
super(schema, instance);
9+
}
10+
11+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package org.everit.json.schema.listener;
2+
3+
import org.everit.json.schema.ConditionalSchema;
4+
import org.everit.json.schema.ValidationException;
5+
6+
public class ConditionalSchemaMismatchEvent extends ConditionalSchemaValidationEvent implements MismatchEvent {
7+
8+
private final ValidationException failure;
9+
10+
protected ConditionalSchemaMismatchEvent(ConditionalSchema schema, Object instance, ValidationException failure) {
11+
super(schema, instance);
12+
this.failure = failure;
13+
}
14+
15+
@Override public ValidationException getFailure() {
16+
return failure;
17+
}
18+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package org.everit.json.schema.listener;
2+
3+
import org.everit.json.schema.ConditionalSchema;
4+
5+
public class ConditionalSchemaValidationEvent extends ValidationEvent<ConditionalSchema> {
6+
7+
protected ConditionalSchemaValidationEvent(ConditionalSchema schema, Object instance) {
8+
super(schema, instance);
9+
}
10+
11+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package org.everit.json.schema.listener;
2+
3+
import org.everit.json.schema.ValidationException;
4+
5+
public interface MismatchEvent {
6+
7+
ValidationException getFailure();
8+
9+
}
Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,18 @@
11
package org.everit.json.schema.listener;
22

3+
import org.everit.json.schema.ReferenceSchema;
34
import org.everit.json.schema.Schema;
4-
import org.everit.json.schema.ValidationException;
55

6-
public class SchemaReferencedEvent extends AbstractSchemaEvent {
6+
public class SchemaReferencedEvent extends ValidationEvent<ReferenceSchema> {
77

8-
public SchemaReferencedEvent(Schema schema, ValidationException rval) {
9-
super(schema, rval);
8+
private final Schema referredSchema;
9+
10+
public SchemaReferencedEvent(ReferenceSchema schema, Object instance, Schema referredSchema) {
11+
super(schema, instance);
12+
this.referredSchema = referredSchema;
1013
}
1114

12-
}
15+
public Schema getReferredSchema() {
16+
return referredSchema;
17+
}
18+
}

0 commit comments

Comments
 (0)