Skip to content

Commit 600c107

Browse files
committed
Separate traversal logic from ConditionalSchemaValidatingVisitor into Visitor
1 parent 4d25400 commit 600c107

File tree

4 files changed

+47
-32
lines changed

4 files changed

+47
-32
lines changed

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

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,52 +5,61 @@
55

66
import static java.util.Objects.requireNonNull;
77

8-
public class ConditionalSchemaValidatingVisitor extends Visitor {
8+
class ConditionalSchemaValidatingVisitor extends Visitor {
99

1010
private final Object subject;
1111

1212
private final ValidatingVisitor owner;
1313

14+
private ConditionalSchema conditionalSchema;
15+
16+
private ValidationException ifSchemaException;
17+
1418
public ConditionalSchemaValidatingVisitor(Object subject, ValidatingVisitor owner) {
1519
this.subject = subject;
1620
this.owner = requireNonNull(owner, "owner cannot be null");
1721
}
1822

1923
@Override
2024
void visitConditionalSchema(ConditionalSchema conditionalSchema) {
25+
this.conditionalSchema = conditionalSchema;
2126
if (!conditionalSchema.getIfSchema().isPresent() ||
2227
(!conditionalSchema.getThenSchema().isPresent() && !conditionalSchema.getElseSchema().isPresent())) {
2328
return;
2429
}
25-
ValidationException ifSchemaException = owner.getFailureOfSchema(conditionalSchema.getIfSchema().get(), subject);
26-
if (ifSchemaException == null) {
27-
visitThenSchema(conditionalSchema);
28-
} else {
29-
visitElseSchema(conditionalSchema, ifSchemaException);
30+
super.visitConditionalSchema(conditionalSchema);
31+
}
32+
33+
@Override
34+
void visitIfSchema(Schema ifSchema) {
35+
if (conditionalSchema.getIfSchema().isPresent()) {
36+
ifSchemaException = owner.getFailureOfSchema(ifSchema, subject);
3037
}
3138
}
3239

33-
private void visitThenSchema(ConditionalSchema conditionalSchema) {
34-
if (conditionalSchema.getThenSchema().isPresent()) {
35-
ValidationException thenSchemaException = owner.getFailureOfSchema(conditionalSchema.getThenSchema().get(), subject);
40+
@Override
41+
void visitThenSchema(Schema thenSchema) {
42+
if (ifSchemaException == null) {
43+
ValidationException thenSchemaException = owner.getFailureOfSchema(thenSchema, subject);
3644
if (thenSchemaException != null) {
3745
owner.failure(new ValidationException(conditionalSchema,
3846
new StringBuilder(new StringBuilder("#")),
39-
"Data is invalid for schema of \"then\" ",
47+
"input is invalid against the \"then\" schema",
4048
Arrays.asList(thenSchemaException),
4149
"then",
4250
conditionalSchema.getSchemaLocation()));
4351
}
4452
}
4553
}
4654

47-
private void visitElseSchema(ConditionalSchema conditionalSchema, ValidationException ifSchemaException) {
48-
if (conditionalSchema.getElseSchema().isPresent()) {
49-
ValidationException elseSchemaException = owner.getFailureOfSchema(conditionalSchema.getElseSchema().get(), subject);
55+
@Override
56+
void visitElseSchema(Schema elseSchema) {
57+
if (ifSchemaException != null) {
58+
ValidationException elseSchemaException = owner.getFailureOfSchema(elseSchema, subject);
5059
if (elseSchemaException != null) {
5160
owner.failure(new ValidationException(conditionalSchema,
5261
new StringBuilder(new StringBuilder("#")),
53-
"Data is invalid for schema of both \"if\" and \"else\" ",
62+
"input is invalid against both the \"if\" and \"else\" schema",
5463
Arrays.asList(ifSchemaException, elseSchemaException),
5564
"else",
5665
conditionalSchema.getSchemaLocation()));

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

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
package org.everit.json.schema;
22

3-
import static java.lang.String.format;
4-
import static org.everit.json.schema.EnumSchema.toJavaValue;
3+
import org.json.JSONObject;
54

6-
import java.util.*;
5+
import java.util.ArrayList;
6+
import java.util.Collection;
7+
import java.util.List;
78

8-
import org.json.JSONObject;
9+
import static java.lang.String.format;
10+
import static org.everit.json.schema.EnumSchema.toJavaValue;
911

1012
class ValidatingVisitor extends Visitor {
1113

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,5 +185,17 @@ void visitCombinedSchema(CombinedSchema combinedSchema) {
185185
}
186186

187187
void visitConditionalSchema(ConditionalSchema conditionalSchema){
188+
conditionalSchema.getIfSchema().ifPresent(this::visitIfSchema);
189+
conditionalSchema.getThenSchema().ifPresent(this::visitThenSchema);
190+
conditionalSchema.getElseSchema().ifPresent(this::visitElseSchema);
191+
}
192+
193+
void visitIfSchema(Schema ifSchema) {
194+
}
195+
196+
void visitThenSchema(Schema thenSchema) {
197+
}
198+
199+
void visitElseSchema(Schema elseSchema) {
188200
}
189201
}

core/src/test/java/org/everit/json/schema/ConditionalSchemaTest.java

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22

33
import org.junit.Test;
44

5-
import static org.everit.json.schema.TestSupport.buildWithLocation;
6-
75
public class ConditionalSchemaTest {
86

97
private static final StringSchema MAX_LENGTH_STRING_SCHEMA = StringSchema.builder().maxLength(4).build();
@@ -50,11 +48,10 @@ public void onlyElseSuccess() {
5048

5149
@Test
5250
public void ifSubschemaSuccessThenSubschemaFailure() {
53-
ConditionalSchema subject = buildWithLocation(ConditionalSchema.builder().ifSchema(MAX_LENGTH_STRING_SCHEMA).thenSchema(PATTERN_STRING_SCHEMA));
51+
ConditionalSchema.Builder subject = ConditionalSchema.builder().ifSchema(MAX_LENGTH_STRING_SCHEMA).thenSchema(PATTERN_STRING_SCHEMA);
5452
TestSupport.failureOf(subject)
5553
.expectedKeyword("then")
5654
.expectedPointer("#")
57-
.expectedViolatedSchema(subject)
5855
.input("bar")
5956
.expect();
6057
}
@@ -83,11 +80,10 @@ public void ifSubschemaSuccessElseSubschemaFailure() {
8380

8481
@Test
8582
public void ifSubschemaFailureElseSubschemaFailure() {
86-
ConditionalSchema subject = buildWithLocation(ConditionalSchema.builder().ifSchema(PATTERN_STRING_SCHEMA).elseSchema(MAX_LENGTH_STRING_SCHEMA));
83+
ConditionalSchema.Builder subject = ConditionalSchema.builder().ifSchema(PATTERN_STRING_SCHEMA).elseSchema(MAX_LENGTH_STRING_SCHEMA);
8784
TestSupport.failureOf(subject)
8885
.expectedKeyword("else")
8986
.expectedPointer("#")
90-
.expectedViolatedSchema(subject)
9187
.input("barbar")
9288
.expect();
9389
}
@@ -138,22 +134,20 @@ public void ifSubschemaSuccessThenSubschemaSuccessElseSubSchemaFailure() {
138134

139135
@Test
140136
public void ifSubschemaSuccessThenSubschemaFailureElseSubSchemaSuccess() {
141-
ConditionalSchema subject = buildWithLocation(ConditionalSchema.builder().ifSchema(PATTERN_STRING_SCHEMA).thenSchema(MAX_LENGTH_STRING_SCHEMA).elseSchema(MIN_LENGTH_STRING_SCHEMA));
137+
ConditionalSchema.Builder subject = ConditionalSchema.builder().ifSchema(PATTERN_STRING_SCHEMA).thenSchema(MAX_LENGTH_STRING_SCHEMA).elseSchema(MIN_LENGTH_STRING_SCHEMA);
142138
TestSupport.failureOf(subject)
143139
.expectedKeyword("then")
144140
.expectedPointer("#")
145-
.expectedViolatedSchema(subject)
146141
.input("foobar")
147142
.expect();
148143
}
149144

150145
@Test
151146
public void ifSubschemaSuccessThenSubschemaFailureElseSubSchemaFailure() {
152-
ConditionalSchema subject = buildWithLocation(ConditionalSchema.builder().ifSchema(PATTERN_STRING_SCHEMA).thenSchema(MAX_LENGTH_STRING_SCHEMA).elseSchema(MIN_LENGTH_STRING_SCHEMA));
147+
ConditionalSchema.Builder subject = ConditionalSchema.builder().ifSchema(PATTERN_STRING_SCHEMA).thenSchema(MAX_LENGTH_STRING_SCHEMA).elseSchema(MIN_LENGTH_STRING_SCHEMA);
153148
TestSupport.failureOf(subject)
154149
.expectedKeyword("then")
155150
.expectedPointer("#")
156-
.expectedViolatedSchema(subject)
157151
.input("foooo")
158152
.expect();
159153
}
@@ -165,11 +159,10 @@ public void ifSubschemaFailureThenSubschemaSuccessElseSubSchemaSuccess() {
165159

166160
@Test
167161
public void ifSubschemaFailureThenSubschemaSuccessElseSubSchemaFailure() {
168-
ConditionalSchema subject = buildWithLocation(ConditionalSchema.builder().ifSchema(PATTERN_STRING_SCHEMA).thenSchema(MAX_LENGTH_STRING_SCHEMA).elseSchema(MIN_LENGTH_STRING_SCHEMA));
162+
ConditionalSchema.Builder subject = ConditionalSchema.builder().ifSchema(PATTERN_STRING_SCHEMA).thenSchema(MAX_LENGTH_STRING_SCHEMA).elseSchema(MIN_LENGTH_STRING_SCHEMA);
169163
TestSupport.failureOf(subject)
170164
.expectedKeyword("else")
171165
.expectedPointer("#")
172-
.expectedViolatedSchema(subject)
173166
.input("bar")
174167
.expect();
175168
}
@@ -181,11 +174,10 @@ public void ifSubschemaFailureThenSubschemaFailureElseSubSchemaSuccess() {
181174

182175
@Test
183176
public void ifSubschemaFailureThenSubschemaFailureElseSubSchemaFailure() {
184-
ConditionalSchema subject = buildWithLocation(ConditionalSchema.builder().ifSchema(PATTERN_STRING_SCHEMA).thenSchema(MIN_LENGTH_STRING_SCHEMA).elseSchema(MAX_LENGTH_STRING_SCHEMA));
177+
ConditionalSchema.Builder subject = ConditionalSchema.builder().ifSchema(PATTERN_STRING_SCHEMA).thenSchema(MIN_LENGTH_STRING_SCHEMA).elseSchema(MAX_LENGTH_STRING_SCHEMA);
185178
TestSupport.failureOf(subject)
186179
.expectedKeyword("else")
187180
.expectedPointer("#")
188-
.expectedViolatedSchema(subject)
189181
.input("barbarbar")
190182
.expect();
191183
}

0 commit comments

Comments
 (0)