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"


Reply via email to