Return-Path: Delivered-To: apmail-maven-commits-archive@www.apache.org Received: (qmail 2659 invoked from network); 6 Jul 2007 16:36:41 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 6 Jul 2007 16:36:41 -0000 Received: (qmail 39516 invoked by uid 500); 6 Jul 2007 16:36:39 -0000 Delivered-To: apmail-maven-commits-archive@maven.apache.org Received: (qmail 39463 invoked by uid 500); 6 Jul 2007 16:36:39 -0000 Mailing-List: contact commits-help@maven.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@maven.apache.org Delivered-To: mailing list commits@maven.apache.org Received: (qmail 39324 invoked by uid 99); 6 Jul 2007 16:36:39 -0000 Received: from herse.apache.org (HELO herse.apache.org) (140.211.11.133) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 06 Jul 2007 09:36:38 -0700 X-ASF-Spam-Status: No, hits=-99.5 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO eris.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 06 Jul 2007 09:36:26 -0700 Received: by eris.apache.org (Postfix, from userid 65534) id C56401A9868; Fri, 6 Jul 2007 09:35:40 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r553946 [13/19] - in /maven/archetype/branches/maven-archetypeng: ./ maven-archetypeng-bundles/ maven-archetypeng-bundles/maven-archetypeng-archetype/ maven-archetypeng-bundles/maven-archetypeng-archetype/src/ maven-archetypeng-bundles/mave... Date: Fri, 06 Jul 2007 16:35:16 -0000 To: commits@maven.apache.org From: jvanzyl@apache.org X-Mailer: svnmailer-1.1.0 Message-Id: <20070706163540.C56401A9868@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Added: maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/pom.xml URL: http://svn.apache.org/viewvc/maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/pom.xml?view=auto&rev=553946 ============================================================================== --- maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/pom.xml (added) +++ maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/pom.xml Fri Jul 6 09:34:35 2007 @@ -0,0 +1,239 @@ + + + + + 4.0.0 + + + org.codehaus.mojo.archetypeng + maven-archetypeng-core + 1.0-SNAPSHOT + + + maven-archetypeng-generator + + Maven ArchetypeNG Generator + jar + + + + org.codehaus.mojo.archetypeng + maven-archetypeng-common + + + org.codehaus.plexus + plexus-velocity + + + org.apache.maven.shared + maven-plugin-testing-harness + test + + + org.apache.maven.archetype + maven-archetype-core + + + org.codehaus.plexus + plexus-interactivity-api + + + velocity + velocity + + + org.codehaus.plexus + plexus-utils + + + dom4j + dom4j + + + org.apache.maven + maven-artifact + + + org.apache.maven + maven-artifact-manager + + + org.apache.maven + maven-model + + + org.codehaus.mojo.archetypeng + maven-archetypeng-archetype-descriptor + + + org.codehaus.plexus + plexus-container-default + + + + + + + + org.apache.maven.plugins + maven-antrun-plugin + + + ant + ant-antlr + 1.6.5 + + + + + + archetype-test + process-test-resources + + + + + + + + + + + + + + + + run + + + + + archetype-test-partial + process-test-resources + + + + + + + + + + + + + + + run + + + + + archetype-test-site + process-test-resources + + + + + + + + + + + + + + + + run + + + + + archetype-test-old + process-test-resources + + + + + + + + + + + + + + + + run + + + + + archetype-test-fileset + process-test-resources + + + + + + + + + + + + + + + + run + + + + + repository-metadata + process-test-resources + + + + + + + + + + + + + + + run + + + + + + + Propchange: maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/pom.xml ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/pom.xml ------------------------------------------------------------------------------ svn:keywords = "Author Date Id Revision" Added: maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/src/main/java/org/codehaus/mojo/archetypeng/generator/ArchetypeGenerationConfigurator.java URL: http://svn.apache.org/viewvc/maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/src/main/java/org/codehaus/mojo/archetypeng/generator/ArchetypeGenerationConfigurator.java?view=auto&rev=553946 ============================================================================== --- maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/src/main/java/org/codehaus/mojo/archetypeng/generator/ArchetypeGenerationConfigurator.java (added) +++ maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/src/main/java/org/codehaus/mojo/archetypeng/generator/ArchetypeGenerationConfigurator.java Fri Jul 6 09:34:35 2007 @@ -0,0 +1,54 @@ +/* + * 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.codehaus.mojo.archetypeng.generator; + +import org.apache.maven.artifact.repository.ArtifactRepository; + +import org.codehaus.mojo.archetypeng.exception.ArchetypeGenerationConfigurationFailure; +import org.codehaus.mojo.archetypeng.exception.ArchetypeNotConfigured; +import org.codehaus.mojo.archetypeng.exception.ArchetypeNotDefined; +import org.codehaus.mojo.archetypeng.exception.UnknownArchetype; + +import org.codehaus.plexus.components.interactivity.PrompterException; + +import java.io.File; +import java.io.IOException; + +import java.util.List; +import java.util.Properties; + +public interface ArchetypeGenerationConfigurator +{ + String ROLE = ArchetypeGenerationConfigurator.class.getName (); + + void configureArchetype ( + Boolean interactiveMode, + File propertyFile, + Properties commandLineProperties, + ArtifactRepository localRepository, + List repositories + ) + throws ArchetypeNotDefined, + UnknownArchetype, + ArchetypeNotConfigured, + IOException, + PrompterException, + ArchetypeGenerationConfigurationFailure; +} Propchange: maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/src/main/java/org/codehaus/mojo/archetypeng/generator/ArchetypeGenerationConfigurator.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/src/main/java/org/codehaus/mojo/archetypeng/generator/ArchetypeGenerationConfigurator.java ------------------------------------------------------------------------------ svn:keywords = "Author Date Id Revision" Added: maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/src/main/java/org/codehaus/mojo/archetypeng/generator/ArchetypeGenerationQueryer.java URL: http://svn.apache.org/viewvc/maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/src/main/java/org/codehaus/mojo/archetypeng/generator/ArchetypeGenerationQueryer.java?view=auto&rev=553946 ============================================================================== --- maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/src/main/java/org/codehaus/mojo/archetypeng/generator/ArchetypeGenerationQueryer.java (added) +++ maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/src/main/java/org/codehaus/mojo/archetypeng/generator/ArchetypeGenerationQueryer.java Fri Jul 6 09:34:35 2007 @@ -0,0 +1,37 @@ +/* + * 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.codehaus.mojo.archetypeng.generator; + +import org.codehaus.mojo.archetypeng.ArchetypeConfiguration; + +import org.codehaus.plexus.components.interactivity.PrompterException; + +public interface ArchetypeGenerationQueryer +{ + /** + */ + boolean confirmConfiguration ( ArchetypeConfiguration archetypeConfiguration ) + throws PrompterException; + + /** + */ + String getPropertyValue ( String requiredProperty, String defaultValue ) + throws PrompterException; +} Propchange: maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/src/main/java/org/codehaus/mojo/archetypeng/generator/ArchetypeGenerationQueryer.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/src/main/java/org/codehaus/mojo/archetypeng/generator/ArchetypeGenerationQueryer.java ------------------------------------------------------------------------------ svn:keywords = "Author Date Id Revision" Added: maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/src/main/java/org/codehaus/mojo/archetypeng/generator/ArchetypeGenerator.java URL: http://svn.apache.org/viewvc/maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/src/main/java/org/codehaus/mojo/archetypeng/generator/ArchetypeGenerator.java?view=auto&rev=553946 ============================================================================== --- maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/src/main/java/org/codehaus/mojo/archetypeng/generator/ArchetypeGenerator.java (added) +++ maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/src/main/java/org/codehaus/mojo/archetypeng/generator/ArchetypeGenerator.java Fri Jul 6 09:34:35 2007 @@ -0,0 +1,65 @@ +/* + * 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.codehaus.mojo.archetypeng.generator; + +import org.apache.maven.artifact.repository.ArtifactRepository; + +import org.codehaus.mojo.archetypeng.exception.ArchetypeGenerationFailure; +import org.codehaus.mojo.archetypeng.exception.ArchetypeNotConfigured; +import org.codehaus.mojo.archetypeng.exception.ArchetypeNotDefined; +import org.codehaus.mojo.archetypeng.exception.InvalidPackaging; +import org.codehaus.mojo.archetypeng.exception.OutputFileExists; +import org.codehaus.mojo.archetypeng.exception.PomFileExists; +import org.codehaus.mojo.archetypeng.exception.ProjectDirectoryExists; +import org.codehaus.mojo.archetypeng.exception.UnknownArchetype; + +import org.codehaus.plexus.util.xml.pull.XmlPullParserException; + +import org.dom4j.DocumentException; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; + +import java.util.List; + +public interface ArchetypeGenerator +{ + String ROLE = ArchetypeGenerator.class.getName (); + + void generateArchetype ( + File propertyFile, + ArtifactRepository localRepository, + List repositories, + String basedir + ) + throws IOException, + ArchetypeNotDefined, + UnknownArchetype, + ArchetypeNotConfigured, + ProjectDirectoryExists, + PomFileExists, + OutputFileExists, + FileNotFoundException, + XmlPullParserException, + DocumentException, + InvalidPackaging, + ArchetypeGenerationFailure; +} Propchange: maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/src/main/java/org/codehaus/mojo/archetypeng/generator/ArchetypeGenerator.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/src/main/java/org/codehaus/mojo/archetypeng/generator/ArchetypeGenerator.java ------------------------------------------------------------------------------ svn:keywords = "Author Date Id Revision" Added: maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/src/main/java/org/codehaus/mojo/archetypeng/generator/ArchetypeSelectionQueryer.java URL: http://svn.apache.org/viewvc/maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/src/main/java/org/codehaus/mojo/archetypeng/generator/ArchetypeSelectionQueryer.java?view=auto&rev=553946 ============================================================================== --- maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/src/main/java/org/codehaus/mojo/archetypeng/generator/ArchetypeSelectionQueryer.java (added) +++ maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/src/main/java/org/codehaus/mojo/archetypeng/generator/ArchetypeSelectionQueryer.java Fri Jul 6 09:34:35 2007 @@ -0,0 +1,52 @@ +/* + * 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.codehaus.mojo.archetypeng.generator; + +import org.codehaus.mojo.archetypeng.Archetype; +import org.codehaus.mojo.archetypeng.ArchetypeDefinition; + +import org.codehaus.plexus.components.interactivity.PrompterException; + +import java.util.List; + +public interface ArchetypeSelectionQueryer +{ + String ROLE = ArchetypeSelectionQueryer.class.getName (); + + /** + */ + boolean confirmSelection ( ArchetypeDefinition archetypeDefinition ) + throws PrompterException; + + /** + */ + Archetype selectArtifact ( List list ) + throws PrompterException; + + /** + */ + String selectGroup ( List list ) + throws PrompterException; + + /** + */ + String selectVersion ( List list ) + throws PrompterException; +} Propchange: maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/src/main/java/org/codehaus/mojo/archetypeng/generator/ArchetypeSelectionQueryer.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/src/main/java/org/codehaus/mojo/archetypeng/generator/ArchetypeSelectionQueryer.java ------------------------------------------------------------------------------ svn:keywords = "Author Date Id Revision" Added: maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/src/main/java/org/codehaus/mojo/archetypeng/generator/ArchetypeSelector.java URL: http://svn.apache.org/viewvc/maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/src/main/java/org/codehaus/mojo/archetypeng/generator/ArchetypeSelector.java?view=auto&rev=553946 ============================================================================== --- maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/src/main/java/org/codehaus/mojo/archetypeng/generator/ArchetypeSelector.java (added) +++ maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/src/main/java/org/codehaus/mojo/archetypeng/generator/ArchetypeSelector.java Fri Jul 6 09:34:35 2007 @@ -0,0 +1,56 @@ +/* + * 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.codehaus.mojo.archetypeng.generator; + +import org.apache.maven.artifact.repository.ArtifactRepository; + +import org.codehaus.mojo.archetypeng.exception.ArchetypeNotDefined; +import org.codehaus.mojo.archetypeng.exception.ArchetypeSelectionFailure; +import org.codehaus.mojo.archetypeng.exception.UnknownArchetype; + +import org.codehaus.plexus.components.interactivity.PrompterException; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; + +import java.util.List; + +public interface ArchetypeSelector +{ + String ROLE = ArchetypeSelector.class.getName (); + + void selectArchetype ( + String archetypeGroupId, + String archetypeArtifactId, + String archetypeVersion, + Boolean interactiveMode, + File propertyFile, + File archetypeRegistryFile, + ArtifactRepository localRepository, + List repositories + ) + throws ArchetypeNotDefined, + UnknownArchetype, + IOException, + FileNotFoundException, + PrompterException, + ArchetypeSelectionFailure; +} Propchange: maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/src/main/java/org/codehaus/mojo/archetypeng/generator/ArchetypeSelector.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/src/main/java/org/codehaus/mojo/archetypeng/generator/ArchetypeSelector.java ------------------------------------------------------------------------------ svn:keywords = "Author Date Id Revision" Added: maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/src/main/java/org/codehaus/mojo/archetypeng/generator/DefaultArchetypeGenerationConfigurator.java URL: http://svn.apache.org/viewvc/maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/src/main/java/org/codehaus/mojo/archetypeng/generator/DefaultArchetypeGenerationConfigurator.java?view=auto&rev=553946 ============================================================================== --- maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/src/main/java/org/codehaus/mojo/archetypeng/generator/DefaultArchetypeGenerationConfigurator.java (added) +++ maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/src/main/java/org/codehaus/mojo/archetypeng/generator/DefaultArchetypeGenerationConfigurator.java Fri Jul 6 09:34:35 2007 @@ -0,0 +1,250 @@ +/* + * 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.codehaus.mojo.archetypeng.generator; + +import org.apache.maven.archetype.Archetype; +import org.apache.maven.artifact.repository.ArtifactRepository; + +import org.codehaus.mojo.archetypeng.ArchetypeArtifactManager; +import org.codehaus.mojo.archetypeng.ArchetypeConfiguration; +import org.codehaus.mojo.archetypeng.ArchetypeDefinition; +import org.codehaus.mojo.archetypeng.ArchetypeFactory; +import org.codehaus.mojo.archetypeng.ArchetypePropertiesManager; +import org.codehaus.mojo.archetypeng.exception.ArchetypeGenerationConfigurationFailure; +import org.codehaus.mojo.archetypeng.exception.ArchetypeNotConfigured; +import org.codehaus.mojo.archetypeng.exception.ArchetypeNotDefined; +import org.codehaus.mojo.archetypeng.exception.UnknownArchetype; + +import org.codehaus.plexus.components.interactivity.PrompterException; +import org.codehaus.plexus.logging.AbstractLogEnabled; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Properties; + +/** + * @plexus.component + */ +public class DefaultArchetypeGenerationConfigurator +extends AbstractLogEnabled +implements ArchetypeGenerationConfigurator +{ + /** + * @plexus.requirement + */ + Archetype oldArchetype; + /** + * @plexus.requirement + */ + private ArchetypeArtifactManager archetypeArtifactManager; + + /** + * @plexus.requirement + */ + private ArchetypeFactory archetypeFactory; + + /** + * @plexus.requirement + */ + private ArchetypeGenerationQueryer archetypeGenerationQueryer; + + /** + * @plexus.requirement + */ + private ArchetypePropertiesManager archetypePropertiesManager; + + public void configureArchetype ( + Boolean interactiveMode, + File propertyFile, + Properties commandLineProperties, + ArtifactRepository localRepository, + List repositories + ) + throws ArchetypeNotDefined, + UnknownArchetype, + ArchetypeNotConfigured, + IOException, + PrompterException, + ArchetypeGenerationConfigurationFailure + { + Properties properties = + initialiseArchetypeProperties ( commandLineProperties, propertyFile ); + + ArchetypeDefinition archetypeDefinition = + archetypeFactory.createArchetypeDefinition ( properties ); + + if ( !archetypeDefinition.isDefined () ) + { + throw new ArchetypeNotDefined ( "The archetype is not defined" ); + } + + if ( !archetypeArtifactManager.exists ( + archetypeDefinition.getGroupId (), + archetypeDefinition.getArtifactId (), + archetypeDefinition.getVersion (), + localRepository, + repositories + ) + ) + { + throw new UnknownArchetype ( + "The desired archetype does not exist (" + archetypeDefinition.getGroupId () + ":" + + archetypeDefinition.getArtifactId () + ":" + archetypeDefinition.getVersion () + + ")" + ); + } + + ArchetypeConfiguration archetypeConfiguration; + + if ( archetypeArtifactManager.isOldArchetype ( + archetypeDefinition.getGroupId (), + archetypeDefinition.getArtifactId (), + archetypeDefinition.getVersion (), + localRepository, + repositories + ) + ) + { + org.apache.maven.archetype.descriptor.ArchetypeDescriptor archetypeDescriptor = + archetypeArtifactManager.getOldArchetypeDescriptor ( + archetypeDefinition.getGroupId (), + archetypeDefinition.getArtifactId (), + archetypeDefinition.getVersion (), + localRepository, + repositories + ); + archetypeConfiguration = + archetypeFactory.createArchetypeConfiguration ( archetypeDescriptor, properties ); + } + else if ( + archetypeArtifactManager.isFileSetArchetype ( + archetypeDefinition.getGroupId (), + archetypeDefinition.getArtifactId (), + archetypeDefinition.getVersion (), + localRepository, + repositories + ) + ) + { + org.codehaus.mojo.archetypeng.archetype.filesets.ArchetypeDescriptor archetypeDescriptor = + archetypeArtifactManager.getFileSetArchetypeDescriptor ( + archetypeDefinition.getGroupId (), + archetypeDefinition.getArtifactId (), + archetypeDefinition.getVersion (), + localRepository, + repositories + ); + archetypeConfiguration = + archetypeFactory.createArchetypeConfiguration ( archetypeDescriptor, properties ); + } + else + { + throw new ArchetypeGenerationConfigurationFailure ( + "The defined artifact is not an archetype" + ); + } + + if ( interactiveMode.booleanValue () ) + { + boolean confirmed = false; + while ( !confirmed ) + { + if ( !archetypeConfiguration.isConfigured () ) + { + Iterator requiredProperties = + archetypeConfiguration.getRequiredProperties ().iterator (); + + while ( requiredProperties.hasNext () ) + { + String requiredProperty = (String) requiredProperties.next (); + + if ( !archetypeConfiguration.isConfigured ( requiredProperty ) ) + { + archetypeConfiguration.setProperty ( + requiredProperty, + archetypeGenerationQueryer.getPropertyValue ( + requiredProperty, + archetypeConfiguration.getDefaultValue ( requiredProperty ) + ) + ); + } + } + } + if ( !archetypeConfiguration.isConfigured () ) + { + throw new ArchetypeGenerationConfigurationFailure ( + "The archetype generation must be configured here" + ); + } + else if ( + !archetypeGenerationQueryer.confirmConfiguration ( archetypeConfiguration ) + ) + { + getLogger ().debug ( "Archetype generation configuration not confirmed" ); + archetypeConfiguration.reset (); + } + else + { + getLogger ().debug ( "Archetype generation configuration confirmed" ); + confirmed = true; + } + } // end while + } + else + { + if ( !archetypeConfiguration.isConfigured () ) + { + throw new ArchetypeNotConfigured ( "The archetype is not configurated" ); + } + } + + archetypePropertiesManager.writeProperties ( + archetypeConfiguration.toProperties (), + propertyFile + ); + } + + private Properties initialiseArchetypeProperties ( + Properties commandLineProperties, + File propertyFile + ) + throws FileNotFoundException, IOException + { + Properties properties = new Properties (); + archetypePropertiesManager.readProperties ( properties, propertyFile ); + + Iterator commandLinePropertiesIterator = + new ArrayList ( commandLineProperties.keySet () ).iterator (); + while ( commandLinePropertiesIterator.hasNext () ) + { + String propertyKey = (String) commandLinePropertiesIterator.next (); + properties.setProperty ( + propertyKey, + commandLineProperties.getProperty ( propertyKey ) + ); + } + return properties; + } +} Propchange: maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/src/main/java/org/codehaus/mojo/archetypeng/generator/DefaultArchetypeGenerationConfigurator.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/src/main/java/org/codehaus/mojo/archetypeng/generator/DefaultArchetypeGenerationConfigurator.java ------------------------------------------------------------------------------ svn:keywords = "Author Date Id Revision" Added: maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/src/main/java/org/codehaus/mojo/archetypeng/generator/DefaultArchetypeGenerationQueryer.java URL: http://svn.apache.org/viewvc/maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/src/main/java/org/codehaus/mojo/archetypeng/generator/DefaultArchetypeGenerationQueryer.java?view=auto&rev=553946 ============================================================================== --- maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/src/main/java/org/codehaus/mojo/archetypeng/generator/DefaultArchetypeGenerationQueryer.java (added) +++ maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/src/main/java/org/codehaus/mojo/archetypeng/generator/DefaultArchetypeGenerationQueryer.java Fri Jul 6 09:34:35 2007 @@ -0,0 +1,77 @@ +/* + * 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.codehaus.mojo.archetypeng.generator; + +import org.codehaus.mojo.archetypeng.ArchetypeConfiguration; + +import org.codehaus.plexus.components.interactivity.Prompter; +import org.codehaus.plexus.components.interactivity.PrompterException; +import org.codehaus.plexus.logging.AbstractLogEnabled; + +import java.util.Iterator; + +/** + * @plexus.component + */ +public class DefaultArchetypeGenerationQueryer +extends AbstractLogEnabled +implements ArchetypeGenerationQueryer +{ + /** + * @plexus.requirement + */ + private Prompter prompter; + + public boolean confirmConfiguration ( ArchetypeConfiguration archetypeConfiguration ) + throws PrompterException + { + String query = "Confirm properties configuration:\n"; + + Iterator requiredPropertiesIter = + archetypeConfiguration.getRequiredProperties ().iterator (); + + while ( requiredPropertiesIter.hasNext () ) + { + String property = (String) requiredPropertiesIter.next (); + query += property + ": " + archetypeConfiguration.getProperty ( property ) + "\n"; + } + + String answer = prompter.prompt ( query, "Y" ); + + return "Y".equalsIgnoreCase ( answer ); + } + + public String getPropertyValue ( String requiredProperty, String defaultValue ) + throws PrompterException + { + String query = "Define value for " + requiredProperty + ": "; + String answer; + + if ( ( defaultValue != null ) && !defaultValue.equals ( "null" ) ) + { + answer = prompter.prompt ( query, defaultValue ); + } + else + { + answer = prompter.prompt ( query ); + } + return answer; + } +} Propchange: maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/src/main/java/org/codehaus/mojo/archetypeng/generator/DefaultArchetypeGenerationQueryer.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/src/main/java/org/codehaus/mojo/archetypeng/generator/DefaultArchetypeGenerationQueryer.java ------------------------------------------------------------------------------ svn:keywords = "Author Date Id Revision" Added: maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/src/main/java/org/codehaus/mojo/archetypeng/generator/DefaultArchetypeGenerator.java URL: http://svn.apache.org/viewvc/maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/src/main/java/org/codehaus/mojo/archetypeng/generator/DefaultArchetypeGenerator.java?view=auto&rev=553946 ============================================================================== --- maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/src/main/java/org/codehaus/mojo/archetypeng/generator/DefaultArchetypeGenerator.java (added) +++ maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/src/main/java/org/codehaus/mojo/archetypeng/generator/DefaultArchetypeGenerator.java Fri Jul 6 09:34:35 2007 @@ -0,0 +1,298 @@ +/* + * 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.codehaus.mojo.archetypeng.generator; + +import org.apache.maven.archetype.Archetype; +import org.apache.maven.archetype.ArchetypeDescriptorException; +import org.apache.maven.archetype.ArchetypeNotFoundException; +import org.apache.maven.archetype.ArchetypeTemplateProcessingException; +import org.apache.maven.artifact.repository.ArtifactRepository; + +import org.codehaus.mojo.archetypeng.ArchetypeArtifactManager; +import org.codehaus.mojo.archetypeng.ArchetypeConfiguration; +import org.codehaus.mojo.archetypeng.ArchetypeDefinition; +import org.codehaus.mojo.archetypeng.ArchetypeFactory; +import org.codehaus.mojo.archetypeng.ArchetypePropertiesManager; +import org.codehaus.mojo.archetypeng.Constants; +import org.codehaus.mojo.archetypeng.exception.ArchetypeGenerationFailure; +import org.codehaus.mojo.archetypeng.exception.ArchetypeNotConfigured; +import org.codehaus.mojo.archetypeng.exception.ArchetypeNotDefined; +import org.codehaus.mojo.archetypeng.exception.InvalidPackaging; +import org.codehaus.mojo.archetypeng.exception.OutputFileExists; +import org.codehaus.mojo.archetypeng.exception.PomFileExists; +import org.codehaus.mojo.archetypeng.exception.ProjectDirectoryExists; +import org.codehaus.mojo.archetypeng.exception.UnknownArchetype; + +import org.codehaus.plexus.logging.AbstractLogEnabled; +import org.codehaus.plexus.util.StringUtils; +import org.codehaus.plexus.util.xml.pull.XmlPullParserException; + +import org.dom4j.DocumentException; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Properties; + +/** + * @plexus.component + */ +public class DefaultArchetypeGenerator +extends AbstractLogEnabled +implements ArchetypeGenerator +{ + /** + * @plexus.requirement + */ + private ArchetypeArtifactManager archetypeArtifactManager; + + /** + * @plexus.requirement + */ + private ArchetypeFactory archetypeFactory; + + /** + * @plexus.requirement + */ + private ArchetypePropertiesManager archetypePropertiesManager; + + /** + * @plexus.requirement + */ + private FilesetArchetypeGenerator filesetGenerator; + /** + * @plexus.requirement + */ + private Archetype oldArchetype; + + public void generateArchetype ( + File propertyFile, + ArtifactRepository localRepository, + List repositories, + String basedir + ) + throws IOException, + ArchetypeNotDefined, + UnknownArchetype, + ArchetypeNotConfigured, + ProjectDirectoryExists, + PomFileExists, + OutputFileExists, + FileNotFoundException, + XmlPullParserException, + DocumentException, + InvalidPackaging, + ArchetypeGenerationFailure + { + Properties properties = initialiseArchetypeProperties ( propertyFile ); + + ArchetypeDefinition archetypeDefinition = + archetypeFactory.createArchetypeDefinition ( properties ); + + if ( !archetypeDefinition.isDefined () ) + { + throw new ArchetypeNotDefined ( "The archetype is not defined" ); + } + + if ( !archetypeArtifactManager.exists ( + archetypeDefinition.getGroupId (), + archetypeDefinition.getArtifactId (), + archetypeDefinition.getVersion (), + localRepository, + repositories + ) + ) + { + throw new UnknownArchetype ( + "The desired archetype does not exist (" + archetypeDefinition.getGroupId () + ":" + + archetypeDefinition.getArtifactId () + ":" + archetypeDefinition.getVersion () + + ")" + ); + } + + if ( archetypeArtifactManager.isFileSetArchetype ( + archetypeDefinition.getGroupId (), + archetypeDefinition.getArtifactId (), + archetypeDefinition.getVersion (), + localRepository, + repositories + ) + ) + { + processFileSetArchetype ( + properties, + localRepository, + basedir, + repositories, + archetypeDefinition + ); + } + else if ( + archetypeArtifactManager.isOldArchetype ( + archetypeDefinition.getGroupId (), + archetypeDefinition.getArtifactId (), + archetypeDefinition.getVersion (), + localRepository, + repositories + ) + ) + { + processOldArchetype ( + localRepository, + properties, + basedir, + archetypeDefinition, + repositories + ); + } + else + { + throw new ArchetypeGenerationFailure ( "The defined artifact is not an archetype" ); + } + } + + /**Common*/ + public String getPackageAsDirectory ( String packageName ) + { + return StringUtils.replace ( packageName, ".", "/" ); + } + + /**Common*/ + private Properties initialiseArchetypeProperties ( File propertyFile ) + throws IOException + { + Properties properties = new Properties (); + archetypePropertiesManager.readProperties ( properties, propertyFile ); + return properties; + } + + /**FileSetArchetype*/ + private void processFileSetArchetype ( + final Properties properties, + final ArtifactRepository localRepository, + final String basedir, + final List repositories, + final ArchetypeDefinition archetypeDefinition + ) + throws UnknownArchetype, + ArchetypeNotConfigured, + ProjectDirectoryExists, + PomFileExists, + OutputFileExists, + ArchetypeGenerationFailure + { + File archetypeFile = + archetypeArtifactManager.getArchetypeFile ( + archetypeDefinition.getGroupId (), + archetypeDefinition.getArtifactId (), + archetypeDefinition.getVersion (), + localRepository, + repositories + ); + + filesetGenerator.generateArchetype ( properties, archetypeFile, basedir ); + } + + /**OldArchetype*/ + private void processOldArchetype ( + final ArtifactRepository localRepository, + final Properties properties, + final String basedir, + final ArchetypeDefinition archetypeDefinition, + final List repositories + ) + throws UnknownArchetype, ArchetypeGenerationFailure + { + ArchetypeConfiguration archetypeConfiguration; + + org.apache.maven.archetype.descriptor.ArchetypeDescriptor archetypeDescriptor = + archetypeArtifactManager.getOldArchetypeDescriptor ( + archetypeDefinition.getGroupId (), + archetypeDefinition.getArtifactId (), + archetypeDefinition.getVersion (), + localRepository, + repositories + ); + archetypeConfiguration = + archetypeFactory.createArchetypeConfiguration ( archetypeDescriptor, properties ); + + Map map = new HashMap (); + + map.put ( "basedir", basedir ); + + map.put ( + "package", + archetypeConfiguration.getProperties ().getProperty ( Constants.PACKAGE ) + ); + + map.put ( + "packageName", + archetypeConfiguration.getProperties ().getProperty ( Constants.PACKAGE ) + ); + + map.put ( + "groupId", + archetypeConfiguration.getProperties ().getProperty ( Constants.GROUP_ID ) + ); + + map.put ( + "artifactId", + archetypeConfiguration.getProperties ().getProperty ( Constants.ARTIFACT_ID ) + ); + + map.put ( + "version", + archetypeConfiguration.getProperties ().getProperty ( Constants.VERSION ) + ); + try + { + oldArchetype.createArchetype ( + archetypeDefinition.getGroupId (), + archetypeDefinition.getArtifactId (), + archetypeDefinition.getVersion (), + localRepository, + repositories, + map + ); + } + catch ( ArchetypeDescriptorException ex ) + { + throw new ArchetypeGenerationFailure ( + "Failed to generate project from the old archetype" + ); + } + catch ( ArchetypeTemplateProcessingException ex ) + { + throw new ArchetypeGenerationFailure ( + "Failed to generate project from the old archetype" + ); + } + catch ( ArchetypeNotFoundException ex ) + { + throw new ArchetypeGenerationFailure ( + "Failed to generate project from the old archetype" + ); + } + } +} Propchange: maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/src/main/java/org/codehaus/mojo/archetypeng/generator/DefaultArchetypeGenerator.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/src/main/java/org/codehaus/mojo/archetypeng/generator/DefaultArchetypeGenerator.java ------------------------------------------------------------------------------ svn:keywords = "Author Date Id Revision" Added: maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/src/main/java/org/codehaus/mojo/archetypeng/generator/DefaultArchetypeSelectionQueryer.java URL: http://svn.apache.org/viewvc/maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/src/main/java/org/codehaus/mojo/archetypeng/generator/DefaultArchetypeSelectionQueryer.java?view=auto&rev=553946 ============================================================================== --- maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/src/main/java/org/codehaus/mojo/archetypeng/generator/DefaultArchetypeSelectionQueryer.java (added) +++ maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/src/main/java/org/codehaus/mojo/archetypeng/generator/DefaultArchetypeSelectionQueryer.java Fri Jul 6 09:34:35 2007 @@ -0,0 +1,137 @@ +/* + * 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.codehaus.mojo.archetypeng.generator; + +import org.codehaus.mojo.archetypeng.Archetype; +import org.codehaus.mojo.archetypeng.ArchetypeDefinition; + +import org.codehaus.plexus.components.interactivity.Prompter; +import org.codehaus.plexus.components.interactivity.PrompterException; +import org.codehaus.plexus.logging.AbstractLogEnabled; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +/** + * @plexus.component + */ +public class DefaultArchetypeSelectionQueryer +extends AbstractLogEnabled +implements ArchetypeSelectionQueryer +{ + /** + * @plexus.requirement + */ + private Prompter prompter; + + public boolean confirmSelection ( ArchetypeDefinition archetypeDefinition ) + throws PrompterException + { + String query = + "Confirm archetype selection: \n" + archetypeDefinition.getGroupId () + "/" + + archetypeDefinition.getName () + "\n"; + + String answer = prompter.prompt ( query, Arrays.asList ( new String[] { "Y", "N" } ), "Y" ); + + return "Y".equalsIgnoreCase ( answer ); + } + + public Archetype selectArtifact ( List archetypes ) + throws PrompterException + { + String query = "Choose archetype:\n"; + Map answerMap = new HashMap (); + List answers = new ArrayList (); + Iterator archetypeIterator = archetypes.iterator (); + int counter = 1; + while ( archetypeIterator.hasNext () ) + { + Archetype archetype = (Archetype) archetypeIterator.next (); + + answerMap.put ( "" + counter, archetype ); + query += + "" + counter + ": " + archetype.getName () + " (" + archetype.getGroupId () + ":" + + archetype.getArtifactId () + ")\n"; + answers.add ( "" + counter ); + + counter++; + } + query += "Choose a number: "; + + String answer = prompter.prompt ( query, answers ); + + return (Archetype) answerMap.get ( answer ); + } + + public String selectGroup ( List groups ) + throws PrompterException + { + String query = "Choose group:\n"; + Map answerMap = new HashMap (); + List answers = new ArrayList (); + Iterator groupIterator = groups.iterator (); + int counter = 1; + while ( groupIterator.hasNext () ) + { + String group = (String) groupIterator.next (); + + answerMap.put ( "" + counter, group ); + query += "" + counter + ": " + group + "\n"; + answers.add ( "" + counter ); + + counter++; + } + query += "Choose a number: "; + + String answer = prompter.prompt ( query, answers ); + + return (String) answerMap.get ( answer ); + } + + public String selectVersion ( List archetypeVersions ) + throws PrompterException + { + String query = "Choose version: \n"; + Map answerMap = new HashMap (); + List answers = new ArrayList (); + + Iterator archetypeVersionsKeys = archetypeVersions.iterator (); + int counter = 1; + while ( archetypeVersionsKeys.hasNext () ) + { + String archetypeVersion = (String) archetypeVersionsKeys.next (); + + answerMap.put ( "" + counter, archetypeVersion ); + query += "" + counter + ": " + archetypeVersion + "\n"; + answers.add ( "" + counter ); + + counter++; + } + query += "Choose a number: "; + + String answer = prompter.prompt ( query, answers ); + + return (String) answerMap.get ( answer ); + } +} Propchange: maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/src/main/java/org/codehaus/mojo/archetypeng/generator/DefaultArchetypeSelectionQueryer.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/src/main/java/org/codehaus/mojo/archetypeng/generator/DefaultArchetypeSelectionQueryer.java ------------------------------------------------------------------------------ svn:keywords = "Author Date Id Revision" Added: maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/src/main/java/org/codehaus/mojo/archetypeng/generator/DefaultArchetypeSelector.java URL: http://svn.apache.org/viewvc/maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/src/main/java/org/codehaus/mojo/archetypeng/generator/DefaultArchetypeSelector.java?view=auto&rev=553946 ============================================================================== --- maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/src/main/java/org/codehaus/mojo/archetypeng/generator/DefaultArchetypeSelector.java (added) +++ maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/src/main/java/org/codehaus/mojo/archetypeng/generator/DefaultArchetypeSelector.java Fri Jul 6 09:34:35 2007 @@ -0,0 +1,322 @@ +/* + * 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.codehaus.mojo.archetypeng.generator; + +import org.apache.maven.artifact.repository.ArtifactRepository; + +import org.codehaus.mojo.archetypeng.Archetype; +import org.codehaus.mojo.archetypeng.ArchetypeArtifactManager; +import org.codehaus.mojo.archetypeng.ArchetypeDefinition; +import org.codehaus.mojo.archetypeng.ArchetypeFactory; +import org.codehaus.mojo.archetypeng.ArchetypePropertiesManager; +import org.codehaus.mojo.archetypeng.ArchetypeRegistryManager; +import org.codehaus.mojo.archetypeng.Constants; +import org.codehaus.mojo.archetypeng.exception.ArchetypeNotDefined; +import org.codehaus.mojo.archetypeng.exception.ArchetypeSelectionFailure; +import org.codehaus.mojo.archetypeng.exception.UnknownArchetype; +import org.codehaus.mojo.archetypeng.exception.UnknownGroup; + +import org.codehaus.plexus.components.interactivity.PrompterException; +import org.codehaus.plexus.logging.AbstractLogEnabled; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; + +import java.util.List; +import java.util.Properties; + +/** + * @plexus.component + */ +public class DefaultArchetypeSelector +extends AbstractLogEnabled +implements ArchetypeSelector +{ + /** + * @plexus.requirement + */ + private ArchetypeArtifactManager archetypeArtifactManager; + + /** + * @plexus.requirement + */ + private ArchetypeFactory archetypeFactory; + + /** + * @plexus.requirement + */ + private ArchetypePropertiesManager archetypePropertiesManager; + + /** + * @plexus.requirement + */ + private ArchetypeRegistryManager archetypeRegistryManager; + + /** + * @plexus.requirement + */ + private ArchetypeSelectionQueryer archetypeSelectionQueryer; + + public void selectArchetype ( + String archetypeGroupId, + String archetypeArtifactId, + String archetypeVersion, + Boolean interactiveMode, + File propertyFile, + File archetypeRegistryFile, + ArtifactRepository localRepository, + List repositories + ) + throws ArchetypeNotDefined, + UnknownArchetype, + IOException, + FileNotFoundException, + PrompterException, + ArchetypeSelectionFailure + { + Properties properties = + initialiseArchetypeId ( + archetypeGroupId, + archetypeArtifactId, + archetypeVersion, + propertyFile + ); + + ArchetypeDefinition archetypeDefinition = + archetypeFactory.createArchetypeDefinition ( properties ); + + if ( interactiveMode.booleanValue () ) + { + if ( archetypeDefinition.isPartiallyDefined () ) + { + getLogger ().debug ( "Archetype is partially defined" ); + archetypeDefinition.setVersion ( + archetypeArtifactManager.getReleaseVersion ( + archetypeDefinition.getGroupId (), + archetypeDefinition.getArtifactId (), + localRepository, + repositories + ) + ); + } + else + { + getLogger ().debug ( "Archetype is not defined" ); + } + + while ( !archetypeDefinition.isDefined () ) + { + try + { + if ( !archetypeDefinition.isGroupDefined () ) + { + getLogger ().debug ( "Archetype group not defined" ); + + List groups = + archetypeRegistryManager.getArchetypeGroups ( archetypeRegistryFile ); + getLogger ().debug ( "Groups=" + groups ); + + archetypeDefinition.setGroupId ( + archetypeSelectionQueryer.selectGroup ( groups ) + ); + } + else + { + getLogger ().debug ( + "Archetype group: " + archetypeDefinition.getGroupId () + ); + } + + if ( !archetypeDefinition.isArtifactDefined () ) + { + getLogger ().debug ( "Archetype artifact not defined" ); + + List archetypes = + archetypeArtifactManager.getArchetypes ( + archetypeDefinition.getGroupId (), + localRepository, + repositories + ); + getLogger ().debug ( "Archetypes=" + archetypes ); + + Archetype archetype = + archetypeSelectionQueryer.selectArtifact ( archetypes ); + + archetypeDefinition.setArtifactId ( archetype.getArtifactId () ); + archetypeDefinition.setName ( archetype.getName () ); + } + else + { + getLogger ().debug ( + "Archetype artifact: " + archetypeDefinition.getArtifactId () + ); + } + + if ( archetypeDefinition.isPartiallyDefined () ) + { + getLogger ().debug ( "Archetype version not defined" ); + + List versions = + archetypeArtifactManager.getVersions ( + archetypeDefinition.getGroupId (), + archetypeDefinition.getArtifactId (), + localRepository, + repositories + ); + getLogger ().debug ( "Versions=" + versions ); + + archetypeDefinition.setVersion ( + archetypeSelectionQueryer.selectVersion ( versions ) + ); + } + else + { + getLogger ().debug ( + "Archetype version: " + archetypeDefinition.getVersion () + ); + } + + if ( !archetypeDefinition.isDefined () ) + { + throw new ArchetypeSelectionFailure ( + "The archetype must be selected here" + ); + } + else if ( !archetypeSelectionQueryer.confirmSelection ( archetypeDefinition ) ) + { + getLogger ().debug ( "Archetype selection not confirmed" ); + archetypeDefinition.reset (); + } + else + { + getLogger ().debug ( "Archetype selection confirmed" ); + } + } + catch ( UnknownGroup e ) + { + getLogger ().warn ( "Unknown group" ); + archetypeDefinition.reset (); + } + catch ( UnknownArchetype e ) + { + getLogger ().warn ( "Unknown archetype" ); + archetypeDefinition.reset (); + } + } // end while + } + else + { + if ( !archetypeDefinition.isDefined () ) + { + if ( !archetypeDefinition.isPartiallyDefined () ) + { + throw new ArchetypeNotDefined ( "The archetype is not defined" ); + } + else + { + getLogger ().debug ( "Archetype is partially defined" ); + archetypeDefinition.setVersion ( + archetypeArtifactManager.getReleaseVersion ( + archetypeDefinition.getGroupId (), + archetypeDefinition.getArtifactId (), + localRepository, + repositories + ) + ); + getLogger ().info ( + "Using default version " + archetypeDefinition.getVersion () + ); + } + } + if ( !archetypeDefinition.isDefined () ) + { + throw new ArchetypeSelectionFailure ( "The archetype must be selected here" ); + } + else + { + getLogger ().info ( + "Archetype selected (" + archetypeDefinition.getGroupId () + ":" + + archetypeDefinition.getArtifactId () + ":" + archetypeDefinition + .getVersion () + ")" + ); + } + } // end if + + if ( !archetypeArtifactManager.exists ( + archetypeDefinition.getGroupId (), + archetypeDefinition.getArtifactId (), + archetypeDefinition.getVersion (), + localRepository, + repositories + ) + ) + { + throw new UnknownArchetype ( + "The desired archetype does not exist (" + archetypeDefinition.getGroupId () + ":" + + archetypeDefinition.getArtifactId () + ":" + archetypeDefinition.getVersion () + + ")" + ); + } + else + { + archetypePropertiesManager.writeProperties ( + archetypeDefinition.toProperties (), + propertyFile + ); + } + } + + private Properties initialiseArchetypeId ( + String archetypeGroupId, + String archetypeArtifactId, + String archetypeVersion, + File propertyFile + ) + throws IOException + { + Properties properties = new Properties (); + try + { + archetypePropertiesManager.readProperties ( properties, propertyFile ); + } + catch ( FileNotFoundException e ) + { + getLogger ().debug ( "archetype.properties does not exist" ); + } + + if ( archetypeGroupId != null ) + { + properties.setProperty ( Constants.ARCHETYPE_GROUP_ID, archetypeGroupId ); + } + + if ( archetypeArtifactId != null ) + { + properties.setProperty ( Constants.ARCHETYPE_ARTIFACT_ID, archetypeArtifactId ); + } + + if ( archetypeVersion != null ) + { + properties.setProperty ( Constants.ARCHETYPE_VERSION, archetypeVersion ); + } + + return properties; + } +} Propchange: maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/src/main/java/org/codehaus/mojo/archetypeng/generator/DefaultArchetypeSelector.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/archetype/branches/maven-archetypeng/maven-archetypeng-core/maven-archetypeng-generator/src/main/java/org/codehaus/mojo/archetypeng/generator/DefaultArchetypeSelector.java ------------------------------------------------------------------------------ svn:keywords = "Author Date Id Revision"