You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@maven.apache.org by jv...@apache.org on 2004/05/22 16:58:41 UTC

cvs commit: maven-components/maven-plugin/src/test/java/org/apache/maven/plugin/generator/jelly JellyHarnessGeneratorTest.java

jvanzyl     2004/05/22 07:58:41

  Added:       maven-plugin/src/main/java/org/apache/maven/plugin/generator/jelly
                        JellyHarnessGenerator.java
               maven-plugin/src/test/java/org/apache/maven/plugin/generator/jelly
                        JellyHarnessGeneratorTest.java
  Log:
  o generate the jelly harness that will invoke the bean adapter so that
    m2 plugins can be used in the context of m1.
  
  Revision  Changes    Path
  1.1                  maven-components/maven-plugin/src/main/java/org/apache/maven/plugin/generator/jelly/JellyHarnessGenerator.java
  
  Index: JellyHarnessGenerator.java
  ===================================================================
  package org.apache.maven.plugin.generator.jelly;
  
  import com.thoughtworks.xstream.xml.XMLWriter;
  import com.thoughtworks.xstream.xml.text.PrettyPrintXMLWriter;
  import org.apache.maven.plugin.descriptor.Goal;
  import org.apache.maven.plugin.descriptor.Parameter;
  import org.apache.maven.plugin.descriptor.PluginDescriptor;
  import org.apache.maven.plugin.descriptor.Goal;
  import org.apache.maven.plugin.descriptor.Parameter;
  import org.apache.maven.plugin.descriptor.PluginDescriptor;
  import org.apache.maven.plugin.generator.AbstractGenerator;
  import org.codehaus.modello.generator.java.javasource.JClass;
  import org.codehaus.modello.generator.java.javasource.JSourceWriter;
  import org.codehaus.modello.generator.java.javasource.JConstructor;
  import org.codehaus.modello.generator.java.javasource.JMethod;
  import org.codehaus.modello.generator.java.javasource.JField;
  import org.codehaus.modello.generator.java.javasource.JParameter;
  import org.codehaus.modello.generator.java.javasource.JType;
  
  import java.io.File;
  import java.io.FileWriter;
  import java.util.List;
  import java.util.Map;
  
  /**
   * @todo use the descriptions in the descriptor for the javadoc pushed into
   * the source code.
   */
  public class JellyHarnessGenerator
      extends AbstractGenerator
  {
      protected String pluginArtifactName( PluginDescriptor pluginDescriptor )
      {
          return "plugin.jelly";
      }
  
      protected String getClassName( PluginDescriptor pluginDescriptor )
      {
          return pluginDescriptor.getImplementation() + "Bean";
      }
  
      /*
  <project
    xmlns:j="jelly:core"
    xmlns:define="jelly:define"
    xmlns:vdoclet="vdoclet">
  
    //   <define:jellybean
    //     name="vdocletBean"
    //     className="org.apache.maven.vdoclet.VDocletBean"
    //     method="execute">
    //   </define:jellybean>
  
      </define:tag>
    </define:taglib>
  </project>
  */
      protected void writePluginArtifact( PluginDescriptor pluginDescriptor, File destination )
          throws Exception
      {
          String id = pluginDescriptor.getId();
  
          FileWriter writer = new FileWriter( destination );
  
          PrettyPrintXMLWriter w = new PrettyPrintXMLWriter( writer );
  
          // ----------------------------------------------------------------------
          //
          // ----------------------------------------------------------------------
  
          w.startElement( "project" );
  
          w.addAttribute( "xmlns:j", "jelly:core" );
  
          w.addAttribute( "xmlns:d", "jelly:define" );
  
          w.addAttribute( "xmlns:" + id, id );
  
          // ----------------------------------------------------------------------
          // taglib + jellybean
          // ----------------------------------------------------------------------
          //
          //   <define:jellybean
          //     name="vdocletBean"
          //     className="org.apache.maven.vdoclet.VDocletBean"
          //     method="execute">
          //   </define:jellybean>
          //
          // ----------------------------------------------------------------------
  
          w.startElement( "d:taglib" );
  
          w.addAttribute( "uri", id );
  
          w.startElement( "d:jellybean" );
  
          w.addAttribute( "name", id + "Bean" );
  
          w.addAttribute( "className", getClassName( pluginDescriptor ) );
  
          w.addAttribute( "method", "execute" );
  
          w.endElement();
  
          w.endElement();
  
          // ----------------------------------------------------------------------
          // tag
          // ----------------------------------------------------------------------
          //
          // <define:tag name="vdoclet">
          //   <vdoclet:vdocletBean
          //     srcDir="${srcDir}"
          //     destDir="${destDir}"
          //     template="${template}"
          //     outputFile="${outputFile}"
          //     encoding="${encoding}"
          //     jellyContext="${context}"
          //   />
          // </define:tag>
          //
          // ----------------------------------------------------------------------
  
          w.startElement( "d:tag" );
  
          w.addAttribute( "name", id );
  
          // ----------------------------------------------------------------------
          //
          // ----------------------------------------------------------------------
  
          w.startElement( id + ":" + id + "Bean" );
  
          List parameters = pluginDescriptor.getParameters();
  
          for ( int i = 0; i < parameters.size(); i++ )
          {
              Parameter parameter = (Parameter) parameters.get( i );
  
              w.addAttribute( parameter.getName(), "${" + parameter.getName() + "}" );
          }
  
          w.endElement();
  
          // ----------------------------------------------------------------------
          //
          // ----------------------------------------------------------------------
  
          w.endElement();
  
          // ----------------------------------------------------------------------
          // goals
          // ----------------------------------------------------------------------
  
          List goals = pluginDescriptor.getGoals();
  
          for ( int i = 0; i < goals.size(); i++ )
          {
              Goal goal = (Goal) goals.get( i );
  
              w.startElement( "goal" );
  
              w.addAttribute( "name", goal.getName() );
  
              w.startElement( id + ":" + id + "Bean" );
  
              List goalParameters = goal.getParameters();
  
              for ( int j = 0; j < goalParameters.size(); j++ )
              {
                  Parameter p = (Parameter) goalParameters.get( j );
  
                  String expression = p.getExpression();
  
                  int projectIndex = expression.indexOf( "project" );
  
                  if ( projectIndex > 0 )
                  {
                      expression = expression.substring( 0, projectIndex ) + "pom" + expression.substring( projectIndex + 7);
                  }
  
                  if ( expression.startsWith( "#" ) )
                  {
                      expression = "${" + expression.substring( 1 ) + "}";
                  }
  
                  w.addAttribute( p.getName(), expression );
              }
  
              w.endElement();
  
              w.endElement();
          }
  
          // ----------------------------------------------------------------------
          //
          // ----------------------------------------------------------------------
  
          w.endElement();
  
          // ----------------------------------------------------------------------
          //
          // ----------------------------------------------------------------------
  
          writer.flush();
  
          writer.close();
      }
  
      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();
      }
  }
  
  
  1.1                  maven-components/maven-plugin/src/test/java/org/apache/maven/plugin/generator/jelly/JellyHarnessGeneratorTest.java
  
  Index: JellyHarnessGeneratorTest.java
  ===================================================================
  package org.apache.maven.plugin.generator.jelly;
  
  import junit.framework.TestCase;
  
  import java.io.File;
  
  import org.apache.maven.plugin.generator.jelly.JellyHarnessGenerator;
  
  /**
   * @author <a href="mailto:jason@maven.org">Jason van Zyl</a>
   * @version $Id: JellyHarnessGeneratorTest.java,v 1.1 2004/05/22 14:58:41 jvanzyl Exp $
   */
  public class JellyHarnessGeneratorTest
      extends TestCase
  {
      public void testPluginDescriptorCreationFromPluginSource()
          throws Exception
      {
          String basedir = System.getProperty( "basedir" );
  
          JellyHarnessGenerator pluggy = new JellyHarnessGenerator();
  
          pluggy.execute( new File( basedir, "src/test/resources/source" ).getPath(), new File( basedir, "target" ).getPath() );
      }
  }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org