Skip to content

Commit 4d25400

Browse files
committed
Move ConditionalSchema visit logic into new class: ConditionalSchemaValidatingVisitor
1 parent 1f4772f commit 4d25400

File tree

2 files changed

+62
-38
lines changed

2 files changed

+62
-38
lines changed
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package org.everit.json.schema;
2+
3+
4+
import java.util.Arrays;
5+
6+
import static java.util.Objects.requireNonNull;
7+
8+
public class ConditionalSchemaValidatingVisitor extends Visitor {
9+
10+
private final Object subject;
11+
12+
private final ValidatingVisitor owner;
13+
14+
public ConditionalSchemaValidatingVisitor(Object subject, ValidatingVisitor owner) {
15+
this.subject = subject;
16+
this.owner = requireNonNull(owner, "owner cannot be null");
17+
}
18+
19+
@Override
20+
void visitConditionalSchema(ConditionalSchema conditionalSchema) {
21+
if (!conditionalSchema.getIfSchema().isPresent() ||
22+
(!conditionalSchema.getThenSchema().isPresent() && !conditionalSchema.getElseSchema().isPresent())) {
23+
return;
24+
}
25+
ValidationException ifSchemaException = owner.getFailureOfSchema(conditionalSchema.getIfSchema().get(), subject);
26+
if (ifSchemaException == null) {
27+
visitThenSchema(conditionalSchema);
28+
} else {
29+
visitElseSchema(conditionalSchema, ifSchemaException);
30+
}
31+
}
32+
33+
private void visitThenSchema(ConditionalSchema conditionalSchema) {
34+
if (conditionalSchema.getThenSchema().isPresent()) {
35+
ValidationException thenSchemaException = owner.getFailureOfSchema(conditionalSchema.getThenSchema().get(), subject);
36+
if (thenSchemaException != null) {
37+
owner.failure(new ValidationException(conditionalSchema,
38+
new StringBuilder(new StringBuilder("#")),
39+
"Data is invalid for schema of \"then\" ",
40+
Arrays.asList(thenSchemaException),
41+
"then",
42+
conditionalSchema.getSchemaLocation()));
43+
}
44+
}
45+
}
46+
47+
private void visitElseSchema(ConditionalSchema conditionalSchema, ValidationException ifSchemaException) {
48+
if (conditionalSchema.getElseSchema().isPresent()) {
49+
ValidationException elseSchemaException = owner.getFailureOfSchema(conditionalSchema.getElseSchema().get(), subject);
50+
if (elseSchemaException != null) {
51+
owner.failure(new ValidationException(conditionalSchema,
52+
new StringBuilder(new StringBuilder("#")),
53+
"Data is invalid for schema of both \"if\" and \"else\" ",
54+
Arrays.asList(ifSchemaException, elseSchemaException),
55+
"else",
56+
conditionalSchema.getSchemaLocation()));
57+
}
58+
}
59+
}
60+
61+
}

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

Lines changed: 1 addition & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -138,44 +138,7 @@ void visitCombinedSchema(CombinedSchema combinedSchema) {
138138

139139
@Override
140140
void visitConditionalSchema(ConditionalSchema conditionalSchema) {
141-
if (!conditionalSchema.getIfSchema().isPresent() ||
142-
(!conditionalSchema.getThenSchema().isPresent() && !conditionalSchema.getElseSchema().isPresent())) {
143-
return;
144-
}
145-
ValidationException ifSchemaException = getFailureOfSchema(conditionalSchema.getIfSchema().get(), subject);
146-
if (ifSchemaException == null) {
147-
visitThenSchema(conditionalSchema);
148-
} else {
149-
visitElseSchema(conditionalSchema, ifSchemaException);
150-
}
151-
}
152-
153-
private void visitThenSchema(ConditionalSchema conditionalSchema) {
154-
if (conditionalSchema.getThenSchema().isPresent()) {
155-
ValidationException thenSchemaException = getFailureOfSchema(conditionalSchema.getThenSchema().get(), subject);
156-
if (thenSchemaException != null) {
157-
failureReporter.failure(new ValidationException(conditionalSchema,
158-
new StringBuilder(new StringBuilder("#")),
159-
"Data is invalid for schema of \"then\" ",
160-
Arrays.asList(thenSchemaException),
161-
"then",
162-
conditionalSchema.getSchemaLocation()));
163-
}
164-
}
165-
}
166-
167-
private void visitElseSchema(ConditionalSchema conditionalSchema, ValidationException ifSchemaException) {
168-
if (conditionalSchema.getElseSchema().isPresent()) {
169-
ValidationException elseSchemaException = getFailureOfSchema(conditionalSchema.getElseSchema().get(), subject);
170-
if (elseSchemaException != null) {
171-
failureReporter.failure(new ValidationException(conditionalSchema,
172-
new StringBuilder(new StringBuilder("#")),
173-
"Data is invalid for schema of both \"if\" and \"else\" ",
174-
Arrays.asList(ifSchemaException, elseSchemaException),
175-
"else",
176-
conditionalSchema.getSchemaLocation()));
177-
}
178-
}
141+
conditionalSchema.accept(new ConditionalSchemaValidatingVisitor(subject, this));
179142
}
180143

181144
ValidationException getFailureOfSchema(Schema schema, Object input) {

0 commit comments

Comments
 (0)