From 0bae0ced0ddf765479c8bc2589a609d9382a423d Mon Sep 17 00:00:00 2001 From: highsource Date: Tue, 19 Jul 2016 23:40:48 +0200 Subject: [PATCH] Issue #67 missing commits. --- .../jsonschema/CreateTypeInfoSchema.java | 75 +++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 compiler/src/main/java/org/hisrc/jsonix/compilation/jsonschema/CreateTypeInfoSchema.java diff --git a/compiler/src/main/java/org/hisrc/jsonix/compilation/jsonschema/CreateTypeInfoSchema.java b/compiler/src/main/java/org/hisrc/jsonix/compilation/jsonschema/CreateTypeInfoSchema.java new file mode 100644 index 0000000..88df9c3 --- /dev/null +++ b/compiler/src/main/java/org/hisrc/jsonix/compilation/jsonschema/CreateTypeInfoSchema.java @@ -0,0 +1,75 @@ +package org.hisrc.jsonix.compilation.jsonschema; + +import java.util.List; + +import javax.json.JsonValue; + +import org.hisrc.jsonix.compilation.jsonschema.typeinfo.TypeInfoProducer; +import org.hisrc.jsonix.jsonschema.JsonSchemaBuilder; +import org.hisrc.jsonix.xml.xsom.CollectEnumerationValuesVisitor; +import org.hisrc.xml.xsom.SchemaComponentAware; +import org.jvnet.jaxb2_commons.xml.bind.model.MBuiltinLeafInfo; +import org.jvnet.jaxb2_commons.xml.bind.model.MTypeInfo; +import org.jvnet.jaxb2_commons.xml.bind.model.origin.MOriginated; +import org.jvnet.jaxb2_commons.xml.bind.model.util.DefaultTypeInfoVisitor; + +import com.sun.xml.xsom.XSComponent; +import com.sun.xml.xsom.XmlString; + +public class CreateTypeInfoSchema, O> + extends DefaultTypeInfoVisitor { + private final M info; + private JsonSchemaMappingCompiler mappingCompiler; + + public CreateTypeInfoSchema(JsonSchemaMappingCompiler mappingCompiler, M info) { + this.mappingCompiler = mappingCompiler; + this.info = info; + } + + @Override + public JsonSchemaBuilder visitTypeInfo(MTypeInfo typeInfo) { + final TypeInfoProducer typeInfoCompiler = mappingCompiler.getTypeInfoProducer(info, typeInfo); + return typeInfoCompiler.createTypeInfoSchemaRef(mappingCompiler); + } + + @Override + public JsonSchemaBuilder visitBuiltinLeafInfo(MBuiltinLeafInfo typeInfo) { + final TypeInfoProducer typeInfoCompiler = mappingCompiler.getTypeInfoProducer(info, typeInfo); + final JsonSchemaBuilder typeInfoSchemaRef = typeInfoCompiler.createTypeInfoSchemaRef(mappingCompiler); + + if (info instanceof MOriginated) { + MOriginated originated = (MOriginated) info; + Object origin = originated.getOrigin(); + if (origin instanceof SchemaComponentAware) { + final XSComponent component = ((SchemaComponentAware) origin).getSchemaComponent(); + if (component != null) { + + final CollectEnumerationValuesVisitor collectEnumerationValuesVisitor = new CollectEnumerationValuesVisitor(); + component.visit(collectEnumerationValuesVisitor); + final List enumerationValues = collectEnumerationValuesVisitor.getValues(); + if (enumerationValues != null && !enumerationValues.isEmpty()) { + final JsonSchemaBuilder values = new JsonSchemaBuilder(); + boolean valueSupported = true; + for (XmlString enumerationValue : enumerationValues) { + final JsonValue value = typeInfoCompiler.createValue(this.mappingCompiler, + enumerationValue); + if (value == null) { + valueSupported = false; + break; + } else { + values.addEnum(value); + } + } + if (valueSupported) { + final JsonSchemaBuilder typeInfoSchemaRefWithEnums = new JsonSchemaBuilder(); + typeInfoSchemaRefWithEnums.addAllOf(typeInfoSchemaRef); + typeInfoSchemaRefWithEnums.addAllOf(values); + return typeInfoSchemaRefWithEnums; + } + } + } + } + } + return typeInfoSchemaRef; + } +}