Author: jdcasey
Date: Tue Sep 16 17:37:20 2008
New Revision: 696113

URL: http://svn.apache.org/viewvc?rev=696113&view=rev
Log:
[MASSEMBLY-345] Allow archiver instances to be configured from a new parameter 
in the plugin config within the POM: <archiverConfig>. This will allow 
<archiverConfig><appxml>somepath</appxml></archiverConfig> to work for EAR 
format assemblies.

Integration test submitted by: Petar Tahchiev

Added:
    
maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/
    
maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/goals.txt
   (with props)
    
maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/pom.xml
   (with props)
    
maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/src/
    
maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/src/assemble/
    
maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/src/assemble/bin.xml
   (with props)
    
maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/src/main/
    
maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/src/main/resources/
    
maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/src/main/resources/application.xml
   (with props)
    
maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/verify.bsh
   (with props)
    
maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/interpolation/AssemblyExpressionEvaluator.java
   (with props)
    
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/interpolation/AssemblyExpressionEvaluatorTest.java
   (with props)
Modified:
    
maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AssemblerConfigurationSource.java
    
maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/DefaultAssemblyArchiver.java
    
maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/interpolation/AssemblyInterpolator.java
    
maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/mojos/AbstractAssemblyMojo.java
    
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/DefaultAssemblyArchiverTest.java
    
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/testutils/ConfigSourceStub.java

Added: 
maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/goals.txt
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/goals.txt?rev=696113&view=auto
==============================================================================
--- 
maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/goals.txt
 (added)
+++ 
maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/goals.txt
 Tue Sep 16 17:37:20 2008
@@ -0,0 +1,2 @@
+clean
+package

Propchange: 
maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/goals.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/pom.xml
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/pom.xml?rev=696113&view=auto
==============================================================================
--- 
maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/pom.xml
 (added)
+++ 
maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/pom.xml
 Tue Sep 16 17:37:20 2008
@@ -0,0 +1,33 @@
+<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>
+  <parent>
+    <groupId>org.apache.maven.plugin.assembly.test</groupId>
+    <artifactId>it-project-parent</artifactId>
+    <version>1</version>
+  </parent>
+  
+  <artifactId>massembly-345</artifactId>
+
+  <build>
+    <plugins>
+      <plugin>
+        <artifactId>maven-assembly-plugin</artifactId>
+        <configuration>
+          <archiverConfig>
+            <appxml>src/main/resources/application.xml</appxml>
+          </archiverConfig>
+          <descriptors>
+            <descriptor>src/assemble/bin.xml</descriptor>
+          </descriptors>
+        </configuration>
+        <executions>
+          <execution>
+            <phase>package</phase>
+            <goals><goal>single</goal></goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+</project>

Propchange: 
maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/src/assemble/bin.xml
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/src/assemble/bin.xml?rev=696113&view=auto
==============================================================================
--- 
maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/src/assemble/bin.xml
 (added)
+++ 
maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/src/assemble/bin.xml
 Tue Sep 16 17:37:20 2008
@@ -0,0 +1,16 @@
+<assembly>
+  <id>bin</id>
+  
+  <formats>
+    <format>ear</format>
+  </formats>
+  
+  <includeBaseDirectory>false</includeBaseDirectory>
+  
+  <fileSets>
+    <fileSet>
+      <directory>src/main/</directory>
+    </fileSet>
+  </fileSets>
+ 
+</assembly>

Propchange: 
maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/src/assemble/bin.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/src/main/resources/application.xml
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/src/main/resources/application.xml?rev=696113&view=auto
==============================================================================
--- 
maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/src/main/resources/application.xml
 (added)
+++ 
maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/src/main/resources/application.xml
 Tue Sep 16 17:37:20 2008
@@ -0,0 +1 @@
+Test
\ No newline at end of file

Propchange: 
maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/src/main/resources/application.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/verify.bsh
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/verify.bsh?rev=696113&view=auto
==============================================================================
--- 
maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/verify.bsh
 (added)
+++ 
maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/verify.bsh
 Tue Sep 16 17:37:20 2008
@@ -0,0 +1,6 @@
+import java.io.*;
+
+// verify that the ear is created
+result = new File( basedir, "target/massembly-345-1-bin.ear" ).exists();
+
+return result;

Propchange: 
maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/verify.bsh
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: 
maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AssemblerConfigurationSource.java
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AssemblerConfigurationSource.java?rev=696113&r1=696112&r2=696113&view=diff
==============================================================================
--- 
maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AssemblerConfigurationSource.java
 (original)
+++ 
maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AssemblerConfigurationSource.java
 Tue Sep 16 17:37:20 2008
@@ -84,4 +84,6 @@
     boolean isIgnoreMissingDescriptor();
     
     MavenSession getMavenSession();
+    
+    String getArchiverConfig();
 }

Modified: 
maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/DefaultAssemblyArchiver.java
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/DefaultAssemblyArchiver.java?rev=696113&r1=696112&r2=696113&view=diff
==============================================================================
--- 
maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/DefaultAssemblyArchiver.java
 (original)
+++ 
maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/DefaultAssemblyArchiver.java
 Tue Sep 16 17:37:20 2008
@@ -19,6 +19,7 @@
  * under the License.
  */
 
+import org.apache.maven.plugin.DebugConfigurationListener;
 import org.apache.maven.plugin.assembly.AssemblerConfigurationSource;
 import org.apache.maven.plugin.assembly.InvalidAssemblerConfigurationException;
 import org.apache.maven.plugin.assembly.archive.archiver.AssemblyProxyArchiver;
@@ -26,10 +27,13 @@
 import org.apache.maven.plugin.assembly.filter.ComponentsXmlArchiverFileFilter;
 import org.apache.maven.plugin.assembly.filter.ContainerDescriptorHandler;
 import org.apache.maven.plugin.assembly.format.AssemblyFormattingException;
+import 
org.apache.maven.plugin.assembly.interpolation.AssemblyExpressionEvaluator;
 import org.apache.maven.plugin.assembly.model.Assembly;
 import org.apache.maven.plugin.assembly.model.ContainerDescriptorHandlerConfig;
 import org.apache.maven.plugin.assembly.utils.AssemblyFileUtils;
 import org.apache.maven.plugin.assembly.utils.AssemblyFormatUtils;
+import org.codehaus.plexus.PlexusConstants;
+import org.codehaus.plexus.PlexusContainer;
 import org.codehaus.plexus.archiver.Archiver;
 import org.codehaus.plexus.archiver.ArchiverException;
 import org.codehaus.plexus.archiver.filters.JarSecurityFileSelector;
@@ -40,10 +44,23 @@
 import org.codehaus.plexus.archiver.tar.TarLongFileMode;
 import org.codehaus.plexus.archiver.war.WarArchiver;
 import org.codehaus.plexus.collections.ActiveCollectionManager;
+import 
org.codehaus.plexus.component.configurator.ComponentConfigurationException;
+import org.codehaus.plexus.component.configurator.ComponentConfigurator;
+import org.codehaus.plexus.component.configurator.ConfigurationListener;
+import 
org.codehaus.plexus.component.configurator.expression.ExpressionEvaluator;
+import 
org.codehaus.plexus.component.repository.exception.ComponentLookupException;
+import org.codehaus.plexus.configuration.xml.XmlPlexusConfiguration;
+import org.codehaus.plexus.context.Context;
+import org.codehaus.plexus.context.ContextException;
 import org.codehaus.plexus.logging.AbstractLogEnabled;
+import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
+import org.codehaus.plexus.util.xml.Xpp3DomBuilder;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
 
 import java.io.File;
 import java.io.IOException;
+import java.io.StringReader;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Iterator;
@@ -56,7 +73,7 @@
  */
 public class DefaultAssemblyArchiver
     extends AbstractLogEnabled
-    implements AssemblyArchiver
+    implements AssemblyArchiver, Contextualizable
 {
 
     /**
@@ -74,6 +91,8 @@
      */
     private Map containerDescriptorHandlers;
 
+    private PlexusContainer container;
+
     public DefaultAssemblyArchiver()
     {
         // needed for plexus
@@ -229,18 +248,20 @@
         }
 
         List extraSelectors = null;
+        List extraFinalizers = null;
         if ( archiver instanceof JarArchiver )
         {
             extraSelectors = Collections.singletonList( new 
JarSecurityFileSelector() );
-        }
-
-        List extraFinalizers = null;
-        if ( "jar".equals( format ) )
-        {
+            
             extraFinalizers = Collections.singletonList( new 
ManifestCreationFinalizer( configSource.getProject(),
                                                                                
         configSource.getJarArchiveConfiguration() ) );
 
         }
+        
+        if ( configSource.getArchiverConfig() != null )
+        {
+            configureArchiver( archiver, configSource );
+        }
 
         String prefix = "";
         if ( includeBaseDir )
@@ -253,6 +274,53 @@
         return archiver;
     }
 
+    private void configureArchiver( Archiver archiver, 
AssemblerConfigurationSource configSource )
+        throws ArchiverException
+    {
+        ComponentConfigurator configurator;
+        try
+        {
+            configurator = (ComponentConfigurator) container.lookup( 
ComponentConfigurator.ROLE, "basic" );
+        }
+        catch ( ComponentLookupException e )
+        {
+            throw new ArchiverException( "Failed to lookup configurator 
component for setup of archiver: " + archiver.getClass().getName(), e );
+        }
+        
+        Xpp3Dom config;
+        try
+        {
+            config = Xpp3DomBuilder.build( new StringReader( 
configSource.getArchiverConfig() ) );
+        }
+        catch ( XmlPullParserException e )
+        {
+            throw new ArchiverException( "Failed to parse archiver 
configuration for: " + archiver.getClass().getName(), e );
+        }
+        catch ( IOException e )
+        {
+            throw new ArchiverException( "Failed to parse archiver 
configuration for: " + archiver.getClass().getName(), e );
+        }
+        
+        XmlPlexusConfiguration configuration = new XmlPlexusConfiguration( 
config );
+        
+        ConfigurationListener listener = new DebugConfigurationListener( 
getLogger() );
+        ExpressionEvaluator expressionEvaluator = new 
AssemblyExpressionEvaluator( configSource );
+
+        getLogger().debug( "Configuring archiver: '" + 
archiver.getClass().getName() + "' -->" );
+        
+        try
+        {
+            configurator.configureComponent( archiver, configuration, 
expressionEvaluator,
+                                             container.getContainerRealm(), 
listener );
+        }
+        catch ( ComponentConfigurationException e )
+        {
+            throw new ArchiverException( "Failed to configure archiver: " + 
archiver.getClass().getName(), e );
+        }
+        
+        getLogger().debug( "-- end configuration --" );
+    }
+
     protected Archiver createWarArchiver()
         throws NoSuchArchiverException
     {
@@ -300,4 +368,15 @@
         return tarArchiver;
     }
 
+    public void contextualize( Context context )
+        throws ContextException
+    {
+        container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY 
);
+    }
+
+    protected void setContainer( PlexusContainer container )
+    {
+        this.container = container;
+    }
+
 }

Added: 
maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/interpolation/AssemblyExpressionEvaluator.java
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/interpolation/AssemblyExpressionEvaluator.java?rev=696113&view=auto
==============================================================================
--- 
maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/interpolation/AssemblyExpressionEvaluator.java
 (added)
+++ 
maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/interpolation/AssemblyExpressionEvaluator.java
 Tue Sep 16 17:37:20 2008
@@ -0,0 +1,57 @@
+package org.apache.maven.plugin.assembly.interpolation;
+
+import java.io.File;
+
+import org.apache.maven.plugin.assembly.AssemblerConfigurationSource;
+import org.apache.maven.plugin.assembly.utils.InterpolationConstants;
+import 
org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException;
+import 
org.codehaus.plexus.component.configurator.expression.ExpressionEvaluator;
+import org.codehaus.plexus.interpolation.InterpolationException;
+import org.codehaus.plexus.interpolation.Interpolator;
+import org.codehaus.plexus.interpolation.PrefixAwareRecursionInterceptor;
+
+public class AssemblyExpressionEvaluator
+    implements ExpressionEvaluator
+{
+    
+    private final AssemblerConfigurationSource configSource;
+    private Interpolator interpolator;
+    private PrefixAwareRecursionInterceptor interceptor;
+
+    public AssemblyExpressionEvaluator( AssemblerConfigurationSource 
configSource )
+    {
+        this.configSource = configSource;
+        
+        interpolator = AssemblyInterpolator.buildInterpolator( 
configSource.getProject(), configSource );
+        interceptor = new PrefixAwareRecursionInterceptor( 
InterpolationConstants.PROJECT_PREFIXES, true );
+    }
+
+    public File alignToBaseDirectory( File f )
+    {
+        String basePath = configSource.getBasedir().getAbsolutePath();
+        String path = f.getPath();
+        
+        if ( !f.isAbsolute() && !path.startsWith( basePath ) )
+        {
+            return new File( configSource.getBasedir(), path );
+        }
+        else
+        {
+            return f;
+        }
+    }
+
+    public Object evaluate( String expression )
+        throws ExpressionEvaluationException
+    {
+        try
+        {
+            return interpolator.interpolate( expression, interceptor );
+        }
+        catch ( InterpolationException e )
+        {
+            throw new ExpressionEvaluationException( "Interpolation failed for 
archiver expression: " + expression, e );
+        }
+    }
+
+}

Propchange: 
maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/interpolation/AssemblyExpressionEvaluator.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: 
maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/interpolation/AssemblyInterpolator.java
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/interpolation/AssemblyInterpolator.java?rev=696113&r1=696112&r2=696113&view=diff
==============================================================================
--- 
maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/interpolation/AssemblyInterpolator.java
 (original)
+++ 
maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/interpolation/AssemblyInterpolator.java
 Tue Sep 16 17:37:20 2008
@@ -55,6 +55,8 @@
 {
     private static final Set INTERPOLATION_BLACKLIST;
 
+    private static final Properties ENVIRONMENT_VARIABLES;
+
     static
     {
         Set blacklist = new HashSet();
@@ -64,19 +66,23 @@
         blacklist.add( "outputDirectory" );
 
         INTERPOLATION_BLACKLIST = blacklist;
-    }
-
-    private Properties envars;
-
-    public AssemblyInterpolator( Properties envars )
-    {
-        this.envars = envars;
+        
+        Properties environmentVariables;
+        try
+        {
+            environmentVariables = CommandLineUtils.getSystemEnvVars( false );
+        }
+        catch ( IOException e )
+        {
+            environmentVariables = new Properties();
+        }
+        
+        ENVIRONMENT_VARIABLES = environmentVariables;
     }
 
     public AssemblyInterpolator()
         throws IOException
     {
-        envars = CommandLineUtils.getSystemEnvVars( false );
     }
 
     public Assembly interpolate( Assembly assembly, MavenProject project, 
AssemblerConfigurationSource configSource )
@@ -105,6 +111,10 @@
             throw new AssemblyInterpolationException( "Failed to interpolate 
assembly with ID: " + assembly.getId()
                 + ". Reason: " + e.getMessage(), e );
         }
+        finally
+        {
+            interpolator.clearAnswers();
+        }
 
         if ( objectInterpolator.hasWarnings() && getLogger().isDebugEnabled() )
         {
@@ -129,9 +139,10 @@
         return assembly;
     }
 
-    private Interpolator buildInterpolator( MavenProject project, 
AssemblerConfigurationSource configSource )
+    public static Interpolator buildInterpolator( MavenProject project, 
AssemblerConfigurationSource configSource )
     {
         StringSearchInterpolator interpolator = new StringSearchInterpolator();
+        interpolator.setCacheAnswers( true );
 
         MavenSession session = configSource.getMavenSession();
 
@@ -176,7 +187,7 @@
 
         // 7
         interpolator.addValueSource( new PropertiesBasedValueSource( 
commandLineProperties ) );
-        interpolator.addValueSource( new PrefixedPropertiesValueSource( 
Collections.singletonList( "env." ), envars,
+        interpolator.addValueSource( new PrefixedPropertiesValueSource( 
Collections.singletonList( "env." ), ENVIRONMENT_VARIABLES,
                                                                         true ) 
);
 
         return interpolator;

Modified: 
maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/mojos/AbstractAssemblyMojo.java
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/mojos/AbstractAssemblyMojo.java?rev=696113&r1=696112&r2=696113&view=diff
==============================================================================
--- 
maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/mojos/AbstractAssemblyMojo.java
 (original)
+++ 
maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/mojos/AbstractAssemblyMojo.java
 Tue Sep 16 17:37:20 2008
@@ -36,6 +36,8 @@
 import org.apache.maven.plugin.assembly.utils.AssemblyFormatUtils;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.project.MavenProjectHelper;
+import org.codehaus.plexus.configuration.PlexusConfiguration;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
 
 import java.io.File;
 import java.util.Iterator;
@@ -284,6 +286,24 @@
      * @component
      */
     private AssemblyReader assemblyReader;
+    
+    /**
+     * Allows additional configuration options that are specific to a 
particular
+     * type of archive format. This is intended to capture an XML configuration
+     * that will be used to reflectively setup the options on the archiver 
instance.
+     * <br/>
+     * For instance, to direct an assembly with the "ear" format to use a 
particular
+     * appXml file, you should specify the following for the archiverConfig 
value
+     * in your plugin configuration:
+     * <br/>
+     * <pre>
+     * &lt;appXml&gt;${project.basedir}/somepath/app.xml&lt;/appXml&gt;
+     * </pre>
+     *  
+     * @parameter
+     * @since 2.2-beta-3
+     */
+    private PlexusConfiguration archiverConfig;
 
     /**
      * Create the binary distribution.
@@ -652,5 +672,10 @@
     public MavenSession getMavenSession() {
        return this.mavenSession;
     }
+    
+    public String getArchiverConfig()
+    {
+        return archiverConfig == null ? null : archiverConfig.toString();
+    }
 
 }

Modified: 
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/DefaultAssemblyArchiverTest.java
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/DefaultAssemblyArchiverTest.java?rev=696113&r1=696112&r2=696113&view=diff
==============================================================================
--- 
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/DefaultAssemblyArchiverTest.java
 (original)
+++ 
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/DefaultAssemblyArchiverTest.java
 Tue Sep 16 17:37:20 2008
@@ -19,6 +19,7 @@
  * under the License.
  */
 
+import org.apache.maven.model.Model;
 import org.apache.maven.plugin.assembly.AssemblerConfigurationSource;
 import org.apache.maven.plugin.assembly.InvalidAssemblerConfigurationException;
 import org.apache.maven.plugin.assembly.archive.phase.AssemblyArchiverPhase;
@@ -26,10 +27,15 @@
 import org.apache.maven.plugin.assembly.model.Assembly;
 import org.apache.maven.plugin.assembly.testutils.MockManager;
 import org.apache.maven.plugin.assembly.testutils.TestFileManager;
+import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.PlexusTestCase;
 import org.codehaus.plexus.archiver.ArchiveFinalizer;
+import org.codehaus.plexus.archiver.ArchivedFileSet;
 import org.codehaus.plexus.archiver.Archiver;
 import org.codehaus.plexus.archiver.ArchiverException;
+import org.codehaus.plexus.archiver.FileSet;
 import org.codehaus.plexus.archiver.FinalizerEnabled;
+import org.codehaus.plexus.archiver.ResourceIterator;
 import org.codehaus.plexus.archiver.manager.ArchiverManager;
 import org.codehaus.plexus.archiver.manager.NoSuchArchiverException;
 import org.codehaus.plexus.archiver.tar.TarArchiver;
@@ -37,6 +43,8 @@
 import org.codehaus.plexus.archiver.war.WarArchiver;
 import org.codehaus.plexus.archiver.zip.ZipArchiver;
 import org.codehaus.plexus.collections.ActiveCollectionManager;
+import org.codehaus.plexus.components.io.resources.PlexusIoResource;
+import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection;
 import org.codehaus.plexus.logging.Logger;
 import org.codehaus.plexus.logging.console.ConsoleLogger;
 import org.codehaus.plexus.util.FileUtils;
@@ -49,20 +57,23 @@
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import junit.framework.Assert;
 import junit.framework.TestCase;
 
 public class DefaultAssemblyArchiverTest
-    extends TestCase
+    extends PlexusTestCase
 {
 
     private TestFileManager fileManager = new TestFileManager( 
"def-assy-archiver.test.", "" );
 
-    public void tearDown() throws IOException
+    public void tearDown()
+        throws Exception
     {
         fileManager.cleanUp();
+        super.tearDown();
     }
 
     public void testCreateArchive()
@@ -79,7 +90,7 @@
         MockControl phaseControl = MockControl.createControl( 
AssemblyArchiverPhase.class );
         mm.add( phaseControl );
 
-        AssemblyArchiverPhase phase = ( AssemblyArchiverPhase ) 
phaseControl.getMock();
+        AssemblyArchiverPhase phase = (AssemblyArchiverPhase) 
phaseControl.getMock();
 
         phase.execute( null, null, null );
         phaseControl.setMatcher( MockControl.ALWAYS_MATCHER );
@@ -87,7 +98,7 @@
         MockControl csControl = MockControl.createControl( 
AssemblerConfigurationSource.class );
         mm.add( csControl );
 
-        AssemblerConfigurationSource configSource = ( 
AssemblerConfigurationSource ) csControl.getMock();
+        AssemblerConfigurationSource configSource = 
(AssemblerConfigurationSource) csControl.getMock();
 
         File tempDir = fileManager.createTempDir();
         FileUtils.deleteDirectory( tempDir );
@@ -123,6 +134,9 @@
 
         configSource.getFinalName();
         csControl.setReturnValue( "finalName" );
+        
+        configSource.getArchiverConfig();
+        csControl.setReturnValue( null, MockControl.ZERO_OR_MORE );
 
         Assembly assembly = new Assembly();
 
@@ -135,6 +149,49 @@
         mm.verifyAll();
     }
 
+    public void testCreateArchiver_ShouldConfigureArchiver()
+        throws NoSuchArchiverException, ArchiverException
+    {
+        MockManager mm = new MockManager();
+
+        MockAndControlForAssemblyArchiver macArchiverManager = new 
MockAndControlForAssemblyArchiver( mm );
+
+        TestArchiverWithConfig archiver = new TestArchiverWithConfig();
+
+        macArchiverManager.expectGetArchiver( "dummy", archiver );
+
+        MockControl configCtl = MockControl.createControl( 
AssemblerConfigurationSource.class );
+        AssemblerConfigurationSource configSource = 
(AssemblerConfigurationSource) configCtl.getMock();
+        
+        String simpleConfig = "value";
+        
+        configSource.getArchiverConfig();
+        configCtl.setReturnValue( "<configuration><simpleConfig>" + 
simpleConfig + "</simpleConfig></configuration>", MockControl.ZERO_OR_MORE );
+        
+        MavenProject project = new MavenProject( new Model() );
+        
+        configSource.getProject();
+        configCtl.setReturnValue( project, MockControl.ZERO_OR_MORE );
+        
+        configSource.getMavenSession();
+        configCtl.setReturnValue( null, MockControl.ZERO_OR_MORE );
+        
+        configSource.isDryRun();
+        configCtl.setReturnValue( false, MockControl.ZERO_OR_MORE );
+        
+        mm.add( configCtl );
+
+        mm.replayAll();
+
+        DefaultAssemblyArchiver subject = createSubject( macArchiverManager, 
Collections.EMPTY_LIST, null );
+
+        subject.createArchiver( "dummy", false, "finalName", configSource, 
null );
+        
+        assertEquals( simpleConfig, archiver.getSimpleConfig() );
+
+        mm.verifyAll();
+    }
+
     public void testCreateArchiver_ShouldCreateTarArchiverWithNoCompression()
         throws NoSuchArchiverException, ArchiverException
     {
@@ -155,12 +212,20 @@
         configSource.isDryRun();
         configCtl.setReturnValue( false, MockControl.ZERO_OR_MORE );
 
+        configSource.getArchiverConfig();
+        configCtl.setReturnValue( null, MockControl.ZERO_OR_MORE );
+        
+        configSource.getProject();
+        configCtl.setReturnValue( new MavenProject( new Model() ), 
MockControl.ZERO_OR_MORE );
+
+        configSource.getJarArchiveConfiguration();
+        configCtl.setReturnValue( null, MockControl.ZERO_OR_MORE );
+        
         mm.add( configCtl );
 
         mm.replayAll();
 
-        DefaultAssemblyArchiver subject =
-            createSubject( macArchiverManager, Collections.EMPTY_LIST, null );
+        DefaultAssemblyArchiver subject = createSubject( macArchiverManager, 
Collections.EMPTY_LIST, null );
 
         subject.createArchiver( "tar", false, "finalName", configSource, null 
);
 
@@ -187,10 +252,20 @@
         configSource.isDryRun();
         configCtl.setReturnValue( false, MockControl.ZERO_OR_MORE );
 
+        configSource.getArchiverConfig();
+        configCtl.setReturnValue( null, MockControl.ZERO_OR_MORE );
+
+        configSource.getProject();
+        configCtl.setReturnValue( new MavenProject( new Model() ), 
MockControl.ZERO_OR_MORE );
+        
+        configSource.getJarArchiveConfiguration();
+        configCtl.setReturnValue( null, MockControl.ZERO_OR_MORE );
+        
+        mm.add( configCtl );
+        
         mm.replayAll();
 
-        DefaultAssemblyArchiver subject =
-            createSubject( macArchiverManager, Collections.EMPTY_LIST, null );
+        DefaultAssemblyArchiver subject = createSubject( macArchiverManager, 
Collections.EMPTY_LIST, null );
 
         subject.createArchiver( "war", false, null, configSource, null );
 
@@ -214,117 +289,121 @@
         configSource.isDryRun();
         configCtl.setReturnValue( false, MockControl.ZERO_OR_MORE );
 
+        configSource.getArchiverConfig();
+        configCtl.setReturnValue( null, MockControl.ZERO_OR_MORE );
+        
+        mm.add( configCtl );
+
         mm.replayAll();
 
-        DefaultAssemblyArchiver subject =
-            createSubject( macArchiverManager, Collections.EMPTY_LIST, null );
+        DefaultAssemblyArchiver subject = createSubject( macArchiverManager, 
Collections.EMPTY_LIST, null );
 
         subject.createArchiver( "zip", false, null, configSource, null );
     }
 
     // TODO: Re-implement these tests on the createArchiver(..) method. For 
now, they're no big loss.
-//    public void 
testConfigureArchiverFinalizers_ShouldDoNothingWhenNotSupportedByArchiver()
-//    {
-//        MockManager mm = new MockManager();
-//
-//        MockAndControlForArchiverManager macArchiverManager = new 
MockAndControlForArchiverManager( mm );
-//
-//        macArchiverManager.createArchiver( Archiver.class );
-//
-//        ComponentsXmlArchiverFileFilter filter = new 
ComponentsXmlArchiverFileFilter();
-//
-//        mm.replayAll();
-//
-//        DefaultAssemblyArchiver subject =
-//            createSubject( macArchiverManager.archiverManager, 
Collections.EMPTY_LIST, null );
-//
-//        subject.configureArchiverFinalizers( macArchiverManager.archiver, 
"format", null, filter );
-//
-//        mm.verifyAll();
-//    }
-//
-//    public void 
testConfigureArchiverFinalizers_ShouldAddManifestFinalizerWhenSupportedByArchiver()
-//    {
-//        MockManager mm = new MockManager();
-//
-//        MockAndControlForArchiverManager macArchiverManager = new 
MockAndControlForArchiverManager( mm );
-//
-//        macArchiverManager.createArchiver( 
TestFinalizerFilteredArchiver.class );
-//
-//        Set finalizerClasses = new HashSet();
-//        finalizerClasses.add( ComponentsXmlArchiverFileFilter.class );
-//        finalizerClasses.add( ManifestCreationFinalizer.class );
-//
-//        macArchiverManager.expectSetArchiverFinalizers( finalizerClasses );
-//
-//        ComponentsXmlArchiverFileFilter filter = new 
ComponentsXmlArchiverFileFilter();
-//
-//        MockControl configCtl = MockControl.createControl( 
AssemblerConfigurationSource.class );
-//        AssemblerConfigurationSource configSource = 
(AssemblerConfigurationSource) configCtl.getMock();
-//
-//        Model model = new Model();
-//        model.setGroupId( "group" );
-//        model.setArtifactId( "artifact" );
-//        model.setVersion( "1" );
-//
-//        configSource.getProject();
-//        configCtl.setReturnValue( new MavenProject( model ), 
MockControl.ZERO_OR_MORE );
-//
-//        configSource.getJarArchiveConfiguration();
-//        configCtl.setReturnValue( new MavenArchiveConfiguration() );
-//
-//        mm.add( configCtl );
-//
-//        mm.replayAll();
-//
-//        DefaultAssemblyArchiver subject =
-//            createSubject( macArchiverManager.archiverManager, 
Collections.EMPTY_LIST, null );
-//
-//        subject.configureArchiverFinalizers( macArchiverManager.archiver, 
"jar", configSource, filter );
-//
-//        mm.verifyAll();
-//    }
-//
-//    public void 
testConfigureArchiverFilters_ShouldDoNothingWhenNotSupportedByArchiver()
-//    {
-//        MockManager mm = new MockManager();
-//
-//        MockAndControlForArchiverManager macArchiverManager = new 
MockAndControlForArchiverManager( mm );
-//
-//        macArchiverManager.createArchiver( Archiver.class );
-//
-//        ComponentsXmlArchiverFileFilter filter = new 
ComponentsXmlArchiverFileFilter();
-//
-//        mm.replayAll();
-//
-//        DefaultAssemblyArchiver subject =
-//            createSubject( macArchiverManager.archiverManager, 
Collections.EMPTY_LIST, null );
-//
-//        subject.configureArchiverFilters( macArchiverManager.archiver, 
filter );
-//
-//        mm.verifyAll();
-//    }
-//
-//    public void 
testConfigureArchiverFilters_ShouldAddComponentsFilterWhenSupportedByArchiver()
-//    {
-//        MockManager mm = new MockManager();
-//
-//        MockAndControlForArchiverManager macArchiverManager = new 
MockAndControlForArchiverManager( mm );
-//
-//        macArchiverManager.createArchiver( 
TestFinalizerFilteredArchiver.class );
-//        macArchiverManager.expectSetArchiverFilters();
-//
-//        ComponentsXmlArchiverFileFilter filter = new 
ComponentsXmlArchiverFileFilter();
-//
-//        mm.replayAll();
-//
-//        DefaultAssemblyArchiver subject =
-//            createSubject( macArchiverManager.archiverManager, 
Collections.EMPTY_LIST, null );
-//
-//        subject.configureArchiverFilters( macArchiverManager.archiver, 
filter );
-//
-//        mm.verifyAll();
-//    }
+    // public void 
testConfigureArchiverFinalizers_ShouldDoNothingWhenNotSupportedByArchiver()
+    // {
+    // MockManager mm = new MockManager();
+    //
+    // MockAndControlForArchiverManager macArchiverManager = new 
MockAndControlForArchiverManager( mm );
+    //
+    // macArchiverManager.createArchiver( Archiver.class );
+    //
+    // ComponentsXmlArchiverFileFilter filter = new 
ComponentsXmlArchiverFileFilter();
+    //
+    // mm.replayAll();
+    //
+    // DefaultAssemblyArchiver subject =
+    // createSubject( macArchiverManager.archiverManager, 
Collections.EMPTY_LIST, null );
+    //
+    // subject.configureArchiverFinalizers( macArchiverManager.archiver, 
"format", null, filter );
+    //
+    // mm.verifyAll();
+    // }
+    //
+    // public void 
testConfigureArchiverFinalizers_ShouldAddManifestFinalizerWhenSupportedByArchiver()
+    // {
+    // MockManager mm = new MockManager();
+    //
+    // MockAndControlForArchiverManager macArchiverManager = new 
MockAndControlForArchiverManager( mm );
+    //
+    // macArchiverManager.createArchiver( TestFinalizerFilteredArchiver.class 
);
+    //
+    // Set finalizerClasses = new HashSet();
+    // finalizerClasses.add( ComponentsXmlArchiverFileFilter.class );
+    // finalizerClasses.add( ManifestCreationFinalizer.class );
+    //
+    // macArchiverManager.expectSetArchiverFinalizers( finalizerClasses );
+    //
+    // ComponentsXmlArchiverFileFilter filter = new 
ComponentsXmlArchiverFileFilter();
+    //
+    // MockControl configCtl = MockControl.createControl( 
AssemblerConfigurationSource.class );
+    // AssemblerConfigurationSource configSource = 
(AssemblerConfigurationSource) configCtl.getMock();
+    //
+    // Model model = new Model();
+    // model.setGroupId( "group" );
+    // model.setArtifactId( "artifact" );
+    // model.setVersion( "1" );
+    //
+    // configSource.getProject();
+    // configCtl.setReturnValue( new MavenProject( model ), 
MockControl.ZERO_OR_MORE );
+    //
+    // configSource.getJarArchiveConfiguration();
+    // configCtl.setReturnValue( new MavenArchiveConfiguration() );
+    //
+    // mm.add( configCtl );
+    //
+    // mm.replayAll();
+    //
+    // DefaultAssemblyArchiver subject =
+    // createSubject( macArchiverManager.archiverManager, 
Collections.EMPTY_LIST, null );
+    //
+    // subject.configureArchiverFinalizers( macArchiverManager.archiver, 
"jar", configSource, filter );
+    //
+    // mm.verifyAll();
+    // }
+    //
+    // public void 
testConfigureArchiverFilters_ShouldDoNothingWhenNotSupportedByArchiver()
+    // {
+    // MockManager mm = new MockManager();
+    //
+    // MockAndControlForArchiverManager macArchiverManager = new 
MockAndControlForArchiverManager( mm );
+    //
+    // macArchiverManager.createArchiver( Archiver.class );
+    //
+    // ComponentsXmlArchiverFileFilter filter = new 
ComponentsXmlArchiverFileFilter();
+    //
+    // mm.replayAll();
+    //
+    // DefaultAssemblyArchiver subject =
+    // createSubject( macArchiverManager.archiverManager, 
Collections.EMPTY_LIST, null );
+    //
+    // subject.configureArchiverFilters( macArchiverManager.archiver, filter );
+    //
+    // mm.verifyAll();
+    // }
+    //
+    // public void 
testConfigureArchiverFilters_ShouldAddComponentsFilterWhenSupportedByArchiver()
+    // {
+    // MockManager mm = new MockManager();
+    //
+    // MockAndControlForArchiverManager macArchiverManager = new 
MockAndControlForArchiverManager( mm );
+    //
+    // macArchiverManager.createArchiver( TestFinalizerFilteredArchiver.class 
);
+    // macArchiverManager.expectSetArchiverFilters();
+    //
+    // ComponentsXmlArchiverFileFilter filter = new 
ComponentsXmlArchiverFileFilter();
+    //
+    // mm.replayAll();
+    //
+    // DefaultAssemblyArchiver subject =
+    // createSubject( macArchiverManager.archiverManager, 
Collections.EMPTY_LIST, null );
+    //
+    // subject.configureArchiverFilters( macArchiverManager.archiver, filter );
+    //
+    // mm.verifyAll();
+    // }
 
     public void testCreateWarArchiver_ShouldDisableIgnoreWebxmlOption()
         throws NoSuchArchiverException
@@ -339,8 +418,7 @@
 
         mm.replayAll();
 
-        DefaultAssemblyArchiver subject =
-            createSubject( macArchiverManager, Collections.EMPTY_LIST, null );
+        DefaultAssemblyArchiver subject = createSubject( macArchiverManager, 
Collections.EMPTY_LIST, null );
 
         subject.createWarArchiver();
 
@@ -360,8 +438,7 @@
 
         mm.replayAll();
 
-        DefaultAssemblyArchiver subject =
-            createSubject( macArchiverManager, Collections.EMPTY_LIST, null );
+        DefaultAssemblyArchiver subject = createSubject( macArchiverManager, 
Collections.EMPTY_LIST, null );
 
         subject.createTarArchiver( "tar", TarLongFileMode.FAIL );
 
@@ -384,8 +461,7 @@
 
         mm.replayAll();
 
-        DefaultAssemblyArchiver subject =
-            createSubject( macArchiverManager, Collections.EMPTY_LIST, null );
+        DefaultAssemblyArchiver subject = createSubject( macArchiverManager, 
Collections.EMPTY_LIST, null );
 
         subject.createTarArchiver( "tar.gz", TarLongFileMode.FAIL );
 
@@ -408,8 +484,7 @@
 
         mm.replayAll();
 
-        DefaultAssemblyArchiver subject =
-            createSubject( macArchiverManager, Collections.EMPTY_LIST, null );
+        DefaultAssemblyArchiver subject = createSubject( macArchiverManager, 
Collections.EMPTY_LIST, null );
 
         subject.createTarArchiver( "tar.bz2", TarLongFileMode.FAIL );
 
@@ -432,8 +507,7 @@
 
         mm.replayAll();
 
-        DefaultAssemblyArchiver subject =
-            createSubject( macArchiverManager, Collections.EMPTY_LIST, null );
+        DefaultAssemblyArchiver subject = createSubject( macArchiverManager, 
Collections.EMPTY_LIST, null );
 
         try
         {
@@ -451,7 +525,10 @@
 
     private DefaultAssemblyArchiver createSubject( 
MockAndControlForAssemblyArchiver macMgr, List phases, Logger logger )
     {
-        DefaultAssemblyArchiver subject = new DefaultAssemblyArchiver( 
macMgr.archiverManager, macMgr.collectionManager, phases );
+        DefaultAssemblyArchiver subject =
+            new DefaultAssemblyArchiver( macMgr.archiverManager, 
macMgr.collectionManager, phases );
+        
+        subject.setContainer( getContainer() );
 
         if ( logger == null )
         {
@@ -485,7 +562,7 @@
             control = MockControl.createControl( ArchiverManager.class );
             mm.add( control );
 
-            archiverManager = ( ArchiverManager ) control.getMock();
+            archiverManager = (ArchiverManager) control.getMock();
 
             collectionManagerControl = MockControl.createControl( 
ActiveCollectionManager.class );
             mm.add( collectionManagerControl );
@@ -504,18 +581,18 @@
             archiverControl = MockControl.createControl( archiverClass );
             mm.add( archiverControl );
 
-            archiver = ( Archiver ) archiverControl.getMock();
+            archiver = (Archiver) archiverControl.getMock();
         }
 
         void expectSetArchiverFinalizers()
         {
-            ( ( FinalizerEnabled ) archiver ).setArchiveFinalizers( null );
+            ( (FinalizerEnabled) archiver ).setArchiveFinalizers( null );
             archiverControl.setMatcher( MockControl.ALWAYS_MATCHER );
         }
 
         void expectSetArchiverFinalizers( final Set finalizerClasses )
         {
-            ( ( FinalizerEnabled ) archiver ).setArchiveFinalizers( null );
+            ( (FinalizerEnabled) archiver ).setArchiveFinalizers( null );
             archiverControl.setMatcher( new ArgumentsMatcher()
             {
 
@@ -540,14 +617,14 @@
                     return "Matcher for finalizer-classes: " + 
finalizerClasses;
                 }
 
-            });
+            } );
         }
 
-//        void expectSetArchiverFilters()
-//        {
-//            ( ( FilterEnabled ) archiver ).setArchiveFilters( null );
-//            archiverControl.setMatcher( MockControl.ALWAYS_MATCHER );
-//        }
+        // void expectSetArchiverFilters()
+        // {
+        // ( ( FilterEnabled ) archiver ).setArchiveFilters( null );
+        // archiverControl.setMatcher( MockControl.ALWAYS_MATCHER );
+        // }
 
         void expectGetArchiver( String format, Class archiverClass )
         {
@@ -656,4 +733,162 @@
 
     }
 
+    public static final class TestArchiverWithConfig
+        implements Archiver
+    {
+        
+        private String simpleConfig;
+        
+        public void setSimpleConfig( String simpleConfig )
+        {
+            this.simpleConfig = simpleConfig;
+        }
+        
+        public String getSimpleConfig()
+        {
+            return simpleConfig;
+        }
+
+        public void addArchivedFileSet( File arg0 )
+            throws ArchiverException
+        {
+        }
+
+        public void addArchivedFileSet( ArchivedFileSet arg0 )
+            throws ArchiverException
+        {
+        }
+
+        public void addArchivedFileSet( File arg0, String arg1 )
+            throws ArchiverException
+        {
+        }
+
+        public void addArchivedFileSet( File arg0, String[] arg1, String[] 
arg2 )
+            throws ArchiverException
+        {
+        }
+
+        public void addArchivedFileSet( File arg0, String arg1, String[] arg2, 
String[] arg3 )
+            throws ArchiverException
+        {
+        }
+
+        public void addDirectory( File arg0 )
+            throws ArchiverException
+        {
+        }
+
+        public void addDirectory( File arg0, String arg1 )
+            throws ArchiverException
+        {
+        }
+
+        public void addDirectory( File arg0, String[] arg1, String[] arg2 )
+            throws ArchiverException
+        {
+        }
+
+        public void addDirectory( File arg0, String arg1, String[] arg2, 
String[] arg3 )
+            throws ArchiverException
+        {
+        }
+
+        public void addFile( File arg0, String arg1 )
+            throws ArchiverException
+        {
+        }
+
+        public void addFile( File arg0, String arg1, int arg2 )
+            throws ArchiverException
+        {
+        }
+
+        public void addFileSet( FileSet arg0 )
+            throws ArchiverException
+        {
+        }
+
+        public void addResource( PlexusIoResource arg0, String arg1, int arg2 )
+            throws ArchiverException
+        {
+        }
+
+        public void addResources( PlexusIoResourceCollection arg0 )
+            throws ArchiverException
+        {
+        }
+
+        public void createArchive()
+            throws ArchiverException, IOException
+        {
+        }
+
+        public int getDefaultDirectoryMode()
+        {
+            return 0;
+        }
+
+        public int getDefaultFileMode()
+        {
+            return 0;
+        }
+
+        public File getDestFile()
+        {
+            return null;
+        }
+
+        public Map getFiles()
+        {
+            return null;
+        }
+
+        public boolean getIncludeEmptyDirs()
+        {
+            return false;
+        }
+
+        public ResourceIterator getResources()
+            throws ArchiverException
+        {
+            return null;
+        }
+
+        public boolean isForced()
+        {
+            return false;
+        }
+
+        public boolean isSupportingForced()
+        {
+            return false;
+        }
+
+        public void setDefaultDirectoryMode( int arg0 )
+        {
+        }
+
+        public void setDefaultFileMode( int arg0 )
+        {
+        }
+
+        public void setDestFile( File arg0 )
+        {
+        }
+
+        public void setDotFileDirectory( File arg0 )
+        {
+        }
+
+        public void setForced( boolean arg0 )
+        {
+        }
+
+        public void setIncludeEmptyDirs( boolean arg0 )
+        {
+        }
+
+    }
+
 }

Added: 
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/interpolation/AssemblyExpressionEvaluatorTest.java
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/interpolation/AssemblyExpressionEvaluatorTest.java?rev=696113&view=auto
==============================================================================
--- 
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/interpolation/AssemblyExpressionEvaluatorTest.java
 (added)
+++ 
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/interpolation/AssemblyExpressionEvaluatorTest.java
 Tue Sep 16 17:37:20 2008
@@ -0,0 +1,173 @@
+package org.apache.maven.plugin.assembly.interpolation;
+
+/*
+ * 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.
+ */
+
+import java.io.IOException;
+import java.util.Properties;
+
+import junit.framework.TestCase;
+
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.model.Build;
+import org.apache.maven.model.Model;
+import org.apache.maven.plugin.assembly.AssemblerConfigurationSource;
+import org.apache.maven.plugin.assembly.testutils.ConfigSourceStub;
+import org.apache.maven.plugin.assembly.testutils.MockManager;
+import org.apache.maven.project.MavenProject;
+import 
org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException;
+import org.codehaus.plexus.logging.Logger;
+import org.codehaus.plexus.logging.console.ConsoleLogger;
+import org.easymock.MockControl;
+import org.easymock.classextension.MockClassControl;
+
+public class AssemblyExpressionEvaluatorTest
+    extends TestCase
+{
+
+    private AssemblyInterpolator interpolator;
+    
+    private ConfigSourceStub configSourceStub = new ConfigSourceStub();
+
+    public void setUp()
+        throws IOException
+    {
+        interpolator = new AssemblyInterpolator();
+
+        interpolator.enableLogging( new ConsoleLogger( Logger.LEVEL_DEBUG, 
"test" ) );
+    }
+
+    public void testShouldResolveModelGroupId()
+        throws ExpressionEvaluationException
+    {
+        Model model = new Model();
+        model.setArtifactId( "artifact-id" );
+        model.setGroupId( "group.id" );
+        model.setVersion( "1" );
+        model.setPackaging( "jar" );
+        
+        configSourceStub.setProject( new MavenProject( model ) );
+        
+        Object result = new AssemblyExpressionEvaluator( configSourceStub 
).evaluate( "assembly.${groupId}" );
+
+        assertEquals( "assembly.group.id", result );
+    }
+
+    public void testShouldResolveModelPropertyBeforeModelGroupId()
+        throws ExpressionEvaluationException
+    {
+        Model model = new Model();
+        model.setArtifactId( "artifact-id" );
+        model.setGroupId( "group.id" );
+        model.setVersion( "1" );
+        model.setPackaging( "jar" );
+
+        Properties props = new Properties();
+        props.setProperty( "groupId", "other.id" );
+
+        model.setProperties( props );
+
+        configSourceStub.setProject( new MavenProject( model ) );
+        
+        Object result = new AssemblyExpressionEvaluator( configSourceStub 
).evaluate( "assembly.${groupId}" );
+
+        assertEquals( "assembly.other.id", result );
+    }
+
+    public void 
testShouldResolveContextValueBeforeModelPropertyOrModelGroupIdInAssemblyId()
+        throws ExpressionEvaluationException
+    {
+        Model model = new Model();
+        model.setArtifactId( "artifact-id" );
+        model.setGroupId( "group.id" );
+        model.setVersion( "1" );
+        model.setPackaging( "jar" );
+
+        Properties props = new Properties();
+        props.setProperty( "groupId", "other.id" );
+
+        model.setProperties( props );
+
+        MockManager mm = new MockManager();
+        
+        MockControl sessionControl = MockClassControl.createControl( 
MavenSession.class );
+        MavenSession session = (MavenSession) sessionControl.getMock();
+        
+        mm.add( sessionControl );
+        
+        Properties execProps = new Properties();
+        execProps.setProperty( "groupId", "still.another.id" );
+        
+        session.getExecutionProperties();
+        sessionControl.setReturnValue( execProps, MockControl.ZERO_OR_MORE );
+        
+        MockControl csControl = MockControl.createControl( 
AssemblerConfigurationSource.class );
+        AssemblerConfigurationSource cs = (AssemblerConfigurationSource) 
csControl.getMock();
+        
+        mm.add( csControl );
+        
+        cs.getMavenSession();
+        csControl.setReturnValue( session, MockControl.ZERO_OR_MORE );
+        
+        cs.getProject();
+        csControl.setReturnValue( new MavenProject( model ), 
MockControl.ZERO_OR_MORE );
+        
+        mm.replayAll();
+
+        Object result = new AssemblyExpressionEvaluator( cs ).evaluate( 
"assembly.${groupId}" );
+
+        assertEquals( "assembly.still.another.id", result );
+        
+        mm.verifyAll();
+        mm.clear();
+    }
+
+    public void testShouldReturnUnchangedInputForUnresolvedExpression()
+        throws ExpressionEvaluationException
+    {
+        Model model = new Model();
+        model.setArtifactId( "artifact-id" );
+        model.setGroupId( "group.id" );
+        model.setVersion( "1" );
+        model.setPackaging( "jar" );
+        
+        configSourceStub.setProject( new MavenProject( model ) );
+
+        Object result = new AssemblyExpressionEvaluator( configSourceStub 
).evaluate( "assembly.${unresolved}" );
+
+        assertEquals( "assembly.${unresolved}", result );
+    }
+
+    public void testShouldInterpolateMultiDotProjectExpression()
+        throws ExpressionEvaluationException
+    {
+        Build build = new Build();
+        build.setFinalName( "final-name" );
+
+        Model model = new Model();
+        model.setBuild( build );
+
+        configSourceStub.setProject( new MavenProject( model ) );
+
+        Object result = new AssemblyExpressionEvaluator( configSourceStub 
).evaluate( "assembly.${project.build.finalName}" );
+
+        assertEquals( "assembly.final-name", result );
+    }
+    
+}

Propchange: 
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/interpolation/AssemblyExpressionEvaluatorTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: 
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/testutils/ConfigSourceStub.java
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/testutils/ConfigSourceStub.java?rev=696113&r1=696112&r2=696113&view=diff
==============================================================================
--- 
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/testutils/ConfigSourceStub.java
 (original)
+++ 
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/testutils/ConfigSourceStub.java
 Tue Sep 16 17:37:20 2008
@@ -13,6 +13,9 @@
     implements AssemblerConfigurationSource
 {
 
+    private String archiverConfig;
+    private MavenProject project;
+
     public File getArchiveBaseDirectory()
     {
         return null;
@@ -85,7 +88,7 @@
 
     public MavenProject getProject()
     {
-        return null;
+        return project;
     }
 
     public List getReactorProjects()
@@ -142,5 +145,20 @@
     {
         return false;
     }
+    
+    public void setArchiverConfig( String archiverConfig )
+    {
+        this.archiverConfig = archiverConfig;
+    }
+
+    public String getArchiverConfig()
+    {
+        return archiverConfig;
+    }
+
+    public void setProject( MavenProject mavenProject )
+    {
+        this.project = mavenProject;
+    }
 
 }


Reply via email to