jvanzyl 2004/05/26 18:31:23
Added: maven-plugin/src/main/java/org/apache/maven/plugin/generator
BeanGenerator.java
Log:
o deal with parameters that are arrays properly
Revision Changes Path
1.1
maven-components/maven-plugin/src/main/java/org/apache/maven/plugin/generator/BeanGenerator.java
Index: BeanGenerator.java
===================================================================
package org.apache.maven.plugin.generator;
import org.apache.maven.plugin.descriptor.Parameter;
import org.apache.maven.plugin.descriptor.PluginDescriptor;
import org.codehaus.modello.generator.java.javasource.JClass;
import org.codehaus.modello.generator.java.javasource.JConstructor;
import org.codehaus.modello.generator.java.javasource.JMethod;
import org.codehaus.modello.generator.java.javasource.JParameter;
import org.codehaus.modello.generator.java.javasource.JSourceWriter;
import org.codehaus.modello.generator.java.javasource.JType;
import java.io.File;
import java.io.FileWriter;
import java.util.List;
/**
* @todo use the descriptions in the descriptor for the javadoc pushed into
* the source code.
*/
public class BeanGenerator
extends AbstractGenerator
{
protected String pluginArtifactName( PluginDescriptor pluginDescriptor )
{
// ----------------------------------------------------------------------
// We will base the classname on the implementation we are wrapping
// ----------------------------------------------------------------------
return getClassName( pluginDescriptor ) + ".java";
}
protected String getClassName( PluginDescriptor pluginDescriptor )
{
String implementation = pluginDescriptor.getImplementation();
return implementation.substring( implementation.lastIndexOf( "." ) + 1 ) +
"Bean";
}
protected void writePluginArtifact( PluginDescriptor pluginDescriptor, File
destination )
throws Exception
{
String implementation = pluginDescriptor.getImplementation();
JClass jClass = new JClass( getClassName( pluginDescriptor ) );
// ----------------------------------------------------------------------
//
// ----------------------------------------------------------------------
jClass.setSuperClass( "org.apache.maven.plugin.BeanPluginAdapter" );
// ----------------------------------------------------------------------
// Use the same package as the plugin we are wrapping.
// ----------------------------------------------------------------------
String packageName = implementation.substring( 0,
implementation.lastIndexOf( "." ) );
jClass.setPackageName( packageName );
// ----------------------------------------------------------------------
//
// ----------------------------------------------------------------------
JConstructor constructor = new JConstructor( jClass );
constructor.getSourceCode().add( "super( new " + implementation + "() );" );
jClass.addConstructor( constructor );
// ----------------------------------------------------------------------
//
// ----------------------------------------------------------------------
List parameters = pluginDescriptor.getParameters();
for ( int i = 0; i < parameters.size(); i++ )
{
Parameter parameter = (Parameter) parameters.get( i );
jClass.addMethod( createSetter( parameter ) );
}
// ----------------------------------------------------------------------
//
// ----------------------------------------------------------------------
FileWriter writer = new FileWriter( destination );
JSourceWriter sourceWriter = new JSourceWriter( writer );
jClass.print( sourceWriter );
writer.flush();
writer.close();
}
private JMethod createSetter( Parameter parameter )
{
String propertyName = capitalise( parameter.getName() );
JMethod setter = new JMethod( null, "set" + propertyName );
String type = parameter.getType();
JType parameterType;
int arrayLocation = type.indexOf( "[]" );
if ( arrayLocation > 0 )
{
parameterType = new JClass( type.substring( 0, arrayLocation )
).createArray();
}
else
{
parameterType = new JClass( type );
}
setter.addParameter( new JParameter( parameterType, parameter.getName() ) );
setter.getSourceCode().add( "addParameter( " + "\"" + parameter.getName() +
"\", " + parameter.getName() + " );" );
return setter;
}
protected String capitalise( String str )
{
if ( str == null || str.length() == 0 )
{
return str;
}
return new StringBuffer( str.length() )
.append( Character.toTitleCase( str.charAt( 0 ) ) )
.append( str.substring( 1 ) )
.toString();
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]