Skip to content

Commit b740747

Browse files
committed
Issue #6. Work in progress.
1 parent b965418 commit b740747

13 files changed

Lines changed: 169 additions & 144 deletions

File tree

compiler/pom.xml

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,9 @@
1414
<groupId>org.slf4j</groupId>
1515
<artifactId>slf4j-api</artifactId>
1616
</dependency>
17-
<!-- Logback -->
1817
<dependency>
19-
<groupId>org.slf4j</groupId>
20-
<artifactId>slf4j-simple</artifactId>
21-
<scope>test</scope>
18+
<groupId>args4j</groupId>
19+
<artifactId>args4j</artifactId>
2220
</dependency>
2321
<dependency>
2422
<groupId>org.jvnet.jaxb2_commons</groupId>
@@ -46,6 +44,11 @@
4644
<groupId>org.hisrc.jscm</groupId>
4745
<artifactId>js-codemodel</artifactId>
4846
</dependency>
47+
<dependency>
48+
<groupId>org.slf4j</groupId>
49+
<artifactId>slf4j-simple</artifactId>
50+
<scope>test</scope>
51+
</dependency>
4952
</dependencies>
5053
<!--build>
5154
<plugins>

compiler/src/main/java/org/hisrc/jsonix/context/DefaultJsonixContext.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package org.hisrc.jsonix.context;
22

33
import org.apache.commons.lang3.Validate;
4-
import org.hisrc.jsonix.settings.LogLevel;
4+
import org.hisrc.jsonix.settings.LogLevelSetting;
55
import org.hisrc.jsonix.slf4j.LevelledLoggerFactoryWrapper;
66
import org.slf4j.ILoggerFactory;
77
import org.slf4j.LoggerFactory;
@@ -23,13 +23,13 @@ public DefaultJsonixContext() {
2323
this(LoggerFactory.getILoggerFactory());
2424
}
2525

26-
private int levelInt = LogLevel.INFO.asInt();
26+
private int levelInt = LogLevelSetting.INFO.asInt();
2727

2828
protected int getLevelInt() {
2929
return 1;
3030
}
3131

32-
public void setLevel(LogLevel level) {
32+
public void setLevel(LogLevelSetting level) {
3333
Validate.notNull(level);
3434
this.levelInt = level.asInt();
3535
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package org.hisrc.jsonix.execution;
2+
3+
import org.hisrc.jsonix.compilation.ModulesCompiler;
4+
import org.hisrc.jsonix.compilation.ProgramWriter;
5+
import org.hisrc.jsonix.configuration.ModulesConfiguration;
6+
import org.hisrc.jsonix.configuration.ModulesConfigurationUnmarshaller;
7+
import org.hisrc.jsonix.context.JsonixContext;
8+
import org.hisrc.jsonix.definition.Modules;
9+
import org.hisrc.jsonix.settings.Settings;
10+
import org.jvnet.jaxb2_commons.xjc.model.concrete.XJCCMInfoFactory;
11+
import org.jvnet.jaxb2_commons.xml.bind.model.MModelInfo;
12+
13+
import com.sun.tools.xjc.model.Model;
14+
import com.sun.tools.xjc.model.nav.NClass;
15+
import com.sun.tools.xjc.model.nav.NType;
16+
17+
public class JsonixInvoker {
18+
19+
public void execute(JsonixContext context, Settings settings, Model model, ProgramWriter<NType, NClass> programWriter)
20+
{
21+
final ModulesConfigurationUnmarshaller customizationHandler = new ModulesConfigurationUnmarshaller(
22+
context);
23+
24+
final ModulesConfiguration modulesConfiguration = customizationHandler
25+
.unmarshal(model, this.defaultOutputConfiguration);
26+
27+
final MModelInfo<NType, NClass> modelinfo = new XJCCMInfoFactory(model)
28+
.createModel();
29+
30+
final Modules<NType, NClass> modules = modulesConfiguration.build(
31+
context, modelinfo);
32+
33+
final ModulesCompiler<NType, NClass> modulesCompiler = new ModulesCompiler<NType, NClass>(
34+
modules);
35+
36+
modulesCompiler.compile(programWriter);
37+
}
38+
}

compiler/src/main/java/org/hisrc/jsonix/settings/LogLevel.java renamed to compiler/src/main/java/org/hisrc/jsonix/settings/LogLevelSetting.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@
22

33
import org.slf4j.spi.LocationAwareLogger;
44

5-
public enum LogLevel {
5+
public enum LogLevelSetting {
66

77
TRACE(LocationAwareLogger.TRACE_INT), DEBUG(LocationAwareLogger.DEBUG_INT), INFO(
88
LocationAwareLogger.INFO_INT), WARN(LocationAwareLogger.WARN_INT), ERROR(
99
LocationAwareLogger.ERROR_INT);
1010

1111
private final int levelInt;
1212

13-
private LogLevel(int levelInt) {
13+
private LogLevelSetting(int levelInt) {
1414
this.levelInt = levelInt;
1515
}
1616

compiler/src/main/java/org/hisrc/jsonix/settings/LoggingSettings.java

Lines changed: 0 additions & 7 deletions
This file was deleted.
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package org.hisrc.jsonix.settings;
2+
3+
import org.hisrc.jsonix.naming.CompactNaming;
4+
import org.hisrc.jsonix.naming.Naming;
5+
import org.hisrc.jsonix.naming.StandardNaming;
6+
7+
public enum NamingSetting {
8+
9+
COMPACT(new CompactNaming()), STANDARD(new StandardNaming());
10+
11+
private final Naming naming;
12+
13+
private NamingSetting(Naming naming) {
14+
this.naming = naming;
15+
}
16+
17+
public Naming getNaming() {
18+
return this.naming;
19+
}
20+
}
Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
11
package org.hisrc.jsonix.settings;
22

3-
public interface Settings {
3+
import org.kohsuke.args4j.Option;
4+
5+
public class Settings {
6+
7+
@Option(name = "-logLevel", aliases = { "-Xjsonix-logLevel" })
8+
public LogLevelSetting logLevel = LogLevelSetting.INFO;
9+
10+
@Option(name = "-defaultNaming", aliases = { "-Xjsonix-defaultNaming" })
11+
public NamingSetting defaultNaming = NamingSetting.STANDARD;
412

513
}
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package org.hisrc.jsonix.xjc.plugin;
2+
3+
import java.io.IOException;
4+
import java.io.StringWriter;
5+
import java.text.MessageFormat;
6+
7+
import org.apache.commons.lang3.Validate;
8+
import org.hisrc.jscm.codemodel.JSProgram;
9+
import org.hisrc.jscm.codemodel.writer.CodeWriter;
10+
import org.hisrc.jsonix.compilation.ProgramWriter;
11+
import org.hisrc.jsonix.definition.Module;
12+
import org.hisrc.jsonix.definition.Output;
13+
import org.xml.sax.ErrorHandler;
14+
import org.xml.sax.SAXException;
15+
import org.xml.sax.SAXParseException;
16+
17+
import com.sun.codemodel.JCodeModel;
18+
import com.sun.codemodel.JPackage;
19+
import com.sun.codemodel.fmt.JTextFile;
20+
import com.sun.tools.xjc.model.nav.NClass;
21+
import com.sun.tools.xjc.model.nav.NType;
22+
23+
public class CodeModelProgramWriter implements ProgramWriter<NType, NClass> {
24+
25+
private final JCodeModel codeModel;
26+
private final ErrorHandler errorHandler;
27+
28+
public CodeModelProgramWriter(JCodeModel codeModel,
29+
ErrorHandler errorHandler) {
30+
this.codeModel = Validate.notNull(codeModel);
31+
this.errorHandler = Validate.notNull(errorHandler);
32+
}
33+
34+
@Override
35+
public void writeProgram(Module<NType, NClass> module, JSProgram program,
36+
Output output) {
37+
try {
38+
final JPackage _package = codeModel._package(output
39+
.getOutputPackageName());
40+
_package.addResourceFile(createTextFile(output.getFileName(),
41+
program));
42+
} catch (IOException ioex) {
43+
try {
44+
errorHandler.error(new SAXParseException(MessageFormat.format(
45+
"Could not create the code for the module [{0}].",
46+
module.getName()), null, ioex));
47+
} catch (SAXException ignored) {
48+
49+
}
50+
}
51+
}
52+
53+
private JTextFile createTextFile(String fileName, JSProgram... programs)
54+
throws IOException {
55+
Validate.notNull(fileName);
56+
final JTextFile textFile = new JTextFile(fileName);
57+
final StringWriter stringWriter = new StringWriter();
58+
final CodeWriter codeWriter = new CodeWriter(stringWriter);
59+
for (JSProgram program : programs) {
60+
codeWriter.program(program);
61+
codeWriter.lineTerminator();
62+
}
63+
textFile.setContents(stringWriter.toString());
64+
return textFile;
65+
}
66+
}

compiler/src/main/java/org/hisrc/jsonix/xjc/plugin/JsonixPlugin.java

Lines changed: 5 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -34,43 +34,24 @@
3434
package org.hisrc.jsonix.xjc.plugin;
3535

3636
import java.io.IOException;
37-
import java.io.StringWriter;
38-
import java.text.MessageFormat;
3937
import java.util.List;
4038

41-
import org.apache.commons.lang3.Validate;
42-
import org.hisrc.jscm.codemodel.JSProgram;
43-
import org.hisrc.jscm.codemodel.writer.CodeWriter;
44-
import org.hisrc.jsonix.compilation.ModulesCompiler;
45-
import org.hisrc.jsonix.compilation.ProgramWriter;
46-
import org.hisrc.jsonix.configuration.ModulesConfiguration;
47-
import org.hisrc.jsonix.configuration.ModulesConfigurationUnmarshaller;
4839
import org.hisrc.jsonix.configuration.OutputConfiguration;
4940
import org.hisrc.jsonix.configuration.PluginCustomizations;
50-
import org.hisrc.jsonix.context.DefaultJsonixContext;
51-
import org.hisrc.jsonix.context.JsonixContext;
52-
import org.hisrc.jsonix.definition.Module;
53-
import org.hisrc.jsonix.definition.Modules;
54-
import org.hisrc.jsonix.definition.Output;
41+
import org.hisrc.jsonix.execution.JsonixInvoker;
5542
import org.hisrc.jsonix.naming.CompactNaming;
5643
import org.hisrc.jsonix.naming.StandardNaming;
57-
import org.jvnet.jaxb2_commons.xjc.model.concrete.XJCCMInfoFactory;
58-
import org.jvnet.jaxb2_commons.xml.bind.model.MModelInfo;
44+
import org.hisrc.jsonix.settings.Settings;
5945
import org.slf4j.ILoggerFactory;
6046
import org.slf4j.LoggerFactory;
6147
import org.slf4j.helpers.NOPLoggerFactory;
6248
import org.xml.sax.ErrorHandler;
6349
import org.xml.sax.SAXException;
64-
import org.xml.sax.SAXParseException;
6550

66-
import com.sun.codemodel.JPackage;
67-
import com.sun.codemodel.fmt.JTextFile;
6851
import com.sun.tools.xjc.BadCommandLineException;
6952
import com.sun.tools.xjc.Options;
7053
import com.sun.tools.xjc.Plugin;
7154
import com.sun.tools.xjc.model.Model;
72-
import com.sun.tools.xjc.model.nav.NClass;
73-
import com.sun.tools.xjc.model.nav.NType;
7455
import com.sun.tools.xjc.outline.Outline;
7556

7657
public class JsonixPlugin extends Plugin {
@@ -148,63 +129,13 @@ public boolean isCustomizationTagName(String nsUri, String localName) {
148129
public boolean run(Outline outline, Options opt,
149130
final ErrorHandler errorHandler) throws SAXException {
150131

151-
final JsonixContext context = new DefaultJsonixContext();
152-
153132
final Model model = outline.getModel();
133+
final Settings settings = null;
154134

155-
final ModulesConfigurationUnmarshaller customizationHandler = new ModulesConfigurationUnmarshaller(
156-
context);
157-
158-
final ModulesConfiguration modulesConfiguration = customizationHandler
159-
.unmarshal(model, this.defaultOutputConfiguration);
160-
161-
final MModelInfo<NType, NClass> modelinfo = new XJCCMInfoFactory(model)
162-
.createModel();
163-
164-
final Modules<NType, NClass> modules = modulesConfiguration.build(
165-
context, modelinfo);
166-
167-
final ModulesCompiler<NType, NClass> modulesCompiler = new ModulesCompiler<NType, NClass>(
168-
modules);
169-
170-
modulesCompiler.compile(new ProgramWriter<NType, NClass>() {
171-
172-
@Override
173-
public void writeProgram(Module<NType, NClass> module,
174-
JSProgram program, Output output) {
175-
try {
176-
final JPackage _package = model.codeModel._package(output
177-
.getOutputPackageName());
178-
_package.addResourceFile(createTextFile(
179-
output.getFileName(), program));
180-
} catch (IOException ioex) {
181-
try {
182-
errorHandler.error(new SAXParseException(
183-
MessageFormat
184-
.format("Could not create the code for the module [{0}].",
185-
module.getName()), null, ioex));
186-
} catch (SAXException ignored) {
187-
188-
}
189-
}
190-
}
191-
});
135+
new JsonixInvoker().execute(context, settings, model,
136+
new CodeModelProgramWriter(model.codeModel, errorHandler));
192137

193138
return true;
194139
}
195140

196-
private JTextFile createTextFile(String fileName, JSProgram... programs)
197-
throws IOException {
198-
Validate.notNull(fileName);
199-
final JTextFile textFile = new JTextFile(fileName);
200-
final StringWriter stringWriter = new StringWriter();
201-
final CodeWriter codeWriter = new CodeWriter(stringWriter);
202-
for (JSProgram program : programs) {
203-
codeWriter.program(program);
204-
codeWriter.lineTerminator();
205-
}
206-
textFile.setContents(stringWriter.toString());
207-
return textFile;
208-
}
209-
210141
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package org.hisrc.jsonix.settings.tests;
2+
3+
public class SettingsTest {
4+
5+
6+
}

0 commit comments

Comments
 (0)