Skip to content

Commit 5fd1a9e

Browse files
committed
moving readOnly and writeOnly validation into separate classes
1 parent 2404173 commit 5fd1a9e

File tree

3 files changed

+57
-13
lines changed

3 files changed

+57
-13
lines changed
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package org.everit.json.schema;
2+
3+
interface ReadWriteValidator {
4+
5+
static ReadWriteValidator createForContext(ReadWriteContext context, ValidationFailureReporter failureReporter) {
6+
if (context == null) {
7+
return NONE;
8+
} else if (context == ReadWriteContext.READ) {
9+
return new WriteOnlyValidator(failureReporter);
10+
} else if (context == ReadWriteContext.WRITE) {
11+
return new ReadOnlyValidator(failureReporter);
12+
}
13+
throw new IllegalArgumentException("unknown ReadWriteContext: " + context);
14+
}
15+
16+
ReadWriteValidator NONE = (schema, subject) -> {
17+
};
18+
19+
void validate(Schema schema, Object subject);
20+
21+
}
22+
23+
class ReadOnlyValidator implements ReadWriteValidator {
24+
25+
private final ValidationFailureReporter failureReporter;
26+
27+
ReadOnlyValidator(ValidationFailureReporter failureReporter) {
28+
this.failureReporter = failureReporter;
29+
}
30+
31+
@Override public void validate(Schema schema, Object subject) {
32+
if (schema.isReadOnly() == Boolean.TRUE && subject != null) {
33+
failureReporter.failure("value is read-only", "readOnly");
34+
}
35+
}
36+
}
37+
38+
class WriteOnlyValidator implements ReadWriteValidator {
39+
40+
private final ValidationFailureReporter failureReporter;
41+
42+
WriteOnlyValidator(ValidationFailureReporter failureReporter) {
43+
this.failureReporter = failureReporter;
44+
}
45+
46+
@Override public void validate(Schema schema, Object subject) {
47+
if (schema.isWriteOnly() == Boolean.TRUE && subject != null) {
48+
failureReporter.failure("value is write-only", "writeOnly");
49+
}
50+
}
51+
}

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

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -19,29 +19,21 @@ private static boolean isNull(Object obj) {
1919

2020
private ValidationFailureReporter failureReporter;
2121

22-
private final ReadWriteContext readWriteContext;
22+
private final ReadWriteValidator readWriteValidator;
2323

2424
@Override
2525
void visit(Schema schema) {
2626
if (schema.isNullable() == Boolean.FALSE && isNull(subject)) {
2727
failureReporter.failure("value cannot be null", "nullable");
2828
}
29-
if (readWriteContext == ReadWriteContext.READ
30-
&& schema.isWriteOnly() == Boolean.TRUE
31-
&& subject != null) {
32-
failureReporter.failure("value is write-only", "writeOnly");
33-
} else if (readWriteContext == ReadWriteContext.WRITE
34-
&& schema.isReadOnly() == Boolean.TRUE
35-
&& subject != null) {
36-
failureReporter.failure("value is read-only", "readOnly");
37-
}
29+
readWriteValidator.validate(schema, subject);
3830
super.visit(schema);
3931
}
4032

41-
ValidatingVisitor(Object subject, ValidationFailureReporter failureReporter, ReadWriteContext readWriteContext) {
33+
ValidatingVisitor(Object subject, ValidationFailureReporter failureReporter, ReadWriteValidator readWriteValidator) {
4234
this.subject = subject;
4335
this.failureReporter = failureReporter;
44-
this.readWriteContext = readWriteContext;
36+
this.readWriteValidator = readWriteValidator;
4537
}
4638

4739
@Override void visitNumberSchema(NumberSchema numberSchema) {

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,8 @@ class DefaultValidator implements Validator {
4848

4949
@Override public void performValidation(Schema schema, Object input) {
5050
ValidationFailureReporter failureReporter = createFailureReporter(schema);
51-
ValidatingVisitor visitor = new ValidatingVisitor(input, failureReporter, readWriteContext);
51+
ReadWriteValidator readWriteValidator = ReadWriteValidator.createForContext(readWriteContext, failureReporter);
52+
ValidatingVisitor visitor = new ValidatingVisitor(input, failureReporter, readWriteValidator);
5253
visitor.visit(schema);
5354
visitor.failIfErrorFound();
5455
}

0 commit comments

Comments
 (0)