Author: brett
Date: Mon Apr  3 00:24:06 2006
New Revision: 390971

URL: http://svn.apache.org/viewcvs?rev=390971&view=rev
Log:
[ARCHETYPE-22] allow subpackages in the archetype

Modified:
    
maven/archetype/trunk/maven-archetype-core/src/main/java/org/apache/maven/archetype/DefaultArchetype.java

Modified: 
maven/archetype/trunk/maven-archetype-core/src/main/java/org/apache/maven/archetype/DefaultArchetype.java
URL: 
http://svn.apache.org/viewcvs/maven/archetype/trunk/maven-archetype-core/src/main/java/org/apache/maven/archetype/DefaultArchetype.java?rev=390971&r1=390970&r2=390971&view=diff
==============================================================================
--- 
maven/archetype/trunk/maven-archetype-core/src/main/java/org/apache/maven/archetype/DefaultArchetype.java
 (original)
+++ 
maven/archetype/trunk/maven-archetype-core/src/main/java/org/apache/maven/archetype/DefaultArchetype.java
 Mon Apr  3 00:24:06 2006
@@ -526,8 +526,12 @@
             if ( !overrideSrcDir )
             {
                 FileUtils.mkdir( outputDirectory + DEFAULT_SOURCE_DIR );
+                processSources( outputDirectory, context, descriptor, 
packageName, DEFAULT_SOURCE_DIR );
+            }
+            else
+            {
+                processSources( outputDirectory, context, descriptor, 
packageName, build.getSourceDirectory() );
             }
-            processSources( outputDirectory, context, descriptor, packageName 
);
         }
 
         if ( descriptor.getResources().size() > 0 )
@@ -548,9 +552,12 @@
             if ( !overrideTestSrcDir )
             {
                 FileUtils.mkdir( outputDirectory + DEFAULT_TEST_SOURCE_DIR );
+                processTestSources( outputDirectory, context, descriptor, 
packageName, DEFAULT_TEST_SOURCE_DIR );
+            }
+            else
+            {
+                processTestSources( outputDirectory, context, descriptor, 
packageName, build.getTestSourceDirectory() );
             }
-
-            processTestSources( outputDirectory, context, descriptor, 
packageName );
         }
 
         if ( descriptor.getTestResources().size() > 0 )
@@ -572,6 +579,13 @@
         }
     }
 
+    private void processTemplate( String outputDirectory, Context context, 
String template,
+                                  TemplateDescriptor descriptor, boolean 
packageInFileName, String packageName )
+        throws ArchetypeTemplateProcessingException
+    {
+        processTemplate( outputDirectory, context, template, descriptor, 
packageInFileName, packageName, null );
+    }
+
     private String getOutputDirectory( String outputDirectory, String 
testResourceDirectory )
     {
         return outputDirectory +
@@ -583,7 +597,7 @@
     // ----------------------------------------------------------------------
 
     protected void processSources( String outputDirectory, Context context, 
ArchetypeDescriptor descriptor,
-                                   String packageName )
+                                   String packageName, String sourceDirectory )
         throws ArchetypeTemplateProcessingException
     {
         for ( Iterator i = descriptor.getSources().iterator(); i.hasNext(); )
@@ -591,12 +605,12 @@
             String template = (String) i.next();
 
             processTemplate( outputDirectory, context, template, 
descriptor.getSourceDescriptor( template ), true,
-                             packageName );
+                             packageName, sourceDirectory );
         }
     }
 
     protected void processTestSources( String outputDirectory, Context 
context, ArchetypeDescriptor descriptor,
-                                       String packageName )
+                                       String packageName, String 
testSourceDirectory )
         throws ArchetypeTemplateProcessingException
     {
         for ( Iterator i = descriptor.getTestSources().iterator(); 
i.hasNext(); )
@@ -604,7 +618,7 @@
             String template = (String) i.next();
 
             processTemplate( outputDirectory, context, template, 
descriptor.getTestSourceDescriptor( template ), true,
-                             packageName );
+                             packageName, testSourceDirectory );
         }
     }
 
@@ -648,7 +662,8 @@
     }
 
     protected void processTemplate( String outputDirectory, Context context, 
String template,
-                                    TemplateDescriptor descriptor, boolean 
packageInFileName, String packageName )
+                                    TemplateDescriptor descriptor, boolean 
packageInFileName, String packageName,
+                                    String sourceDirectory )
         throws ArchetypeTemplateProcessingException
     {
         File f;
@@ -663,9 +678,31 @@
 
             String filename = FileUtils.filename( templateFileName );
 
-            String dirname = FileUtils.dirname( templateFileName );
+            String dirname = FileUtils.dirname( templateFileName ).replace( 
'\\', '/' );
+
+            sourceDirectory = sourceDirectory.replace( '\\', '/' );
+            if ( sourceDirectory.startsWith( "/" ) )
+            {
+                sourceDirectory = sourceDirectory.substring( 1 );
+            }
+
+            if ( !dirname.startsWith( sourceDirectory ) )
+            {
+                throw new ArchetypeTemplateProcessingException(
+                    "Template '" + template + "' not in directory '" + 
sourceDirectory + "'" );
+            }
+
+            String extraPackages = dirname.substring( sourceDirectory.length() 
);
+            if ( extraPackages.startsWith( "/" ) )
+            {
+                extraPackages = extraPackages.substring( 1 );
+            }
+            if ( extraPackages.length() > 0 )
+            {
+                path += "/" + extraPackages;
+            }
 
-            f = new File( new File( new File( outputDirectory, dirname ), path 
), filename );
+            f = new File( new File( new File( outputDirectory, sourceDirectory 
), path ), filename );
         }
         else
         {


Reply via email to