in plugin/src/main/java/org/apache/tuscany/sdo/plugin/GeneratorMojo.java [164:315]
public void execute() throws MojoExecutionException {
// check for schemaFiles parameter first, if properties are not set, use
// global property
if (null != schemaFiles) {
for (int i = 0; i < schemaFiles.length; ++i) {
SchemaFileOption sf = schemaFiles[i];
if (null == sf.getTargetDirectory()) {
sf.setTargetDirectory(targetDirectory);
}
if (null == sf.getJavaPackage()) {
sf.setJavaPackage(javaPackage);
}
if (null == sf.getSchemaNamespace()) {
sf.setSchemaNamespace(schemaNamespace);
}
if (null == sf.isNoInterfaces()) {
sf.setNoInterfaces(noInterfaces);
}
if (null == sf.isNoContainment()) {
sf.setNoContainment(noContainment);
}
if (null == sf.isNoNotification()) {
sf.setNoNotification(noNotification);
}
if (null == sf.isNoUnsettable()) {
sf.setNoUnsettable(noUnsettable);
}
if (null == sf.isGenerateLoader()) {
sf.setGenerateLoader(generateLoader);
}
if (null == sf.isGenerateSwitch()) {
sf.setGenerateSwitch(generateSwitch);
}
// if (null == sf.getCompilerSourceRoots()) {
// sf.setCompilerSourceRoots(compileSourceRoots);
// }
if (null == sf.isInterfaceDataObject()) {
sf.setInterfaceDataObject(interfaceDataObject);
}
if (sf.getFileName() == null || sf.getFileName().length() == 0) {
throw new MojoExecutionException("no fileName specfied for schema.");
}
if (!sf.getFileName().canRead() || !sf.getFileName().isFile()) {
throw new MojoExecutionException("file can not be read:" + sf.getFileName());
}
}
} else {
if (schemaFile == null) {
File[] files = new File(schemaDir).listFiles(FILTER);
schemaFiles = new SchemaFileOption[files.length];
for (int i = files.length - 1; i > -1; --i) {
schemaFiles[i] = new SchemaFileOption();
schemaFiles[i].setFileName(files[i]);
schemaFiles[i].setJavaPackage(javaPackage);
// schemaFiles[i].setCompilerSourceRoots(compileSourceRoots);
schemaFiles[i].setGenerateLoader(generateLoader);
schemaFiles[i].setGenerateSwitch(generateSwitch);
schemaFiles[i].setNoContainment(noContainment);
schemaFiles[i].setInterfaceDataObject(interfaceDataObject);
schemaFiles[i].setNoInterfaces(noInterfaces);
schemaFiles[i].setNoNotification(noNotification);
schemaFiles[i].setNoUnsettable(noUnsettable);
schemaFiles[i].setPrefix(prefix);
schemaFiles[i].setTargetDirectory(targetDirectory);
schemaFiles[i].setSchemaNamespace(schemaNamespace);
}
} else {
schemaFiles = new SchemaFileOption[] {new SchemaFileOption()};
schemaFiles[0].setFileName(schemaFile);
schemaFiles[0].setJavaPackage(javaPackage);
// schemaFiles[0].setCompilerSourceRoots(compileSourceRoots);
schemaFiles[0].setGenerateLoader(generateLoader);
schemaFiles[0].setGenerateSwitch(generateSwitch);
schemaFiles[0].setNoContainment(noContainment);
schemaFiles[0].setInterfaceDataObject(interfaceDataObject);
schemaFiles[0].setNoInterfaces(noInterfaces);
schemaFiles[0].setNoNotification(noNotification);
schemaFiles[0].setNoUnsettable(noUnsettable);
schemaFiles[0].setPrefix(prefix);
schemaFiles[0].setTargetDirectory(targetDirectory);
schemaFiles[0].setSchemaNamespace(schemaNamespace);
}
}
for (int i = 0; i < schemaFiles.length; i++) {
File file = schemaFiles[i].getFileName();
File marker = new File(schemaFiles[i].getTargetDirectory(), ".gen#" + file.getName());
if (file.lastModified() > marker.lastModified()) {
getLog().info("Generating SDO interfaces from " + file);
int genOptions = 0;
if (schemaFiles[i].isNoInterfaces() != null && schemaFiles[i].isNoInterfaces().booleanValue()) {
genOptions |= JavaGenerator.OPTION_NO_INTERFACES;
}
if (schemaFiles[i].isNoContainment() != null && schemaFiles[i].isNoContainment().booleanValue()) {
genOptions |= JavaGenerator.OPTION_NO_CONTAINMENT;
}
if (schemaFiles[i].isNoNotification() != null && schemaFiles[i].isNoNotification().booleanValue()) {
genOptions |= JavaGenerator.OPTION_NO_NOTIFICATION;
}
if (schemaFiles[i].isGenerateLoader() != null && schemaFiles[i].isGenerateLoader().booleanValue()) {
genOptions |= JavaGenerator.OPTION_GENERATE_LOADER;
}
if (schemaFiles[i].isNoUnsettable() != null && schemaFiles[i].isNoUnsettable().booleanValue()) {
genOptions |= JavaGenerator.OPTION_NO_UNSETTABLE;
}
if (schemaFiles[i].isGenerateSwitch() != null && schemaFiles[i].isGenerateSwitch().booleanValue()) {
genOptions |= JavaGenerator.OPTION_GENERATE_SWITCH;
}
if (schemaFiles[i].isInterfaceDataObject() != null && schemaFiles[i].isInterfaceDataObject()
.booleanValue()) {
genOptions |= JavaGenerator.OPTION_INTERFACE_DO;
}
XSD2JavaGenerator.generateFromXMLSchema(file.toString(),
schemaFiles[i].getSchemaNamespace(),
schemaFiles[i].getTargetDirectory(),
schemaFiles[i].getJavaPackage(),
schemaFiles[i].getPrefix(),
genOptions);
}
try {
marker.createNewFile();
} catch (IOException e) {
throw new MojoExecutionException(e.getMessage() + "'" + marker.getAbsolutePath() + "'", e);
}
marker.setLastModified(System.currentTimeMillis());
}
targetDirectory = targetDirectory.replace('/', File.separatorChar);
// FIXME: [rfeng] Workaround to figure out the current execution phase
MojoDescriptor descriptor = (MojoDescriptor)mojos.get(0);
PluginDescriptor pluginDescriptor = descriptor.getPluginDescriptor();
Map pluginMap = project.getBuild().getPluginsAsMap();
Plugin plugin = (Plugin)pluginMap.get(pluginDescriptor.getGroupId() + ":" + pluginDescriptor.getArtifactId());
// How to get the current execution id?
for (Iterator i = plugin.getExecutions().iterator(); i.hasNext();) {
PluginExecution execution = (PluginExecution)i.next();
String phase = execution.getPhase();
if (phase != null && phase.indexOf("-test-") != -1) {
project.addTestCompileSourceRoot(targetDirectory);
} else {
project.addCompileSourceRoot(targetDirectory);
}
}
}