You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by ra...@apache.org on 2007/09/17 22:09:10 UTC

svn commit: r576574 - in /maven/sandbox/trunk/archetypeng: archetype-common/src/main/java/org/apache/maven/archetype/common/ archetype-creator/ archetype-creator/src/main/java/org/apache/maven/archetype/creator/ archetype-descriptor/src/main/mdo/ arche...

Author: rafale
Date: Mon Sep 17 13:09:10 2007
New Revision: 576574

URL: http://svn.apache.org/viewvc?rev=576574&view=rev
Log:
Replacement of module directories and artifactIds

Modified:
    maven/sandbox/trunk/archetypeng/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypeArtifactManager.java
    maven/sandbox/trunk/archetypeng/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypeFactory.java
    maven/sandbox/trunk/archetypeng/archetype-creator/pom.xml
    maven/sandbox/trunk/archetypeng/archetype-creator/src/main/java/org/apache/maven/archetype/creator/FilesetArchetypeCreator.java
    maven/sandbox/trunk/archetypeng/archetype-descriptor/src/main/mdo/archetype-descriptor.mdo
    maven/sandbox/trunk/archetypeng/archetype-generator/src/main/java/org/apache/maven/archetype/generator/DefaultFilesetArchetypeGenerator.java
    maven/sandbox/trunk/archetypeng/archetype-generator/src/test/archetypes/basic-1.0/META-INF/maven/archetype-metadata.xml
    maven/sandbox/trunk/archetypeng/archetype-generator/src/test/archetypes/fileset-1.0/META-INF/maven/archetype-metadata.xml
    maven/sandbox/trunk/archetypeng/archetype-generator/src/test/archetypes/partial-1.0/META-INF/maven/archetype-metadata.xml
    maven/sandbox/trunk/archetypeng/archetype-generator/src/test/archetypes/site-1.0/META-INF/maven/archetype-metadata.xml

Modified: maven/sandbox/trunk/archetypeng/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypeArtifactManager.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/archetypeng/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypeArtifactManager.java?rev=576574&r1=576573&r2=576574&view=diff
==============================================================================
--- maven/sandbox/trunk/archetypeng/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypeArtifactManager.java (original)
+++ maven/sandbox/trunk/archetypeng/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypeArtifactManager.java Mon Sep 17 13:09:10 2007
@@ -277,7 +277,7 @@
             org.apache.maven.archetype.metadata.ArchetypeDescriptor descriptor =
                 loadFileSetArchetypeDescriptor ( archetypeJarLoader );
 
-            return descriptor.getId () != null;
+            return descriptor.getName () != null;
         }
         catch ( XmlPullParserException e )
         {

Modified: maven/sandbox/trunk/archetypeng/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypeFactory.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/archetypeng/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypeFactory.java?rev=576574&r1=576573&r2=576574&view=diff
==============================================================================
--- maven/sandbox/trunk/archetypeng/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypeFactory.java (original)
+++ maven/sandbox/trunk/archetypeng/archetype-common/src/main/java/org/apache/maven/archetype/common/DefaultArchetypeFactory.java Mon Sep 17 13:09:10 2007
@@ -169,7 +169,7 @@
         );
         configuration.setVersion ( properties.getProperty ( Constants.ARCHETYPE_VERSION, null ) );
 
-        configuration.setName ( archetypeDescriptor.getId () );
+        configuration.setName ( archetypeDescriptor.getName () );
 
         Iterator requiredProperties = archetypeDescriptor.getRequiredProperties ().iterator ();
         while ( requiredProperties.hasNext () )

Modified: maven/sandbox/trunk/archetypeng/archetype-creator/pom.xml
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/archetypeng/archetype-creator/pom.xml?rev=576574&r1=576573&r2=576574&view=diff
==============================================================================
--- maven/sandbox/trunk/archetypeng/archetype-creator/pom.xml (original)
+++ maven/sandbox/trunk/archetypeng/archetype-creator/pom.xml Mon Sep 17 13:09:10 2007
@@ -1,21 +1,21 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!--
-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.
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
 --><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
 
     <modelVersion>4.0.0</modelVersion>
@@ -76,6 +76,12 @@
         <dependency>
             <groupId>commons-io</groupId>
             <artifactId>commons-io</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>commons-collections</groupId>
+            <artifactId>commons-collections</artifactId>
+            <version>3.2</version>
+            <scope>compile</scope>
         </dependency>
     </dependencies>
 </project>

Modified: maven/sandbox/trunk/archetypeng/archetype-creator/src/main/java/org/apache/maven/archetype/creator/FilesetArchetypeCreator.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/archetypeng/archetype-creator/src/main/java/org/apache/maven/archetype/creator/FilesetArchetypeCreator.java?rev=576574&r1=576573&r2=576574&view=diff
==============================================================================
--- maven/sandbox/trunk/archetypeng/archetype-creator/src/main/java/org/apache/maven/archetype/creator/FilesetArchetypeCreator.java (original)
+++ maven/sandbox/trunk/archetypeng/archetype-creator/src/main/java/org/apache/maven/archetype/creator/FilesetArchetypeCreator.java Mon Sep 17 13:09:10 2007
@@ -19,6 +19,7 @@
 
 package org.apache.maven.archetype.creator;
 
+import java.io.FileNotFoundException;
 import org.apache.maven.archetype.common.ArchetypeConfiguration;
 import org.apache.maven.archetype.common.ArchetypeDefinition;
 import org.apache.maven.archetype.common.ArchetypeFactory;
@@ -67,6 +68,8 @@
 import java.util.Map;
 import java.util.Properties;
 import java.util.Set;
+import org.apache.commons.collections.BidiMap;
+import org.apache.commons.collections.bidimap.DualTreeBidiMap;
 
 /**
  * @plexus.component  role-hint="fileset"
@@ -200,7 +203,7 @@
         archetypeDescriptorFile.getParentFile ().mkdirs ();
 
         ArchetypeDescriptor archetypeDescriptor = new ArchetypeDescriptor ();
-        archetypeDescriptor.setId ( archetypeDefinition.getArtifactId () );
+        archetypeDescriptor.setName ( archetypeDefinition.getArtifactId () );
         getLogger ().debug (
             "Starting archetype's descriptor " + archetypeDefinition.getArtifactId ()
         );
@@ -222,6 +225,8 @@
         Model pom =
             pomManager.readPom ( FileUtils.resolveFile ( basedir, Constants.ARCHETYPE_POM ) );
 
+        registerProject(pom);
+
         List fileNames = resolveFileNames ( pom, basedir );
         getLogger ().debug ( "Scanned for files " + fileNames.size () );
 
@@ -233,7 +238,7 @@
 
         List filesets =
             resolveFileSets ( packageName, fileNames, languages, filtereds, defaultEncoding );
-        getLogger ().debug ( "Resolved filesets for " + archetypeDescriptor.getId () );
+        getLogger ().debug ( "Resolved filesets for " + archetypeDescriptor.getName () );
 
         archetypeDescriptor.setFileSets ( filesets );
 
@@ -245,12 +250,12 @@
             archetypeFilesDirectory,
             defaultEncoding
         );
-        getLogger ().debug ( "Created files for " + archetypeDescriptor.getId () );
+        getLogger ().debug ( "Created files for " + archetypeDescriptor.getName () );
 
         if ( !ignoreReplica )
         {
             createReplicaFiles ( filesets, basedir, replicaFilesDirectory );
-            getLogger ().debug ( "Created replica files for " + archetypeDescriptor.getId () );
+            getLogger ().debug ( "Created replica files for " + archetypeDescriptor.getName () );
 
             FileUtils.copyFile (
                 propertyFile,
@@ -261,7 +266,6 @@
 
         setParentArtifactId (
             reverseProperties,
-            pomReversedProperties,
             archetypeConfiguration.getProperty ( Constants.ARTIFACT_ID )
         );
 
@@ -275,7 +279,7 @@
             ModuleDescriptor moduleDescriptor =
                 createModule (
                     reverseProperties,
-                    pomReversedProperties,
+                    archetypeConfiguration.getProperty ( Constants.ARTIFACT_ID ),
                     moduleId,
                     packageName,
                     FileUtils.resolveFile ( basedir, moduleId ),
@@ -291,33 +295,38 @@
 
             archetypeDescriptor.addModule ( moduleDescriptor );
             getLogger ().debug (
-                "Added module " + moduleDescriptor.getId () + " in "
-                + archetypeDescriptor.getId ()
+                "Added module " + moduleDescriptor.getName () + " in "
+                + archetypeDescriptor.getName ()
             );
         }
-        restoreParentArtifactId ( reverseProperties, pomReversedProperties, null );
+        restoreParentArtifactId ( reverseProperties, null );
         restoreArtifactId (
             reverseProperties,
-            pomReversedProperties,
             archetypeConfiguration.getProperty ( Constants.ARTIFACT_ID )
         );
 
-        createArchetypePom (
-            pom,
-            archetypeFilesDirectory,
-            pomReversedProperties,
-            FileUtils.resolveFile ( basedir, Constants.ARCHETYPE_POM ),
-            preserveCData,
-            keepParent
-        );
-        getLogger ().debug ( "Created Archetype " + archetypeDescriptor.getId () + " pom" );
+        createPoms (pom, archetypeConfiguration.getProperty ( Constants.ARTIFACT_ID ),
+                archetypeFilesDirectory, basedir,
+                pomReversedProperties, preserveCData, keepParent);
+
+//        createArchetypePom (
+//            pom,
+//            archetypeFilesDirectory,
+//            pomReversedProperties,
+//            FileUtils.resolveFile ( basedir, Constants.ARCHETYPE_POM ),
+//            preserveCData,
+//            keepParent
+//        );
+        getLogger ().debug ( "Created Archetype " + archetypeDescriptor.getName () + " pom" );
+
+//getLogger().debug("registeredProjects"+registeredProjects);
 
         ArchetypeDescriptorXpp3Writer writer = new ArchetypeDescriptorXpp3Writer ();
         writer.write ( new FileWriter ( archetypeDescriptorFile ), archetypeDescriptor );
-        getLogger ().debug ( "Archetype " + archetypeDescriptor.getId () + " descriptor written" );
+        getLogger ().debug ( "Archetype " + archetypeDescriptor.getName () + " descriptor written" );
 
         OldArchetypeDescriptor oldDescriptor =
-            convertToOldDescriptor ( archetypeDescriptor.getId (), packageName, basedir );
+            convertToOldDescriptor ( archetypeDescriptor.getName(), packageName, basedir );
         File oldDescriptorFile =
             FileUtils.resolveFile (
                 archetypeResourcesDirectory,
@@ -326,7 +335,7 @@
         archetypeDescriptorFile.getParentFile ().mkdirs ();
         writeOldDescriptor ( oldDescriptor, oldDescriptorFile );
         getLogger ().debug (
-            "Archetype " + archetypeDescriptor.getId () + " old descriptor written"
+            "Archetype " + archetypeDescriptor.getName () + " old descriptor written"
         );
 
         archetypeRegistryManager.addGroup ( archetypeDefinition.getGroupId (), archetypeRegistryFile );
@@ -363,19 +372,99 @@
         }
     }
 
+    private void createModulePoms (
+        Properties pomReversedProperties,
+        String packageName,
+        File basedir,
+        File archetypeFilesDirectory,
+        boolean preserveCData,
+        boolean keepParent ) throws FileNotFoundException, IOException, XmlPullParserException
+    {
+        Model pom =
+            pomManager.readPom ( FileUtils.resolveFile ( basedir, Constants.ARCHETYPE_POM ) );
+
+        String parentArtifactId = pomReversedProperties.getProperty ( Constants.PARENT_ARTIFACT_ID );
+        String artifactId =  pom.getArtifactId();
+        setParentArtifactId ( pomReversedProperties, pomReversedProperties.getProperty ( Constants.ARTIFACT_ID ) );
+        setArtifactId ( pomReversedProperties, pom.getArtifactId() );
+
+        Iterator modules = pom.getModules ().iterator ();
+        while ( modules.hasNext () )
+        {
+            String subModuleId = (String) modules.next ();
+
+                createModulePoms (
+                    pomReversedProperties,
+                    packageName,
+                    FileUtils.resolveFile ( basedir, subModuleId ),
+                    FileUtils.resolveFile ( archetypeFilesDirectory, subModuleId ),
+                    preserveCData,
+                    keepParent
+                );
+        }
+        createModulePom (
+            pom,
+            archetypeFilesDirectory,
+            pomReversedProperties,
+            FileUtils.resolveFile ( basedir, Constants.ARCHETYPE_POM ),
+            preserveCData,
+            keepParent
+        );
+        restoreParentArtifactId ( pomReversedProperties, parentArtifactId );
+        restoreArtifactId ( pomReversedProperties, artifactId );
+    }
+
+    private void createPoms ( Model pom, String artifactId, File archetypeFilesDirectory,
+        File basedir, Properties pomReversedProperties, boolean preserveCData,
+        boolean keepParent ) throws IOException, FileNotFoundException, XmlPullParserException
+    {
+        setArtifactId ( pomReversedProperties, pom.getArtifactId() );
+
+        Iterator modules = pom.getModules().iterator();
+        while ( modules.hasNext () )
+        {
+            String moduleId = (String) modules.next ();
+
+                createModulePoms (
+                    pomReversedProperties,
+                    moduleId,
+                    FileUtils.resolveFile ( basedir, moduleId ),
+                    FileUtils.resolveFile ( archetypeFilesDirectory, moduleId ),
+                    preserveCData,
+                    keepParent
+                );
+        }
+        restoreParentArtifactId ( pomReversedProperties, null );
+        restoreArtifactId ( pomReversedProperties, artifactId );
+
+        createArchetypePom(
+            pom,
+            archetypeFilesDirectory,
+            pomReversedProperties,
+            FileUtils.resolveFile ( basedir, Constants.ARCHETYPE_POM ),
+            preserveCData,
+            keepParent
+        );
+    }
+
     private String getArchetypePom ()
     {
         return getGeneratedSourcesDirectory () + File.separator + Constants.ARCHETYPE_POM;
     }
 
+    private int id = 0;
+    private BidiMap registeredProjects = new DualTreeBidiMap();
+    private void registerProject ( Model pom )
+    {
+        registeredProjects.put(new Integer(id++), pom.getId());
+    }
+
     private void setArtifactId (
-        Properties reverseProperties,
-        Properties pomReversedProperties,
+        Properties properties,
         String artifactId
     )
     {
-        reverseProperties.setProperty ( Constants.ARTIFACT_ID, artifactId );
-        pomReversedProperties.setProperty ( Constants.ARTIFACT_ID, artifactId );
+        properties.setProperty ( Constants.ARTIFACT_ID, artifactId );
     }
 
     private List concatenateToList ( List toConcatenate, String with )
@@ -600,7 +689,6 @@
             pom.setArtifactId ( "${" + Constants.ARTIFACT_ID + "}" );
             pom.setVersion ( "${" + Constants.VERSION + "}" );
 //TODO: other behaviour should be enforced -> usage of submodules references in deps and depMan or maybe plugins
-System.err.println("createArchetypePom "+outputFile);
             pomManager.writePom ( pom, outputFile, initialPomFile );
         }
 
@@ -730,7 +818,7 @@
 
     private ModuleDescriptor createModule (
         Properties reverseProperties,
-        Properties pomReversedProperties,
+        String rootArtifactId,
         String moduleId,
         String packageName,
         File basedir,
@@ -746,7 +834,6 @@
     throws IOException, XmlPullParserException
     {
         ModuleDescriptor archetypeDescriptor = new ModuleDescriptor ();
-        archetypeDescriptor.setId ( moduleId );
         getLogger ().debug ( "Starting module's descriptor " + moduleId );
 
         archetypeFilesDirectory.mkdirs ();
@@ -754,14 +841,29 @@
 
         Model pom =
             pomManager.readPom ( FileUtils.resolveFile ( basedir, Constants.ARCHETYPE_POM ) );
+        String replacementId = pom.getArtifactId();
+        if ( replacementId.indexOf(rootArtifactId) >= 0 )
+        {
+            replacementId = StringUtils.replace( replacementId, rootArtifactId, "${rootArtifactId}" );
+            moduleId = StringUtils.replace( moduleId, rootArtifactId, "${rootArtifactId}" );
+        }
+        if ( moduleId.indexOf(rootArtifactId) >= 0 )
+        {
+            moduleId = StringUtils.replace( moduleId, rootArtifactId, "${rootArtifactId}" );
+        }
+        archetypeDescriptor.setName( replacementId );
+        archetypeDescriptor.setId( replacementId );
+        archetypeDescriptor.setDir( moduleId );
+
+        registerProject(pom);
 
-        setArtifactId ( reverseProperties, pomReversedProperties, pom.getArtifactId() );
+        setArtifactId ( reverseProperties, pom.getArtifactId() );
 
         List fileNames = resolveFileNames ( pom, basedir );
 
         List filesets =
             resolveFileSets ( packageName, fileNames, languages, filtereds, defaultEncoding );
-        getLogger ().debug ( "Resolved filesets for module " + archetypeDescriptor.getId () );
+        getLogger ().debug ( "Resolved filesets for module " + archetypeDescriptor.getName () );
 
         archetypeDescriptor.setFileSets ( filesets );
 
@@ -773,16 +875,16 @@
             archetypeFilesDirectory,
             defaultEncoding
         );
-        getLogger ().debug ( "Created files for module " + archetypeDescriptor.getId () );
+        getLogger ().debug ( "Created files for module " + archetypeDescriptor.getName () );
 
         if ( !ignoreReplica )
         {
             createReplicaFiles ( filesets, basedir, replicaFilesDirectory );
-            getLogger ().debug ( "Created replica files for " + archetypeDescriptor.getId () );
+            getLogger ().debug ( "Created replica files for " + archetypeDescriptor.getName () );
         }
 
         String parentArtifactId = reverseProperties.getProperty ( Constants.PARENT_ARTIFACT_ID );
-        setParentArtifactId ( reverseProperties, pomReversedProperties, pom.getArtifactId() );
+        setParentArtifactId ( reverseProperties, pom.getArtifactId() );
 
         Iterator modules = pom.getModules ().iterator ();
         while ( modules.hasNext () )
@@ -794,7 +896,7 @@
             ModuleDescriptor moduleDescriptor =
                 createModule (
                     reverseProperties,
-                    pomReversedProperties,
+                    rootArtifactId,
                     subModuleId,
                     packageName,
                     FileUtils.resolveFile ( basedir, subModuleId ),
@@ -810,22 +912,22 @@
 
             archetypeDescriptor.addModule ( moduleDescriptor );
             getLogger ().debug (
-                "Added module " + moduleDescriptor.getId () + " in "
-                + archetypeDescriptor.getId ()
+                "Added module " + moduleDescriptor.getName () + " in "
+                + archetypeDescriptor.getName ()
             );
         }
-        restoreParentArtifactId ( reverseProperties, pomReversedProperties, parentArtifactId );
-        restoreArtifactId ( reverseProperties, pomReversedProperties, pom.getArtifactId() );
+        restoreParentArtifactId ( reverseProperties, parentArtifactId );
+        restoreArtifactId ( reverseProperties, pom.getArtifactId() );
 
-        createModulePom (
-            pom,
-            archetypeFilesDirectory,
-            pomReversedProperties,
-            FileUtils.resolveFile ( basedir, Constants.ARCHETYPE_POM ),
-            preserveCData,
-            keepParent
-        );
-        getLogger ().debug ( "Created Module " + archetypeDescriptor.getId () + " pom" );
+//        createModulePom (
+//            pom,
+//            archetypeFilesDirectory,
+//            pomReversedProperties,
+//            FileUtils.resolveFile ( basedir, Constants.ARCHETYPE_POM ),
+//            preserveCData,
+//            keepParent
+//        );
+        getLogger ().debug ( "Created Module " + archetypeDescriptor.getName () + " pom" );
 
         return archetypeDescriptor;
     }
@@ -877,14 +979,21 @@
                 pom.getParent().setVersion ( "${" + Constants.VERSION + "}" );
             }
             pom.setModules ( null );
-            pom.setGroupId (
-                StringUtils.replace(
-                    pom.getGroupId (),
-                    pomReversedProperties.getProperty (Constants.GROUP_ID),
-                    "${" + Constants.GROUP_ID + "}")
-            );
+
+            if (pom.getGroupId() != null)
+            {
+                pom.setGroupId (
+                    StringUtils.replace(
+                        pom.getGroupId (),
+                        pomReversedProperties.getProperty (Constants.GROUP_ID),
+                        "${" + Constants.GROUP_ID + "}")
+                );
+            }
             pom.setArtifactId ( "${" + Constants.ARTIFACT_ID + "}" );
-            pom.setVersion ( "${" + Constants.VERSION + "}" );
+            if (pom.getVersion() != null)
+            {
+                pom.setVersion ( "${" + Constants.VERSION + "}" );
+            }
 
             pomManager.writePom ( pom, outputFile, initialPomFile );
         }
@@ -1094,13 +1203,11 @@
     }
 
     private void setParentArtifactId (
-        Properties reverseProperties,
-        Properties pomReversedProperties,
+        Properties properties,
         String parentArtifactId
     )
     {
-        reverseProperties.setProperty ( Constants.PARENT_ARTIFACT_ID, parentArtifactId );
-        pomReversedProperties.setProperty ( Constants.PARENT_ARTIFACT_ID, parentArtifactId );
+        properties.setProperty ( Constants.PARENT_ARTIFACT_ID, parentArtifactId );
     }
 
     private void processFileSet (
@@ -1617,38 +1724,32 @@
     }
 
     private void restoreArtifactId (
-        Properties reverseProperties,
-        Properties pomReversedProperties,
+        Properties properties,
         String artifactId
     )
     {
         if ( StringUtils.isEmpty ( artifactId ) )
         {
-            reverseProperties.remove ( Constants.ARTIFACT_ID );
-            pomReversedProperties.remove ( Constants.ARTIFACT_ID );
+            properties.remove ( Constants.ARTIFACT_ID );
         }
         else
         {
-            reverseProperties.setProperty ( Constants.ARTIFACT_ID, artifactId );
-            pomReversedProperties.setProperty ( Constants.ARTIFACT_ID, artifactId );
+            properties.setProperty ( Constants.ARTIFACT_ID, artifactId );
         }
     }
 
     private void restoreParentArtifactId (
-        Properties reverseProperties,
-        Properties pomReversedProperties,
+        Properties properties,
         String parentArtifactId
     )
     {
         if ( StringUtils.isEmpty ( parentArtifactId ) )
         {
-            reverseProperties.remove ( Constants.PARENT_ARTIFACT_ID );
-            pomReversedProperties.remove ( Constants.PARENT_ARTIFACT_ID );
+            properties.remove ( Constants.PARENT_ARTIFACT_ID );
         }
         else
         {
-            reverseProperties.setProperty ( Constants.PARENT_ARTIFACT_ID, parentArtifactId );
-            pomReversedProperties.setProperty ( Constants.PARENT_ARTIFACT_ID, parentArtifactId );
+            properties.setProperty ( Constants.PARENT_ARTIFACT_ID, parentArtifactId );
         }
     }
 

Modified: maven/sandbox/trunk/archetypeng/archetype-descriptor/src/main/mdo/archetype-descriptor.mdo
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/archetypeng/archetype-descriptor/src/main/mdo/archetype-descriptor.mdo?rev=576574&r1=576573&r2=576574&view=diff
==============================================================================
--- maven/sandbox/trunk/archetypeng/archetype-descriptor/src/main/mdo/archetype-descriptor.mdo (original)
+++ maven/sandbox/trunk/archetypeng/archetype-descriptor/src/main/mdo/archetype-descriptor.mdo Mon Sep 17 13:09:10 2007
@@ -29,7 +29,7 @@
     </defaults>
 
     <!--
-        <archetype id="archetype-artifact-id" partial="true|false" >
+        <archetype name="archetype-artifact-id" partial="true|false" >
            <requiredProperties>
                <requiredProperty key="propKey" >
                    <defaultValue>string to replace</defaultValue>
@@ -47,7 +47,7 @@
                </fileSet>
            </fileSets>
            <modules>
-               <module id="module-artifact-id">
+               <module name="module-id" id="module-artifact-id" dir="module-dir">
                    <fileSets/>
                    <modules/>
                </module>
@@ -61,7 +61,7 @@
             <superClass>AbstractArchetypeDescriptor</superClass>
             <fields>
                 <field xml.attribute="true" >
-                    <name>id</name>
+                    <name>name</name>
                     <type>String</type>
                     <required>true</required>
                 </field>
@@ -86,6 +86,16 @@
             <fields>
                 <field xml.attribute="true" >
                     <name>id</name>
+                    <type>String</type>
+                    <required>true</required>
+                </field>
+                <field xml.attribute="true" >
+                    <name>dir</name>
+                    <type>String</type>
+                    <required>true</required>
+                </field>
+                <field xml.attribute="true" >
+                    <name>name</name>
                     <type>String</type>
                     <required>true</required>
                 </field>

Modified: maven/sandbox/trunk/archetypeng/archetype-generator/src/main/java/org/apache/maven/archetype/generator/DefaultFilesetArchetypeGenerator.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/archetypeng/archetype-generator/src/main/java/org/apache/maven/archetype/generator/DefaultFilesetArchetypeGenerator.java?rev=576574&r1=576573&r2=576574&view=diff
==============================================================================
--- maven/sandbox/trunk/archetypeng/archetype-generator/src/main/java/org/apache/maven/archetype/generator/DefaultFilesetArchetypeGenerator.java (original)
+++ maven/sandbox/trunk/archetypeng/archetype-generator/src/main/java/org/apache/maven/archetype/generator/DefaultFilesetArchetypeGenerator.java Mon Sep 17 13:09:10 2007
@@ -141,7 +141,7 @@
             if ( archetypeDescriptor.isPartial () )
             {
                 getLogger ().debug (
-                    "Procesing partial archetype " + archetypeDescriptor.getId ()
+                    "Procesing partial archetype " + archetypeDescriptor.getName ()
                 );
                 if ( outputDirectoryFile.exists () )
                 {
@@ -203,7 +203,7 @@
             else
             {
                 getLogger ().debug (
-                    "Processing complete archetype " + archetypeDescriptor.getId ()
+                    "Processing complete archetype " + archetypeDescriptor.getName ()
                 );
                 if ( outputDirectoryFile.exists () )
                 {
@@ -213,6 +213,7 @@
                 {
                     processFilesetModule (
                         artifactId,
+                        artifactId,
                         archetypeResources,
                         pom,
                         archetypeZipFile,
@@ -446,6 +447,7 @@
     }
 
     private void processFilesetModule (
+        String rootArtifactId,
         String artifactId,
         final List archetypeResources,
         File pom,
@@ -469,7 +471,7 @@
 
         processFilesetProject (
             archetypeDescriptor,
-            artifactId,
+            StringUtils.replace( artifactId, "${rootArtifactId}", rootArtifactId ),
             archetypeResources,
             pom,
             archetypeZipFile,
@@ -487,22 +489,23 @@
             getLogger ().debug (
                 artifactId + " has modules (" + archetypeDescriptor.getModules () + ")"
             );
-            setParentArtifactId ( context, artifactId );
+            setParentArtifactId ( context, StringUtils.replace( artifactId, "${rootArtifactId}", rootArtifactId ) );
         }
         while ( subprojects.hasNext () )
         {
             ModuleDescriptor project = (ModuleDescriptor) subprojects.next ();
 
-            artifactId = project.getId ();
+            artifactId = project.getId();
 
-            File moduleOutputDirectoryFile = new File ( outputDirectoryFile, artifactId );
-            context.put ( Constants.ARTIFACT_ID, artifactId );
+            File moduleOutputDirectoryFile = new File ( outputDirectoryFile, StringUtils.replace( project.getDir(), "${rootArtifactId}", rootArtifactId ) );
+            context.put ( Constants.ARTIFACT_ID, StringUtils.replace( project.getId(), "${rootArtifactId}", rootArtifactId ) );
             processFilesetModule (
+                rootArtifactId,
                 artifactId,
                 archetypeResources,
                 new File ( moduleOutputDirectoryFile, Constants.ARCHETYPE_POM ),
                 archetypeZipFile,
-                ( StringUtils.isEmpty ( moduleOffset ) ? "" : ( moduleOffset + "/" ) ) + artifactId,
+                ( StringUtils.isEmpty ( moduleOffset ) ? "" : ( moduleOffset + "/" ) ) + StringUtils.replace( project.getDir(), "${rootArtifactId}", rootArtifactId ),
                 pom,
                 moduleOutputDirectoryFile,
                 packageName,
@@ -537,7 +540,6 @@
         if ( basedirPom.exists () )
         {
             processPomWithParent (
-
                 context,
                 pom,
                 moduleOffset,
@@ -630,12 +632,13 @@
             true
         );
 
-        if ( StringUtils.isEmpty ( moduleOffset ) )
-        {
+        /*if ( StringUtils.isEmpty ( moduleOffset ) )
+        {*/
             getLogger ().debug ( "Adding module " + artifactId );
+System.err.println ( "Adding module " + artifactId );
             pomManager.addModule ( basedirPom, artifactId );
             pomManager.addParent ( pom, basedirPom );
-        }
+        //}
     }
 
     private void processTemplate (

Modified: maven/sandbox/trunk/archetypeng/archetype-generator/src/test/archetypes/basic-1.0/META-INF/maven/archetype-metadata.xml
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/archetypeng/archetype-generator/src/test/archetypes/basic-1.0/META-INF/maven/archetype-metadata.xml?rev=576574&r1=576573&r2=576574&view=diff
==============================================================================
--- maven/sandbox/trunk/archetypeng/archetype-generator/src/test/archetypes/basic-1.0/META-INF/maven/archetype-metadata.xml (original)
+++ maven/sandbox/trunk/archetypeng/archetype-generator/src/test/archetypes/basic-1.0/META-INF/maven/archetype-metadata.xml Mon Sep 17 13:09:10 2007
@@ -17,7 +17,7 @@
 specific language governing permissions and limitations
 under the License.
 -->
-<archetype-descriptor id="basic" >
+<archetype-descriptor name="basic" >
 
     <requiredProperties>
         <requiredProperty key="property-with-default-1" >

Modified: maven/sandbox/trunk/archetypeng/archetype-generator/src/test/archetypes/fileset-1.0/META-INF/maven/archetype-metadata.xml
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/archetypeng/archetype-generator/src/test/archetypes/fileset-1.0/META-INF/maven/archetype-metadata.xml?rev=576574&r1=576573&r2=576574&view=diff
==============================================================================
--- maven/sandbox/trunk/archetypeng/archetype-generator/src/test/archetypes/fileset-1.0/META-INF/maven/archetype-metadata.xml (original)
+++ maven/sandbox/trunk/archetypeng/archetype-generator/src/test/archetypes/fileset-1.0/META-INF/maven/archetype-metadata.xml Mon Sep 17 13:09:10 2007
@@ -17,7 +17,7 @@
 specific language governing permissions and limitations
 under the License.
 -->
-<archetype-descriptor id="fileset" partial="false" >
+<archetype-descriptor name="fileset" partial="false" >
 
     <requiredProperties>
         <requiredProperty key="property-with-default-1" >
@@ -80,7 +80,7 @@
     </fileSets>
 
     <modules>
-        <module id="subproject">
+        <module name="subproject" id="subproject" dir="subproject">
             <fileSets>
                 <fileSet filtered="true" packaged="true" >
                     <directory>src/main/java</directory>
@@ -91,7 +91,7 @@
             </fileSets>
 
             <modules>
-                <module id="subsubproject">
+                <module name="subsubproject" id="subsubproject" dir="subsubproject">
                     <fileSets>
                         <fileSet filtered="true" packaged="true" >
                             <directory>src/main/java</directory>

Modified: maven/sandbox/trunk/archetypeng/archetype-generator/src/test/archetypes/partial-1.0/META-INF/maven/archetype-metadata.xml
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/archetypeng/archetype-generator/src/test/archetypes/partial-1.0/META-INF/maven/archetype-metadata.xml?rev=576574&r1=576573&r2=576574&view=diff
==============================================================================
--- maven/sandbox/trunk/archetypeng/archetype-generator/src/test/archetypes/partial-1.0/META-INF/maven/archetype-metadata.xml (original)
+++ maven/sandbox/trunk/archetypeng/archetype-generator/src/test/archetypes/partial-1.0/META-INF/maven/archetype-metadata.xml Mon Sep 17 13:09:10 2007
@@ -17,7 +17,7 @@
 specific language governing permissions and limitations
 under the License.
 -->
-<archetype-descriptor id="partial" partial="true" >
+<archetype-descriptor name="partial" partial="true" >
 
     <fileSets>
         <fileSet filtered="true" packaged="true" >

Modified: maven/sandbox/trunk/archetypeng/archetype-generator/src/test/archetypes/site-1.0/META-INF/maven/archetype-metadata.xml
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/archetypeng/archetype-generator/src/test/archetypes/site-1.0/META-INF/maven/archetype-metadata.xml?rev=576574&r1=576573&r2=576574&view=diff
==============================================================================
--- maven/sandbox/trunk/archetypeng/archetype-generator/src/test/archetypes/site-1.0/META-INF/maven/archetype-metadata.xml (original)
+++ maven/sandbox/trunk/archetypeng/archetype-generator/src/test/archetypes/site-1.0/META-INF/maven/archetype-metadata.xml Mon Sep 17 13:09:10 2007
@@ -17,7 +17,7 @@
 specific language governing permissions and limitations
 under the License.
 -->
-<archetype-descriptor id="site" >
+<archetype-descriptor name="site" >
 
     <requiredProperties>
         <requiredProperty key="property-with-default-1" >