Skip to content

Commit e774b36

Browse files
committed
Issue #22.
1 parent bd2f64a commit e774b36

File tree

2 files changed

+63
-6
lines changed

2 files changed

+63
-6
lines changed

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

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,22 @@ public JsonSchemaMappingCompiler(JsonBuilderFactory builderFactory,
2828
this.mapping = mapping;
2929
}
3030

31-
public JsonSchemaBuilder compile() {
32-
throw new UnsupportedOperationException();
31+
public Modules<T, C> getModules() {
32+
return modules;
33+
}
34+
35+
public Module<T, C> getModule() {
36+
return module;
3337
}
3438

3539
public Mapping<T, C> getMapping() {
3640
return mapping;
3741
}
3842

43+
public JsonSchemaBuilder compile() {
44+
throw new UnsupportedOperationException();
45+
}
46+
3947
public JsonSchemaBuilder createTypeInfoSchemaRef(MTypeInfo<T, C> typeInfo) {
4048
throw new UnsupportedOperationException();
4149
}

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

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

3+
import org.apache.commons.lang3.Validate;
4+
import org.hisrc.jsonix.compilation.MappingCompiler;
5+
import org.hisrc.jsonix.definition.Mapping;
6+
import org.hisrc.jsonix.definition.Module;
7+
import org.hisrc.jsonix.definition.Modules;
38
import org.hisrc.jsonix.jsonschema.JsonSchemaBuilder;
9+
import org.hisrc.jsonschema.model.v4.keyword.Keywords;
410
import org.jvnet.jaxb2_commons.xml.bind.model.MBuiltinLeafInfo;
511
import org.jvnet.jaxb2_commons.xml.bind.model.MClassInfo;
612
import org.jvnet.jaxb2_commons.xml.bind.model.MClassRef;
@@ -9,25 +15,53 @@
915
import org.jvnet.jaxb2_commons.xml.bind.model.MIDREF;
1016
import org.jvnet.jaxb2_commons.xml.bind.model.MIDREFS;
1117
import org.jvnet.jaxb2_commons.xml.bind.model.MList;
18+
import org.jvnet.jaxb2_commons.xml.bind.model.MPackagedTypeInfo;
1219
import org.jvnet.jaxb2_commons.xml.bind.model.MTypeInfoVisitor;
1320
import org.jvnet.jaxb2_commons.xml.bind.model.MWildcardTypeInfo;
1421

1522
public class JsonSchemaRefTypeInfoCompilerVisitor<T, C extends T> implements
1623
MTypeInfoVisitor<T, C, JsonSchemaBuilder> {
1724

25+
private final JsonSchemaMappingCompiler<T, C> mappingCompiler;
26+
private final Modules<T, C> modules;
27+
private final Module<T, C> module;
28+
private final Mapping<T, C> mapping;
29+
30+
public JsonSchemaRefTypeInfoCompilerVisitor(
31+
JsonSchemaMappingCompiler<T, C> mappingCompiler) {
32+
Validate.notNull(mappingCompiler);
33+
this.mappingCompiler = mappingCompiler;
34+
this.modules = mappingCompiler.getModules();
35+
this.module = mappingCompiler.getModule();
36+
this.mapping = mappingCompiler.getMapping();
37+
}
38+
39+
public JsonSchemaMappingCompiler<T, C> getMappingCompiler() {
40+
return mappingCompiler;
41+
}
42+
43+
public Modules<T, C> getModules() {
44+
return modules;
45+
}
46+
47+
public Mapping<T, C> getMapping() {
48+
return mapping;
49+
}
50+
1851
@Override
1952
public JsonSchemaBuilder visitClassInfo(MClassInfo<T, C> info) {
20-
throw new UnsupportedOperationException();
53+
return createTypeInfoSchemaRef(info);
2154
}
2255

2356
@Override
2457
public JsonSchemaBuilder visitClassRef(MClassRef<T, C> info) {
25-
throw new UnsupportedOperationException();
58+
return createTypeInfoSchemaRef(info);
2659
}
2760

2861
@Override
2962
public JsonSchemaBuilder visitList(MList<T, C> info) {
30-
throw new UnsupportedOperationException();
63+
return new JsonSchemaBuilder().addType("array").addItem(
64+
info.getItemTypeInfo().acceptTypeInfoVisitor(this));
3165
}
3266

3367
@Override
@@ -52,11 +86,26 @@ public JsonSchemaBuilder visitBuiltinLeafInfo(MBuiltinLeafInfo<T, C> info) {
5286

5387
@Override
5488
public JsonSchemaBuilder visitEnumLeafInfo(MEnumLeafInfo<T, C> info) {
55-
throw new UnsupportedOperationException();
89+
return createTypeInfoSchemaRef(info);
5690
}
5791

5892
@Override
5993
public JsonSchemaBuilder visitWildcardTypeInfo(MWildcardTypeInfo<T, C> info) {
6094
throw new UnsupportedOperationException();
6195
}
96+
97+
private JsonSchemaBuilder createTypeInfoSchemaRef(
98+
MPackagedTypeInfo<T, C> info) {
99+
100+
final String typeInfoSchemaId = getModules().getSchemaId(
101+
info.getPackageInfo().getPackageName());
102+
final String mappingSchemaId = typeInfoSchemaId.equals(getMapping()
103+
.getSchemaId()) ? "" : typeInfoSchemaId;
104+
final String typeInfoRef = mappingSchemaId
105+
+ "/"
106+
+ Keywords.definitions
107+
+ "/"
108+
+ info.getContainerLocalName(MappingCompiler.DEFAULT_SCOPED_NAME_DELIMITER);
109+
return new JsonSchemaBuilder().addRef(typeInfoRef);
110+
}
62111
}

0 commit comments

Comments
 (0)