Skip to content

Commit 834c9fa

Browse files
committed
migrated StringSchema to visitor model; also some pieces of ObjectSchema migration
1 parent da97fbf commit 834c9fa

File tree

4 files changed

+129
-29
lines changed

4 files changed

+129
-29
lines changed

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

Lines changed: 27 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,9 @@
44
import static java.util.Objects.requireNonNull;
55
import static org.everit.json.schema.FormatValidator.NONE;
66

7-
import java.util.ArrayList;
87
import java.util.Arrays;
98
import java.util.List;
109
import java.util.Objects;
11-
import java.util.Optional;
1210
import java.util.regex.Pattern;
1311

1412
import org.everit.json.schema.internal.JSONPrinter;
@@ -146,29 +144,29 @@ private void testPattern(final String subject, List<ValidationException> validat
146144
}
147145

148146
@Override void accept(Visitor visitor) {
149-
throw new UnsupportedOperationException("not yet implemented");
150-
}
151-
152-
@Override
153-
public void validate(final Object subject) {
154-
if (!(subject instanceof String)) {
155-
if (requiresString) {
156-
throw failure(String.class, subject);
157-
}
158-
} else {
159-
List<ValidationException> validationExceptions = new ArrayList<>();
160-
String stringSubject = (String) subject;
161-
testLength(stringSubject, validationExceptions);
162-
testPattern(stringSubject, validationExceptions);
163-
Optional<String> failure = formatValidator.validate(stringSubject);
164-
if (failure.isPresent()) {
165-
validationExceptions.add(failure(failure.get(), "format"));
166-
}
167-
if (null != validationExceptions) {
168-
ValidationException.throwFor(this, validationExceptions);
169-
}
170-
}
171-
}
147+
visitor.visitStringSchema(this);
148+
}
149+
150+
// @Override
151+
// public void validate(final Object subject) {
152+
// if (!(subject instanceof String)) {
153+
// if (requiresString) {
154+
// throw failure(String.class, subject);
155+
// }
156+
// } else {
157+
// List<ValidationException> validationExceptions = new ArrayList<>();
158+
// String stringSubject = (String) subject;
159+
// testLength(stringSubject, validationExceptions);
160+
// testPattern(stringSubject, validationExceptions);
161+
// Optional<String> failure = formatValidator.validate(stringSubject);
162+
// if (failure.isPresent()) {
163+
// validationExceptions.add(failure(failure.get(), "format"));
164+
// }
165+
// if (null != validationExceptions) {
166+
// ValidationException.throwFor(this, validationExceptions);
167+
// }
168+
// }
169+
// }
172170

173171
@Override
174172
public boolean equals(Object o) {
@@ -222,4 +220,8 @@ void describePropertiesTo(JSONPrinter writer) {
222220
writer.key("format").value(formatValidator.formatName());
223221
}
224222
}
223+
224+
public boolean requireString() {
225+
return requiresString;
226+
}
225227
}
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package org.everit.json.schema;
2+
3+
import static java.lang.String.format;
4+
import static java.util.Objects.requireNonNull;
5+
6+
import java.util.Optional;
7+
import java.util.regex.Pattern;
8+
9+
public class StringSchemaValidatingVisitor extends Visitor {
10+
11+
private final Object subject;
12+
13+
private String stringSubject;
14+
15+
private int stringLength;
16+
17+
private final FailureReporter failureReporter;
18+
19+
public StringSchemaValidatingVisitor(Object subject, FailureReporter failureReporter) {
20+
this.subject = subject;
21+
this.failureReporter = requireNonNull(failureReporter, "failureReporter cannot be null");
22+
}
23+
24+
@Override void visitStringSchema(StringSchema stringSchema) {
25+
if (!(subject instanceof String)) {
26+
if (stringSchema.requireString()) {
27+
failureReporter.failure(String.class, subject);
28+
}
29+
} else {
30+
stringSubject = (String) subject;
31+
stringLength = stringSubject.codePointCount(0, stringSubject.length());
32+
super.visitStringSchema(stringSchema);
33+
}
34+
}
35+
36+
@Override void visitMinLength(Integer minLength) {
37+
if (minLength != null && stringLength < minLength.intValue()) {
38+
failureReporter.failure("expected minLength: " + minLength + ", actual: "
39+
+ stringLength, "minLength");
40+
}
41+
}
42+
43+
@Override void visitMaxLength(Integer maxLength) {
44+
if (maxLength != null && stringLength > maxLength.intValue()) {
45+
failureReporter.failure("expected maxLength: " + maxLength + ", actual: "
46+
+ stringLength, "maxLength");
47+
}
48+
}
49+
50+
@Override void visitPattern(Pattern pattern) {
51+
if (pattern != null && !pattern.matcher(stringSubject).find()) {
52+
String message = format("string [%s] does not match pattern %s",
53+
subject, pattern.pattern());
54+
failureReporter.failure(message, "pattern");
55+
}
56+
}
57+
58+
@Override void visitFormat(FormatValidator formatValidator) {
59+
Optional<String> failure = formatValidator.validate(stringSubject);
60+
if (failure.isPresent()) {
61+
failureReporter.failure(failure.get(), "format");
62+
}
63+
}
64+
}

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,11 @@ private static boolean isNull(Object obj) {
8484
}
8585

8686
@Override void visitObjectSchema(ObjectSchema objectSchema) {
87-
super.visitObjectSchema(objectSchema);
87+
objectSchema.accept(new ObjectSchemaValidatingVisitor(subject, this));
88+
}
89+
90+
@Override void visitStringSchema(StringSchema stringSchema) {
91+
stringSchema.accept(new StringSchemaValidatingVisitor(subject, failureReporter));
8892
}
8993

9094
ValidationException getFailureOfSchema(Schema schema, Object input) {

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

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

33
import java.util.List;
4+
import java.util.regex.Pattern;
45

56
abstract class Visitor {
67

@@ -86,15 +87,12 @@ void visitNullSchema(NullSchema nullSchema) {
8687
}
8788

8889
void visitEmptySchema() {
89-
9090
}
9191

9292
void visitConstSchema(ConstSchema constSchema) {
93-
9493
}
9594

9695
void visitEnumSchema(EnumSchema enumSchema) {
97-
9896
}
9997

10098
void visitFalseSchema(FalseSchema falseSchema) {
@@ -105,4 +103,36 @@ void visitNotSchema(NotSchema notSchema) {
105103

106104
void visitReferenceSchema(ReferenceSchema referenceSchema) {
107105
}
106+
107+
void visitObjectSchema(ObjectSchema objectSchema) {
108+
for (String requiredPropName : objectSchema.getRequiredProperties()) {
109+
visitRequiredPropertyName(requiredPropName);
110+
}
111+
visitPropertyNameSchema(objectSchema.getPropertyNameSchema());
112+
}
113+
114+
void visitPropertyNameSchema(Schema propertyNameSchema) {
115+
}
116+
117+
void visitRequiredPropertyName(String requiredPropName) {
118+
}
119+
120+
void visitStringSchema(StringSchema stringSchema) {
121+
visitMinLength(stringSchema.getMinLength());
122+
visitMaxLength(stringSchema.getMaxLength());
123+
visitPattern(stringSchema.getPattern());
124+
visitFormat(stringSchema.getFormatValidator());
125+
}
126+
127+
void visitFormat(FormatValidator formatValidator) {
128+
}
129+
130+
void visitPattern(Pattern pattern) {
131+
}
132+
133+
void visitMaxLength(Integer maxLength) {
134+
}
135+
136+
void visitMinLength(Integer minLength) {
137+
}
108138
}

0 commit comments

Comments
 (0)