Author: mmao
Date: Tue Mar 27 22:56:15 2007
New Revision: 523188

URL: http://svn.apache.org/viewvc?view=rev&rev=523188
Log:
Add a maven-jdee-plugin for emacs users to generate a jdee project file
  * jdee:jdee to generate project file 
  * jdee:clean to clean the project file 

Added:
    incubator/cxf/trunk/tools/jdee/
    incubator/cxf/trunk/tools/jdee/pom.xml
    incubator/cxf/trunk/tools/jdee/src/
    incubator/cxf/trunk/tools/jdee/src/main/
    incubator/cxf/trunk/tools/jdee/src/main/java/
    incubator/cxf/trunk/tools/jdee/src/main/java/org/
    incubator/cxf/trunk/tools/jdee/src/main/java/org/apache/
    incubator/cxf/trunk/tools/jdee/src/main/java/org/apache/cxf/
    incubator/cxf/trunk/tools/jdee/src/main/java/org/apache/cxf/maven_plugin/
    
incubator/cxf/trunk/tools/jdee/src/main/java/org/apache/cxf/maven_plugin/jdee/
    
incubator/cxf/trunk/tools/jdee/src/main/java/org/apache/cxf/maven_plugin/jdee/CleanMojo.java
    
incubator/cxf/trunk/tools/jdee/src/main/java/org/apache/cxf/maven_plugin/jdee/JdeeMojo.java
    
incubator/cxf/trunk/tools/jdee/src/main/java/org/apache/cxf/maven_plugin/jdee/prj.vm

Added: incubator/cxf/trunk/tools/jdee/pom.xml
URL: 
http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/jdee/pom.xml?view=auto&rev=523188
==============================================================================
--- incubator/cxf/trunk/tools/jdee/pom.xml (added)
+++ incubator/cxf/trunk/tools/jdee/pom.xml Tue Mar 27 22:56:15 2007
@@ -0,0 +1,93 @@
+<!--

+    Licensed to the Apache Software Foundation (ASF) under one

+    or more contributor license agreements. See the NOTICE file

+    distributed with this work for additional information

+    regarding copyright ownership. The ASF licenses this file

+    to you under the Apache License, Version 2.0 (the

+    "License"); you may not use this file except in compliance

+    with the License. You may obtain a copy of the License at

+    

+    http://www.apache.org/licenses/LICENSE-2.0

+    

+    Unless required by applicable law or agreed to in writing,

+    software distributed under the License is distributed on an

+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+    KIND, either express or implied. See the License for the

+    specific language governing permissions and limitations

+    under the License.

+-->

+<project xmlns="http://maven.apache.org/POM/4.0.0"; 

+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 

+        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>

+    <modelVersion>4.0.0</modelVersion>

+    <groupId>org.apache.cxf.maven</groupId>

+    <artifactId>maven-jdee-plugin</artifactId>

+    <packaging>maven-plugin</packaging>

+    <version>2.0-incubator-RC-SNAPSHOT</version>

+    <name>Apache CXF Maven2 Plugins</name>

+    <url>http://cwiki.apache.org/CXF</url>

+

+    <parent>

+       <groupId>org.apache.cxf</groupId>

+       <artifactId>cxf-parent</artifactId>

+       <version>2.0-incubator-RC-SNAPSHOT</version>

+       <relativePath>../../parent/pom.xml</relativePath>

+    </parent>

+

+    <dependencies>

+       <dependency>

+           <groupId>junit</groupId>

+           <artifactId>junit</artifactId>

+           <scope>test</scope>

+       </dependency>

+

+       <dependency>

+           <groupId>org.apache.maven</groupId>

+           <artifactId>maven-plugin-api</artifactId>

+           <scope>provided</scope>

+       </dependency>

+       <dependency>

+           <groupId>org.apache.maven</groupId>

+           <artifactId>maven-project</artifactId>

+           <scope>provided</scope>

+       </dependency>

+       <dependency>

+           <groupId>org.apache.maven</groupId>

+           <artifactId>maven-artifact</artifactId>

+           <scope>provided</scope>

+       </dependency>

+

+       <dependency>

+           <groupId>velocity</groupId>

+           <artifactId>velocity</artifactId>

+       </dependency>

+

+       <dependency>

+           <groupId>commons-io</groupId>

+           <artifactId>commons-io</artifactId>

+           <version>1.3</version>

+       </dependency>

+

+       <dependency>

+           <groupId>org.apache.cxf</groupId>

+           <artifactId>cxf-tools-wsdlto-core</artifactId>

+           <version>${project.version}</version>

+       </dependency>

+

+        <dependency>

+            <groupId>ant</groupId>

+            <artifactId>ant</artifactId>

+        </dependency>

+        <dependency>

+            <groupId>ant</groupId>

+            <artifactId>ant-nodeps</artifactId>

+        </dependency>

+

+    </dependencies>

+

+    <scm>

+       
<connection>scm:svn:http://svn.apache.org/repos/asf/incubator/cxf/trunk/codegen-plugin</connection>

+       
<developerConnection>scm:svn:https://svn.apache.org/repos/asf/incubator/cxf/trunk/codegen-plugin</developerConnection>

+    </scm>

+

+</project>


Added: 
incubator/cxf/trunk/tools/jdee/src/main/java/org/apache/cxf/maven_plugin/jdee/CleanMojo.java
URL: 
http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/jdee/src/main/java/org/apache/cxf/maven_plugin/jdee/CleanMojo.java?view=auto&rev=523188
==============================================================================
--- 
incubator/cxf/trunk/tools/jdee/src/main/java/org/apache/cxf/maven_plugin/jdee/CleanMojo.java
 (added)
+++ 
incubator/cxf/trunk/tools/jdee/src/main/java/org/apache/cxf/maven_plugin/jdee/CleanMojo.java
 Tue Mar 27 22:56:15 2007
@@ -0,0 +1,60 @@
+/**

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements. See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership. The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License"); you may not use this file except in compliance

+ * with the License. You may obtain a copy of the License at

+ *

+ * http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied. See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+

+package org.apache.cxf.maven_plugin.jdee;

+

+import java.io.File;

+

+import org.apache.maven.plugin.AbstractMojo;

+import org.apache.maven.plugin.MojoExecutionException;

+import org.apache.maven.project.MavenProject;

+import org.apache.tools.ant.util.FileUtils;

+

+/**

+ * A super-simple Mojo to emit JDEE project files.

+ *

+ * @goal clean

+ * @description Outputs a JDEE project file.

+ * @requiresDependencyResolution test 

+ */

+public class CleanMojo extends AbstractMojo {

+    /**

+     * The Maven Project.

+     *

+     * @parameter expression="${project}"

+     * @required

+     * @readonly

+     */

+    protected MavenProject project;

+

+    private void cleanPrj() throws Exception {

+        FileUtils.delete(new File(project.getBasedir(), "prj.el"));

+        FileUtils.delete(new File(project.getBasedir(), ".jdee_sources"));

+        FileUtils.delete(new File(project.getBasedir(), ".jdee_classpath"));

+    }

+    

+    public void execute() throws MojoExecutionException {

+        try {

+            cleanPrj();

+        } catch (Exception e) {

+            getLog().debug(e);

+            throw new MojoExecutionException(e.getMessage(), e);

+        }

+    }

+}


Added: 
incubator/cxf/trunk/tools/jdee/src/main/java/org/apache/cxf/maven_plugin/jdee/JdeeMojo.java
URL: 
http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/jdee/src/main/java/org/apache/cxf/maven_plugin/jdee/JdeeMojo.java?view=auto&rev=523188
==============================================================================
--- 
incubator/cxf/trunk/tools/jdee/src/main/java/org/apache/cxf/maven_plugin/jdee/JdeeMojo.java
 (added)
+++ 
incubator/cxf/trunk/tools/jdee/src/main/java/org/apache/cxf/maven_plugin/jdee/JdeeMojo.java
 Tue Mar 27 22:56:15 2007
@@ -0,0 +1,188 @@
+/**

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements. See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership. The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License"); you may not use this file except in compliance

+ * with the License. You may obtain a copy of the License at

+ *

+ * http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied. See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+

+package org.apache.cxf.maven_plugin.jdee;

+

+import java.io.BufferedOutputStream;

+import java.io.File;

+import java.io.FileOutputStream;

+import java.io.IOException;

+import java.io.OutputStreamWriter;

+import java.io.Writer;

+import java.util.HashSet;

+import java.util.Iterator;

+import java.util.List;

+import java.util.Properties;

+import java.util.Set;

+

+import org.apache.commons.io.FileUtils;

+import org.apache.cxf.tools.wsdlto.core.VelocityWriter;

+import org.apache.maven.artifact.Artifact;

+import org.apache.maven.artifact.factory.ArtifactFactory;

+import org.apache.maven.plugin.AbstractMojo;

+import org.apache.maven.plugin.MojoExecutionException;

+import org.apache.maven.project.MavenProject;

+import org.apache.velocity.Template;

+import org.apache.velocity.VelocityContext;

+import org.apache.velocity.app.Velocity;

+

+/**

+ * A super-simple Mojo to emit JDEE project files.

+ *

+ * @goal jdee

+ * @description Outputs a JDEE project file.

+ * @requiresDependencyResolution test

+ */

+

+// TODO: 

+//       * include the generated srouce root

+//

+

+public class JdeeMojo extends AbstractMojo {

+    /**

+     * The Maven Project.

+     *

+     * @parameter expression="${project}"

+     * @required

+     * @readonly

+     */

+    protected MavenProject project;

+

+    /**

+     * @component

+     */

+    protected ArtifactFactory artifactFactory;

+

+    /**

+     * Build directory

+     *

+     * @parameter expression="${project.build.outputDirectory}"

+     * @required

+     */

+    private File buildDirectory;

+

+    /**

+     * The set of dependencies required by the project 

+     * @parameter default-value="${project.artifacts}"

+     * @required

+     * @readonly

+     */

+    private java.util.Set dependencies;

+

+

+    private String getVelocityLogFile(String log) {

+        return new File(buildDirectory, log).toString();

+    }

+

+    @SuppressWarnings("unchecked")

+    private Set<String> getSourceDirs() throws Exception {

+        Set<String> results = new HashSet<String>();

+        File file = new File(".jdee_sources");

+        if (file.exists()) {

+            results.addAll(FileUtils.readLines(file));

+        } else {

+            file.createNewFile();

+        }

+

+        results.addAll(emitPaths(project.getCompileSourceRoots()));

+        results.addAll(emitPaths(project.getTestCompileSourceRoots()));

+        FileUtils.writeLines(file, results);

+        return results;

+    }

+

+    @SuppressWarnings("unchecked")

+    private Set<String> getGlobalClasspath() throws Exception {

+        Set<String> results = new HashSet<String>();

+        File file = new File(".jdee_classpath");

+        if (file.exists()) {

+            results.addAll(FileUtils.readLines(file));            

+        } else {

+            file.createNewFile();

+        }

+

+        results.addAll(emitPaths(project.getCompileClasspathElements()));

+        results.addAll(emitPaths(project.getTestClasspathElements()));

+        results.addAll(emitPaths(project.getSystemClasspathElements()));

+        results.addAll(getDependencies());

+        FileUtils.writeLines(file, results);

+        return results;

+    }

+

+    private Set<String> getDependencies() throws Exception {

+        Set<String> results = new HashSet<String>();

+        if (dependencies != null && !dependencies.isEmpty()) {

+            for (Iterator it = dependencies.iterator(); it.hasNext();) {

+                Artifact artifact = (Artifact)it.next();

+                results.add(artifact.getFile().toString().replace("\\", "/"));

+            }

+        }

+        return results;

+    }

+

+    private Set<String> emitPaths(List paths) throws IOException {

+        Set<String> np = new HashSet<String>();

+        for (Object path : paths) {

+            np.add(path.toString().replace("\\", "/"));

+        }

+        return np;

+    }

+

+    // TODO: Reuse the velocity in the tools 

+    private void initVelocity() throws Exception {

+        Properties props = new Properties();

+        String clzName = 
"org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader";

+        props.put("resource.loader", "class");

+        props.put("class.resource.loader.class", clzName);

+        props.put("runtime.log", getVelocityLogFile("velocity.log"));

+

+        Velocity.init(props);

+    }

+

+    private void generatePrj() throws Exception {

+        initVelocity();

+

+        String templateFile = "/org/apache/cxf/maven_plugin/jdee/prj.vm";

+        Template tmpl = Velocity.getTemplate(templateFile);

+        if (tmpl == null) {

+            throw new RuntimeException("Can not load template file: " + 
templateFile);

+        }

+

+        File outputFile = new File("prj.el");

+        

+        VelocityContext ctx = new VelocityContext();

+        ctx.put("SOURCE_DIRS", getSourceDirs());

+        ctx.put("GLOBAL_CP", getGlobalClasspath());

+

+        Writer outputs = new OutputStreamWriter(new BufferedOutputStream(new 
FileOutputStream(outputFile)),

+                                                "UTF-8");

+        VelocityWriter writer = new VelocityWriter(outputs);

+

+        tmpl.merge(ctx, writer);

+        writer.close();

+    }

+

+    public void execute() throws MojoExecutionException {

+        try {

+            generatePrj();

+        } catch (Exception e) {

+            getLog().debug(e);

+            throw new MojoExecutionException(e.getMessage(), e);

+        }

+    }

+}


Added: 
incubator/cxf/trunk/tools/jdee/src/main/java/org/apache/cxf/maven_plugin/jdee/prj.vm
URL: 
http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/jdee/src/main/java/org/apache/cxf/maven_plugin/jdee/prj.vm?view=auto&rev=523188
==============================================================================
--- 
incubator/cxf/trunk/tools/jdee/src/main/java/org/apache/cxf/maven_plugin/jdee/prj.vm
 (added)
+++ 
incubator/cxf/trunk/tools/jdee/src/main/java/org/apache/cxf/maven_plugin/jdee/prj.vm
 Tue Mar 27 22:56:15 2007
@@ -0,0 +1,4 @@
+(jde-project-file-version "1.0")

+(jde-set-variables

+  '(jde-sourcepath '(#foreach ($source in $SOURCE_DIRS)"$source" #end))

+  '(jde-global-classpath '(#foreach ($classpath in $GLOBAL_CP)"$classpath" 
#end)))
\ No newline at end of file


Reply via email to