
org.hisrc.jsonix.compilation.jsonschema.JsonSchemaModuleCompiler Maven / Gradle / Ivy
The newest version!
package org.hisrc.jsonix.compilation.jsonschema;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;
import javax.json.JsonBuilderFactory;
import org.apache.commons.lang3.Validate;
import org.hisrc.jsonix.definition.JsonSchema;
import org.hisrc.jsonix.definition.Mapping;
import org.hisrc.jsonix.definition.Module;
import org.hisrc.jsonix.definition.Modules;
import org.hisrc.jsonix.jsonschema.JsonSchemaBuilder;
public class JsonSchemaModuleCompiler {
private final Modules modules;
private final Module module;
private final JsonBuilderFactory jsonBuilderFactory;
public JsonSchemaModuleCompiler(JsonBuilderFactory jsonBuilderFactory, Modules modules, Module module,
JsonSchema jsonSchema) {
Validate.notNull(jsonBuilderFactory);
Validate.notNull(module);
Validate.notNull(jsonSchema);
this.jsonBuilderFactory = jsonBuilderFactory;
this.modules = modules;
this.module = module;
}
public JsonBuilderFactory getJsonBuilderFactory() {
return jsonBuilderFactory;
}
public Modules getModules() {
return modules;
}
public Module getModule() {
return module;
}
public JsonSchemaBuilder compile() {
final Map, JsonSchemaBuilder> mappingSchemas = new LinkedHashMap, JsonSchemaBuilder>(
this.module.getMappings().size());
for (Mapping mapping : this.module.getMappings()) {
if (!mapping.isEmpty()) {
final JsonSchemaMappingCompiler mappingCompiler = new JsonSchemaMappingCompiler(
jsonBuilderFactory, modules, module, mapping);
mappingSchemas.put(mapping, mappingCompiler.compile());
}
}
final JsonSchemaBuilder schema;
if (mappingSchemas.size() == 1) {
schema = mappingSchemas.values().iterator().next();
} else {
schema = new JsonSchemaBuilder();
schema.addId(getModule().getSchemaId());
for (Entry, JsonSchemaBuilder> entry : mappingSchemas.entrySet()) {
final Mapping mapping = entry.getKey();
final JsonSchemaBuilder mappingSchema = entry.getValue();
schema.addDefinition(mapping.getMappingName(), mappingSchema);
schema.addAnyOf(new JsonSchemaBuilder().addRef(mapping.getSchemaId()));
}
}
return schema;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy