+ ad.getArtifactId() + ":" + ad.getVersion() + ")" );
}
request.setArchetypeVersion( ad.getVersion() );
ArchetypeConfiguration archetypeConfiguration;
if ( archetypeArtifactManager.isFileSetArchetype( ad.getGroupId(), ad.getArtifactId(), ad.getVersion(),
archetypeRepository, localRepository, repositories ) )
{
org.apache.maven.archetype.metadata.ArchetypeDescriptor archetypeDescriptor =
archetypeArtifactManager.getFileSetArchetypeDescriptor( ad.getGroupId(), ad.getArtifactId(),
ad.getVersion(), archetypeRepository,
localRepository, repositories );
archetypeConfiguration = archetypeFactory.createArchetypeConfiguration( archetypeDescriptor, properties );
}
else if ( archetypeArtifactManager.isOldArchetype( ad.getGroupId(), ad.getArtifactId(), ad.getVersion(),
archetypeRepository, localRepository, repositories ) )
{
org.apache.maven.archetype.old.descriptor.ArchetypeDescriptor archetypeDescriptor =
archetypeArtifactManager.getOldArchetypeDescriptor( ad.getGroupId(), ad.getArtifactId(),
ad.getVersion(), archetypeRepository,
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 )
{
List<String> propertiesRequired = archetypeConfiguration.getRequiredProperties();
getLogger().debug( "Required properties before content sort: " + propertiesRequired );
Collections.sort( propertiesRequired, new RequiredPropertyComparator( archetypeConfiguration ) );
getLogger().debug( "Required properties after content sort: " + propertiesRequired );
if ( !archetypeConfiguration.isConfigured() )
{
for ( String requiredProperty : propertiesRequired )
{
if ( !archetypeConfiguration.isConfigured( requiredProperty ) )
{
if ( "package".equals( requiredProperty ) )
{
// if the asked property is 'package', then
// use its default and if not defined,
// use the 'groupId' property value.
String packageDefault = archetypeConfiguration.getDefaultValue( requiredProperty );
packageDefault =
( null == packageDefault || "".equals( packageDefault ) ) ? archetypeConfiguration.getProperty( "groupId" )
: archetypeConfiguration.getDefaultValue( requiredProperty );
String value = getTransitiveDefaultValue( packageDefault, archetypeConfiguration );
value = archetypeGenerationQueryer.getPropertyValue( requiredProperty, value );
archetypeConfiguration.setProperty( requiredProperty, value );
}
else
{
String value = archetypeConfiguration.getDefaultValue( requiredProperty );
value = getTransitiveDefaultValue( value, archetypeConfiguration );
value = archetypeGenerationQueryer.getPropertyValue( requiredProperty, value );
archetypeConfiguration.setProperty( requiredProperty, value );
}
}
else
{
getLogger().info(
"Using property: " + requiredProperty + " = "
+ archetypeConfiguration.getProperty( requiredProperty ) );
}
}
}
else
{
for ( String requiredProperty : propertiesRequired )
{
getLogger().info(
"Using property: " + requiredProperty + " = "
+ archetypeConfiguration.getProperty( requiredProperty ) );
}
}
if ( !archetypeConfiguration.isConfigured() )
{
getLogger().warn( "Archetype is not fully configured" );
}
else if ( !archetypeGenerationQueryer.confirmConfiguration( archetypeConfiguration ) )
{
getLogger().debug( "Archetype generation configuration not confirmed" );
archetypeConfiguration.reset();
restoreCommandLineProperties( archetypeConfiguration, executionProperties );
}
else
{
getLogger().debug( "Archetype generation configuration confirmed" );
confirmed = true;
}
}
}
else
{
if ( !archetypeConfiguration.isConfigured() )
{
for ( String requiredProperty : archetypeConfiguration.getRequiredProperties() )
{
if ( !archetypeConfiguration.isConfigured( requiredProperty )
&& ( archetypeConfiguration.getDefaultValue( requiredProperty ) != null ) )
{
archetypeConfiguration.setProperty( requiredProperty,
archetypeConfiguration.getDefaultValue( requiredProperty ) );
}
}
// in batch mode, we assume the defaults, and if still not configured fail
if ( !archetypeConfiguration.isConfigured() )
{
StringBuffer exceptionMessage = new StringBuffer();
exceptionMessage.append( "Archetype " );
exceptionMessage.append( request.getArchetypeGroupId() );
exceptionMessage.append( ":" );
exceptionMessage.append( request.getArchetypeArtifactId() );
exceptionMessage.append( ":" );
exceptionMessage.append( request.getArchetypeVersion() );
exceptionMessage.append( " is not configured" );
List<String> missingProperties = new ArrayList<String>( 0 );
for ( String requiredProperty : archetypeConfiguration.getRequiredProperties() )
{
if ( !archetypeConfiguration.isConfigured( requiredProperty ) )
{
exceptionMessage.append( "\n\tProperty " );
exceptionMessage.append( requiredProperty );
missingProperties.add( requiredProperty );
exceptionMessage.append( " is missing." );
getLogger().warn(
"Property " + requiredProperty + " is missing. Add -D" + requiredProperty
+ "=someValue" );
}
}
throw new ArchetypeNotConfigured( exceptionMessage.toString(), missingProperties );
}
}
}
request.setGroupId( archetypeConfiguration.getProperty( Constants.GROUP_ID ) );
request.setArtifactId( archetypeConfiguration.getProperty( Constants.ARTIFACT_ID ) );
request.setVersion( archetypeConfiguration.getProperty( Constants.VERSION ) );
request.setPackage( archetypeConfiguration.getProperty( Constants.PACKAGE ) );
properties = archetypeConfiguration.getProperties();
request.setProperties( properties );
}