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]

Reply via email to