File archetypeDescriptorFile = new File( archetypeResourcesDirectory, Constants.ARCHETYPE_DESCRIPTOR );
archetypeDescriptorFile.getParentFile().mkdirs();
getLogger().debug( "Starting archetype's descriptor " + project.getArtifactId() );
ArchetypeDescriptor archetypeDescriptor = new ArchetypeDescriptor();
archetypeDescriptor.setName( project.getArtifactId() );
archetypeDescriptor.setPartial( partialArchetype );
addRequiredProperties( archetypeDescriptor, properties );
// TODO ensure reverseProperties contains NO dotted properties
Properties reverseProperties = getReversedProperties( archetypeDescriptor, properties );
// reverseProperties.remove( Constants.GROUP_ID );
// TODO ensure pomReversedProperties contains NO dotted properties
Properties pomReversedProperties = getReversedProperties( archetypeDescriptor, properties );
// pomReversedProperties.remove( Constants.PACKAGE );
String packageName = configurationProperties.getProperty( Constants.PACKAGE );
Model pom = pomManager.readPom( FileUtils.resolveFile( basedir, Constants.ARCHETYPE_POM ) );
List<String> fileNames = resolveFileNames( pom, basedir );
if ( getLogger().isDebugEnabled() )
{
getLogger().debug( "Scanned for files " + fileNames.size() );
for ( String name : fileNames )
{
getLogger().debug( "- " + name );
}
}
List<FileSet> filesets = resolveFileSets( packageName, fileNames, languages, filtereds, defaultEncoding );
getLogger().debug( "Resolved filesets for " + archetypeDescriptor.getName() );
archetypeDescriptor.setFileSets( filesets );
createArchetypeFiles( reverseProperties, filesets, packageName, basedir, archetypeFilesDirectory,
defaultEncoding );
getLogger().debug( "Created files for " + archetypeDescriptor.getName() );
setParentArtifactId( reverseProperties, configurationProperties.getProperty( Constants.ARTIFACT_ID ) );
for ( Iterator<String> modules = pom.getModules().iterator(); modules.hasNext(); )
{
String moduleId = (String) modules.next();
String rootArtifactId = configurationProperties.getProperty( Constants.ARTIFACT_ID );
String moduleIdDirectory = moduleId;
if ( moduleId.indexOf( rootArtifactId ) >= 0 )
{
moduleIdDirectory = StringUtils.replace( moduleId, rootArtifactId, "__rootArtifactId__" );
}
getLogger().debug( "Creating module " + moduleId );
ModuleDescriptor moduleDescriptor =
createModule( reverseProperties, rootArtifactId, moduleId, packageName,
FileUtils.resolveFile( basedir, moduleId ),
new File( archetypeFilesDirectory, moduleIdDirectory ), languages, filtereds,
defaultEncoding, preserveCData, keepParent );
archetypeDescriptor.addModule( moduleDescriptor );
getLogger().debug(
"Added module " + moduleDescriptor.getName() + " in " + archetypeDescriptor.getName() );
}
restoreParentArtifactId( reverseProperties, null );
restoreArtifactId( reverseProperties, configurationProperties.getProperty( Constants.ARTIFACT_ID ) );
createPoms( pom, configurationProperties.getProperty( Constants.ARTIFACT_ID ),
configurationProperties.getProperty( Constants.ARTIFACT_ID ), archetypeFilesDirectory, basedir,
pomReversedProperties, preserveCData, keepParent );
getLogger().debug( "Created Archetype " + archetypeDescriptor.getName() + " template pom(s)" );
Writer out = null;
try
{
out = WriterFactory.newXmlWriter( archetypeDescriptorFile );
ArchetypeDescriptorXpp3Writer writer = new ArchetypeDescriptorXpp3Writer();
writer.write( out, archetypeDescriptor );
getLogger().debug( "Archetype " + archetypeDescriptor.getName() + " descriptor written" );
}
finally
{
IOUtil.close( out );
}