Added:
maven/plugins/trunk/maven-remote-resources-plugin/src/main/java/org/apache/maven/plugin/resources/remote/BundleRemoteResourcesMojo.java
URL:
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-remote-resources-plugin/src/main/java/org/apache/maven/plugin/resources/remote/BundleRemoteResourcesMojo.java?view=auto&rev=476907
==============================================================================
---
maven/plugins/trunk/maven-remote-resources-plugin/src/main/java/org/apache/maven/plugin/resources/remote/BundleRemoteResourcesMojo.java
(added)
+++
maven/plugins/trunk/maven-remote-resources-plugin/src/main/java/org/apache/maven/plugin/resources/remote/BundleRemoteResourcesMojo.java
Sun Nov 19 12:20:57 2006
@@ -0,0 +1,78 @@
+package org.apache.maven.plugin.resources.remote;
+
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import
org.apache.maven.plugin.resources.remote.io.xpp3.RemoteResourcesBundleXpp3Writer;
+import org.codehaus.plexus.util.FileUtils;
+
+import java.util.List;
+import java.util.Iterator;
+import java.io.File;
+import java.io.IOException;
+import java.io.Writer;
+import java.io.FileWriter;
+
+/**
+ * Pull down artifacts containing remote resources and process the resources
contained
+ * inside the artifact.
+ *
+ * @goal bundle
+ * @phase generate-resources
+ */
+public class BundleRemoteResourcesMojo
+ extends AbstractMojo
+{
+ public static final String RESOURCES_MANIFEST =
"META-INF/maven/remote-resources.xml";
+
+ /**
+ * @parameter expression="${basedir}/src/main/resources"
+ */
+ private File resourcesDirectory;
+
+ /**
+ * @parameter expression="${project.build.outputDirectory}"
+ */
+ private File outputDirectory;
+
+ public void execute()
+ throws MojoExecutionException
+ {
+ // Look at the content of ${basedir}/src/main/resources and create a
manifest of the files
+ // so that velocity can easily process any resources inside the JAR
that need to be processed.
+
+ RemoteResourcesBundle remoteResourcesBundle = new
RemoteResourcesBundle();
+
+ try
+ {
+ List resources = FileUtils.getFileNames( resourcesDirectory, null,
"*~,*.bak", false );
+
+ for ( Iterator i = resources.iterator(); i.hasNext(); )
+ {
+ String resource = (String) i.next();
+
+ remoteResourcesBundle.addRemoteResource( resource );
+ }
+ }
+ catch ( IOException e )
+ {
+ throw new MojoExecutionException( "Error scanning resources.", e );
+ }
+
+ RemoteResourcesBundleXpp3Writer w = new
RemoteResourcesBundleXpp3Writer();
+
+ try
+ {
+ File f = new File( outputDirectory, RESOURCES_MANIFEST );
+
+ FileUtils.mkdir( f.getParentFile().getAbsolutePath() );
+
+ Writer writer = new FileWriter( f );
+
+ w.write( writer, remoteResourcesBundle );
+ }
+ catch ( IOException e )
+ {
+ throw new MojoExecutionException( "Error creating remote resources
manifest.", e );
+ }
+ }
+}
Propchange:
maven/plugins/trunk/maven-remote-resources-plugin/src/main/java/org/apache/maven/plugin/resources/remote/BundleRemoteResourcesMojo.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
maven/plugins/trunk/maven-remote-resources-plugin/src/main/java/org/apache/maven/plugin/resources/remote/BundleRemoteResourcesMojo.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added:
maven/plugins/trunk/maven-remote-resources-plugin/src/main/java/org/apache/maven/plugin/resources/remote/ProcessRemoteResourcesMojo.java
URL:
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-remote-resources-plugin/src/main/java/org/apache/maven/plugin/resources/remote/ProcessRemoteResourcesMojo.java?view=auto&rev=476907
==============================================================================
---
maven/plugins/trunk/maven-remote-resources-plugin/src/main/java/org/apache/maven/plugin/resources/remote/ProcessRemoteResourcesMojo.java
(added)
+++
maven/plugins/trunk/maven-remote-resources-plugin/src/main/java/org/apache/maven/plugin/resources/remote/ProcessRemoteResourcesMojo.java
Sun Nov 19 12:20:57 2006
@@ -0,0 +1,211 @@
+package org.apache.maven.plugin.resources.remote;
+
+/*
+ * Copyright 2001-2005 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import
org.apache.maven.plugin.resources.remote.io.xpp3.RemoteResourcesBundleXpp3Reader;
+import org.apache.maven.shared.downloader.Downloader;
+import org.apache.maven.shared.downloader.DownloadException;
+import org.apache.maven.shared.downloader.DownloadNotFoundException;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.project.MavenProject;
+import org.apache.velocity.VelocityContext;
+import org.codehaus.plexus.util.StringUtils;
+import org.codehaus.plexus.util.IOUtil;
+import org.codehaus.plexus.util.FileUtils;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+import org.codehaus.plexus.velocity.VelocityComponent;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.Writer;
+import java.io.FileWriter;
+import java.util.List;
+import java.util.Iterator;
+import java.util.Enumeration;
+import java.util.ArrayList;
+import java.util.Date;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+
+/**
+ * Pull down artifacts containing remote resources and process the resources
contained
+ * inside the artifact.
+ *
+ * @goal process
+ * @phase generate-resources
+ */
+public class ProcessRemoteResourcesMojo
+ extends AbstractMojo
+{
+ /**
+ * @parameter expression="${localRepository}
+ */
+ private ArtifactRepository localRepository;
+
+ /**
+ * @parameter expression="${project.remoteRepositories}
+ */
+ private ArrayList remoteRepositories;
+
+ /**
+ * @parameter expression="${project}"
+ */
+ private MavenProject project;
+
+ /**
+ * @parameter expression="${project.build.outputDirectory}"
+ */
+ private File outputDirectory;
+
+ /**
+ * @parameter
+ */
+ private ArrayList artifacts;
+
+ /**
+ * @component
+ */
+ private Downloader downloader;
+
+ /**
+ * @component
+ */
+ private VelocityComponent velocity;
+
+ /**
+ * @parameter expression="${workDirectory}"
default-value="${project.build.directory}/remote-resources"
+ */
+ private File workDirectory;
+
+ public void execute()
+ throws MojoExecutionException
+ {
+ if ( StringUtils.isEmpty( project.getInceptionYear() ) )
+ {
+ throw new MojoExecutionException( "You must specify an
inceptionYear." );
+ }
+
+ RemoteResourcesClassLoader classLoader = new
RemoteResourcesClassLoader();
+
+ for ( Iterator i = artifacts.iterator(); i.hasNext(); )
+ {
+ String artifactDescriptor = (String) i.next();
+
+ // groupId:artifactId:version
+ String[] s = StringUtils.split( artifactDescriptor, ":" );
+
+ try
+ {
+ File artifact = downloader.download( s[0], s[1], s[2],
localRepository, remoteRepositories );
+
+ classLoader.addURL( artifact.toURI().toURL() );
+ }
+ catch ( DownloadException e )
+ {
+ throw new MojoExecutionException( "Error downloading resources
JAR.", e );
+ }
+ catch ( DownloadNotFoundException e )
+ {
+ throw new MojoExecutionException( "Resources JAR cannot be
found.", e );
+ }
+ catch ( MalformedURLException e )
+ {
+ // Won't happen.
+ }
+ }
+
+ ClassLoader old = Thread.currentThread().getContextClassLoader();
+
+ Thread.currentThread().setContextClassLoader( classLoader );
+
+ InputStreamReader reader = null;
+
+ VelocityContext context = new VelocityContext();
+
+ context.put( "project", project );
+
+ String year = new SimpleDateFormat("yyyy").format( new Date() );
+
+ context.put( "presentYear", year );
+
+ if ( project.getInceptionYear().equals( year ) )
+ {
+ context.put( "projectTimespan", year );
+ }
+ else
+ {
+ context.put( "projectTimespan", project.getInceptionYear() + "-" +
year );
+ }
+
+ try
+ {
+ Enumeration e = classLoader.getResources(
BundleRemoteResourcesMojo.RESOURCES_MANIFEST );
+
+ URL url = (URL) e.nextElement();
+
+ URLConnection conn = url.openConnection();
+
+ conn.connect();
+
+ reader = new InputStreamReader( conn.getInputStream() );
+
+ RemoteResourcesBundleXpp3Reader bundleReader = new
RemoteResourcesBundleXpp3Reader();
+
+ RemoteResourcesBundle bundle = bundleReader.read( reader );
+
+ for ( Iterator i = bundle.getRemoteResources().iterator();
i.hasNext(); )
+ {
+ String resource = (String) i.next();
+
+ File f = new File( outputDirectory, resource );
+
+ FileUtils.mkdir( f.getParentFile().getAbsolutePath() );
+
+ Writer writer = new FileWriter( f );
+
+ velocity.getEngine().mergeTemplate( resource, context, writer
);
+
+ writer.close();
+ }
+ }
+ catch ( IOException e )
+ {
+ throw new MojoExecutionException( "Error finding remote resources
manifests", e );
+ }
+ catch ( XmlPullParserException e )
+ {
+ throw new MojoExecutionException( "Error parsing remote resource
bundle descriptor.", e );
+ }
+ catch ( Exception e )
+ {
+ throw new MojoExecutionException( "Error rendering velocity
resource.", e );
+ }
+
+ finally
+ {
+ IOUtil.close( reader );
+ }
+
+ Thread.currentThread().setContextClassLoader( old );
+ }
+}
Propchange:
maven/plugins/trunk/maven-remote-resources-plugin/src/main/java/org/apache/maven/plugin/resources/remote/ProcessRemoteResourcesMojo.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
maven/plugins/trunk/maven-remote-resources-plugin/src/main/java/org/apache/maven/plugin/resources/remote/ProcessRemoteResourcesMojo.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added:
maven/plugins/trunk/maven-remote-resources-plugin/src/main/java/org/apache/maven/plugin/resources/remote/RemoteResourcesClassLoader.java
URL:
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-remote-resources-plugin/src/main/java/org/apache/maven/plugin/resources/remote/RemoteResourcesClassLoader.java?view=auto&rev=476907
==============================================================================
---
maven/plugins/trunk/maven-remote-resources-plugin/src/main/java/org/apache/maven/plugin/resources/remote/RemoteResourcesClassLoader.java
(added)
+++
maven/plugins/trunk/maven-remote-resources-plugin/src/main/java/org/apache/maven/plugin/resources/remote/RemoteResourcesClassLoader.java
Sun Nov 19 12:20:57 2006
@@ -0,0 +1,21 @@
+package org.apache.maven.plugin.resources.remote;
+
+import java.net.URLClassLoader;
+import java.net.URL;
+
+/**
+ * @author Jason van Zyl
+ */
+public class RemoteResourcesClassLoader
+ extends URLClassLoader
+{
+ public RemoteResourcesClassLoader()
+ {
+ super( new URL[]{} );
+ }
+
+ public void addURL( URL url )
+ {
+ super.addURL( url );
+ }
+}
Propchange:
maven/plugins/trunk/maven-remote-resources-plugin/src/main/java/org/apache/maven/plugin/resources/remote/RemoteResourcesClassLoader.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
maven/plugins/trunk/maven-remote-resources-plugin/src/main/java/org/apache/maven/plugin/resources/remote/RemoteResourcesClassLoader.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added:
maven/plugins/trunk/maven-remote-resources-plugin/src/main/mdo/remote-resources.mdo
URL:
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-remote-resources-plugin/src/main/mdo/remote-resources.mdo?view=auto&rev=476907
==============================================================================
---
maven/plugins/trunk/maven-remote-resources-plugin/src/main/mdo/remote-resources.mdo
(added)
+++
maven/plugins/trunk/maven-remote-resources-plugin/src/main/mdo/remote-resources.mdo
Sun Nov 19 12:20:57 2006
@@ -0,0 +1,34 @@
+<model>
+ <id>remoteResourcesBundle</id>
+ <name>RemoteResourcesBundle</name>
+ <description><![CDATA[
+ Project-local overrides to the build process based on detected or
user-provided environmental parameters.
+ This is the model specification for ${basedir}/profiles.xml.
+ ]]></description>
+ <defaults>
+ <default>
+ <key>package</key>
+ <value>org.apache.maven.plugin.resources.remote</value>
+ </default>
+ </defaults>
+ <classes>
+ <class rootElement="true" xml.tagName="remoteResourcesBundle">
+ <name>RemoteResourcesBundle</name>
+ <version>1.0.0</version>
+ <description>Root element of the remote-resources.xml file.</description>
+ <fields>
+ <field>
+ <name>remoteResources</name>
+ <version>1.0.0</version>
+ <description><![CDATA[
+ Remote resources that are contained in a remote resources bundle.
+ ]]></description>
+ <association>
+ <type>String</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ </fields>
+ </class>
+ </classes>
+</model>
Added:
maven/plugins/trunk/maven-remote-resources-plugin/src/main/resources/META-INF/plexus/components.xml
URL:
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-remote-resources-plugin/src/main/resources/META-INF/plexus/components.xml?view=auto&rev=476907
==============================================================================
---
maven/plugins/trunk/maven-remote-resources-plugin/src/main/resources/META-INF/plexus/components.xml
(added)
+++
maven/plugins/trunk/maven-remote-resources-plugin/src/main/resources/META-INF/plexus/components.xml
Sun Nov 19 12:20:57 2006
@@ -0,0 +1,28 @@
+<component-set>
+ <components>
+ <component>
+ <role>org.codehaus.plexus.velocity.VelocityComponent</role>
+
<implementation>org.codehaus.plexus.velocity.DefaultVelocityComponent</implementation>
+ <configuration>
+ <properties>
+ <property>
+ <name>resource.loader</name>
+ <value>classpath</value>
+ </property>
+ <property>
+ <name>classpath.resource.loader.class</name>
+
<value>org.codehaus.plexus.velocity.ContextClassLoaderResourceLoader</value>
+ </property>
+ <property>
+ <name>velocimacro.messages.on</name>
+ <value>false</value>
+ </property>
+ <property>
+ <name>resource.manager.logwhenfound</name>
+ <value>false</value>
+ </property>
+ </properties>
+ </configuration>
+ </component>
+ </components>
+</component-set>
\ No newline at end of file
Propchange:
maven/plugins/trunk/maven-remote-resources-plugin/src/main/resources/META-INF/plexus/components.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
maven/plugins/trunk/maven-remote-resources-plugin/src/main/resources/META-INF/plexus/components.xml
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"