net.jangaroo.exml.compiler.Exmlc Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of exml-compiler Show documentation
Show all versions of exml-compiler Show documentation
parses an EXML and generates an AS config class
package net.jangaroo.exml.compiler;
import net.jangaroo.exml.api.ExmlcException;
import net.jangaroo.exml.cli.ExmlcCommandLineParser;
import net.jangaroo.exml.config.ExmlConfiguration;
import net.jangaroo.exml.model.AnnotationAt;
import net.jangaroo.exml.model.ConfigClassRegistry;
import net.jangaroo.exml.model.PublicApiMode;
import net.jangaroo.jooc.cli.CommandLineParseException;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
/**
*
*/
public final class Exmlc implements net.jangaroo.exml.api.Exmlc {
private ConfigClassRegistry configClassRegistry;
public Exmlc() {
}
public Exmlc(ExmlConfiguration config) {
setConfig(config);
}
public static AnnotationAt parseAnnotationAtValue(String annotationAt) {
if (annotationAt == null || annotationAt.length() == 0) {
return null;
}
try {
return AnnotationAt.valueOf(annotationAt.toUpperCase());
} catch (IllegalArgumentException e) {
throw new ExmlcException("EXML attribute '" + EXML_ANNOTATION_AT_ATTRIBUTE +
"' must have one the values 'config', 'target', or 'both', not '" + annotationAt + "'.");
}
}
public static PublicApiMode parsePublicApiMode(String publicApiMode) {
if (publicApiMode == null || publicApiMode.length() == 0) {
return null;
}
try {
return PublicApiMode.valueOf(publicApiMode.toUpperCase());
} catch (IllegalArgumentException e) {
throw new ExmlcException("EXML attribute '" + EXML_PUBLIC_API_ATTRIBUTE +
"' must have one the values 'false', 'config', or 'true', not '" + publicApiMode + "'.");
}
}
@Override
public void setConfig(ExmlConfiguration config) {
try {
this.configClassRegistry = new ConfigClassRegistry(config);
} catch (IOException e) {
throw new ExmlcException("unable to build config class registry: " + e.getMessage(), e);
}
}
@Override
public ExmlConfiguration getConfig() {
return configClassRegistry.getConfig();
}
public ConfigClassRegistry getConfigClassRegistry() {
return configClassRegistry;
}
@Override
public void generateAllConfigClasses() {
for (File sourceFile : getConfig().getSourceFiles()) {
generateConfigClass(sourceFile);
}
}
@Override
public File generateConfigClass(File source) {
return configClassRegistry.generateConfigClass(source);
}
@Override
public File generateComponentClass(File exmlSourceFile) {
return configClassRegistry.generateTargetClass(exmlSourceFile);
}
@Override
public void generateAllComponentClasses() {
for (File sourceFile : getConfig().getSourceFiles()) {
if (sourceFile.getName().endsWith(EXML_SUFFIX)) {
generateComponentClass(sourceFile);
}
}
}
@Override
public File generateXsd() {
// Maybe even the directory does not exist.
File targetPackageFolder = getConfig().getResourceOutputDirectory();
if(!targetPackageFolder.exists()) {
//noinspection ResultOfMethodCallIgnored
targetPackageFolder.mkdirs(); // NOSONAR
}
File result = new File(targetPackageFolder, getConfig().getConfigClassPackage() + ".xsd");
Writer writer = null;
try {
writer = new OutputStreamWriter(new FileOutputStream(result), net.jangaroo.exml.api.Exmlc.OUTPUT_CHARSET);
configClassRegistry.generateXsd(writer);
} catch (Exception e) {
throw new ExmlcException("unable to generate xsd file: " + e.getMessage(), e);
} finally {
try {
if (writer != null) {
writer.close();
}
} catch (IOException e) {
//never happen
}
}
return result;
}
public File[] convertAllExmlToMxml() {
return new ExmlToMxml(configClassRegistry).convert();
}
public static int run(String[] argv) {
ExmlcCommandLineParser parser = new ExmlcCommandLineParser();
ExmlConfiguration exmlConfiguration;
try {
exmlConfiguration = parser.parse(argv);
} catch (CommandLineParseException e) {
System.err.println(e.getMessage()); // NOSONAR this is a commandline tool
return e.getExitCode();
}
if (exmlConfiguration != null) {
Exmlc exmlc = new Exmlc(exmlConfiguration);
if (exmlConfiguration.isConvertToMxml()) {
exmlc.convertAllExmlToMxml();
} else {
exmlc.generateAllConfigClasses();
exmlc.generateAllComponentClasses();
exmlc.generateXsd();
}
}
return 0;
}
public static void main(String[] argv) {
int result = run(argv);
if (result != 0) {
System.exit(result);
}
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy