Skip to content

Commit 64bd7f3

Browse files
committed
Issue #22.
1 parent e774b36 commit 64bd7f3

13 files changed

+138
-85
lines changed

compiler/pom.xml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,12 @@
4444
<artifactId>js-codemodel</artifactId>
4545
</dependency>
4646
<dependency>
47-
<groupId>org.hisrc.jsonschema.model</groupId>
48-
<artifactId>jsonschema-model</artifactId>
47+
<groupId>org.glassfish</groupId>
48+
<artifactId>javax.json</artifactId>
49+
</dependency>
50+
<dependency>
51+
<groupId>javax.json</groupId>
52+
<artifactId>javax.json-api</artifactId>
4953
</dependency>
5054
<dependency>
5155
<groupId>org.slf4j</groupId>

compiler/src/main/java/org/hisrc/jsonix/compilation/ModuleCompiler.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,4 +101,5 @@ public JSProgram compile() {
101101
}
102102
return moduleProgram;
103103
}
104+
104105
}

compiler/src/main/java/org/hisrc/jsonix/compilation/jsc/JsonSchemaArrayRefTypeInfoCompiler.java

Lines changed: 0 additions & 23 deletions
This file was deleted.
Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package org.hisrc.jsonix.compilation.jsc;
22

3-
import javax.json.JsonBuilderFactory;
4-
53
import org.apache.commons.lang3.Validate;
64
import org.hisrc.jsonix.definition.Mapping;
75
import org.hisrc.jsonix.definition.Module;
@@ -11,23 +9,25 @@
119

1210
public class JsonSchemaMappingCompiler<T, C extends T> {
1311

14-
private final JsonBuilderFactory builderFactory;
12+
private JsonSchemaModuleCompiler<T, C> moduleCompiler;
1513
private final Modules<T, C> modules;
1614
private final Module<T, C> module;
1715
private final Mapping<T, C> mapping;
1816

19-
public JsonSchemaMappingCompiler(JsonBuilderFactory builderFactory,
20-
Modules<T, C> modules, Module<T, C> module, Mapping<T, C> mapping) {
21-
Validate.notNull(builderFactory);
22-
Validate.notNull(modules);
23-
Validate.notNull(module);
17+
public JsonSchemaMappingCompiler(
18+
JsonSchemaModuleCompiler<T, C> moduleCompiler, Mapping<T, C> mapping) {
19+
Validate.notNull(moduleCompiler);
2420
Validate.notNull(mapping);
25-
this.builderFactory = builderFactory;
26-
this.modules = modules;
27-
this.module = module;
21+
this.moduleCompiler = moduleCompiler;
22+
this.modules = moduleCompiler.getModules();
23+
this.module = moduleCompiler.getModule();
2824
this.mapping = mapping;
2925
}
3026

27+
public JsonSchemaModuleCompiler<T, C> getModuleCompiler() {
28+
return moduleCompiler;
29+
}
30+
3131
public Modules<T, C> getModules() {
3232
return modules;
3333
}
@@ -45,6 +45,8 @@ public JsonSchemaBuilder compile() {
4545
}
4646

4747
public JsonSchemaBuilder createTypeInfoSchemaRef(MTypeInfo<T, C> typeInfo) {
48-
throw new UnsupportedOperationException();
48+
return typeInfo
49+
.acceptTypeInfoVisitor(new JsonSchemaRefTypeInfoCompilerVisitor<T, C>(
50+
this));
4951
}
5052
}

compiler/src/main/java/org/hisrc/jsonix/compilation/jsc/JsonSchemaModuleCompiler.java

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@
33
import java.util.ArrayList;
44
import java.util.List;
55

6-
import javax.json.JsonBuilderFactory;
7-
86
import org.apache.commons.lang3.Validate;
97
import org.hisrc.jsonix.definition.Mapping;
108
import org.hisrc.jsonix.definition.Module;
@@ -13,27 +11,38 @@
1311

1412
public class JsonSchemaModuleCompiler<T, C extends T> {
1513

16-
private final JsonBuilderFactory builderFactory;
14+
private final JsonSchemaModulesCompiler<T, C> modulesCompiler;
1715
private final Modules<T, C> modules;
1816
private final Module<T, C> module;
1917

20-
public JsonSchemaModuleCompiler(JsonBuilderFactory builderFactory,
21-
Modules<T, C> modules, Module<T, C> module) {
22-
Validate.notNull(builderFactory);
23-
Validate.notNull(modules);
18+
public JsonSchemaModuleCompiler(
19+
JsonSchemaModulesCompiler<T, C> modulesCompiler, Module<T, C> module) {
20+
Validate.notNull(modulesCompiler);
2421
Validate.notNull(module);
25-
this.builderFactory = builderFactory;
26-
this.modules = modules;
22+
this.modulesCompiler = modulesCompiler;
23+
this.modules = modulesCompiler.getModules();
2724
this.module = module;
2825
}
2926

27+
public JsonSchemaModulesCompiler<T, C> getModulesCompiler() {
28+
return modulesCompiler;
29+
}
30+
31+
public Modules<T, C> getModules() {
32+
return modules;
33+
}
34+
35+
public Module<T, C> getModule() {
36+
return module;
37+
}
38+
3039
public JsonSchemaBuilder compile() {
3140
final List<JsonSchemaBuilder> mappingSchemaBuilders = new ArrayList<JsonSchemaBuilder>(
3241
this.module.getMappings().size());
3342
for (Mapping<T, C> mapping : this.module.getMappings()) {
3443
if (!mapping.isEmpty()) {
3544
final JsonSchemaMappingCompiler<T, C> mappingCompiler = new JsonSchemaMappingCompiler<T, C>(
36-
builderFactory, modules, module, mapping);
45+
this, mapping);
3746

3847
final JsonSchemaBuilder mappingSchemaBuilder = mappingCompiler
3948
.compile();

compiler/src/main/java/org/hisrc/jsonix/compilation/jsc/JsonSchemaModulesCompiler.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@ public JsonSchemaModulesCompiler(Modules<T, C> modules) {
1919
this.modules = modules;
2020
}
2121

22+
public Modules<T, C> getModules() {
23+
return modules;
24+
}
25+
2226
public void compile(JsonSchemaWriter<T, C> writer) {
2327
final JsonProvider provider = JsonProvider.provider();
2428
final JsonBuilderFactory builderFactory = provider
@@ -28,7 +32,7 @@ public void compile(JsonSchemaWriter<T, C> writer) {
2832
if (!module.isEmpty()) {
2933
for (Output output : module.getOutputs()) {
3034
final JsonSchemaModuleCompiler<T, C> moduleCompiler = new JsonSchemaModuleCompiler<T, C>(
31-
builderFactory, modules, module);
35+
this, module);
3236
final JsonSchemaBuilder schemaBuilder = moduleCompiler
3337
.compile();
3438
final JsonObject schema = schemaBuilder
@@ -38,4 +42,5 @@ public void compile(JsonSchemaWriter<T, C> writer) {
3842
}
3943
}
4044
}
45+
4146
}

compiler/src/main/java/org/hisrc/jsonix/compilation/jsc/JsonSchemaRefTypeInfoCompiler.java

Lines changed: 0 additions & 20 deletions
This file was deleted.

compiler/src/main/java/org/hisrc/jsonix/compilation/jsc/JsonSchemaRefTypeInfoCompilerVisitor.java

Lines changed: 32 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
package org.hisrc.jsonix.compilation.jsc;
22

3+
import java.text.MessageFormat;
4+
import java.util.Map;
5+
6+
import javax.xml.namespace.QName;
7+
38
import org.apache.commons.lang3.Validate;
49
import org.hisrc.jsonix.compilation.MappingCompiler;
510
import org.hisrc.jsonix.definition.Mapping;
611
import org.hisrc.jsonix.definition.Module;
712
import org.hisrc.jsonix.definition.Modules;
813
import org.hisrc.jsonix.jsonschema.JsonSchemaBuilder;
9-
import org.hisrc.jsonschema.model.v4.keyword.Keywords;
1014
import org.jvnet.jaxb2_commons.xml.bind.model.MBuiltinLeafInfo;
1115
import org.jvnet.jaxb2_commons.xml.bind.model.MClassInfo;
1216
import org.jvnet.jaxb2_commons.xml.bind.model.MClassRef;
@@ -26,6 +30,7 @@ public class JsonSchemaRefTypeInfoCompilerVisitor<T, C extends T> implements
2630
private final Modules<T, C> modules;
2731
private final Module<T, C> module;
2832
private final Mapping<T, C> mapping;
33+
private final Map<QName, String> typeNameSchemaRefs;
2934

3035
public JsonSchemaRefTypeInfoCompilerVisitor(
3136
JsonSchemaMappingCompiler<T, C> mappingCompiler) {
@@ -34,6 +39,7 @@ public JsonSchemaRefTypeInfoCompilerVisitor(
3439
this.modules = mappingCompiler.getModules();
3540
this.module = mappingCompiler.getModule();
3641
this.mapping = mappingCompiler.getMapping();
42+
this.typeNameSchemaRefs = XmlSchemaJsonSchemaConstants.TYPE_NAME_SCHEMA_REFS;
3743
}
3844

3945
public JsonSchemaMappingCompiler<T, C> getMappingCompiler() {
@@ -44,6 +50,10 @@ public Modules<T, C> getModules() {
4450
return modules;
4551
}
4652

53+
public Module<T, C> getModule() {
54+
return module;
55+
}
56+
4757
public Mapping<T, C> getMapping() {
4858
return mapping;
4959
}
@@ -66,22 +76,35 @@ public JsonSchemaBuilder visitList(MList<T, C> info) {
6676

6777
@Override
6878
public JsonSchemaBuilder visitID(MID<T, C> info) {
69-
throw new UnsupportedOperationException();
79+
return new JsonSchemaBuilder()
80+
.addRef(XmlSchemaJsonSchemaConstants.ID_TYPE_INFO_SCHEMA_REF);
7081
}
7182

7283
@Override
7384
public JsonSchemaBuilder visitIDREF(MIDREF<T, C> info) {
74-
throw new UnsupportedOperationException();
85+
return new JsonSchemaBuilder()
86+
.addRef(XmlSchemaJsonSchemaConstants.IDREF_TYPE_INFO_SCHEMA_REF);
7587
}
7688

7789
@Override
7890
public JsonSchemaBuilder visitIDREFS(MIDREFS<T, C> info) {
79-
throw new UnsupportedOperationException();
91+
return new JsonSchemaBuilder()
92+
.addRef(XmlSchemaJsonSchemaConstants.IDREFS_TYPE_INFO_SCHEMA_REF);
8093
}
8194

8295
@Override
8396
public JsonSchemaBuilder visitBuiltinLeafInfo(MBuiltinLeafInfo<T, C> info) {
84-
throw new UnsupportedOperationException();
97+
final QName typeName = info.getTypeName();
98+
final String $ref = this.typeNameSchemaRefs.get(typeName);
99+
final JsonSchemaBuilder schemaBuilder = new JsonSchemaBuilder();
100+
if ($ref != null) {
101+
return schemaBuilder.addRef($ref);
102+
} else {
103+
return schemaBuilder
104+
.addDescription(MessageFormat
105+
.format("WARNING, the type [{0}] is not supported, using the lax schema {}.",
106+
typeName));
107+
}
85108
}
86109

87110
@Override
@@ -91,7 +114,8 @@ public JsonSchemaBuilder visitEnumLeafInfo(MEnumLeafInfo<T, C> info) {
91114

92115
@Override
93116
public JsonSchemaBuilder visitWildcardTypeInfo(MWildcardTypeInfo<T, C> info) {
94-
throw new UnsupportedOperationException();
117+
return new JsonSchemaBuilder()
118+
.addRef(JsonixJsonSchemaConstants.WILDCARD_TYPE_INFO_SCHEMA_REF);
95119
}
96120

97121
private JsonSchemaBuilder createTypeInfoSchemaRef(
@@ -100,10 +124,10 @@ private JsonSchemaBuilder createTypeInfoSchemaRef(
100124
final String typeInfoSchemaId = getModules().getSchemaId(
101125
info.getPackageInfo().getPackageName());
102126
final String mappingSchemaId = typeInfoSchemaId.equals(getMapping()
103-
.getSchemaId()) ? "" : typeInfoSchemaId;
127+
.getSchemaId()) ? "#" : typeInfoSchemaId;
104128
final String typeInfoRef = mappingSchemaId
105129
+ "/"
106-
+ Keywords.definitions
130+
+ JsonSchemaKeywords.definitions
107131
+ "/"
108132
+ info.getContainerLocalName(MappingCompiler.DEFAULT_SCOPED_NAME_DELIMITER);
109133
return new JsonSchemaBuilder().addRef(typeInfoRef);
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package org.hisrc.jsonix.compilation.jsc;
2+
3+
4+
public class JsonixJsonSchemaConstants {
5+
6+
private JsonixJsonSchemaConstants() {
7+
}
8+
9+
public static final String SCHEMA_ID = "todo:_jsonix_schema_id";
10+
11+
public static final String WILDCARD_TYPE_INFO_SCHEMA_REF = SCHEMA_ID + "/"
12+
+ JsonSchemaKeywords.definitions + "/" + "wildcard";
13+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package org.hisrc.jsonix.compilation.jsc;
2+
3+
import java.util.Collections;
4+
import java.util.HashMap;
5+
import java.util.Map;
6+
7+
import javax.xml.namespace.QName;
8+
9+
import org.jvnet.jaxb2_commons.xmlschema.XmlSchemaConstants;
10+
11+
public class XmlSchemaJsonSchemaConstants {
12+
13+
private XmlSchemaJsonSchemaConstants() {
14+
}
15+
16+
public static final String SCHEMA_ID = "foo";
17+
18+
public static final Map<QName, String> TYPE_NAME_SCHEMA_REFS;
19+
static {
20+
final Map<QName, String> tnsr = new HashMap<QName, String>();
21+
for (QName typeName : XmlSchemaConstants.TYPE_NAMES) {
22+
tnsr.put(typeName, SCHEMA_ID + "/" + JsonSchemaKeywords.definitions + "/"
23+
+ typeName.getLocalPart());
24+
}
25+
TYPE_NAME_SCHEMA_REFS = Collections.unmodifiableMap(tnsr);
26+
}
27+
28+
public static final String ID_TYPE_INFO_SCHEMA_REF = SCHEMA_ID + "/"
29+
+ JsonSchemaKeywords.definitions + "/" + "ID";
30+
public static final String IDREFS_TYPE_INFO_SCHEMA_REF = SCHEMA_ID + "/"
31+
+ JsonSchemaKeywords.definitions + "/" + "IDREFS";
32+
public static final String IDREF_TYPE_INFO_SCHEMA_REF = SCHEMA_ID + "/"
33+
+ JsonSchemaKeywords.definitions + "/" + "IDREF";
34+
35+
}

0 commit comments

Comments
 (0)