Skip to content

Commit bad6a5d

Browse files
add (crude) definition schema functionality
1 parent 440c9ef commit bad6a5d

File tree

3 files changed

+46
-2
lines changed

3 files changed

+46
-2
lines changed

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

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ private static final Regexp toRegexp(String pattern) {
3939

4040
private boolean requiresObject = true;
4141

42+
private final Map<String, Schema> definitionSchemas = new HashMap<>();
43+
4244
private final Map<String, Schema> propertySchemas = new HashMap<>();
4345

4446
private boolean additionalProperties = true;
@@ -64,6 +66,22 @@ public Builder additionalProperties(boolean additionalProperties) {
6466
return this;
6567
}
6668

69+
/**
70+
* Adds a definition schema.
71+
*
72+
* @param definitionName
73+
* the name of the definition
74+
* @param schema
75+
* the definition of the {@code schema}
76+
* @return {@code this}
77+
*/
78+
public Builder addDefinitionSchema(String definitionName, Schema schema) {
79+
requireNonNull(definitionName, "definitionName cannot be null");
80+
requireNonNull(schema, "schema cannot be null");
81+
definitionSchemas.put(definitionName, schema);
82+
return this;
83+
}
84+
6785
/**
6886
* Adds a property schema.
6987
*
@@ -170,6 +188,8 @@ private static <K, V> Map<K, V> copyMap(Map<K, V> original) {
170188
return Collections.unmodifiableMap(new HashMap<>(original));
171189
}
172190

191+
private final Map<String, Schema> definitionSchemas;
192+
173193
private final Map<String, Schema> propertySchemas;
174194

175195
private final boolean additionalProperties;
@@ -202,8 +222,10 @@ private static <K, V> Map<K, V> copyMap(Map<K, V> original) {
202222
*/
203223
public ObjectSchema(Builder builder) {
204224
super(builder);
225+
this.definitionSchemas = builder.definitionSchemas == null ? null
226+
: Collections.unmodifiableMap(builder.definitionSchemas);
205227
this.propertySchemas = builder.propertySchemas == null ? null
206-
: Collections.unmodifiableMap(builder.propertySchemas);
228+
: Collections.unmodifiableMap(builder.propertySchemas);
207229
this.additionalProperties = builder.additionalProperties;
208230
this.schemaOfAdditionalProperties = builder.schemaOfAdditionalProperties;
209231
if (!additionalProperties && schemaOfAdditionalProperties != null) {
@@ -248,6 +270,10 @@ public Map<String, Set<String>> getPropertyDependencies() {
248270
return propertyDependencies;
249271
}
250272

273+
public Map<String, Schema> getDefinitionSchemas() {
274+
return definitionSchemas;
275+
}
276+
251277
public Map<String, Schema> getPropertySchemas() {
252278
return propertySchemas;
253279
}
@@ -344,6 +370,7 @@ public boolean equals(Object o) {
344370
return that.canEqual(this) &&
345371
additionalProperties == that.additionalProperties &&
346372
requiresObject == that.requiresObject &&
373+
Objects.equals(definitionSchemas, that.definitionSchemas) &&
347374
Objects.equals(propertySchemas, that.propertySchemas) &&
348375
Objects.equals(schemaOfAdditionalProperties, that.schemaOfAdditionalProperties) &&
349376
Objects.equals(requiredProperties, that.requiredProperties) &&
@@ -362,7 +389,7 @@ public boolean equals(Object o) {
362389

363390
@Override
364391
public int hashCode() {
365-
return Objects.hash(super.hashCode(), propertySchemas, propertyNameSchema, additionalProperties,
392+
return Objects.hash(super.hashCode(), definitionSchemas, propertySchemas, propertyNameSchema, additionalProperties,
366393
schemaOfAdditionalProperties, requiredProperties, minProperties, maxProperties, propertyDependencies,
367394
schemaDependencies, requiresObject, patternProperties, oneOrMoreDefaultProperty);
368395
}

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,13 @@ private void describePropertyDependencies(Map<String, Set<String>> propertyDepen
227227
visit(propertyNameSchema);
228228
}
229229

230+
@Override void visitDefinitionSchemas(Map<String, Schema> definitionSchemas) {
231+
if (!definitionSchemas.isEmpty()) {
232+
writer.key("definitions");
233+
printSchemaMap(definitionSchemas);
234+
}
235+
}
236+
230237
@Override void visitPropertySchemas(Map<String, Schema> propertySchemas) {
231238
if (!propertySchemas.isEmpty()) {
232239
writer.key("properties");

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,10 @@ void visitObjectSchema(ObjectSchema objectSchema) {
159159
for (Map.Entry<String, Schema> schemaDep : objectSchema.getSchemaDependencies().entrySet()) {
160160
visitSchemaDependency(schemaDep.getKey(), schemaDep.getValue());
161161
}
162+
Map<String, Schema> definitionSchemas = objectSchema.getDefinitionSchemas();
163+
if (definitionSchemas != null) {
164+
visitDefinitionSchemas(definitionSchemas);
165+
}
162166
Map<String, Schema> propertySchemas = objectSchema.getPropertySchemas();
163167
if (propertySchemas != null) {
164168
visitPropertySchemas(propertySchemas);
@@ -177,6 +181,12 @@ void visitPatternProperties(Map<Regexp, Schema> patternProperties) {
177181
}
178182
}
179183

184+
void visitDefinitionSchemas(Map<String, Schema> definitionSchemas) {
185+
for (Map.Entry<String, Schema> entry : definitionSchemas.entrySet()) {
186+
visitPropertySchema(entry.getKey(), entry.getValue());
187+
}
188+
}
189+
180190
void visitPropertySchemas(Map<String, Schema> propertySchemas) {
181191
for (Map.Entry<String, Schema> entry : propertySchemas.entrySet()) {
182192
visitPropertySchema(entry.getKey(), entry.getValue());

0 commit comments

Comments
 (0)