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/03/20 21:21:07 UTC

cvs commit: maven-components/maven-core/src/main/resources/org/apache/maven plexus.xml

jvanzyl     2004/03/20 12:21:07

  Modified:    maven-core/src/main/java/org/apache/maven DefaultMaven.java
               maven-core/src/main/java/org/apache/maven/plugin
                        PluginExecutionRequest.java
                        PluginExecutionResponse.java
               maven-core/src/main/java/org/apache/maven/plugin/manager
                        DefaultPluginManagerManager.java PluginManager.java
                        PluginManagerManager.java
               maven-core/src/main/java/org/apache/maven/plugin/plexus
                        FieldPluginConfigurator.java
                        OgnlProjectValueExtractor.java
                        PlexusPluginManager.java
                        SetterPluginConfigurator.java
               maven-core/src/main/resources/org/apache/maven plexus.xml
  Added:       maven-core/src/main/java/org/apache/maven/plugin/plexus/executor
                        FieldPluginExecutor.java
                        IntegratedPluginExecutor.java PluginExecutor.java
                        SetterPluginExecutor.java
                        SingletonPluginExecutor.java
  Log:
  o for each different type of supported POJO we have an executor, so if we
    want to add support for new types of POJOs, or if users want to add their
    own, then you just need to create a component to handle it and plexus
    will look it up and execute the POJO plugin.
  
  Revision  Changes    Path
  1.2       +4 -0      maven-components/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
  
  Index: DefaultMaven.java
  ===================================================================
  RCS file: /home/cvs/maven-components/maven-core/src/main/java/org/apache/maven/DefaultMaven.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- DefaultMaven.java	19 Mar 2004 04:13:18 -0000	1.1
  +++ DefaultMaven.java	20 Mar 2004 20:21:07 -0000	1.2
  @@ -56,6 +56,10 @@
    * ====================================================================
    */
   
  +// use plexus getFiles
  +// cleanup attainGoal make is singular
  +// use i18n
  +
   import org.apache.maven.plugin.manager.PluginManager;
   import org.apache.maven.plugin.manager.PluginManagerManager;
   import org.apache.maven.project.MavenProject;
  
  
  
  1.2       +51 -2     maven-components/maven-core/src/main/java/org/apache/maven/plugin/PluginExecutionRequest.java
  
  Index: PluginExecutionRequest.java
  ===================================================================
  RCS file: /home/cvs/maven-components/maven-core/src/main/java/org/apache/maven/plugin/PluginExecutionRequest.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- PluginExecutionRequest.java	19 Mar 2004 04:13:20 -0000	1.1
  +++ PluginExecutionRequest.java	20 Mar 2004 20:21:07 -0000	1.2
  @@ -1,5 +1,9 @@
   package org.apache.maven.plugin;
   
  +import org.apache.maven.plugin.descriptor.GoalDescriptor;
  +import org.apache.maven.plugin.descriptor.PluginDescriptor;
  +import org.apache.maven.project.MavenProject;
  +
   import java.util.Map;
   
   /**
  @@ -13,8 +17,28 @@
   {
       private Map parameters;
   
  -    public PluginExecutionRequest( Map parameters )
  +    private GoalDescriptor goalDescriptor;
  +
  +    private PluginDescriptor pluginDescriptor;
  +
  +    private MavenProject project;
  +
  +    private Object plugin;
  +
  +    public PluginExecutionRequest( Object plugin,
  +                                   PluginDescriptor pluginDescriptor,
  +                                   GoalDescriptor goalDescriptor,
  +                                   MavenProject project,
  +                                   Map parameters )
       {
  +        this.plugin = plugin;
  +
  +        this.pluginDescriptor = pluginDescriptor;
  +
  +        this.goalDescriptor = goalDescriptor;
  +
  +        this.project = project;
  +
           this.parameters = parameters;
       }
   
  @@ -23,8 +47,33 @@
           return parameters;
       }
   
  +    public void setParameters( Map parameters )
  +    {
  +        this.parameters = parameters;
  +    }
  +
       public Object getParameter( String key )
       {
           return parameters.get( key );
  +    }
  +
  +    public GoalDescriptor getGoalDescriptor()
  +    {
  +        return goalDescriptor;
  +    }
  +
  +    public PluginDescriptor getPluginDescriptor()
  +    {
  +        return pluginDescriptor;
  +    }
  +
  +    public MavenProject getProject()
  +    {
  +        return project;
  +    }
  +
  +    public Object getPlugin()
  +    {
  +        return plugin;
       }
   }
  
  
  
  1.2       +12 -1     maven-components/maven-core/src/main/java/org/apache/maven/plugin/PluginExecutionResponse.java
  
  Index: PluginExecutionResponse.java
  ===================================================================
  RCS file: /home/cvs/maven-components/maven-core/src/main/java/org/apache/maven/plugin/PluginExecutionResponse.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- PluginExecutionResponse.java	19 Mar 2004 04:13:20 -0000	1.1
  +++ PluginExecutionResponse.java	20 Mar 2004 20:21:07 -0000	1.2
  @@ -9,4 +9,15 @@
    */
   public class PluginExecutionResponse
   {
  +    private Throwable exception;
  +
  +    public Throwable getException()
  +    {
  +        return exception;
  +    }
  +
  +    public void setException( Throwable exception )
  +    {
  +        this.exception = exception;
  +    }
   }
  
  
  
  1.2       +6 -7      maven-components/maven-core/src/main/java/org/apache/maven/plugin/manager/DefaultPluginManagerManager.java
  
  Index: DefaultPluginManagerManager.java
  ===================================================================
  RCS file: /home/cvs/maven-components/maven-core/src/main/java/org/apache/maven/plugin/manager/DefaultPluginManagerManager.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- DefaultPluginManagerManager.java	19 Mar 2004 04:13:20 -0000	1.1
  +++ DefaultPluginManagerManager.java	20 Mar 2004 20:21:07 -0000	1.2
  @@ -60,6 +60,7 @@
   import org.apache.maven.plugin.descriptor.GoalDescriptor;
   import org.apache.maven.plugin.descriptor.PluginDescriptor;
   import org.apache.maven.plugin.descriptor.PluginDescriptorBuilder;
  +import org.apache.maven.plugin.PluginExecutionResponse;
   import org.apache.maven.project.MavenProject;
   import org.apache.maven.verifier.DependencyVerifier;
   import org.codehaus.classworlds.ClassRealm;
  @@ -119,20 +120,21 @@
       }
   
       public void attainGoals( MavenProject project, List goalNames )
  -        throws GoalException, Exception
  +        throws Exception
       {
           PluginManager pluginManager = (PluginManager) pluginManagers.get( "plexus" );
   
  +        PluginExecutionResponse response;
  +
           for ( Iterator i = goalNames.iterator(); i.hasNext(); )
           {
               String goal = (String) i.next();
   
  -            // This could be replace by adding a method DAG.hasEdges( vertext ) to the DAG.
               if ( dag.getChildLabels( goal ).size() == 0 && dag.getParentLabels( goal ).size() == 0 )
               {
                   System.out.println( "[" + goal + "]" );
   
  -                pluginManager.attainGoal( (PluginDescriptor) goalToPluginMap.get( goal ), getGoalDescriptor( goal ), project );
  +                response = pluginManager.attainGoal( getPluginDescriptor( goal ), getGoalDescriptor( goal ), project );
               }
               else
               {
  @@ -151,10 +153,7 @@
   
                       System.out.println( "[" + goalName + "]" );
   
  -                    // We have to look at the information passed back from the plugin
  -                    // and see if we can do anything.
  -
  -                    pluginManager.attainGoal( getPluginDescriptor( goalName ), getGoalDescriptor( goalName ), project );
  +                    response = pluginManager.attainGoal( getPluginDescriptor( goalName ), getGoalDescriptor( goalName ), project );
                   }
               }
           }
  
  
  
  1.2       +3 -2      maven-components/maven-core/src/main/java/org/apache/maven/plugin/manager/PluginManager.java
  
  Index: PluginManager.java
  ===================================================================
  RCS file: /home/cvs/maven-components/maven-core/src/main/java/org/apache/maven/plugin/manager/PluginManager.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- PluginManager.java	19 Mar 2004 04:13:20 -0000	1.1
  +++ PluginManager.java	20 Mar 2004 20:21:07 -0000	1.2
  @@ -3,6 +3,7 @@
   import org.apache.maven.GoalException;
   import org.apache.maven.plugin.descriptor.GoalDescriptor;
   import org.apache.maven.plugin.descriptor.PluginDescriptor;
  +import org.apache.maven.plugin.PluginExecutionResponse;
   import org.apache.maven.project.MavenProject;
   import org.codehaus.classworlds.ClassRealm;
   
  @@ -19,7 +20,7 @@
   {
       static String ROLE = PluginManager.class.getName();
   
  -    void attainGoal( PluginDescriptor pd, GoalDescriptor gd, MavenProject project )
  +    PluginExecutionResponse attainGoal( PluginDescriptor pd, GoalDescriptor gd, MavenProject project )
           throws Exception;
   
       List getGoals();
  
  
  
  1.2       +3 -4      maven-components/maven-core/src/main/java/org/apache/maven/plugin/manager/PluginManagerManager.java
  
  Index: PluginManagerManager.java
  ===================================================================
  RCS file: /home/cvs/maven-components/maven-core/src/main/java/org/apache/maven/plugin/manager/PluginManagerManager.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- PluginManagerManager.java	19 Mar 2004 04:13:20 -0000	1.1
  +++ PluginManagerManager.java	20 Mar 2004 20:21:07 -0000	1.2
  @@ -1,8 +1,7 @@
   package org.apache.maven.plugin.manager;
   
  -import org.apache.maven.project.MavenProject;
  -import org.apache.maven.GoalException;
   import org.apache.maven.plugin.descriptor.PluginDescriptor;
  +import org.apache.maven.project.MavenProject;
   
   import java.util.List;
   
  @@ -18,7 +17,7 @@
       String ROLE = PluginManagerManager.class.getName();
   
       void attainGoals( MavenProject project, List goalNames )
  -        throws GoalException, Exception;
  +        throws Exception;
   
       void processPluginDescriptor( PluginDescriptor pluginDescriptor );
   }
  
  
  
  1.3       +2 -2      maven-components/maven-core/src/main/java/org/apache/maven/plugin/plexus/FieldPluginConfigurator.java
  
  Index: FieldPluginConfigurator.java
  ===================================================================
  RCS file: /home/cvs/maven-components/maven-core/src/main/java/org/apache/maven/plugin/plexus/FieldPluginConfigurator.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- FieldPluginConfigurator.java	19 Mar 2004 16:12:27 -0000	1.2
  +++ FieldPluginConfigurator.java	20 Mar 2004 20:21:07 -0000	1.3
  @@ -16,7 +16,7 @@
   public class FieldPluginConfigurator
   {
       public Object configure( Object plugin, List parameters, MavenProject project )
  -        throws PluginConfigurationException, Exception
  +        throws PluginConfigurationException
       {
           Class pluginClass = plugin.getClass();
   
  
  
  
  1.2       +1 -2      maven-components/maven-core/src/main/java/org/apache/maven/plugin/plexus/OgnlProjectValueExtractor.java
  
  Index: OgnlProjectValueExtractor.java
  ===================================================================
  RCS file: /home/cvs/maven-components/maven-core/src/main/java/org/apache/maven/plugin/plexus/OgnlProjectValueExtractor.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- OgnlProjectValueExtractor.java	19 Mar 2004 04:13:20 -0000	1.1
  +++ OgnlProjectValueExtractor.java	20 Mar 2004 20:21:07 -0000	1.2
  @@ -14,7 +14,6 @@
   public class OgnlProjectValueExtractor
   {
       public static Object evaluate( String expression, MavenProject project )
  -        throws Exception
       {
           Object value = null;
   
  
  
  
  1.3       +10 -131   maven-components/maven-core/src/main/java/org/apache/maven/plugin/plexus/PlexusPluginManager.java
  
  Index: PlexusPluginManager.java
  ===================================================================
  RCS file: /home/cvs/maven-components/maven-core/src/main/java/org/apache/maven/plugin/plexus/PlexusPluginManager.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- PlexusPluginManager.java	19 Mar 2004 16:12:27 -0000	1.2
  +++ PlexusPluginManager.java	20 Mar 2004 20:21:07 -0000	1.3
  @@ -4,10 +4,9 @@
   import org.apache.maven.plugin.PluginExecutionRequest;
   import org.apache.maven.plugin.PluginExecutionResponse;
   import org.apache.maven.plugin.descriptor.GoalDescriptor;
  -import org.apache.maven.plugin.descriptor.MethodDescriptor;
  -import org.apache.maven.plugin.descriptor.ParameterDescriptor;
   import org.apache.maven.plugin.descriptor.PluginDescriptor;
   import org.apache.maven.plugin.manager.AbstractPluginManager;
  +import org.apache.maven.plugin.plexus.executor.PluginExecutor;
   import org.apache.maven.project.MavenProject;
   import org.codehaus.plexus.PlexusConstants;
   import org.codehaus.plexus.PlexusContainer;
  @@ -15,11 +14,6 @@
   import org.codehaus.plexus.context.ContextException;
   import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
   
  -import java.lang.reflect.Method;
  -import java.util.HashMap;
  -import java.util.List;
  -import java.util.Map;
  -
   /**
    *
    *
  @@ -31,21 +25,8 @@
       extends AbstractPluginManager
       implements Contextualizable
   {
  -    private Map plugins;
  -
       private PlexusContainer container;
   
  -    private FieldPluginConfigurator fieldPluginConfigurator;
  -
  -    private SetterPluginConfigurator setterPluginConfigurator;
  -
  -    public PlexusPluginManager()
  -    {
  -        fieldPluginConfigurator = new FieldPluginConfigurator();
  -
  -        setterPluginConfigurator = new SetterPluginConfigurator();
  -    }
  -
       public void loadPlugin( String name )
           throws Exception
       {
  @@ -56,126 +37,24 @@
           return "plexus";
       }
   
  -    public void attainGoal( PluginDescriptor pd, GoalDescriptor gd, MavenProject project )
  +    public PluginExecutionResponse attainGoal( PluginDescriptor pd, GoalDescriptor gd, MavenProject project )
           throws Exception
       {
           Object plugin = container.lookup( Plugin.ROLE, pd.getId() );
   
  -        String mode = pd.getMode();
  -
  -        if ( mode.equals( Plugin.INTEGRATED ) )
  -        {
  -            executeIntegratedPlugin( plugin, gd, project );
  -        }
  -        else if ( mode.equals( Plugin.SINGLETON ) )
  -        {
  -            executeSingletonPlugin( plugin, gd, project );
  -        }
  -        else if ( mode.equals( Plugin.FIELD ) )
  -        {
  -            executeFieldPlugin( plugin, gd, project );
  -        }
  -        else if ( mode.equals( Plugin.SETTER ) )
  -        {
  -            executeSetterPlugin( plugin, gd, project );
  -        }
  -    }
  -
  -    private void executeIntegratedPlugin( Object plugin, GoalDescriptor gd, MavenProject project )
  -        throws Exception
  -    {
  -        List parameters = gd.getParameters();
  -
  -        int size = parameters.size();
  -
  -        Map map = new HashMap();
  -
  -        for ( int i = 0; i < size; i++ )
  -        {
  -            ParameterDescriptor c = (ParameterDescriptor) parameters.get( i );
  -
  -            String key = c.getName();
  -
  -            String expression = c.getExpression();
  -
  -            Object value = OgnlProjectValueExtractor.evaluate( expression, project );
  -
  -            map.put( key, value );
  -        }
  -
  -        PluginExecutionRequest request = new PluginExecutionRequest( map );
  +        PluginExecutionRequest request = new PluginExecutionRequest( plugin, pd, gd, project, null );
   
           PluginExecutionResponse response = new PluginExecutionResponse();
   
  -        ((Plugin) plugin).execute( request, response );
  -    }
  +        // I could make a factory and use polymorphism here but there are only
  +        // 4 flavours here and hopefully people will opt for the integrated
  +        // form. So we'll use the good old if/else if for now.
   
  -    private void executeSingletonPlugin( Object plugin, GoalDescriptor gd, MavenProject project )
  -        throws Exception
  -    {
  -        MethodDescriptor md = gd.getMethod();
  -
  -        int size = md.getParameters().size();
  -
  -        Object[] parameters = new Object[size];
  -
  -        for ( int i = 0; i < size; i++ )
  -        {
  -            ParameterDescriptor c =  (ParameterDescriptor) md.getParameters().get( i );
  -
  -            String expression = c.getExpression();
  -
  -            parameters[i] = OgnlProjectValueExtractor.evaluate( expression, project );
  -        }
  -
  -        Method[] methods = plugin.getClass().getMethods();
  -
  -        Class[] types = null;
  -
  -        for ( int i = 0; i < methods.length; i++ )
  -        {
  -            if ( methods[i].getName().equals( md.getName() ) )
  -            {
  -                types = methods[i].getParameterTypes();
  -
  -                // If parameter lengths don't match then we don't
  -                // have the right method.
  -                if ( types.length != size )
  -                {
  -                    continue;
  -                }
  -            }
  -        }
  -
  -        Method m = plugin.getClass().getMethod( gd.getMethod().getName(), types );
  -
  -        m.invoke( plugin, parameters );
  -    }
  -
  -    private void executeFieldPlugin( Object plugin, GoalDescriptor gd, MavenProject project )
  -        throws Exception
  -    {
  -        if ( gd.getParameters() != null )
  -        {
  -            plugin = fieldPluginConfigurator.configure( plugin, gd.getParameters(), project );
  -        }
  -
  -        Method m = plugin.getClass().getMethod( "execute", new Class[0] );
  -
  -        m.invoke( plugin, new Object[0] );
  -    }
  -
  -    private void executeSetterPlugin( Object plugin, GoalDescriptor gd, MavenProject project )
  -        throws Exception
  -    {
  -        if ( gd.getParameters() != null )
  -        {
  -            plugin = setterPluginConfigurator.configure( plugin, gd.getParameters(), project );
  -        }
  +        PluginExecutor pluginExecutor = (PluginExecutor) container.lookup( PluginExecutor.ROLE, pd.getMode() );
   
  -        Method m = plugin.getClass().getMethod( "execute", new Class[0] );
  +        pluginExecutor.execute( request, response );
   
  -        m.invoke( plugin, new Object[0] );
  +        return response;
       }
   
       // ----------------------------------------------------------------------
  
  
  
  1.3       +2 -2      maven-components/maven-core/src/main/java/org/apache/maven/plugin/plexus/SetterPluginConfigurator.java
  
  Index: SetterPluginConfigurator.java
  ===================================================================
  RCS file: /home/cvs/maven-components/maven-core/src/main/java/org/apache/maven/plugin/plexus/SetterPluginConfigurator.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- SetterPluginConfigurator.java	19 Mar 2004 16:12:27 -0000	1.2
  +++ SetterPluginConfigurator.java	20 Mar 2004 20:21:07 -0000	1.3
  @@ -16,7 +16,7 @@
   public class SetterPluginConfigurator
   {
       public Object configure( Object plugin, List parameters, MavenProject project )
  -        throws PluginConfigurationException, Exception
  +        throws PluginConfigurationException
       {
           Class pluginClass = plugin.getClass();
   
  
  
  
  1.1                  maven-components/maven-core/src/main/java/org/apache/maven/plugin/plexus/executor/FieldPluginExecutor.java
  
  Index: FieldPluginExecutor.java
  ===================================================================
  package org.apache.maven.plugin.plexus.executor;
  
  import org.apache.maven.plugin.PluginExecutionRequest;
  import org.apache.maven.plugin.PluginExecutionResponse;
  import org.apache.maven.plugin.plexus.PluginConfigurationException;
  import org.apache.maven.plugin.plexus.FieldPluginConfigurator;
  
  import java.util.List;
  import java.lang.reflect.Method;
  import java.lang.reflect.InvocationTargetException;
  
  /**
   *
   * 
   * @author <a href="mailto:jason@maven.org">Jason van Zyl</a>
   *
   * @version $Id: FieldPluginExecutor.java,v 1.1 2004/03/20 20:21:07 jvanzyl Exp $
   */
  public class FieldPluginExecutor
      implements PluginExecutor
  {
      private FieldPluginConfigurator fieldPluginConfigurator;
  
      public FieldPluginExecutor()
      {
          fieldPluginConfigurator = new FieldPluginConfigurator();
      }
  
      public void execute( PluginExecutionRequest request, PluginExecutionResponse response )
      {
          List parameters = request.getGoalDescriptor().getParameters();
  
          Object plugin = request.getPlugin();
  
          if ( parameters != null )
          {
              try
              {
                  plugin = fieldPluginConfigurator.configure( plugin, parameters, request.getProject() );
              }
              catch ( PluginConfigurationException e )
              {
                  response.setException( e );
  
                  return;
              }
          }
  
          Method m = null;
  
          try
          {
              m = plugin.getClass().getMethod( "execute", new Class[0] );
  
              m.invoke( plugin, new Object[0] );
          }
          catch ( NoSuchMethodException e )
          {
              response.setException( e );
          }
          catch ( InvocationTargetException e )
          {
              response.setException( e.getTargetException() );
          }
          catch ( Exception e )
          {
              response.setException( e );
          }
      }
  
  }
  
  
  
  1.1                  maven-components/maven-core/src/main/java/org/apache/maven/plugin/plexus/executor/IntegratedPluginExecutor.java
  
  Index: IntegratedPluginExecutor.java
  ===================================================================
  package org.apache.maven.plugin.plexus.executor;
  
  import org.apache.maven.plugin.PluginExecutionRequest;
  import org.apache.maven.plugin.PluginExecutionResponse;
  import org.apache.maven.plugin.Plugin;
  import org.apache.maven.plugin.plexus.OgnlProjectValueExtractor;
  import org.apache.maven.plugin.descriptor.ParameterDescriptor;
  
  import java.util.List;
  import java.util.Map;
  import java.util.HashMap;
  
  /**
   *
   * 
   * @author <a href="mailto:jason@maven.org">Jason van Zyl</a>
   *
   * @version $Id: IntegratedPluginExecutor.java,v 1.1 2004/03/20 20:21:07 jvanzyl Exp $
   */
  public class IntegratedPluginExecutor
      implements PluginExecutor
  {
      public void execute( PluginExecutionRequest request, PluginExecutionResponse response )
      {
          List parameters = request.getGoalDescriptor().getParameters();
  
          int size = parameters.size();
  
          Map map = new HashMap();
  
          for ( int i = 0; i < size; i++ )
          {
              ParameterDescriptor c = (ParameterDescriptor) parameters.get( i );
  
              String key = c.getName();
  
              String expression = c.getExpression();
  
              Object value = OgnlProjectValueExtractor.evaluate( expression, request.getProject() );
  
              map.put( key, value );
          }
  
          request.setParameters( map );
  
          try
          {
              ((Plugin) request.getPlugin()).execute( request, response );
          }
          catch ( Exception e )
          {
              response.setException( e );
          }
      }
  }
  
  
  
  1.1                  maven-components/maven-core/src/main/java/org/apache/maven/plugin/plexus/executor/PluginExecutor.java
  
  Index: PluginExecutor.java
  ===================================================================
  package org.apache.maven.plugin.plexus.executor;
  
  import org.apache.maven.plugin.PluginExecutionResponse;
  import org.apache.maven.plugin.PluginExecutionRequest;
  
  /**
   *
   * 
   * @author <a href="mailto:jason@maven.org">Jason van Zyl</a>
   *
   * @version $Id: PluginExecutor.java,v 1.1 2004/03/20 20:21:07 jvanzyl Exp $
   */
  public interface PluginExecutor
  {
      String ROLE = PluginExecutor.class.getName();
  
      void execute( PluginExecutionRequest request, PluginExecutionResponse response );
  }
  
  
  
  1.1                  maven-components/maven-core/src/main/java/org/apache/maven/plugin/plexus/executor/SetterPluginExecutor.java
  
  Index: SetterPluginExecutor.java
  ===================================================================
  package org.apache.maven.plugin.plexus.executor;
  
  import org.apache.maven.plugin.plexus.SetterPluginConfigurator;
  import org.apache.maven.plugin.plexus.PluginConfigurationException;
  import org.apache.maven.plugin.PluginExecutionRequest;
  import org.apache.maven.plugin.PluginExecutionResponse;
  
  import java.util.List;
  import java.lang.reflect.Method;
  import java.lang.reflect.InvocationTargetException;
  
  /**
   *
   * 
   * @author <a href="mailto:jason@maven.org">Jason van Zyl</a>
   *
   * @version $Id: SetterPluginExecutor.java,v 1.1 2004/03/20 20:21:07 jvanzyl Exp $
   */
  public class SetterPluginExecutor
      implements PluginExecutor
  {
      private SetterPluginConfigurator setterPluginConfigurator;
  
      public SetterPluginExecutor()
      {
          setterPluginConfigurator = new SetterPluginConfigurator();
      }
  
      public void execute( PluginExecutionRequest request, PluginExecutionResponse response )
      {
          List parameters = request.getGoalDescriptor().getParameters();
  
          Object plugin = request.getPlugin();
  
          if ( parameters != null )
          {
              try
              {
                  plugin = setterPluginConfigurator.configure( plugin, parameters, request.getProject() );
              }
              catch ( PluginConfigurationException e )
              {
                  response.setException( e );
  
                  return;
              }
          }
  
          Method m = null;
  
          try
          {
              m = plugin.getClass().getMethod( "execute", new Class[0] );
  
              m.invoke( plugin, new Object[0] );
          }
          catch ( NoSuchMethodException e )
          {
              response.setException( e );
          }
          catch ( InvocationTargetException e )
          {
              response.setException( e.getTargetException() );
          }
          catch ( Exception e )
          {
              response.setException( e );
          }
      }
  }
  
  
  
  1.1                  maven-components/maven-core/src/main/java/org/apache/maven/plugin/plexus/executor/SingletonPluginExecutor.java
  
  Index: SingletonPluginExecutor.java
  ===================================================================
  package org.apache.maven.plugin.plexus.executor;
  
  import org.apache.maven.plugin.PluginExecutionRequest;
  import org.apache.maven.plugin.PluginExecutionResponse;
  import org.apache.maven.plugin.plexus.OgnlProjectValueExtractor;
  import org.apache.maven.plugin.descriptor.MethodDescriptor;
  import org.apache.maven.plugin.descriptor.ParameterDescriptor;
  
  import java.lang.reflect.Method;
  import java.lang.reflect.InvocationTargetException;
  
  /**
   *
   * 
   * @author <a href="mailto:jason@maven.org">Jason van Zyl</a>
   *
   * @version $Id: SingletonPluginExecutor.java,v 1.1 2004/03/20 20:21:07 jvanzyl Exp $
   */
  public class SingletonPluginExecutor
      implements PluginExecutor
  {
      public void execute( PluginExecutionRequest request, PluginExecutionResponse response )
      {
          MethodDescriptor md = request.getGoalDescriptor().getMethod();
  
          int size = md.getParameters().size();
  
          Object[] parameters = new Object[size];
  
          for ( int i = 0; i < size; i++ )
          {
              ParameterDescriptor c =  (ParameterDescriptor) md.getParameters().get( i );
  
              String expression = c.getExpression();
  
              parameters[i] = OgnlProjectValueExtractor.evaluate( expression, request.getProject() );
          }
  
          Method[] methods = request.getPlugin().getClass().getMethods();
  
          Class[] types = null;
  
          for ( int i = 0; i < methods.length; i++ )
          {
              if ( methods[i].getName().equals( md.getName() ) )
              {
                  types = methods[i].getParameterTypes();
  
                  // If parameter lengths don't match then we don't
                  // have the right method.
                  if ( types.length != size )
                  {
                      continue;
                  }
              }
          }
  
          Method m = null;
  
          try
          {
              m = request.getPlugin().getClass().getMethod( request.getGoalDescriptor().getMethod().getName(), types );
  
              m.invoke( request.getPlugin(), parameters );
          }
          catch ( NoSuchMethodException e )
          {
              response.setException( e );
          }
          catch ( InvocationTargetException e )
          {
              response.setException( e.getTargetException() );
          }
          catch ( Exception e )
          {
              response.setException( e );
          }
      }
  
  }
  
  
  
  1.2       +26 -7     maven-components/maven-core/src/main/resources/org/apache/maven/plexus.xml
  
  Index: plexus.xml
  ===================================================================
  RCS file: /home/cvs/maven-components/maven-core/src/main/resources/org/apache/maven/plexus.xml,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- plexus.xml	19 Mar 2004 04:13:23 -0000	1.1
  +++ plexus.xml	20 Mar 2004 20:21:07 -0000	1.2
  @@ -86,7 +86,7 @@
   
       <!--
        |
  -     | Plugin Managers
  +     | Plexus plugin manager
        |
        -->
   
  @@ -94,12 +94,31 @@
         <role>org.apache.maven.plugin.manager.PluginManager</role>
         <role-hint>plexus</role-hint>
         <implementation>org.apache.maven.plugin.plexus.PlexusPluginManager</implementation>
  -      <requirements>
  -        <requirement>
  -          <role>org.apache.maven.plugin.Plugin</role>
  -          <field-name>plugins</field-name>
  -        </requirement>
  -      </requirements>
       </component>
  +
  +    <component>
  +      <role>org.apache.maven.plugin.plexus.executor.PluginExecutor</role>
  +      <role-hint>field</role-hint>
  +      <implementation>org.apache.maven.plugin.plexus.executor.FieldPluginExecutor</implementation>
  +    </component>
  +
  +    <component>
  +      <role>org.apache.maven.plugin.plexus.executor.PluginExecutor</role>
  +      <role-hint>setter</role-hint>
  +      <implementation>org.apache.maven.plugin.plexus.executor.SetterPluginExecutor</implementation>
  +    </component>
  +
  +    <component>
  +      <role>org.apache.maven.plugin.plexus.executor.PluginExecutor</role>
  +      <role-hint>singleton</role-hint>
  +      <implementation>org.apache.maven.plugin.plexus.executor.SingletonPluginExecutor</implementation>
  +    </component>
  +
  +    <component>
  +      <role>org.apache.maven.plugin.plexus.executor.PluginExecutor</role>
  +      <role-hint>integrated</role-hint>
  +      <implementation>org.apache.maven.plugin.plexus.executor.IntegratedPluginExecutor</implementation>
  +    </component>
  +
     </components>
   </configuration>
  
  
  

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