Skip to content

Commit cb0b4e8

Browse files
committed
extracting ValidationFailureReporter interface
* renaming existing `FailureReporter` to `CollectingFailureReporter` * renaming `#throwExceptionIfFailureFound()` to `#validationFinished()`
1 parent 7c7d5ef commit cb0b4e8

File tree

7 files changed

+47
-19
lines changed

7 files changed

+47
-19
lines changed

core/src/main/java/org/everit/json/schema/FailureReporter.java renamed to core/src/main/java/org/everit/json/schema/CollectingFailureReporter.java

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,33 +5,36 @@
55
import java.util.ArrayList;
66
import java.util.List;
77

8-
class FailureReporter {
8+
class CollectingFailureReporter implements ValidationFailureReporter {
99

1010
private List<ValidationException> failures = new ArrayList<>(1);
1111

1212
private Schema schema;
1313

14-
FailureReporter(Schema schema) {
14+
CollectingFailureReporter(Schema schema) {
1515
this.schema = requireNonNull(schema, "schema cannot be null");
1616
}
1717

18-
void failure(String message, String keyword) {
18+
@Override
19+
public void failure(String message, String keyword) {
1920
failures.add(new ValidationException(schema, message, keyword, schema.getSchemaLocation()));
2021
}
2122

22-
void failure(Class<?> expectedType, Object actualValue) {
23+
@Override
24+
public void failure(Class<?> expectedType, Object actualValue) {
2325
failures.add(new ValidationException(schema, expectedType, actualValue, "type", schema.getSchemaLocation()));
2426
}
2527

26-
void failure(ValidationException exc) {
28+
@Override
29+
public void failure(ValidationException exc) {
2730
failures.add(exc);
2831
}
2932

30-
void throwExceptionIfFailureFound() {
33+
public void validationFinished() {
3134
ValidationException.throwFor(schema, failures);
3235
}
3336

34-
ValidationException inContextOfSchema(Schema schema, Runnable task) {
37+
public ValidationException inContextOfSchema(Schema schema, Runnable task) {
3538
requireNonNull(schema, "schema cannot be null");
3639
int failureCountBefore = failures.size();
3740
Schema origSchema = this.schema;
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
package org.everit.json.schema;
2+
3+
public class EarlyFailingFailureReporter {
4+
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,15 @@ class NumberSchemaValidatingVisitor extends Visitor {
88

99
private final Object subject;
1010

11-
private final FailureReporter failureReporter;
11+
private final ValidationFailureReporter failureReporter;
1212

1313
private boolean exclusiveMinimum;
1414

1515
private boolean exclusiveMaximum;
1616

1717
private double numberSubject;
1818

19-
NumberSchemaValidatingVisitor(Object subject, FailureReporter failureReporter) {
19+
NumberSchemaValidatingVisitor(Object subject, ValidationFailureReporter failureReporter) {
2020
this.subject = subject;
2121
this.failureReporter = failureReporter;
2222
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ public class StringSchemaValidatingVisitor extends Visitor {
1414

1515
private int stringLength;
1616

17-
private final FailureReporter failureReporter;
17+
private final ValidationFailureReporter failureReporter;
1818

19-
public StringSchemaValidatingVisitor(Object subject, FailureReporter failureReporter) {
19+
public StringSchemaValidatingVisitor(Object subject, ValidationFailureReporter failureReporter) {
2020
this.subject = subject;
2121
this.failureReporter = requireNonNull(failureReporter, "failureReporter cannot be null");
2222
}

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@ private static boolean isNull(Object obj) {
1717

1818
protected Object subject;
1919

20-
private FailureReporter failureReporter;
20+
private ValidationFailureReporter failureReporter;
2121

2222
ValidatingVisitor(Object subject, Schema schema) {
2323
this.subject = subject;
24-
this.failureReporter = new FailureReporter(schema);
24+
this.failureReporter = new CollectingFailureReporter(schema);
2525
}
2626

2727
@Override void visitNumberSchema(NumberSchema numberSchema) {
@@ -128,7 +128,7 @@ ValidationException getFailureOfSchema(Schema schema, Object input) {
128128
}
129129

130130
void failIfErrorFound() {
131-
failureReporter.throwExceptionIfFailureFound();
131+
failureReporter.validationFinished();
132132
}
133133

134134
void failure(String message, String keyword) {
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package org.everit.json.schema;
2+
3+
/**
4+
* Internal interface receiving validation failures. Implementations are supposed to throw or collect {@link ValidationException} instances.
5+
* <p>
6+
* The validation always happens in the context of some "current schema", tracked by implementations. This {@link Schema} instance will
7+
* be the {@link ValidationException#getViolatedSchema() violated schema} of the {@code ValidationException}s created.
8+
* </p>
9+
*/
10+
interface ValidationFailureReporter {
11+
12+
void failure(String message, String keyword);
13+
14+
void failure(Class<?> expectedType, Object actualValue);
15+
16+
void failure(ValidationException exc);
17+
18+
ValidationException inContextOfSchema(Schema schema, Runnable task);
19+
20+
void validationFinished();
21+
}

core/src/test/java/org/everit/json/schema/FailureReporterTest.java renamed to core/src/test/java/org/everit/json/schema/CollectingFailureReporterTest.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import org.json.JSONObject;
1010
import org.junit.Test;
1111

12-
public class FailureReporterTest {
12+
public class CollectingFailureReporterTest {
1313

1414
public static final Runnable NOOP = () -> {
1515
};
@@ -28,7 +28,7 @@ public void subSchemaIsNull() {
2828

2929
@Test
3030
public void singleExceptionAdded_andReturned() {
31-
FailureReporter subject = createSubject();
31+
CollectingFailureReporter subject = createSubject();
3232
ValidationException entry = new ValidationException(NullSchema.INSTANCE, JSONObject.NULL.getClass(), "string");
3333

3434
ValidationException actual = subject.inContextOfSchema(NullSchema.INSTANCE, () -> {
@@ -41,7 +41,7 @@ public void singleExceptionAdded_andReturned() {
4141

4242
@Test
4343
public void multipleFailures_areWrapped() {
44-
FailureReporter subject = createSubject();
44+
CollectingFailureReporter subject = createSubject();
4545
ValidationException entry1 = new ValidationException(FalseSchema.builder().build(), JSONObject.NULL.getClass(), "string");
4646
ValidationException entry2 = new ValidationException(NullSchema.INSTANCE, JSONObject.NULL.getClass(), "string");
4747

@@ -56,7 +56,7 @@ public void multipleFailures_areWrapped() {
5656
assertEquals(0, subject.failureCount());
5757
}
5858

59-
private FailureReporter createSubject() {
60-
return new FailureReporter(BooleanSchema.INSTANCE);
59+
private CollectingFailureReporter createSubject() {
60+
return new CollectingFailureReporter(BooleanSchema.INSTANCE);
6161
}
6262
}

0 commit comments

Comments
 (0)