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 2008/03/04 20:46:35 UTC

svn commit: r633608 - in /maven/archetype/trunk: archetype-common/src/main/java/org/apache/maven/archetype/ archetype-common/src/main/java/org/apache/maven/archetype/creator/ archetype-common/src/test/java/org/apache/maven/archetype/creator/ archetype-...

Author: rafale
Date: Tue Mar  4 11:46:32 2008
New Revision: 633608

URL: http://svn.apache.org/viewvc?rev=633608&view=rev
Log:
Removed the ignoreReplica property

Modified:
    maven/archetype/trunk/archetype-common/src/main/java/org/apache/maven/archetype/ArchetypeCreationRequest.java
    maven/archetype/trunk/archetype-common/src/main/java/org/apache/maven/archetype/creator/FilesetArchetypeCreator.java
    maven/archetype/trunk/archetype-common/src/test/java/org/apache/maven/archetype/creator/DefaultArchetypeCreatorTest.java
    maven/archetype/trunk/archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/CreateArchetypeFromProjectMojo.java

Modified: maven/archetype/trunk/archetype-common/src/main/java/org/apache/maven/archetype/ArchetypeCreationRequest.java
URL: http://svn.apache.org/viewvc/maven/archetype/trunk/archetype-common/src/main/java/org/apache/maven/archetype/ArchetypeCreationRequest.java?rev=633608&r1=633607&r2=633608&view=diff
==============================================================================
--- maven/archetype/trunk/archetype-common/src/main/java/org/apache/maven/archetype/ArchetypeCreationRequest.java (original)
+++ maven/archetype/trunk/archetype-common/src/main/java/org/apache/maven/archetype/ArchetypeCreationRequest.java Tue Mar  4 11:46:32 2008
@@ -32,8 +32,6 @@
 {
     private ArtifactRepository localRepository;
 
-//    private List remoteRepositories;
-
     private MavenProject project;
 
     private File propertyFile;
@@ -44,8 +42,6 @@
 
     private String defaultEncoding = "UTF-8";
 
-    private boolean ignoreReplica = true;
-
     private boolean preserveCData = false;
 
     private boolean keepParent = true;
@@ -70,18 +66,6 @@
         return this;
     }
 
-//    public List getRemoteRepositories()
-//    {
-//        return remoteRepositories;
-//    }
-//
-//    public ArchetypeCreationRequest setRemoteRepositories( List remoteRepositories )
-//    {
-//        this.remoteRepositories = remoteRepositories;
-//
-//        return this;
-//    }
-
     public MavenProject getProject()
     {
         return project;
@@ -138,18 +122,6 @@
     public ArchetypeCreationRequest setDefaultEncoding( String defaultEncoding )
     {
         this.defaultEncoding = defaultEncoding;
-
-        return this;
-    }
-
-    public boolean isIgnoreReplica()
-    {
-        return ignoreReplica;
-    }
-
-    public ArchetypeCreationRequest setIgnoreReplica( boolean ignoreReplica )
-    {
-        this.ignoreReplica = ignoreReplica;
 
         return this;
     }

Modified: maven/archetype/trunk/archetype-common/src/main/java/org/apache/maven/archetype/creator/FilesetArchetypeCreator.java
URL: http://svn.apache.org/viewvc/maven/archetype/trunk/archetype-common/src/main/java/org/apache/maven/archetype/creator/FilesetArchetypeCreator.java?rev=633608&r1=633607&r2=633608&view=diff
==============================================================================
--- maven/archetype/trunk/archetype-common/src/main/java/org/apache/maven/archetype/creator/FilesetArchetypeCreator.java (original)
+++ maven/archetype/trunk/archetype-common/src/main/java/org/apache/maven/archetype/creator/FilesetArchetypeCreator.java Tue Mar  4 11:46:32 2008
@@ -23,8 +23,6 @@
 import org.apache.commons.collections.bidimap.DualTreeBidiMap;
 import org.apache.maven.archetype.ArchetypeCreationRequest;
 import org.apache.maven.archetype.ArchetypeCreationResult;
-import org.apache.maven.archetype.common.ArchetypeConfiguration;
-import org.apache.maven.archetype.common.ArchetypeDefinition;
 import org.apache.maven.archetype.common.ArchetypeFilesResolver;
 import org.apache.maven.archetype.common.ArchetypeRegistryManager;
 import org.apache.maven.archetype.common.Constants;
@@ -34,8 +32,6 @@
 import org.apache.maven.archetype.common.util.PathUtils;
 import org.apache.maven.archetype.creator.olddescriptor.OldArchetypeDescriptor;
 import org.apache.maven.archetype.creator.olddescriptor.OldArchetypeDescriptorXpp3Writer;
-import org.apache.maven.archetype.exception.ArchetypeNotConfigured;
-import org.apache.maven.archetype.exception.ArchetypeNotDefined;
 import org.apache.maven.archetype.exception.TemplateCreationException;
 import org.apache.maven.archetype.metadata.ArchetypeDescriptor;
 import org.apache.maven.archetype.metadata.FileSet;
@@ -107,8 +103,6 @@
 
         String defaultEncoding = request.getDefaultEncoding();
 
-        boolean ignoreReplica = request.isIgnoreReplica();
-
         boolean preserveCData = request.isPreserveCData();
 
         boolean keepParent = request.isKeepParent();
@@ -117,58 +111,27 @@
 
         ArtifactRepository localRepository = request.getLocalRepository();
 
-        ArchetypeDefinition ad = new ArchetypeDefinition();
-
-        ad.setGroupId( project.getGroupId() );
-
-        ad.setArtifactId( project.getArtifactId() );
-
-        ad.setVersion( project.getVersion() );
-
-        if ( !ad.isDefined() )
-        {
-            result.setCause( new ArchetypeNotDefined( "The archetype is not defined" ) );
-
-            return;
-        }
-
-        ArchetypeConfiguration ac = new ArchetypeConfiguration();
-
-        ac.setGroupId( ad.getGroupId() );
-
-        ac.setArtifactId( ad.getArtifactId() );
-
-        ac.setVersion( ad.getVersion() );
-
-        ac.setGoals( ad.getGoals() );
-
-        if ( !ac.isConfigured() )
-        {
-            result.setCause( new ArchetypeNotConfigured( "The archetype is not configured" ) );
-
-            return;
-        }
-
         Properties properties = new Properties();
+        Properties configurationProperties = new Properties();
 
-        properties.setProperty( Constants.GROUP_ID, ad.getGroupId() );
-        ac.setProperty( Constants.GROUP_ID, ad.getGroupId() );
+        properties.setProperty( Constants.GROUP_ID, project.getGroupId() );
+        configurationProperties.setProperty( Constants.GROUP_ID, project.getGroupId() );
 
-        properties.setProperty( Constants.ARTIFACT_ID, ad.getArtifactId() );
-        ac.setProperty( Constants.ARTIFACT_ID, ad.getArtifactId() );
+        properties.setProperty( Constants.ARTIFACT_ID, project.getArtifactId() );
+        configurationProperties.setProperty( Constants.ARTIFACT_ID, project.getArtifactId() );
 
-        properties.setProperty( Constants.VERSION, ad.getVersion() );
-        ac.setProperty( Constants.VERSION, ad.getVersion() );
+        properties.setProperty( Constants.VERSION, project.getVersion() );
+        configurationProperties.setProperty( Constants.VERSION, project.getVersion() );
 
         if ( request.getPackageName() != null )
         {
             properties.setProperty( Constants.PACKAGE, request.getPackageName() );
-            ac.setProperty( Constants.PACKAGE, request.getPackageName() );
+            configurationProperties.setProperty( Constants.PACKAGE, request.getPackageName() );
         }
         else
         {
-            properties.setProperty( Constants.PACKAGE, ad.getGroupId() );
-            ac.setProperty( Constants.PACKAGE, ad.getGroupId() );
+            properties.setProperty( Constants.PACKAGE, project.getGroupId() );
+            configurationProperties.setProperty( Constants.PACKAGE, project.getGroupId() );
         }
 
         File basedir = project.getBasedir();
@@ -179,11 +142,11 @@
 
         Model model = new Model();
         model.setModelVersion( "4.0.0" );
-        model.setGroupId( ad.getGroupId() );
-        model.setArtifactId( ad.getArtifactId() );
-        model.setVersion( ad.getVersion() );
+        model.setGroupId( project.getGroupId() );
+        model.setArtifactId( project.getArtifactId() );
+        model.setVersion( project.getVersion() );
         model.setPackaging( "maven-archetype" );
-        model.setName( ad.getArtifactId() );
+        model.setName( project.getArtifactId() );
 
         Build build = new Build();
         model.setBuild( build );
@@ -263,26 +226,7 @@
 
         archetypeFilesDirectory.mkdirs();
 
-        getLogger().debug( "OldArchetype's files output directory " + archetypeFilesDirectory );
-
-        File replicaMainDirectory =
-            FileUtils.resolveFile(
-                generatedSourcesDirectory,
-                getReplicaOutputDirectory() + File.separator
-                    + ad.getArtifactId()
-            );
-
-        if ( !ignoreReplica )
-        {
-            replicaMainDirectory.mkdirs();
-        }
-
-        File replicaFilesDirectory = FileUtils.resolveFile( replicaMainDirectory, "reference" );
-
-        if ( !ignoreReplica )
-        {
-            replicaFilesDirectory.mkdirs();
-        }
+        getLogger().debug( "Archetype's files output directory " + archetypeFilesDirectory );
 
         File archetypeDescriptorFile = FileUtils.resolveFile( archetypeResourcesDirectory, Constants.ARCHETYPE_DESCRIPTOR );
 
@@ -290,9 +234,9 @@
 
         ArchetypeDescriptor archetypeDescriptor = new ArchetypeDescriptor();
 
-        archetypeDescriptor.setName( ad.getArtifactId() );
+        archetypeDescriptor.setName( project.getArtifactId() );
 
-        getLogger().debug( "Starting archetype's descriptor " + ad.getArtifactId() );
+        getLogger().debug( "Starting archetype's descriptor " + project.getArtifactId() );
 
         archetypeDescriptor.setPartial( partialArchetype );
 
@@ -307,7 +251,7 @@
 
         pomReversedProperties.remove( Constants.PACKAGE );
 
-        String packageName = ac.getProperty( Constants.PACKAGE );
+        String packageName = configurationProperties.getProperty( Constants.PACKAGE );
 
         try
         {
@@ -336,20 +280,9 @@
 
             getLogger().debug( "Created files for " + archetypeDescriptor.getName() );
 
-            if ( !ignoreReplica )
-            {
-                createReplicaFiles( filesets, basedir, replicaFilesDirectory );
-
-                getLogger().debug( "Created replica files for " + archetypeDescriptor.getName() );
-
-                FileUtils.copyFile( propertyFile, new File( replicaMainDirectory, "archetype.properties" ) );
-
-                new File( replicaMainDirectory, "goal.txt" ).createNewFile();
-            }
-
             setParentArtifactId(
                 reverseProperties,
-                ac.getProperty( Constants.ARTIFACT_ID )
+                configurationProperties.getProperty( Constants.ARTIFACT_ID )
             );
 
             Iterator modules = pom.getModules().iterator();
@@ -362,16 +295,14 @@
                 ModuleDescriptor moduleDescriptor =
                     createModule(
                         reverseProperties,
-                        ac.getProperty( Constants.ARTIFACT_ID ),
+                        configurationProperties.getProperty( Constants.ARTIFACT_ID ),
                         moduleId,
                         packageName,
                         FileUtils.resolveFile( basedir, moduleId ),
                         FileUtils.resolveFile( archetypeFilesDirectory, moduleId ),
-                        FileUtils.resolveFile( replicaFilesDirectory, moduleId ),
                         languages,
                         filtereds,
                         defaultEncoding,
-                        ignoreReplica,
                         preserveCData,
                         keepParent
                     );
@@ -385,19 +316,19 @@
             restoreParentArtifactId( reverseProperties, null );
             restoreArtifactId(
                 reverseProperties,
-                ac.getProperty( Constants.ARTIFACT_ID )
+                configurationProperties.getProperty( Constants.ARTIFACT_ID )
             );
 
-            createPoms( pom, ac.getProperty( Constants.ARTIFACT_ID ),
-                ac.getProperty( Constants.ARTIFACT_ID ),
+            createPoms( pom, configurationProperties.getProperty( Constants.ARTIFACT_ID ),
+                configurationProperties.getProperty( Constants.ARTIFACT_ID ),
                 archetypeFilesDirectory, basedir,
                 pomReversedProperties, preserveCData, keepParent );
 
-            getLogger().debug( "Created OldArchetype " + archetypeDescriptor.getName() + " pom" );
+            getLogger().debug( "Created Archetype " + archetypeDescriptor.getName() + " pom" );
 
             ArchetypeDescriptorXpp3Writer writer = new ArchetypeDescriptorXpp3Writer();
             writer.write( new FileWriter( archetypeDescriptorFile ), archetypeDescriptor );
-            getLogger().debug( "OldArchetype " + archetypeDescriptor.getName() + " descriptor written" );
+            getLogger().debug( "Archetype " + archetypeDescriptor.getName() + " descriptor written" );
 
             OldArchetypeDescriptor oldDescriptor =
                 convertToOldDescriptor( archetypeDescriptor.getName(), packageName, basedir );
@@ -409,7 +340,7 @@
             archetypeDescriptorFile.getParentFile().mkdirs();
             writeOldDescriptor( oldDescriptor, oldDescriptorFile );
             getLogger().debug(
-                "OldArchetype " + archetypeDescriptor.getName() + " old descriptor written"
+                "Archetype " + archetypeDescriptor.getName() + " old descriptor written"
             );
         }
         catch ( Exception e )
@@ -976,7 +907,7 @@
         IOException
     {
         getLogger().debug(
-            "Creating OldArchetype/Module files from " + basedir + " to " + archetypeFilesDirectory
+            "Creating Archetype/Module files from " + basedir + " to " + archetypeFilesDirectory
         );
 
         Iterator iterator = fileSets.iterator();
@@ -1093,7 +1024,7 @@
 
             if ( initialcontent.indexOf( "${" + property + "}" ) > 0 )
             {
-                getLogger().warn( "OldArchetype uses ${" + property +
+                getLogger().warn( "Archetype uses ${" + property +
                     "} for internal processing, but file " + initialPomFile +
                     " contains this property already" );
             }
@@ -1216,11 +1147,9 @@
         String packageName,
         File basedir,
         File archetypeFilesDirectory,
-        File replicaFilesDirectory,
         List languages,
         List filtereds,
         String defaultEncoding,
-        boolean ignoreReplica,
         boolean preserveCData,
         boolean keepParent
     )
@@ -1272,12 +1201,6 @@
         );
         getLogger().debug( "Created files for module " + archetypeDescriptor.getName() );
 
-        if ( !ignoreReplica )
-        {
-            createReplicaFiles( filesets, basedir, replicaFilesDirectory );
-            getLogger().debug( "Created replica files for " + archetypeDescriptor.getName() );
-        }
-
         String parentArtifactId = reverseProperties.getProperty( Constants.PARENT_ARTIFACT_ID );
         setParentArtifactId( reverseProperties, pom.getArtifactId() );
 
@@ -1296,11 +1219,9 @@
                     packageName,
                     FileUtils.resolveFile( basedir, subModuleId ),
                     FileUtils.resolveFile( archetypeFilesDirectory, subModuleId ),
-                    FileUtils.resolveFile( replicaFilesDirectory, subModuleId ),
                     languages,
                     filtereds,
                     defaultEncoding,
-                    ignoreReplica,
                     preserveCData,
                     keepParent
                 );
@@ -1685,13 +1606,6 @@
         }
 
         return unpackagedSources;
-    }
-
-    private String getReplicaOutputDirectory()
-    {
-        return
-            Constants.SRC + File.separator + Constants.TEST + File.separator + Constants.RESOURCES
-                + File.separator + "projects";
     }
 
     private Properties getRequiredProperties(

Modified: maven/archetype/trunk/archetype-common/src/test/java/org/apache/maven/archetype/creator/DefaultArchetypeCreatorTest.java
URL: http://svn.apache.org/viewvc/maven/archetype/trunk/archetype-common/src/test/java/org/apache/maven/archetype/creator/DefaultArchetypeCreatorTest.java?rev=633608&r1=633607&r2=633608&view=diff
==============================================================================
--- maven/archetype/trunk/archetype-common/src/test/java/org/apache/maven/archetype/creator/DefaultArchetypeCreatorTest.java (original)
+++ maven/archetype/trunk/archetype-common/src/test/java/org/apache/maven/archetype/creator/DefaultArchetypeCreatorTest.java Tue Mar  4 11:46:32 2008
@@ -137,7 +137,6 @@
             .setLanguages( languages )
             .setFiltereds( filtereds )
             .setDefaultEncoding( "UTF-8" )
-            .setIgnoreReplica( true )
             .setPartialArchetype( false )
             .setPreserveCData( false )
             .setKeepParent( false );

Modified: maven/archetype/trunk/archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/CreateArchetypeFromProjectMojo.java
URL: http://svn.apache.org/viewvc/maven/archetype/trunk/archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/CreateArchetypeFromProjectMojo.java?rev=633608&r1=633607&r2=633608&view=diff
==============================================================================
--- maven/archetype/trunk/archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/CreateArchetypeFromProjectMojo.java (original)
+++ maven/archetype/trunk/archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/CreateArchetypeFromProjectMojo.java Tue Mar  4 11:46:32 2008
@@ -1,225 +1,216 @@
-/*
- * 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.
- */
-
-package org.apache.maven.archetype.mojos;
-
-import org.apache.maven.archetype.ArchetypeCreationRequest;
-import org.apache.maven.archetype.ArchetypeCreationResult;
-import org.apache.maven.archetype.Archetype;
-import org.apache.maven.archetype.common.ArchetypeRegistryManager;
-import org.apache.maven.archetype.ui.ArchetypeCreationConfigurator;
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.plugin.AbstractMojo;
-import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugin.MojoFailureException;
-import org.apache.maven.project.MavenProject;
-
-import java.io.File;
-import java.util.List;
-
-/**
- * Creates sample archetype from current project.
- *
- * @author rafale
- * @requiresProject true
- * @goal create-from-project
- * @execute phase="generate-sources"
- * @aggregator
- */
-public class CreateArchetypeFromProjectMojo
-    extends AbstractMojo
-{
-    /** @component */
-    ArchetypeCreationConfigurator configurator;
-
-    /**
-     * Enable the interactive mode to define the archetype from the project.
-     *
-     * @parameter expression="${interactive}" default-value="false"
-     */
-    private boolean interactive;
-
-    /** @component */
-    ArchetypeRegistryManager archetypeRegistryManager;
-
-    /** @component */
-    Archetype archetype;
-
-    /**
-     * File extensions which are checked for project's text files (vs binary files).
-     *
-     * @parameter expression="${archetype.filteredExtentions}"
-     */
-    private String archetypeFilteredExtentions;
-
-    /**
-     * Directory names which are checked for project's sources main package.
-     *
-     * @parameter expression="${archetype.languages}"
-     */
-    private String archetypeLanguages;
-
-    /**
-     * The location of the registry file.
-     *
-     * @parameter expression="${user.home}/.m2/archetype.xml"
-     */
-    private File archetypeRegistryFile;
-
-    /**
-     * Velocity templates encoding.
-     *
-     * @parameter default-value="UTF-8" expression="${archetype.encoding}"
-     */
-    private String defaultEncoding;
-
-    /**
-     * Ignore the replica creation.
-     *
-     * @parameter expression="${archetype.ignoreReplica}"
-     */
-    private boolean ignoreReplica = true;
-
-    /**
-     * Create a partial archetype.
-     *
-     * @parameter expression="${archetype.partialArchetype}"
-     */
-    private boolean partialArchetype = false;
-
-    /**
-     * Create pom's velocity templates with CDATA preservasion. This uses the String replaceAll
-     * method and risk to have some overly replacement capabilities (beware of '1.0' value).
-     *
-     * @parameter expression="${archetype.preserveCData}"
-     */
-    private boolean preserveCData = false;
-
-    /** @parameter expression="${localRepository}" */
-    private ArtifactRepository localRepository;
-
-    /**
-     * Poms in archetype are created with their initial parent.
-     * This property is ignored when preserveCData is true.
-     *
-     * @parameter expression="${archetype.keepParent}"
-     */
-    private boolean keepParent = true;
-
-    /**
-     * The maven Project to create an archetype from.
-     *
-     * @parameter expression="${project}"
-     * @required
-     * @readonly
-     */
-    private MavenProject project;
-
-    /**
-     * The property file that holds the plugin configuration.
-     *
-     * @parameter default-value="target/archetype.properties" expression="${archetype.properties}"
-     */
-    private File propertyFile;
-
-    /** @parameter expression="${basedir}/target" */
-    private File outputDirectory;
-
-    /** @parameter expression="${testMode}" */
-    private boolean testMode;
-
-    /** @parameter expression="${packageName}" */
-    private String packageName;//Find a better way to resolve the package!!! enforce usage of the configurator
-
-    public void execute()
-        throws
-        MojoExecutionException,
-        MojoFailureException
-    {
-        try
-        {
-            if ( propertyFile != null )
-            {
-                propertyFile.getParentFile().mkdirs();
-            }
-
-            List languages = archetypeRegistryManager.getLanguages( archetypeLanguages, archetypeRegistryFile );
-
-            configurator.configureArchetypeCreation(
-                project,
-                new Boolean( interactive ),
-                System.getProperties(),
-                propertyFile,
-                languages
-            );
-
-            List filtereds =
-                archetypeRegistryManager.getFilteredExtensions(
-                    archetypeFilteredExtentions,
-                    archetypeRegistryFile
-                );
-
-            ArchetypeCreationRequest request = new ArchetypeCreationRequest()
-                .setProject( project )
-                /*Used when in interactive mode*/
-                .setPropertyFile( propertyFile )
-                .setLanguages( languages )
-                /*Should be refactored to use some ant patterns*/
-                .setFiltereds( filtereds )
-                /*Should be removed*/
-                .setIgnoreReplica( ignoreReplica )
-                /*This should be correctly handled*/
-                .setPreserveCData( preserveCData )
-                .setKeepParent( keepParent )
-                .setPartialArchetype( partialArchetype )
-                /*This should be used before there and use only languages and filtereds*/
-                .setArchetypeRegistryFile( archetypeRegistryFile )
-                .setLocalRepository( localRepository )
-                /*this should be resolved and asked for user to verify*/
-                .setPackageName(packageName);
-
-            ArchetypeCreationResult result = archetype.createArchetypeFromProject( request );
-
-            if ( result.getCause() != null )
-            {
-                throw new MojoExecutionException( result.getCause().getMessage(), result.getCause() );
-            }
-
-            getLog().info( "OldArchetype created in target/generated-sources/archetype" );
-
-            if ( testMode )
-            {
-                // Now here a properties file would be useful to write so that we could automate
-                // some functional tests where we string together an:
-                //
-                // archetype create from project -> deploy it into a test repo
-                // project create from archetype -> use the repository we deployed to archetype to
-                // generate
-                // test the output
-                //
-                // This of course would be strung together from the outside.
-            }
-
-        }
-        catch ( Exception ex )
-        {
-            throw new MojoExecutionException( ex.getMessage(), ex );
-        }
-    }
-}
+/*
+ * 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.
+ */
+
+package org.apache.maven.archetype.mojos;
+
+import org.apache.maven.archetype.ArchetypeCreationRequest;
+import org.apache.maven.archetype.ArchetypeCreationResult;
+import org.apache.maven.archetype.Archetype;
+import org.apache.maven.archetype.common.ArchetypeRegistryManager;
+import org.apache.maven.archetype.ui.ArchetypeCreationConfigurator;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.project.MavenProject;
+
+import java.io.File;
+import java.util.List;
+
+/**
+ * Creates sample archetype from current project.
+ *
+ * @author rafale
+ * @requiresProject true
+ * @goal create-from-project
+ * @execute phase="generate-sources"
+ * @aggregator
+ */
+public class CreateArchetypeFromProjectMojo
+    extends AbstractMojo
+{
+    /** @component */
+    ArchetypeCreationConfigurator configurator;
+
+    /**
+     * Enable the interactive mode to define the archetype from the project.
+     *
+     * @parameter expression="${interactive}" default-value="false"
+     */
+    private boolean interactive;
+
+    /** @component */
+    ArchetypeRegistryManager archetypeRegistryManager;
+
+    /** @component */
+    Archetype archetype;
+
+    /**
+     * File extensions which are checked for project's text files (vs binary files).
+     *
+     * @parameter expression="${archetype.filteredExtentions}"
+     */
+    private String archetypeFilteredExtentions;
+
+    /**
+     * Directory names which are checked for project's sources main package.
+     *
+     * @parameter expression="${archetype.languages}"
+     */
+    private String archetypeLanguages;
+
+    /**
+     * The location of the registry file.
+     *
+     * @parameter expression="${user.home}/.m2/archetype.xml"
+     */
+    private File archetypeRegistryFile;
+
+    /**
+     * Velocity templates encoding.
+     *
+     * @parameter default-value="UTF-8" expression="${archetype.encoding}"
+     */
+    private String defaultEncoding;
+
+    /**
+     * Create a partial archetype.
+     *
+     * @parameter expression="${archetype.partialArchetype}"
+     */
+    private boolean partialArchetype = false;
+
+    /**
+     * Create pom's velocity templates with CDATA preservasion. This uses the String replaceAll
+     * method and risk to have some overly replacement capabilities (beware of '1.0' value).
+     *
+     * @parameter expression="${archetype.preserveCData}"
+     */
+    private boolean preserveCData = false;
+
+    /** @parameter expression="${localRepository}" */
+    private ArtifactRepository localRepository;
+
+    /**
+     * Poms in archetype are created with their initial parent.
+     * This property is ignored when preserveCData is true.
+     *
+     * @parameter expression="${archetype.keepParent}"
+     */
+    private boolean keepParent = true;
+
+    /**
+     * The maven Project to create an archetype from.
+     *
+     * @parameter expression="${project}"
+     * @required
+     * @readonly
+     */
+    private MavenProject project;
+
+    /**
+     * The property file that holds the plugin configuration.
+     *
+     * @parameter default-value="target/archetype.properties" expression="${archetype.properties}"
+     */
+    private File propertyFile;
+
+    /** @parameter expression="${basedir}/target" */
+    private File outputDirectory;
+
+    /** @parameter expression="${testMode}" */
+    private boolean testMode;
+
+    /** @parameter expression="${packageName}" */
+    private String packageName;//Find a better way to resolve the package!!! enforce usage of the configurator
+
+    public void execute()
+        throws
+        MojoExecutionException,
+        MojoFailureException
+    {
+        try
+        {
+            if ( propertyFile != null )
+            {
+                propertyFile.getParentFile().mkdirs();
+            }
+
+            List languages = archetypeRegistryManager.getLanguages( archetypeLanguages, archetypeRegistryFile );
+
+            configurator.configureArchetypeCreation(
+                project,
+                new Boolean( interactive ),
+                System.getProperties(),
+                propertyFile,
+                languages
+            );
+
+            List filtereds =
+                archetypeRegistryManager.getFilteredExtensions(
+                    archetypeFilteredExtentions,
+                    archetypeRegistryFile
+                );
+
+            ArchetypeCreationRequest request = new ArchetypeCreationRequest()
+                .setProject( project )
+                /*Used when in interactive mode*/
+                .setPropertyFile( propertyFile )
+                .setLanguages( languages )
+                /*Should be refactored to use some ant patterns*/
+                .setFiltereds( filtereds )
+                /*This should be correctly handled*/
+                .setPreserveCData( preserveCData )
+                .setKeepParent( keepParent )
+                .setPartialArchetype( partialArchetype )
+                /*This should be used before there and use only languages and filtereds*/
+                .setArchetypeRegistryFile( archetypeRegistryFile )
+                .setLocalRepository( localRepository )
+                /*this should be resolved and asked for user to verify*/
+                .setPackageName(packageName);
+
+            ArchetypeCreationResult result = archetype.createArchetypeFromProject( request );
+
+            if ( result.getCause() != null )
+            {
+                throw new MojoExecutionException( result.getCause().getMessage(), result.getCause() );
+            }
+
+            getLog().info( "OldArchetype created in target/generated-sources/archetype" );
+
+            if ( testMode )
+            {
+                // Now here a properties file would be useful to write so that we could automate
+                // some functional tests where we string together an:
+                //
+                // archetype create from project -> deploy it into a test repo
+                // project create from archetype -> use the repository we deployed to archetype to
+                // generate
+                // test the output
+                //
+                // This of course would be strung together from the outside.
+            }
+
+        }
+        catch ( Exception ex )
+        {
+            throw new MojoExecutionException( ex.getMessage(), ex );
+        }
+    }
+}