You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by js...@apache.org on 2008/01/04 01:40:25 UTC
svn commit: r608692 -
/incubator/tuscany/java/sca/tools/maven/maven-ant-generator/src/main/java/org/apache/tuscany/sca/tools/ant/generator/plugin/AntGeneratorMojo.java
Author: jsdelfino
Date: Thu Jan 3 16:40:24 2008
New Revision: 608692
URL: http://svn.apache.org/viewvc?rev=608692&view=rev
Log:
Generate Ant tasks for the SDO and WSDL2Java plugins found in the Maven POM model.
Modified:
incubator/tuscany/java/sca/tools/maven/maven-ant-generator/src/main/java/org/apache/tuscany/sca/tools/ant/generator/plugin/AntGeneratorMojo.java
Modified: incubator/tuscany/java/sca/tools/maven/maven-ant-generator/src/main/java/org/apache/tuscany/sca/tools/ant/generator/plugin/AntGeneratorMojo.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/tools/maven/maven-ant-generator/src/main/java/org/apache/tuscany/sca/tools/ant/generator/plugin/AntGeneratorMojo.java?rev=608692&r1=608691&r2=608692&view=diff
==============================================================================
--- incubator/tuscany/java/sca/tools/maven/maven-ant-generator/src/main/java/org/apache/tuscany/sca/tools/ant/generator/plugin/AntGeneratorMojo.java (original)
+++ incubator/tuscany/java/sca/tools/maven/maven-ant-generator/src/main/java/org/apache/tuscany/sca/tools/ant/generator/plugin/AntGeneratorMojo.java Thu Jan 3 16:40:24 2008
@@ -24,17 +24,24 @@
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Collections;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.factory.ArtifactFactory;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.artifact.resolver.ArtifactResolver;
import org.apache.maven.model.FileSet;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.model.PluginExecution;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.project.MavenProject;
import org.apache.maven.settings.Settings;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
+
+import com.ibm.xslt4j.bcel.generic.CASTORE;
/**
* A Maven plugin that generates an Ant build.xml file for Tuscany SCA samples.
@@ -184,6 +191,11 @@
int base = project.getBasedir().toString().length() + 1;
pw.println(" <target name=\"compile\">");
pw.println(" <mkdir dir=\"target/classes\"/>");
+
+ // Generate any pre-compilation tasks
+ generatePreCompileTasks(pw);
+
+ // Generate the compile task
pw.println(" <javac destdir=\"target/classes\" debug=\"on\" source=\"1.5\" target=\"1.5\">");
for (String source: (List<String>)project.getCompileSourceRoots()) {
if (source.length() > base) {
@@ -310,6 +322,188 @@
}
pw.println(" </fileset>");
pw.println();
+ }
+
+ /**
+ * Extract plugin execution configurations out of the Maven model. This handles
+ * nested configurations with a base configuration and a collection of nested
+ * configuration elements, for example:
+ * <configuration>
+ * <schemaFiles>
+ * <configuration>
+ * <fileName>x.wsdl</fileName>
+ * </configuration>
+ * <configuration>
+ * <fileName>y.wsdl</fileName>
+ * </configuration>
+ * </schemaFiles>
+ * <noNotification>true</noNotification>
+ * </configuration>
+ *
+ * @param execution Maven plugin execution model
+ * @return a list of maps containing the plugin configuration key value pairs
+ */
+ private static List<Map<String, String>> pluginConfigurations(PluginExecution execution) {
+ List<Map<String, String>> configurations = new ArrayList<Map<String,String>>();
+ Map<String, String> topConfiguration = new HashMap<String, String>();
+
+ Xpp3Dom dom = (Xpp3Dom)execution.getConfiguration();
+ for (Xpp3Dom element: dom.getChildren()) {
+ if (element.getChildCount() != 0) {
+ // Handle nested configuration element, create a child configuration
+ // for each
+ for (Xpp3Dom childConfigurationElement: element.getChildren()) {
+ Map<String, String> childConfiguration = new HashMap<String, String>();
+ for (Xpp3Dom childElement: childConfigurationElement.getChildren()) {
+ childConfiguration.put(childElement.getName(), childElement.getValue());
+ }
+ configurations.add(childConfiguration);
+ }
+ } else {
+ // Handle top level key value pair element
+ topConfiguration.put(element.getName(), element.getValue());
+ }
+ }
+ // Return the top configuration or the child configurations merged
+ // with the top one
+ if (configurations.isEmpty()) {
+ configurations.add(topConfiguration);
+ } else {
+ for (Map<String, String> configuration: configurations) {
+ configuration.putAll(topConfiguration);
+ }
+ }
+ return configurations;
+ }
+
+ /**
+ * Generate Ant tasks for the pre-compilation generation plugins
+ * used in the Maven module.
+ * @param pw PrintWriter to write to
+ * @return list of directories containing generated source to compile
+ */
+ private void generatePreCompileTasks(PrintWriter pw) {
+ String baseDir = project.getBasedir().getAbsolutePath() + '/';
+
+ List<Plugin> plugins = (List<Plugin>)project.getBuildPlugins();
+ for (Plugin plugin: plugins) {
+
+ // Generate Ant task equivalent to the Tuscany SDO plugin
+ if ("org.apache.tuscany.sdo".equals(plugin.getGroupId()) && "tuscany-sdo-plugin".equals(plugin.getArtifactId())) {
+ for (PluginExecution execution: (List<PluginExecution>)plugin.getExecutions()) {
+ for (Map<String, String> configuration: pluginConfigurations(execution)) {
+
+ pw.println(" <java classname=\"org.apache.tuscany.sdo.generate.XSD2JavaGenerator\" fork=\"true\">");
+
+ // Generate the various code generation options
+ for (Map.Entry<String, String> element: configuration.entrySet()) {
+ String key = element.getKey();
+ String value = element.getValue();
+ if (key.equals("schemaNamespace")) {
+ pw.println(" <arg value=\"-schemaNamespace\"/>");
+ pw.println(" <arg value=\"" + value + "\"/>");
+ }
+ if (key.equals("javaPackage")) {
+ pw.println(" <arg value=\"-javaPackage\"/>");
+ pw.println(" <arg value=\"" + value + "\"/>");
+ }
+ if (key.equals("prefix")) {
+ pw.println(" <arg value=\"-prefix\"/>");
+ pw.println(" <arg value=\"" + value + "\"/>");
+ }
+ if (key.equals("noInterfaces") && "true".equals(value)) {
+ pw.println(" <arg value=\"-noInterfaces\"/>");
+ }
+ if (key.equals("noNotification") && "true".equals(value)) {
+ pw.println(" <arg value=\"-noNotification\"/>");
+ }
+ if (key.equals("noContainer") && "true".equals(value)) {
+ pw.println(" <arg value=\"-noContainment\"/>");
+ }
+ if (key.equals("noUnsettable") && "true".equals(value)) {
+ pw.println(" <arg value=\"-noUnsettable\"/>");
+ }
+ }
+
+ // Generate target directory parameter
+ String targetDirectory = configuration.get("targetDirectory");
+ if (targetDirectory == null) {
+ targetDirectory = "target/sdo-source";
+ } else if (targetDirectory.startsWith(baseDir)) {
+ targetDirectory = targetDirectory.substring(baseDir.length());
+ }
+ pw.println(" <arg value=\"-targetDirectory\"/>");
+ pw.println(" <arg value=\"" + targetDirectory + "\"/>");
+
+ // Generate schema file parameter
+ String schemaFile = configuration.get("schemaFile");
+ if (schemaFile == null) {
+ schemaFile = configuration.get("fileName");
+ }
+ if (schemaFile != null) {
+ if (schemaFile.startsWith(baseDir)) {
+ schemaFile = schemaFile.substring(baseDir.length());
+ }
+ pw.println(" <arg value=\"" + schemaFile + "\"/>");
+ }
+
+ pw.println(" <classpath>");
+ pw.println(" <fileset refid=\"tuscany.jars\"/>");
+ pw.println(" <fileset refid=\"3rdparty.jars\"/>");
+ pw.println(" </classpath>");
+ pw.println(" </java>");
+ }
+ }
+ }
+
+ // Generate Ant task equivalent to the Tuscany WSDL2Java plugin
+ else if ("org.apache.tuscany.sca".equals(plugin.getGroupId()) && "tuscany-maven-wsdl2java".equals(plugin.getArtifactId())) {
+ for (PluginExecution execution: (List<PluginExecution>)plugin.getExecutions()) {
+ for (Map<String, String> configuration: pluginConfigurations(execution)) {
+
+ pw.println(" <java classname=\"org.apache.tuscany.tools.wsdl2java.generate.WSDL2JavaGenerator\" fork=\"true\">");
+
+ // Generate the various code generation options
+ for (Map.Entry<String, String> element: configuration.entrySet()) {
+ String key = element.getKey();
+ String value = element.getValue();
+ if (key.equals("javaPackage")) {
+ pw.println(" <arg value=\"-javaPackage\"/>");
+ pw.println(" <arg value=\"" + value + "\"/>");
+ }
+ }
+
+ // Generate target directory parameter
+ String targetDirectory = configuration.get("targetDirectory");
+ if (targetDirectory == null) {
+ targetDirectory = "target/wsdl2java-source";
+ } else if (targetDirectory.startsWith(baseDir)) {
+ targetDirectory = targetDirectory.substring(baseDir.length());
+ }
+ pw.println(" <arg value=\"-targetDirectory\"/>");
+ pw.println(" <arg value=\"" + targetDirectory + "\"/>");
+
+ // Generate WSDL file parameter
+ String wsdlFile = configuration.get("wsdlFile");
+ if (wsdlFile == null) {
+ wsdlFile = configuration.get("fileName");
+ }
+ if (wsdlFile != null) {
+ if (wsdlFile.startsWith(baseDir)) {
+ wsdlFile = wsdlFile.substring(baseDir.length());
+ }
+ pw.println(" <arg value=\"" + wsdlFile + "\"/>");
+ }
+
+ pw.println(" <classpath>");
+ pw.println(" <fileset refid=\"tuscany.jars\"/>");
+ pw.println(" <fileset refid=\"3rdparty.jars\"/>");
+ pw.println(" </classpath>");
+ pw.println(" </java>");
+ }
+ }
+ }
+ }
}
/**
---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org