Skip to content

Commit 87d8a81

Browse files
committed
Issue #22.
1 parent 4d2d100 commit 87d8a81

File tree

14 files changed

+186
-29
lines changed

14 files changed

+186
-29
lines changed

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@ public class ModuleCompiler<T, C extends T> {
1818

1919
private final JSCodeModel codeModel;
2020

21-
private Output output;
22-
private Modules<T, C> modules;
23-
private Module<T, C> module;
21+
private final Modules<T, C> modules;
22+
private final Module<T, C> module;
2423
private final String moduleName;
24+
private final Output output;
2525

2626
public ModuleCompiler(JSCodeModel codeModel, Modules<T, C> modules,
2727
Module<T, C> module, Output output) {

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import java.util.List;
55

66
import org.apache.commons.lang3.Validate;
7+
import org.hisrc.jsonix.definition.JsonSchema;
78
import org.hisrc.jsonix.definition.Mapping;
89
import org.hisrc.jsonix.definition.Module;
910
import org.hisrc.jsonix.definition.Modules;
@@ -14,14 +15,17 @@ public class JsonSchemaModuleCompiler<T, C extends T> {
1415
private final JsonSchemaModulesCompiler<T, C> modulesCompiler;
1516
private final Modules<T, C> modules;
1617
private final Module<T, C> module;
18+
private final JsonSchema jsonSchema;
1719

1820
public JsonSchemaModuleCompiler(
19-
JsonSchemaModulesCompiler<T, C> modulesCompiler, Module<T, C> module) {
21+
JsonSchemaModulesCompiler<T, C> modulesCompiler, Module<T, C> module, JsonSchema jsonSchema) {
2022
Validate.notNull(modulesCompiler);
2123
Validate.notNull(module);
24+
Validate.notNull(jsonSchema);
2225
this.modulesCompiler = modulesCompiler;
2326
this.modules = modulesCompiler.getModules();
2427
this.module = module;
28+
this.jsonSchema = jsonSchema;
2529
}
2630

2731
public JsonSchemaModulesCompiler<T, C> getModulesCompiler() {

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

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44
import javax.json.spi.JsonProvider;
55

66
import org.apache.commons.lang3.Validate;
7+
import org.hisrc.jsonix.definition.JsonSchema;
78
import org.hisrc.jsonix.definition.Module;
89
import org.hisrc.jsonix.definition.Modules;
9-
import org.hisrc.jsonix.definition.Output;
1010
import org.hisrc.jsonix.jsonschema.JsonSchemaBuilder;
1111

1212
public class JsonSchemaModulesCompiler<T, C extends T> {
@@ -29,12 +29,13 @@ public void compile(JsonStructureWriter<T, C> writer) {
2929

3030
for (final Module<T, C> module : this.modules.getModules()) {
3131
if (!module.isEmpty()) {
32-
for (Output output : module.getOutputs()) {
32+
for (JsonSchema jsonSchema : module.getJsonSchemas()) {
3333
final JsonSchemaModuleCompiler<T, C> moduleCompiler = new JsonSchemaModuleCompiler<T, C>(
34-
this, module);
34+
this, module, jsonSchema);
3535
final JsonSchemaBuilder schema = moduleCompiler.compile();
3636
writer.writeJsonStructure(module,
37-
schema.build(builderFactory), output);
37+
schema.build(builderFactory),
38+
jsonSchema.getFileName());
3839
}
3940
}
4041
}

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,10 @@
33
import javax.json.JsonStructure;
44

55
import org.hisrc.jsonix.definition.Module;
6-
import org.hisrc.jsonix.definition.Output;
76

87
public interface JsonStructureWriter<T, C extends T> {
98

109
public void writeJsonStructure(Module<T, C> module, JsonStructure schema,
11-
Output output);
10+
String fileName);
1211

1312
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package org.hisrc.jsonix.configuration;
2+
3+
import javax.xml.bind.annotation.XmlAttribute;
4+
import javax.xml.bind.annotation.XmlRootElement;
5+
import javax.xml.bind.annotation.XmlType;
6+
import javax.xml.namespace.QName;
7+
8+
import org.apache.commons.lang3.Validate;
9+
import org.hisrc.jsonix.definition.JsonSchema;
10+
11+
@XmlRootElement(name = JsonSchemaConfiguration.LOCAL_ELEMENT_NAME)
12+
@XmlType(propOrder = {})
13+
public class JsonSchemaConfiguration {
14+
15+
public static final String LOCAL_ELEMENT_NAME = "jsonSchema";
16+
public static final String STANDARD_FILE_NAME_PATTERN = ModuleConfiguration.MODULE_NAME_PROPERTY
17+
+ ".jsonschema";
18+
19+
private String fileName;
20+
public static final QName JSON_SCHEMA_NAME = new QName(
21+
ModulesConfiguration.NAMESPACE_URI, LOCAL_ELEMENT_NAME,
22+
ModulesConfiguration.DEFAULT_PREFIX);
23+
24+
public JsonSchemaConfiguration() {
25+
26+
}
27+
28+
public JsonSchemaConfiguration(String fileName) {
29+
super();
30+
this.fileName = fileName;
31+
}
32+
33+
@XmlAttribute(name = "fileName")
34+
public String getFileName() {
35+
return fileName;
36+
}
37+
38+
public void setFileName(String fileName) {
39+
this.fileName = fileName;
40+
}
41+
42+
public JsonSchema build(String moduleName) {
43+
Validate.notNull(moduleName);
44+
final String fileNamePattern = this.fileName == null ? STANDARD_FILE_NAME_PATTERN
45+
: this.fileName;
46+
final String fileName = fileNamePattern.replace(
47+
ModuleConfiguration.MODULE_NAME_PROPERTY, moduleName);
48+
return new JsonSchema(fileName);
49+
}
50+
}

compiler/src/main/java/org/hisrc/jsonix/configuration/ModuleConfiguration.java

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import javax.xml.namespace.QName;
1313

1414
import org.hisrc.jsonix.analysis.ModelInfoGraphAnalyzer;
15+
import org.hisrc.jsonix.definition.JsonSchema;
1516
import org.hisrc.jsonix.definition.Mapping;
1617
import org.hisrc.jsonix.definition.Module;
1718
import org.hisrc.jsonix.definition.Output;
@@ -31,6 +32,7 @@ public class ModuleConfiguration {
3132
private String name;
3233
private List<MappingConfiguration> mappingConfigurations = new LinkedList<MappingConfiguration>();
3334
private List<OutputConfiguration> outputConfigurations = new LinkedList<OutputConfiguration>();
35+
private List<JsonSchemaConfiguration> jsonSchemaConfigurations = new LinkedList<JsonSchemaConfiguration>();
3436

3537
public static final QName MODULE_NAME = new QName(
3638
ModulesConfiguration.NAMESPACE_URI, LOCAL_ELEMENT_NAME,
@@ -65,6 +67,16 @@ public void setOutputConfigurations(
6567
this.outputConfigurations = outputConfigurations;
6668
}
6769

70+
@XmlElement(name = JsonSchemaConfiguration.LOCAL_ELEMENT_NAME)
71+
public List<JsonSchemaConfiguration> getJsonSchemaConfigurations() {
72+
return jsonSchemaConfigurations;
73+
}
74+
75+
public void setJsonSchemaConfigurations(
76+
List<JsonSchemaConfiguration> jsonSchemaConfigurations) {
77+
this.jsonSchemaConfigurations = jsonSchemaConfigurations;
78+
}
79+
6880
public <T, C extends T> Module<T, C> build(
6981
ModelInfoGraphAnalyzer<T, C> analyzer, MModelInfo<T, C> modelInfo,
7082
Map<String, Mapping<T, C>> mappings) {
@@ -104,7 +116,17 @@ public <T, C extends T> Module<T, C> build(
104116
outputs.add(output);
105117
}
106118
}
107-
return new Module<T, C>(moduleName, moduleMappings, outputs);
119+
final List<JsonSchema> jsonSchemas = new ArrayList<JsonSchema>(
120+
this.jsonSchemaConfigurations.size());
121+
for (JsonSchemaConfiguration jsonSchemaConfiguration : this.jsonSchemaConfigurations) {
122+
final JsonSchema jsonSchema = jsonSchemaConfiguration
123+
.build(moduleName);
124+
if (jsonSchema != null) {
125+
jsonSchemas.add(jsonSchema);
126+
}
127+
}
128+
return new Module<T, C>(moduleName, moduleMappings, outputs,
129+
jsonSchemas);
108130
}
109131

110132
private <T, C extends T> String createModuleName(

compiler/src/main/java/org/hisrc/jsonix/configuration/ModulesConfiguration.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ public class ModulesConfiguration {
4747
private List<ModuleConfiguration> moduleConfigurations = new LinkedList<ModuleConfiguration>();
4848
private List<MappingConfiguration> mappingConfigurations = new LinkedList<MappingConfiguration>();
4949
private List<OutputConfiguration> outputConfigurations = new LinkedList<OutputConfiguration>();
50+
private List<JsonSchemaConfiguration> jsonSchemaConfigurations = new LinkedList<JsonSchemaConfiguration>();
5051

5152
public List<ModuleConfiguration> getModuleConfigurations() {
5253
return moduleConfigurations;
@@ -75,6 +76,15 @@ public void setOutputConfigurations(
7576
this.outputConfigurations = outputConfigurations;
7677
}
7778

79+
public List<JsonSchemaConfiguration> getJsonSchemaConfigurations() {
80+
return jsonSchemaConfigurations;
81+
}
82+
83+
public void setJsonSchemaConfigurations(
84+
List<JsonSchemaConfiguration> jsonSchemaConfigurations) {
85+
this.jsonSchemaConfigurations = jsonSchemaConfigurations;
86+
}
87+
7888
public <T, C extends T> Modules<T, C> build(JsonixContext context,
7989
MModelInfo<T, C> modelInfo) {
8090

@@ -91,6 +101,7 @@ public <T, C extends T> Modules<T, C> build(JsonixContext context,
91101
moduleConfigurations);
92102

93103
assignDefaultOutputConfigurations(moduleConfigurations);
104+
assignDefaultJsonSchemaConfigurations(moduleConfigurations);
94105

95106
assignMappingNamesAndIds(context, moduleConfigurations);
96107

@@ -225,6 +236,17 @@ private void assignDefaultOutputConfigurations(
225236
}
226237
}
227238

239+
private void assignDefaultJsonSchemaConfigurations(
240+
final List<ModuleConfiguration> moduleConfigurations) {
241+
final List<JsonSchemaConfiguration> defaultJsonSchemaConfigurations = createDefaultJsonSchemaConfigurations();
242+
for (final ModuleConfiguration moduleConfiguration : moduleConfigurations) {
243+
if (moduleConfiguration.getJsonSchemaConfigurations().isEmpty()) {
244+
moduleConfiguration.getJsonSchemaConfigurations().addAll(
245+
defaultJsonSchemaConfigurations);
246+
}
247+
}
248+
}
249+
228250
private Set<String> findUnmappedPackageNames(
229251
final Set<String> allPackageNames,
230252
final List<ModuleConfiguration> moduleConfigurations) {
@@ -265,6 +287,15 @@ private List<OutputConfiguration> createDefaultOutputConfigurations() {
265287
return defaultOutputConfigurations;
266288
}
267289

290+
private List<JsonSchemaConfiguration> createDefaultJsonSchemaConfigurations() {
291+
final List<JsonSchemaConfiguration> defaultJsonSchemaConfigurations = getJsonSchemaConfigurations();
292+
293+
if (defaultJsonSchemaConfigurations.isEmpty()) {
294+
defaultJsonSchemaConfigurations.add(new JsonSchemaConfiguration());
295+
}
296+
return defaultJsonSchemaConfigurations;
297+
}
298+
268299
private <T, C extends T> Modules<T, C> buildModules(JsonixContext context,
269300
MModelInfo<T, C> modelInfo,
270301
final ModelInfoGraphAnalyzer<T, C> analyzer,

compiler/src/main/java/org/hisrc/jsonix/configuration/ModulesConfigurationUnmarshaller.java

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -59,14 +59,14 @@ public class ModulesConfigurationUnmarshaller {
5959

6060
public ModulesConfigurationUnmarshaller(JsonixContext context) {
6161
this.context = Validate.notNull(context);
62-
this.logger = this.context.getLoggerFactory()
63-
.getLogger(ModuleConfiguration.class.getName());
62+
this.logger = this.context.getLoggerFactory().getLogger(
63+
ModuleConfiguration.class.getName());
6464
try {
6565
jaxbContext = JAXBContext.newInstance(ModulesConfiguration.class,
6666
ModuleConfiguration.class, MappingConfiguration.class,
67-
OutputConfiguration.class, PackageMapping.class,
68-
IncludesConfiguration.class, ExcludesConfiguration.class,
69-
TypeInfoConfiguration.class,
67+
OutputConfiguration.class, JsonSchemaConfiguration.class,
68+
PackageMapping.class, IncludesConfiguration.class,
69+
ExcludesConfiguration.class, TypeInfoConfiguration.class,
7070
ElementInfoConfiguration.class,
7171
PropertyInfoConfiguration.class,
7272
DependenciesOfMappingConfiguration.class);
@@ -84,6 +84,7 @@ public ModulesConfigurationUnmarshaller(JsonixContext context) {
8484
ModuleConfiguration.LOCAL_ELEMENT_NAME,
8585
MappingConfiguration.LOCAL_ELEMENT_NAME,
8686
OutputConfiguration.LOCAL_ELEMENT_NAME,
87+
JsonSchemaConfiguration.LOCAL_ELEMENT_NAME,
8788
IncludesConfiguration.LOCAL_ELEMENT_NAME,
8889
ExcludesConfiguration.LOCAL_ELEMENT_NAME,
8990
DependenciesOfMappingConfiguration.LOCAL_ELEMENT_NAME,
@@ -115,7 +116,8 @@ private <T> T unmarshal(CPluginCustomization customization,
115116
}
116117

117118
public ModulesConfiguration unmarshal(Model model,
118-
OutputConfiguration defaultOutputConfiguration) {
119+
OutputConfiguration defaultOutputConfiguration,
120+
JsonSchemaConfiguration defaultJsonSchemaConfiguration) {
119121
Validate.notNull(model);
120122
Validate.notNull(defaultOutputConfiguration);
121123
final ModulesConfiguration modulesConfiguration = new ModulesConfiguration();
@@ -139,6 +141,11 @@ public ModulesConfiguration unmarshal(Model model,
139141
modulesConfiguration.getOutputConfigurations().add(
140142
unmarshalOutputConfiguration(customization));
141143
}
144+
for (CPluginCustomization customization : CustomizationUtils
145+
.findCustomizations(model, JsonSchemaConfiguration.JSON_SCHEMA_NAME)) {
146+
modulesConfiguration.getJsonSchemaConfigurations().add(
147+
unmarshalJsonSchemaConfiguration(customization));
148+
}
142149

143150
if (modulesConfiguration.getOutputConfigurations().isEmpty()) {
144151
modulesConfiguration.getOutputConfigurations().add(
@@ -177,4 +184,9 @@ private OutputConfiguration unmarshalOutputConfiguration(
177184
CPluginCustomization customization) {
178185
return unmarshal(customization, "output configuration");
179186
}
187+
188+
private JsonSchemaConfiguration unmarshalJsonSchemaConfiguration(
189+
CPluginCustomization customization) {
190+
return unmarshal(customization, "JSON Schema configuration");
191+
}
180192
}

compiler/src/main/java/org/hisrc/jsonix/configuration/PluginCustomizations.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ public class PluginCustomizations {
5050
ModuleConfiguration.LOCAL_ELEMENT_NAME,
5151
MappingConfiguration.LOCAL_ELEMENT_NAME,
5252
OutputConfiguration.LOCAL_ELEMENT_NAME,
53+
JsonSchemaConfiguration.LOCAL_ELEMENT_NAME,
5354
IncludesConfiguration.LOCAL_ELEMENT_NAME,
5455
ExcludesConfiguration.LOCAL_ELEMENT_NAME,
5556
DependenciesOfMappingConfiguration.LOCAL_ELEMENT_NAME,
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package org.hisrc.jsonix.definition;
2+
3+
import java.text.MessageFormat;
4+
5+
import org.apache.commons.lang3.Validate;
6+
7+
public class JsonSchema {
8+
9+
private final String directory = "";
10+
private final String fileName;
11+
12+
public JsonSchema(final String fileName) {
13+
Validate.notNull(fileName);
14+
this.fileName = fileName;
15+
}
16+
17+
public String getDirectory() {
18+
return this.directory;
19+
}
20+
21+
public String getFileName() {
22+
return this.fileName;
23+
}
24+
25+
@Override
26+
public String toString() {
27+
return MessageFormat.format("JSON Schema [{0}]", this.fileName);
28+
}
29+
30+
}

0 commit comments

Comments
 (0)