Copied: 
maven/plugins/branches/MASSEMBLY-124/src/main/java/org/apache/maven/plugin/assembly/mojos/DirectoryInlineMojo.java
 (from r421932, 
maven/plugins/branches/MASSEMBLY-124/src/main/java/org/apache/maven/plugin/assembly/DirectoryInlineMojo.java)
URL: 
http://svn.apache.org/viewvc/maven/plugins/branches/MASSEMBLY-124/src/main/java/org/apache/maven/plugin/assembly/mojos/DirectoryInlineMojo.java?p2=maven/plugins/branches/MASSEMBLY-124/src/main/java/org/apache/maven/plugin/assembly/mojos/DirectoryInlineMojo.java&p1=maven/plugins/branches/MASSEMBLY-124/src/main/java/org/apache/maven/plugin/assembly/DirectoryInlineMojo.java&r1=421932&r2=422907&rev=422907&view=diff
==============================================================================
--- 
maven/plugins/branches/MASSEMBLY-124/src/main/java/org/apache/maven/plugin/assembly/DirectoryInlineMojo.java
 (original)
+++ 
maven/plugins/branches/MASSEMBLY-124/src/main/java/org/apache/maven/plugin/assembly/mojos/DirectoryInlineMojo.java
 Mon Jul 17 15:34:58 2006
@@ -1,4 +1,4 @@
-package org.apache.maven.plugin.assembly;
+package org.apache.maven.plugin.assembly.mojos;
 
 /*
  * Copyright 2001-2005 The Apache Software Foundation.
@@ -30,7 +30,14 @@
 public class DirectoryInlineMojo
     extends AbstractDirectoryMojo
 {
-    protected MavenProject getExecutedProject()
+    /**
+     * @parameter default-value="${project}"
+     * @required
+     * @readonly
+     */
+    private MavenProject project;
+    
+    public MavenProject getProject()
     {
         return project;
     }

Copied: 
maven/plugins/branches/MASSEMBLY-124/src/main/java/org/apache/maven/plugin/assembly/mojos/DirectoryMojo.java
 (from r421932, 
maven/plugins/branches/MASSEMBLY-124/src/main/java/org/apache/maven/plugin/assembly/DirectoryMojo.java)
URL: 
http://svn.apache.org/viewvc/maven/plugins/branches/MASSEMBLY-124/src/main/java/org/apache/maven/plugin/assembly/mojos/DirectoryMojo.java?p2=maven/plugins/branches/MASSEMBLY-124/src/main/java/org/apache/maven/plugin/assembly/mojos/DirectoryMojo.java&p1=maven/plugins/branches/MASSEMBLY-124/src/main/java/org/apache/maven/plugin/assembly/DirectoryMojo.java&r1=421932&r2=422907&rev=422907&view=diff
==============================================================================
--- 
maven/plugins/branches/MASSEMBLY-124/src/main/java/org/apache/maven/plugin/assembly/DirectoryMojo.java
 (original)
+++ 
maven/plugins/branches/MASSEMBLY-124/src/main/java/org/apache/maven/plugin/assembly/mojos/DirectoryMojo.java
 Mon Jul 17 15:34:58 2006
@@ -1,4 +1,4 @@
-package org.apache.maven.plugin.assembly;
+package org.apache.maven.plugin.assembly.mojos;
 
 /*
  * Copyright 2001-2005 The Apache Software Foundation.
@@ -36,7 +36,7 @@
      */
     private MavenProject executedProject;
 
-    protected MavenProject getExecutedProject()
+    public MavenProject getProject()
     {
         return executedProject;
     }

Propchange: 
maven/plugins/branches/MASSEMBLY-124/src/main/java/org/apache/maven/plugin/assembly/mojos/DirectoryMojo.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
maven/plugins/branches/MASSEMBLY-124/src/main/java/org/apache/maven/plugin/assembly/mojos/DirectoryMojo.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Copied: 
maven/plugins/branches/MASSEMBLY-124/src/main/java/org/apache/maven/plugin/assembly/mojos/SingleAssemblyMojo.java
 (from r421932, 
maven/plugins/branches/MASSEMBLY-124/src/main/java/org/apache/maven/plugin/assembly/SingleAssemblyMojo.java)
URL: 
http://svn.apache.org/viewvc/maven/plugins/branches/MASSEMBLY-124/src/main/java/org/apache/maven/plugin/assembly/mojos/SingleAssemblyMojo.java?p2=maven/plugins/branches/MASSEMBLY-124/src/main/java/org/apache/maven/plugin/assembly/mojos/SingleAssemblyMojo.java&p1=maven/plugins/branches/MASSEMBLY-124/src/main/java/org/apache/maven/plugin/assembly/SingleAssemblyMojo.java&r1=421932&r2=422907&rev=422907&view=diff
==============================================================================
--- 
maven/plugins/branches/MASSEMBLY-124/src/main/java/org/apache/maven/plugin/assembly/SingleAssemblyMojo.java
 (original)
+++ 
maven/plugins/branches/MASSEMBLY-124/src/main/java/org/apache/maven/plugin/assembly/mojos/SingleAssemblyMojo.java
 Mon Jul 17 15:34:58 2006
@@ -1,4 +1,4 @@
-package org.apache.maven.plugin.assembly;
+package org.apache.maven.plugin.assembly.mojos;
 
 /*
  * Copyright 2001-2005 The Apache Software Foundation.
@@ -32,7 +32,14 @@
 public class SingleAssemblyMojo
     extends AbstractAssemblyMojo
 {
-    protected MavenProject getExecutedProject()
+    /**
+     * @parameter default-value="${project}"
+     * @required
+     * @readonly
+     */
+    private MavenProject project;
+    
+    public MavenProject getProject()
     {
         return project;
     }

Propchange: 
maven/plugins/branches/MASSEMBLY-124/src/main/java/org/apache/maven/plugin/assembly/mojos/SingleAssemblyMojo.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
maven/plugins/branches/MASSEMBLY-124/src/main/java/org/apache/maven/plugin/assembly/mojos/SingleAssemblyMojo.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Copied: 
maven/plugins/branches/MASSEMBLY-124/src/main/java/org/apache/maven/plugin/assembly/mojos/UnpackMojo.java
 (from r421932, 
maven/plugins/branches/MASSEMBLY-124/src/main/java/org/apache/maven/plugin/assembly/UnpackMojo.java)
URL: 
http://svn.apache.org/viewvc/maven/plugins/branches/MASSEMBLY-124/src/main/java/org/apache/maven/plugin/assembly/mojos/UnpackMojo.java?p2=maven/plugins/branches/MASSEMBLY-124/src/main/java/org/apache/maven/plugin/assembly/mojos/UnpackMojo.java&p1=maven/plugins/branches/MASSEMBLY-124/src/main/java/org/apache/maven/plugin/assembly/UnpackMojo.java&r1=421932&r2=422907&rev=422907&view=diff
==============================================================================
--- 
maven/plugins/branches/MASSEMBLY-124/src/main/java/org/apache/maven/plugin/assembly/UnpackMojo.java
 (original)
+++ 
maven/plugins/branches/MASSEMBLY-124/src/main/java/org/apache/maven/plugin/assembly/mojos/UnpackMojo.java
 Mon Jul 17 15:34:58 2006
@@ -1,4 +1,4 @@
-package org.apache.maven.plugin.assembly;
+package org.apache.maven.plugin.assembly.mojos;
 
 /*
  * Copyright 2001-2005 The Apache Software Foundation.
@@ -17,10 +17,14 @@
  */
 
 import org.apache.maven.artifact.Artifact;
+import org.apache.maven.plugin.AbstractMojo;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugin.assembly.archive.ArchiveAssemblyUtils;
+import org.apache.maven.plugin.assembly.archive.ArchiveExpansionException;
 import org.apache.maven.plugin.assembly.utils.ProjectUtils;
 import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.archiver.manager.ArchiverManager;
 import org.codehaus.plexus.archiver.manager.NoSuchArchiverException;
 
 import java.io.File;
@@ -34,12 +38,28 @@
  * @requiresDependencyResolution test
  */
 public class UnpackMojo
-    extends AbstractUnpackingMojo
+    extends AbstractMojo
 {
-    protected MavenProject getExecutedProject()
-    {
-        return project;
-    }
+    
+    /**
+     * @parameter default-value="${project}"
+     * @required
+     * @readonly
+     */
+    private MavenProject project;
+    
+    /**
+     * @component
+     */
+    private ArchiverManager archiverManager;
+
+    /**
+     * Directory to unpack JARs into if needed
+     *
+     * @parameter expression="${project.build.directory}/assembly/work"
+     * @required
+     */
+    protected File workDirectory;
 
     /**
      * Unpacks the archive file.
@@ -72,11 +92,15 @@
                 File file = artifact.getFile();
                 try
                 {
-                    unpack( file, tempLocation );
+                    ArchiveAssemblyUtils.unpack( file, tempLocation, 
archiverManager );
                 }
                 catch ( NoSuchArchiverException e )
                 {
                     this.getLog().info( "Skip unpacking dependency file with 
unknown extension: " + file.getPath() );
+                }
+                catch ( ArchiveExpansionException e )
+                {
+                    throw new MojoExecutionException( "Error unpacking 
dependency file: " + file, e );
                 }
             }
         }

Propchange: 
maven/plugins/branches/MASSEMBLY-124/src/main/java/org/apache/maven/plugin/assembly/mojos/UnpackMojo.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
maven/plugins/branches/MASSEMBLY-124/src/main/java/org/apache/maven/plugin/assembly/mojos/UnpackMojo.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Modified: 
maven/plugins/branches/MASSEMBLY-124/src/main/java/org/apache/maven/plugin/assembly/repository/DefaultRepositoryAssembler.java
URL: 
http://svn.apache.org/viewvc/maven/plugins/branches/MASSEMBLY-124/src/main/java/org/apache/maven/plugin/assembly/repository/DefaultRepositoryAssembler.java?rev=422907&r1=422906&r2=422907&view=diff
==============================================================================
--- 
maven/plugins/branches/MASSEMBLY-124/src/main/java/org/apache/maven/plugin/assembly/repository/DefaultRepositoryAssembler.java
 (original)
+++ 
maven/plugins/branches/MASSEMBLY-124/src/main/java/org/apache/maven/plugin/assembly/repository/DefaultRepositoryAssembler.java
 Mon Jul 17 15:34:58 2006
@@ -51,6 +51,7 @@
 import org.apache.maven.artifact.resolver.filter.AndArtifactFilter;
 import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
 import org.apache.maven.artifact.resolver.filter.ScopeArtifactFilter;
+import org.apache.maven.plugin.assembly.AssemblerConfigurationSource;
 import org.apache.maven.plugin.assembly.filter.AssemblyExcludesArtifactFilter;
 import org.apache.maven.plugin.assembly.filter.AssemblyIncludesArtifactFilter;
 import org.apache.maven.plugin.assembly.utils.DigestUtils;
@@ -93,10 +94,12 @@
 
     private DigestUtils digester = new DigestUtils();
 
-    public void assemble( File repositoryDirectory, Repository repository, 
MavenProject project,
-                          ArtifactRepository localRepository )
+    public void assemble( File repositoryDirectory, Repository repository, 
AssemblerConfigurationSource configSource )
         throws RepositoryAssemblyException
     {
+        MavenProject project = configSource.getProject();
+        ArtifactRepository localRepository = configSource.getLocalRepository();
+        
         createGroupVersionAlignments( repository.getGroupVersionAlignments() );
 
         ArtifactRepository targetRepository = createLocalRepository( 
repositoryDirectory );

Modified: 
maven/plugins/branches/MASSEMBLY-124/src/main/java/org/apache/maven/plugin/assembly/repository/RepositoryAssembler.java
URL: 
http://svn.apache.org/viewvc/maven/plugins/branches/MASSEMBLY-124/src/main/java/org/apache/maven/plugin/assembly/repository/RepositoryAssembler.java?rev=422907&r1=422906&r2=422907&view=diff
==============================================================================
--- 
maven/plugins/branches/MASSEMBLY-124/src/main/java/org/apache/maven/plugin/assembly/repository/RepositoryAssembler.java
 (original)
+++ 
maven/plugins/branches/MASSEMBLY-124/src/main/java/org/apache/maven/plugin/assembly/repository/RepositoryAssembler.java
 Mon Jul 17 15:34:58 2006
@@ -16,10 +16,8 @@
  * limitations under the License.
  */
 
-import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.plugin.assembly.AssemblerConfigurationSource;
 import org.apache.maven.plugins.assembly.model.Repository;
-import org.apache.maven.project.MavenProject;
-
 import java.io.File;
 
 /**
@@ -29,7 +27,6 @@
 {
     String ROLE = RepositoryAssembler.class.getName();
 
-    public void assemble( File repositoryDirectory, Repository repository, 
MavenProject project,
-                          ArtifactRepository localRepository )
+    public void assemble( File repositoryDirectory, Repository repository, 
AssemblerConfigurationSource configSource )
         throws RepositoryAssemblyException;
 }

Added: 
maven/plugins/branches/MASSEMBLY-124/src/main/java/org/apache/maven/plugin/assembly/utils/AssemblyFileUtils.java
URL: 
http://svn.apache.org/viewvc/maven/plugins/branches/MASSEMBLY-124/src/main/java/org/apache/maven/plugin/assembly/utils/AssemblyFileUtils.java?rev=422907&view=auto
==============================================================================
--- 
maven/plugins/branches/MASSEMBLY-124/src/main/java/org/apache/maven/plugin/assembly/utils/AssemblyFileUtils.java
 (added)
+++ 
maven/plugins/branches/MASSEMBLY-124/src/main/java/org/apache/maven/plugin/assembly/utils/AssemblyFileUtils.java
 Mon Jul 17 15:34:58 2006
@@ -0,0 +1,87 @@
+package org.apache.maven.plugin.assembly.utils;
+
+import org.apache.maven.plugin.assembly.format.AssemblyFormattingException;
+import org.codehaus.plexus.util.IOUtil;
+
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.Reader;
+
+public final class AssemblyFileUtils
+{
+
+    private AssemblyFileUtils()
+    {
+    }
+
+    /**
+     * NOTE: It is the responsibility of the caller to close the source Reader 
instance.
+     */
+    public static void convertLineEndings( Reader source, File dest, String 
lineEndings )
+        throws IOException
+    {
+        BufferedWriter out = null;
+        BufferedReader bufferedSource = null;
+        try
+        {
+            if ( !( source instanceof BufferedReader ) )
+            {
+                bufferedSource = new BufferedReader( source );
+            }
+            else
+            {
+                bufferedSource = (BufferedReader) source;
+            }
+            
+            out = new BufferedWriter( new FileWriter( dest ) );
+
+            String line;
+
+            do
+            {
+                line = bufferedSource.readLine();
+                if ( line != null )
+                {
+                    out.write( line );
+                    out.write( lineEndings );
+                }
+            } while ( line != null );
+
+            out.flush();
+        }
+        finally
+        {
+            IOUtil.close( out );
+        }
+    }
+
+    public static String getLineEndingCharacters( String lineEnding )
+        throws AssemblyFormattingException
+    {
+        String value = lineEnding;
+        if ( lineEnding != null )
+        {
+            if ( "keep".equals( lineEnding ) )
+            {
+                value = null;
+            }
+            else if ( "dos".equals( lineEnding ) || "crlf".equals( lineEnding 
) )
+            {
+                value = "\r\n";
+            }
+            else if ( "unix".equals( lineEnding ) || "lf".equals( lineEnding ) 
)
+            {
+                value = "\n";
+            }
+            else
+            {
+                throw new AssemblyFormattingException( "Illlegal lineEnding 
specified: '" + lineEnding + "'" );
+            }
+        }
+
+        return value;
+    }
+}

Propchange: 
maven/plugins/branches/MASSEMBLY-124/src/main/java/org/apache/maven/plugin/assembly/utils/AssemblyFileUtils.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
maven/plugins/branches/MASSEMBLY-124/src/main/java/org/apache/maven/plugin/assembly/utils/AssemblyFileUtils.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: 
maven/plugins/branches/MASSEMBLY-124/src/main/java/org/apache/maven/plugin/assembly/utils/AssemblyFormatUtils.java
URL: 
http://svn.apache.org/viewvc/maven/plugins/branches/MASSEMBLY-124/src/main/java/org/apache/maven/plugin/assembly/utils/AssemblyFormatUtils.java?rev=422907&view=auto
==============================================================================
--- 
maven/plugins/branches/MASSEMBLY-124/src/main/java/org/apache/maven/plugin/assembly/utils/AssemblyFormatUtils.java
 (added)
+++ 
maven/plugins/branches/MASSEMBLY-124/src/main/java/org/apache/maven/plugin/assembly/utils/AssemblyFormatUtils.java
 Mon Jul 17 15:34:58 2006
@@ -0,0 +1,172 @@
+package org.apache.maven.plugin.assembly.utils;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.handler.ArtifactHandler;
+import org.apache.maven.model.Build;
+import org.apache.maven.plugin.assembly.AssemblerConfigurationSource;
+import org.apache.maven.plugin.assembly.format.AssemblyFormattingException;
+import org.apache.maven.plugins.assembly.model.Assembly;
+import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.util.StringUtils;
+import org.codehaus.plexus.util.introspection.ReflectionValueExtractor;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public final class AssemblyFormatUtils
+{
+
+    private AssemblyFormatUtils()
+    {
+    }
+
+    /**
+     * Get the full name of the distribution artifact
+     *
+     * @param assembly
+     * @return the distribution name
+     */
+    public static String getDistributionName( Assembly assembly, 
AssemblerConfigurationSource configSource )
+    {
+        String finalName = configSource.getFinalName();
+        boolean appendAssemblyId = configSource.isAssemblyIdAppended();
+        String classifier = configSource.getClassifier();
+        
+        String distributionName = finalName;
+        if ( appendAssemblyId )
+        {
+            if ( !StringUtils.isEmpty( assembly.getId() ) )
+            {
+                distributionName = finalName + "-" + assembly.getId();
+            }
+        }
+        else if ( classifier != null )
+        {
+            distributionName = finalName + "-" + classifier;
+        }
+        
+        return distributionName;
+    }
+    
+    public static String getOutputDirectory( String output, MavenProject 
project, String finalName,
+                                             boolean includeBaseDirectory )
+    {
+        String value = output;
+        if ( value == null )
+        {
+            value = "";
+        }
+        
+        if ( !value.endsWith( "/" ) && !value.endsWith( "\\" ) )
+        {
+            // TODO: shouldn't archiver do this?
+            value += '/';
+        }
+
+        if ( includeBaseDirectory )
+        {
+            if ( value.startsWith( "/" ) )
+            {
+                value = finalName + value;
+            }
+            else
+            {
+                value = finalName + "/" + value;
+            }
+        }
+        else
+        {
+            if ( value.startsWith( "/" ) )
+            {
+                value = value.substring( 1 );
+            }
+        }
+
+        if ( project != null )
+        {
+            value = StringUtils.replace( value, "${groupId}", 
project.getGroupId() );
+            value = StringUtils.replace( value, "${artifactId}", 
project.getArtifactId() );
+            value = StringUtils.replace( value, "${version}", 
project.getVersion() );
+
+            Build build = project.getBuild();
+            value = StringUtils.replace( value, "${build.finalName}", 
build.getFinalName() );
+            value = StringUtils.replace( value, "${finalName}", 
build.getFinalName() );
+        }
+
+        return value;
+    }
+
+    /**
+     * Evaluates Filename Mapping
+     * 
+     * @param expression
+     * @param artifact
+     * @return expression
+     * @throws AssemblyFormattingException 
+     * @throws org.apache.maven.plugin.MojoExecutionException
+     */
+    public static String evaluateFileNameMapping( String expression, Artifact 
artifact )
+        throws AssemblyFormattingException
+    {
+        String value = expression;
+
+        // insert the classifier if exist
+        if ( !StringUtils.isEmpty( artifact.getClassifier() ) )
+        {
+            int dotIdx = value.lastIndexOf( "." );
+
+            if ( dotIdx >= 0 )
+            {
+                String extension = value.substring( dotIdx + 1, value.length() 
);
+                String artifactWithoutExt = value.substring( 0, dotIdx );
+
+                value = artifactWithoutExt + "-" + artifact.getClassifier() + 
"." + extension;
+            }
+            else
+            {
+                value = value + "-" + artifact.getClassifier();
+            }
+        }
+
+        // this matches the last ${...} string
+        Pattern pat = Pattern.compile( "^(.*)\\$\\{([^\\}]+)\\}(.*)$" );
+        Matcher mat = pat.matcher( expression );
+
+        if ( mat.matches() )
+        {
+            Object middle;
+            String left = evaluateFileNameMapping( mat.group( 1 ), artifact );
+            try
+            {
+                middle = ReflectionValueExtractor.evaluate( mat.group( 2 ), 
artifact, false );
+            }
+            catch ( Exception e )
+            {
+                throw new AssemblyFormattingException( "Cannot evaluate 
filenameMapping: '" + mat.group( 2 ) + "': "
+                    + e.getMessage(), e );
+            }
+            String right = mat.group( 3 );
+
+            if ( middle == null )
+            {
+                // TODO: There should be a more generic way dealing with that.
+                // Having magic words is not good at all.
+                // probe for magic word
+                if ( "extension".equals( mat.group( 2 ).trim() ) )
+                {
+                    ArtifactHandler artifactHandler = 
artifact.getArtifactHandler();
+                    middle = artifactHandler.getExtension();
+                }
+                else
+                {
+                    middle = "${" + mat.group( 2 ) + "}";
+                }
+            }
+
+            value = left + middle + right;
+        }
+
+        return value;
+    }
+
+}

Propchange: 
maven/plugins/branches/MASSEMBLY-124/src/main/java/org/apache/maven/plugin/assembly/utils/AssemblyFormatUtils.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
maven/plugins/branches/MASSEMBLY-124/src/main/java/org/apache/maven/plugin/assembly/utils/AssemblyFormatUtils.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Modified: 
maven/plugins/branches/MASSEMBLY-124/src/main/java/org/apache/maven/plugin/assembly/utils/ProjectUtils.java
URL: 
http://svn.apache.org/viewvc/maven/plugins/branches/MASSEMBLY-124/src/main/java/org/apache/maven/plugin/assembly/utils/ProjectUtils.java?rev=422907&r1=422906&r2=422907&view=diff
==============================================================================
--- 
maven/plugins/branches/MASSEMBLY-124/src/main/java/org/apache/maven/plugin/assembly/utils/ProjectUtils.java
 (original)
+++ 
maven/plugins/branches/MASSEMBLY-124/src/main/java/org/apache/maven/plugin/assembly/utils/ProjectUtils.java
 Mon Jul 17 15:34:58 2006
@@ -1,14 +1,13 @@
 package org.apache.maven.plugin.assembly.utils;
 
-import java.util.ArrayList;
+import org.apache.maven.project.MavenProject;
+
+import java.io.IOException;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
 
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.project.MavenProject;
-
 public final class ProjectUtils
 {
     
@@ -37,6 +36,55 @@
         }
 
         return dependenciesSet;
+    }
+
+    public static Set getProjectModules( MavenProject project, List 
reactorProjects ) throws IOException
+    {
+        Set moduleCandidates = new HashSet( reactorProjects );
+        
+        Set modules = new HashSet();
+        
+        // we temporarily add the master project to the modules set, since 
this set is pulling double duty as a set of
+        // potential module parents in the tree rooted at the master 
project...this allows us to use the same looping
+        // algorithm below to discover both direct modules of the master 
project AND modules of those direct modules.
+        modules.add( project );
+
+        int changed = -1;
+        
+        while( changed != 0 )
+        {
+            changed = 0;
+            
+            for ( Iterator candidateIterator = moduleCandidates.iterator(); 
candidateIterator.hasNext(); )
+            {
+                MavenProject moduleCandidate = (MavenProject) 
candidateIterator.next();
+                
+                for ( Iterator parentIterator = modules.iterator(); 
parentIterator.hasNext(); )
+                {
+                    MavenProject potentialParent = (MavenProject) 
parentIterator.next();
+                    
+                    // if this parent has an entry for the module candidate in 
the path adjustments map, it's a direct
+                    // module of that parent.
+                    if ( potentialParent.getModulePathAdjustment( 
moduleCandidate ) != null )
+                    {
+                        // add the candidate to the list of modules (and 
potential parents)
+                        modules.add( moduleCandidate );
+                        
+                        // remove the candidate from the candidate pool, 
because it's been verified.
+                        candidateIterator.remove();
+                        
+                        // increment the change counter, to show that we 
verified a new module on this pass.
+                        changed++;
+                    }
+                }
+            }
+        }
+        
+        // remove the master project from the modules set, now that we're done 
using it as a set of potential module
+        // parents...
+        modules.remove( project );
+
+        return modules;
     }
 
 }


Reply via email to