jvanzyl     2004/05/20 10:09:31

  Modified:    maven-core bootstrap-all.sh bootstrap.plugins bootstrap.sh
                        project.xml
               maven-core/src/main/java/org/apache/maven
                        DefaultMavenCore.java Maven.java MavenCli.java
                        MavenCore.java
               maven-core/src/main/java/org/apache/maven/lifecycle/phase
                        GoalAttainmentPhase.java
               maven-core/src/main/resources/META-INF/plexus components.xml
               maven-core/src/main/resources/org/apache/maven plexus.xml
               maven-core/src/test/java/org/apache/maven/plugin
                        PluginTest.java
               maven-core/src/test/resources/org/apache/maven/plugin
                        integrated-plugin.xml
  Added:       maven-core/src/main/java/org/apache/maven/plugin
                        AbstractPluginManager.java
                        DefaultPluginManager.java
                        MavenPluginDescriptor.java
                        MavenPluginDiscoverer.java
                        OgnlProjectValueExtractor.java PluginManager.java
  Removed:     maven-core/src/main/java/org/apache/maven/plugin
                        AbstractPlugin.java GoalDescriptor.java
                        IntegratedPluginGoalTestCase.java
                        ParameterDescriptor.java Plugin.java
                        PluginConfigurationException.java
                        PluginDescriptor.java PluginDescriptorBuilder.java
                        PluginExecutionRequest.java
                        PluginExecutionResponse.java
               maven-core/src/main/java/org/apache/maven/plugin/discovery
                        MavenPluginDiscoverer.java
               maven-core/src/main/java/org/apache/maven/plugin/manager
                        AbstractPluginManager.java
                        DefaultPluginManager.java
                        OgnlProjectValueExtractor.java PluginManager.java
               maven-core/src/main/java/org/apache/maven/plugin/manager/executor
                        FieldPluginExecutor.java
                        IntegratedPluginExecutor.java PluginExecutor.java
                        SetterPluginExecutor.java
               maven-core/src/test/java/org/apache/maven/plugin
                        FieldPlugin.java FieldPluginState.java
                        PluginDescriptorBuilderTest.java
                        PluginManagerManagerTest.java SetterPlugin.java
                        SetterPluginState.java
               maven-core/src/test/resources/org/apache/maven/plugin
                        field-plugin.xml setter-plugin.xml
  Log:
  o a great simplification of the code
  o just using maven-plugins now, adapters can easily be written to make any
    other form conform.
  o use of the maven-plugin build, we are adapting a PluginDescriptor into
    a MavenPluginDescriptor to use the plugins. this means that the plugins
    are fully decoupled and we just adapt them for use here.
  
  Revision  Changes    Path
  1.4       +9 -0      maven-components/maven-core/bootstrap-all.sh
  
  Index: bootstrap-all.sh
  ===================================================================
  RCS file: /home/cvs/maven-components/maven-core/bootstrap-all.sh,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- bootstrap-all.sh  12 Apr 2004 14:44:11 -0000      1.3
  +++ bootstrap-all.sh  20 May 2004 17:09:30 -0000      1.4
  @@ -41,6 +41,15 @@
     mboot --install
   )
   
  +# Build and install maven-plugin.
  +(   
  +  echo "-----------------------------------------------------------------------"
  +  echo " Building maven-plugin ... "
  +  echo "-----------------------------------------------------------------------"  
  +
  +  cd ../maven-plugin
  +  mboot --install
  +)
   # Bootstrap the maven-core component which will give you a small distribution.
   echo "-----------------------------------------------------------------------"
   echo " Building maven-core ... "
  
  
  
  1.6       +0 -4      maven-components/maven-core/bootstrap.plugins
  
  Index: bootstrap.plugins
  ===================================================================
  RCS file: /home/cvs/maven-components/maven-core/bootstrap.plugins,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- bootstrap.plugins 7 May 2004 23:46:51 -0000       1.5
  +++ bootstrap.plugins 20 May 2004 17:09:30 -0000      1.6
  @@ -1,9 +1,5 @@
   maven-clean-plugin
   maven-compiler-plugin
  -maven-hello-plugin
   maven-jar-plugin
   maven-resources-plugin
  -maven-scm-plugin
   maven-surefire-plugin
  -maven-xdoc-plugin
  -maven-idea-plugin
  
  
  
  1.8       +8 -1      maven-components/maven-core/bootstrap.sh
  
  Index: bootstrap.sh
  ===================================================================
  RCS file: /home/cvs/maven-components/maven-core/bootstrap.sh,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- bootstrap.sh      7 May 2004 18:06:49 -0000       1.7
  +++ bootstrap.sh      20 May 2004 17:09:30 -0000      1.8
  @@ -62,7 +62,14 @@
     echo " Building ${plugin} plugin ... "
     echo "-----------------------------------------------------------------------"  
   
  -  mboot --dir ../maven-plugins/${plugin}
  +  (
  +    cd ../maven-plugins/${plugin}
  +    
  +    echo "Generating plugin descriptor for ${plugin} ..."
  +    pluggy --mode=descriptor --source=src/main/java 
--destination=src/main/resources/META-INF/maven
  +
  +    mboot    
  +  )
   
     cp ../maven-plugins/${plugin}/target/${plugin}*.jar ${DIST}/plugins/plexus
     
  
  
  
  1.12      +8 -0      maven-components/maven-core/project.xml
  
  Index: project.xml
  ===================================================================
  RCS file: /home/cvs/maven-components/maven-core/project.xml,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- project.xml       12 May 2004 23:38:40 -0000      1.11
  +++ project.xml       20 May 2004 17:09:30 -0000      1.12
  @@ -14,6 +14,7 @@
     <package>org.apache.maven</package>
     <logo>/images/maven.gif</logo>
     <dependencies>
  +    <!-- maven component -->
       <dependency>
         <groupId>maven</groupId>
         <artifactId>maven-model</artifactId>
  @@ -25,10 +26,17 @@
         <version>2.0-SNAPSHOT</version>
       </dependency>
       <dependency>
  +      <groupId>maven</groupId>
  +      <artifactId>maven-plugin</artifactId>
  +      <version>2.0-SNAPSHOT</version>
  +    </dependency>
  +    <!-- -->
  +    <dependency>
         <groupId>commons-cli</groupId>
         <artifactId>commons-cli</artifactId>
         <version>1.0-beta-2</version>
       </dependency>
  +    <!-- plexus -->
       <dependency>
         <groupId>xpp3</groupId>
         <artifactId>xpp3</artifactId>
  
  
  
  1.6       +8 -6      
maven-components/maven-core/src/main/java/org/apache/maven/DefaultMavenCore.java
  
  Index: DefaultMavenCore.java
  ===================================================================
  RCS file: 
/home/cvs/maven-components/maven-core/src/main/java/org/apache/maven/DefaultMavenCore.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- DefaultMavenCore.java     15 May 2004 06:23:11 -0000      1.5
  +++ DefaultMavenCore.java     20 May 2004 17:09:30 -0000      1.6
  @@ -18,10 +18,12 @@
   
   import org.apache.maven.lifecycle.MavenLifecycleContext;
   import org.apache.maven.lifecycle.MavenLifecycleManager;
  -import org.apache.maven.plugin.GoalDescriptor;
  -import org.apache.maven.plugin.PluginDescriptor;
  -import org.apache.maven.plugin.PluginDescriptor;
  -import org.apache.maven.plugin.manager.PluginManager;
  +import org.apache.maven.plugin.PluginManager;
  +import org.apache.maven.plugin.MavenPluginDescriptor;
  +import org.apache.maven.plugin.descriptor.PluginDescriptor;
  +import org.apache.maven.plugin.descriptor.Goal;
  +import org.apache.maven.plugin.MavenPluginDescriptor;
  +import org.apache.maven.plugin.PluginManager;
   import org.apache.maven.project.MavenProject;
   import org.apache.maven.project.MavenProjectBuilder;
   import org.apache.maven.project.ProjectBuildingException;
  @@ -136,7 +138,7 @@
           return pluginManager.getPluginDescriptors();
       }
   
  -    public PluginDescriptor getPluginDescriptor( String pluginId )
  +    public MavenPluginDescriptor getPluginDescriptor( String pluginId )
       {
           return pluginManager.getPluginDescriptor( pluginId );
       }
  @@ -150,7 +152,7 @@
           return pluginManager.getGoalDescriptors();
       }
   
  -    public GoalDescriptor getGoalDescriptor( String goalId )
  +    public Goal getGoalDescriptor( String goalId )
       {
           return pluginManager.getGoalDescriptor( goalId );
       }
  
  
  
  1.16      +5 -5      
maven-components/maven-core/src/main/java/org/apache/maven/Maven.java
  
  Index: Maven.java
  ===================================================================
  RCS file: 
/home/cvs/maven-components/maven-core/src/main/java/org/apache/maven/Maven.java,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- Maven.java        15 May 2004 06:23:11 -0000      1.15
  +++ Maven.java        20 May 2004 17:09:30 -0000      1.16
  @@ -16,8 +16,8 @@
    * limitations under the License.
    */
   
  -import org.apache.maven.plugin.GoalDescriptor;
  -import org.apache.maven.plugin.PluginDescriptor;
  +import org.apache.maven.plugin.descriptor.Goal;
  +import org.apache.maven.plugin.MavenPluginDescriptor;
   import org.apache.maven.project.MavenProject;
   import org.apache.maven.project.ProjectBuildingException;
   import org.codehaus.classworlds.ClassWorld;
  @@ -107,7 +107,7 @@
           return maven.getPluginDescriptors();
       }
   
  -    public PluginDescriptor getPluginDescriptor( String pluginId )
  +    public MavenPluginDescriptor getPluginDescriptor( String pluginId )
       {
           return maven.getPluginDescriptor( pluginId );
       }
  @@ -121,7 +121,7 @@
           return maven.getGoalDescriptors();
       }
   
  -    public GoalDescriptor getGoalDescriptor( String goalId )
  +    public Goal getGoalDescriptor( String goalId )
       {
           return maven.getGoalDescriptor( goalId );
       }
  
  
  
  1.6       +4 -3      
maven-components/maven-core/src/main/java/org/apache/maven/MavenCli.java
  
  Index: MavenCli.java
  ===================================================================
  RCS file: 
/home/cvs/maven-components/maven-core/src/main/java/org/apache/maven/MavenCli.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- MavenCli.java     16 May 2004 11:38:31 -0000      1.5
  +++ MavenCli.java     20 May 2004 17:09:30 -0000      1.6
  @@ -27,7 +27,7 @@
   import org.apache.commons.cli.Options;
   import org.apache.commons.cli.ParseException;
   import org.apache.commons.cli.PosixParser;
  -import org.apache.maven.plugin.GoalDescriptor;
  +import org.apache.maven.plugin.descriptor.Goal;
   
   import org.codehaus.classworlds.ClassWorld;
   
  @@ -97,7 +97,8 @@
   
               while ( goals.hasNext() )
               {
  -                GoalDescriptor goal = (GoalDescriptor)goals.next();
  +                Goal goal = (Goal)goals.next();
  +                
                   System.out.println( "    " + goal.getName() );
               }
   
  
  
  
  1.5       +5 -6      
maven-components/maven-core/src/main/java/org/apache/maven/MavenCore.java
  
  Index: MavenCore.java
  ===================================================================
  RCS file: 
/home/cvs/maven-components/maven-core/src/main/java/org/apache/maven/MavenCore.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- MavenCore.java    15 May 2004 06:23:11 -0000      1.4
  +++ MavenCore.java    20 May 2004 17:09:30 -0000      1.5
  @@ -16,9 +16,8 @@
    * limitations under the License.
    */
   
  -import org.apache.maven.plugin.GoalDescriptor;
  -import org.apache.maven.plugin.PluginDescriptor;
  -import org.apache.maven.plugin.GoalDescriptor;
  +import org.apache.maven.plugin.descriptor.Goal;
  +import org.apache.maven.plugin.MavenPluginDescriptor;
   import org.apache.maven.project.MavenProject;
   import org.apache.maven.project.ProjectBuildingException;
   
  @@ -59,7 +58,7 @@
   
       Map getPluginDescriptors();
   
  -    PluginDescriptor getPluginDescriptor( String pluginId );
  +    MavenPluginDescriptor getPluginDescriptor( String pluginId );
   
       // ----------------------------------------------------------------------
       // Goal descriptors
  @@ -67,7 +66,7 @@
   
       Map getGoalDescriptors();
   
  -    GoalDescriptor getGoalDescriptor( String goalId );
  +    Goal getGoalDescriptor( String goalId );
   
       // ----------------------------------------------------------------------
       // Maven home
  
  
  
  1.5       +3 -2      
maven-components/maven-core/src/main/java/org/apache/maven/lifecycle/phase/GoalAttainmentPhase.java
  
  Index: GoalAttainmentPhase.java
  ===================================================================
  RCS file: 
/home/cvs/maven-components/maven-core/src/main/java/org/apache/maven/lifecycle/phase/GoalAttainmentPhase.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- GoalAttainmentPhase.java  8 May 2004 21:11:17 -0000       1.4
  +++ GoalAttainmentPhase.java  20 May 2004 17:09:30 -0000      1.5
  @@ -3,7 +3,8 @@
   import org.apache.maven.lifecycle.AbstractMavenLifecyclePhase;
   import org.apache.maven.lifecycle.MavenLifecycleContext;
   import org.apache.maven.plugin.PluginExecutionResponse;
  -import org.apache.maven.plugin.manager.PluginManager;
  +import org.apache.maven.plugin.PluginManager;
  +import org.apache.maven.plugin.PluginManager;
   
   /**
    * @author <a href="mailto:[EMAIL PROTECTED]">Jason van Zyl</a>
  
  
  
  1.1                  
maven-components/maven-core/src/main/java/org/apache/maven/plugin/AbstractPluginManager.java
  
  Index: AbstractPluginManager.java
  ===================================================================
  package org.apache.maven.plugin;
  
  /*
   * Copyright 2001-2004 The Apache Software Foundation.
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  
  import java.io.File;
  import java.util.List;
  
  /**
   * @author <a href="mailto:[EMAIL PROTECTED]">Jason van Zyl</a>
   * @version $Id: AbstractPluginManager.java,v 1.1 2004/05/20 17:09:30 jvanzyl Exp $
   */
  public abstract class AbstractPluginManager
      implements PluginManager
  {
      protected File pluginsDir;
  
      protected String mavenHome;
  
      protected String mavenLocalHome;
  
      protected List goals;
  
      public abstract String getId();
  
      public List getGoals()
      {
          return goals;
      }
  
      protected void setupPluginsDirectories()
          throws Exception
      {
          pluginsDir = new File( new File( mavenHome, "plugins" ), getId() );
  
          if ( !pluginsDir.exists() )
          {
              pluginsDir.mkdirs();
          }
      }
  }
  
  
  
  1.1                  
maven-components/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
  
  Index: DefaultPluginManager.java
  ===================================================================
  package org.apache.maven.plugin;
  
  /*
   * Copyright 2001-2004 The Apache Software Foundation.
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  
  import org.apache.maven.lifecycle.MavenLifecycleContext;
  import org.apache.maven.plugin.descriptor.Goal;
  import org.apache.maven.plugin.descriptor.Parameter;
  import org.apache.maven.plugin.descriptor.PluginDescriptorBuilder;
  import org.apache.maven.project.MavenProject;
  import org.apache.maven.script.GoalDecorator;
  import org.codehaus.plexus.PlexusConstants;
  import org.codehaus.plexus.PlexusContainer;
  import org.codehaus.plexus.component.discovery.ComponentDiscoveryEvent;
  import org.codehaus.plexus.component.discovery.ComponentDiscoveryListener;
  import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
  import org.codehaus.plexus.context.Context;
  import org.codehaus.plexus.context.ContextException;
  import org.codehaus.plexus.logging.AbstractLogEnabled;
  import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
  import org.codehaus.plexus.util.dag.CycleDetectedException;
  import org.codehaus.plexus.util.dag.DAG;
  import org.codehaus.plexus.util.dag.TopologicalSorter;
  
  import java.util.HashMap;
  import java.util.Iterator;
  import java.util.List;
  import java.util.Map;
  import java.util.Stack;
  
  public class DefaultPluginManager
      extends AbstractLogEnabled
      implements PluginManager, ComponentDiscoveryListener, Contextualizable
  {
      static String MAVEN_PLUGIN = "maven-plugin";
  
      private PlexusContainer container;
  
      protected String mavenHome;
  
      protected DAG dag = new DAG();
  
      protected Map goalDescriptors;
  
      protected Map goalToPluginMap;
  
      protected Map pluginDescriptors;
  
      protected PluginDescriptorBuilder pluginDescriptorBuilder;
  
      public DefaultPluginManager()
      {
          goalDescriptors = new HashMap();
  
          goalToPluginMap = new HashMap();
  
          pluginDescriptors = new HashMap();
  
          pluginDescriptorBuilder = new PluginDescriptorBuilder();
      }
  
      // ----------------------------------------------------------------------
      // Plugin execution
      // ----------------------------------------------------------------------
  
      public PluginExecutionResponse attainGoal( MavenLifecycleContext context )
      {
          String goalToAttain = context.getGoal();
  
          List goals = TopologicalSorter.sort( dag.getVertex( goalToAttain ) );
  
          PluginExecutionResponse response = new PluginExecutionResponse();
  
          int goalIndex = goals.indexOf( goalToAttain );
  
          List goalList = goals.subList( 0, goalIndex + 1 );
  
          Stack execStack = new Stack();
  
          for ( Iterator it = goalList.iterator(); it.hasNext(); )
          {
  
              execStack.push( it.next() );
          }
  
          attainGoalStack( context, execStack, response );
  
          return response;
      }
  
      /**
       * The presumption is that a goal and all of its prerequisites are considered to 
be an atomic
       * whole. Therefore, execution should proceed in the manner:
       * preGoals, prereqs, goal, postGoals
       *
       * @param goals    The stack of goals to execute, in reverse-dependency 
ordering. This allows
       *                 us easier access to the pregoals before we execute the 
prerequisites.
       * @param response The execution response to send through the pre-goal, 
post-goal, prereq, and
       *                 actual goal executions.
       */
      private void attainGoalStack( MavenLifecycleContext context, Stack goals, 
PluginExecutionResponse response )
      {
          if ( !goals.isEmpty() )
          {
              String goalName = (String) goals.pop();
  
              context.setGoal( goalName );
  
              String goal = context.getGoal();
  
              System.out.println( "[" + goal + "]" );
  
              Goal goalDescriptor = getGoalDescriptor( goal );
  
              PluginExecutionRequest request = new PluginExecutionRequest( 
createParameters( goalDescriptor, context.getProject() ) );
  
              request.addContextValue( "id", getPluginDescriptor( goal ).getId() );
  
              request.addContextValue( "method", getGoalDescriptor( goal ).getMethod() 
);
  
              request.addContextValue( "mode", getPluginDescriptor( goal ).getMode() );
  
              if ( context.getScript() != null )
              {
                  List preGoals = context.getScript().getPreGoals( goal );
  
                  for ( Iterator it = preGoals.iterator(); it.hasNext(); )
                  {
                      GoalDecorator preGoal = (GoalDecorator) it.next();
  
                      preGoal.execute( request, response );
  
                      if ( response.exceptionOccurred() )
                      {
                          break;
                      }
                  }
              }
  
              if ( !response.exceptionOccurred() )
              {
                  attainGoalStack( context, goals, response );
              }
  
              if ( !response.exceptionOccurred() )
              {
                  attainGoal( request, response );
              }
  
              if ( !response.exceptionOccurred() )
              {
                  if ( context.getScript() != null )
                  {
                      List postGoals = context.getScript().getPostGoals( goal );
  
                      for ( Iterator it = postGoals.iterator(); it.hasNext(); )
                      {
                          GoalDecorator postGoal = (GoalDecorator) it.next();
  
                          postGoal.execute( request, response );
  
                          if ( response.exceptionOccurred() )
                          {
                              break;
                          }
                      }
                  }
              }
          }
      }
  
      public void attainGoal( PluginExecutionRequest request, PluginExecutionResponse 
response )
      {
          try
          {
              Plugin plugin = (Plugin) container.lookup( Plugin.ROLE, (String) 
request.getContextValue( "id" ) );
  
              plugin.execute(  request, response );
          }
          catch ( ComponentLookupException e )
          {
              response.setException( e );
          }
          catch( Exception e )
          {
              response.setException( e );
          }
      }
  
      // ----------------------------------------------------------------------
      // Create parameters for plugin execution
      // ----------------------------------------------------------------------
  
      public static Map createParameters( Goal goalDescriptor, MavenProject project )
      {
          Map map = null;
  
          List parameters = goalDescriptor.getParameters();
  
          if ( parameters != null )
          {
              map = new HashMap();
  
              for ( int i = 0; i < parameters.size(); i++ )
              {
                  Parameter c = (Parameter) parameters.get( i );
  
                  String key = c.getName();
  
                  String expression = c.getExpression();
  
                  Object value = OgnlProjectValueExtractor.evaluate( expression, 
project );
  
                  map.put( key, value );
              }
          }
  
          return map;
      }
  
      // ----------------------------------------------------------------------
      // Plugin descriptors
      // ----------------------------------------------------------------------
  
      public Map getPluginDescriptors()
      {
          return pluginDescriptors;
      }
  
      public MavenPluginDescriptor getPluginDescriptor( String goalName )
      {
          return (MavenPluginDescriptor) goalToPluginMap.get( goalName );
      }
  
      // ----------------------------------------------------------------------
      // Goal descriptors
      // ----------------------------------------------------------------------
  
      public Map getGoalDescriptors()
      {
          return goalDescriptors;
      }
  
      public Goal getGoalDescriptor( String name )
      {
          return (Goal) goalDescriptors.get( name );
      }
  
      // ----------------------------------------------------------------------
      //
      // ----------------------------------------------------------------------
  
      public void processPluginDescriptor( MavenPluginDescriptor pluginDescriptor )
          throws CycleDetectedException
      {
          List goals = pluginDescriptor.getGoals();
  
          for ( Iterator j = goals.iterator(); j.hasNext(); )
          {
              Goal goalDescriptor = (Goal) j.next();
  
              if ( goalDescriptor.getPrereqs() != null )
              {
                  for ( Iterator k = goalDescriptor.getPrereqs().iterator(); 
k.hasNext(); )
                  {
                      dag.addEdge( goalDescriptor.getName(), (String) k.next() );
                  }
              }
              else
              {
                  dag.addVertex( goalDescriptor.getName() );
              }
  
              goalDescriptors.put( goalDescriptor.getName(), goalDescriptor );
  
              goalToPluginMap.put( goalDescriptor.getName(), pluginDescriptor );
          }
  
          pluginDescriptors.put( pluginDescriptor.getId(), pluginDescriptor );
      }
  
      // ----------------------------------------------------------------------
      // Plugin discovery
      // ----------------------------------------------------------------------
  
      public void componentDiscovered( ComponentDiscoveryEvent event )
      {
          if ( event.getComponentType().equals( MAVEN_PLUGIN ) )
          {
              // What is coming back here is a subclass of a plexus component 
descriptor
  
              // So are the use of PluginDescriptor and MavenPluginDescriptor needed?
              // What is the relationship?
  
              MavenPluginDescriptor pluginDescriptor = (MavenPluginDescriptor) 
event.getComponentDescriptor();
  
              try
              {
                  processPluginDescriptor( pluginDescriptor );
              }
              catch ( CycleDetectedException e )
              {
                  getLogger().error( "A cycle was detected in the goal graph: ", e );
              }
          }
      }
  
      // ----------------------------------------------------------------------
      // Lifecycle
      // ----------------------------------------------------------------------
  
      public void contextualize( Context context )
          throws ContextException
      {
          container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY );
      }
  }
  
  
  1.1                  
maven-components/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginDescriptor.java
  
  Index: MavenPluginDescriptor.java
  ===================================================================
  package org.apache.maven.plugin;
  
  import org.codehaus.plexus.component.repository.ComponentDescriptor;
  import org.apache.maven.plugin.descriptor.PluginDescriptor;
  
  import java.util.List;
  
  /**
   * @author <a href="mailto:[EMAIL PROTECTED]">Jason van Zyl</a>
   * @version $Id: MavenPluginDescriptor.java,v 1.1 2004/05/20 17:09:30 jvanzyl Exp $
   */
  public class MavenPluginDescriptor
      extends ComponentDescriptor
  {
      private PluginDescriptor pluginDescriptor;
  
      public MavenPluginDescriptor( PluginDescriptor pluginDescriptor )
      {
          this.pluginDescriptor = pluginDescriptor;
      }
  
      // ----------------------------------------------------------------------
      // These are things we need to alter slightly for a maven component.
      // ----------------------------------------------------------------------
  
      public String getImplementation()
      {
          return pluginDescriptor.getImplementation();
      }
  
      public String getRole()
      {
          return "org.apache.maven.plugin.Plugin";
      }
  
      public String getRoleHint()
      {
          return getId();
      }
  
      // ----------------------------------------------------------------------
      // These are things we have added to the notion of component for maven.
      // ----------------------------------------------------------------------
  
      public String getId()
      {
          return pluginDescriptor.getId();
      }
  
      public String getMode()
      {
          return pluginDescriptor.getMode();
      }
  
      public List getGoals()
      {
          return pluginDescriptor.getGoals();
      }
  }
  
  
  
  1.1                  
maven-components/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginDiscoverer.java
  
  Index: MavenPluginDiscoverer.java
  ===================================================================
  package org.apache.maven.plugin;
  
  /*
   * Copyright 2001-2004 The Apache Software Foundation.
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  
  import org.apache.maven.plugin.descriptor.PluginDescriptor;
  import org.apache.maven.plugin.descriptor.PluginDescriptorBuilder;
  import org.codehaus.plexus.component.discovery.AbstractComponentDiscoverer;
  
  import java.io.Reader;
  import java.util.ArrayList;
  import java.util.List;
  
  /**
   * @author <a href="mailto:[EMAIL PROTECTED]">Jason van Zyl</a>
   * @version $Id: MavenPluginDiscoverer.java,v 1.1 2004/05/20 17:09:30 jvanzyl Exp $
   */
  public class MavenPluginDiscoverer
      extends AbstractComponentDiscoverer
  {
      private PluginDescriptorBuilder builder;
  
      public MavenPluginDiscoverer()
      {
          builder = new PluginDescriptorBuilder();
      }
  
      public String getComponentDescriptorLocation()
      {
          return "META-INF/maven/plugin.xml";
      }
  
      public String getComponentType()
      {
          return "maven-plugin";
      }
  
      public List createComponentDescriptors( Reader componentDescriptorConfiguration, 
String source )
          throws Exception
      {
          List componentDescriptors = new ArrayList();
  
          PluginDescriptor pluginDescriptor = null;
  
          //!! If there is a defective plugin installed should we halt everything or
          // just not process that particular plugin
  
          try
          {
              pluginDescriptor = builder.build( componentDescriptorConfiguration );
          }
          catch( Exception e )
          {
              throw new Exception( "Cannot process plugin descriptor: " + source, e );
          }
  
          componentDescriptors.add( new MavenPluginDescriptor( pluginDescriptor ) );
  
          return componentDescriptors;
      }
  }
  
  
  
  1.1                  
maven-components/maven-core/src/main/java/org/apache/maven/plugin/OgnlProjectValueExtractor.java
  
  Index: OgnlProjectValueExtractor.java
  ===================================================================
  package org.apache.maven.plugin;
  
  /*
   * Copyright 2001-2004 The Apache Software Foundation.
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  
  import ognl.Ognl;
  import ognl.OgnlException;
  import org.apache.maven.project.MavenProject;
  
  /**
   * @author <a href="mailto:[EMAIL PROTECTED]">Jason van Zyl</a>
   * @version $Id: OgnlProjectValueExtractor.java,v 1.1 2004/05/20 17:09:30 jvanzyl 
Exp $
   */
  public class OgnlProjectValueExtractor
  {
      public static Object evaluate( String expression, MavenProject project )
      {
          Object value = null;
  
          if ( expression.equals( "#project" ) )
          {
              value = project;
          }
          else if ( expression.startsWith( "#project" ) )
          {
              try
              {
                  value = Ognl.getValue( expression.substring( 9 ), project );
              }
              catch ( OgnlException e )
              {
                  // do nothing
              }
          }
          else if ( expression.startsWith( "#basedir" ) )
          {
              value = project.getFile().getParentFile().getAbsolutePath();
          }
          else if ( expression.startsWith( "#" ) )
          {
              expression = expression.substring( 1 );
  
              value = project.getProperty( expression );
          }
  
  
          // If we strike out we'll just use the expression which allows
          // people to use hardcoded values if they wish.
  
          if ( value == null )
          {
              value = expression;
          }
  
          return value;
      }
  }
  
  
  
  1.1                  
maven-components/maven-core/src/main/java/org/apache/maven/plugin/PluginManager.java
  
  Index: PluginManager.java
  ===================================================================
  package org.apache.maven.plugin;
  
  /*
   * Copyright 2001-2004 The Apache Software Foundation.
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  
  import org.apache.maven.lifecycle.MavenLifecycleContext;
  import org.apache.maven.plugin.PluginExecutionResponse;
  import org.apache.maven.plugin.MavenPluginDescriptor;
  import org.apache.maven.plugin.descriptor.PluginDescriptor;
  import org.apache.maven.plugin.descriptor.Goal;
  
  import java.util.Map;
  
  /**
   * @author <a href="mailto:[EMAIL PROTECTED]">Jason van Zyl</a>
   * @version $Id: PluginManager.java,v 1.1 2004/05/20 17:09:31 jvanzyl Exp $
   */
  public interface PluginManager
  {
      String ROLE = PluginManager.class.getName();
  
      // ----------------------------------------------------------------------
      // Plugin execution
      // ----------------------------------------------------------------------
  
      PluginExecutionResponse attainGoal( MavenLifecycleContext context );
  
      // ----------------------------------------------------------------------
      // Plugin processing
      // ----------------------------------------------------------------------
  
      void processPluginDescriptor( MavenPluginDescriptor pluginDescriptor )
          throws Exception;
  
      // ----------------------------------------------------------------------
      // Plugin descriptors
      // ----------------------------------------------------------------------
  
      Map getPluginDescriptors();
  
      MavenPluginDescriptor getPluginDescriptor( String pluginId );
  
      // ----------------------------------------------------------------------
      //  Goal descriptors
      // ----------------------------------------------------------------------
  
      Map getGoalDescriptors();
  
      Goal getGoalDescriptor( String goalId );
  }
  
  
  
  1.5       +1 -1      
maven-components/maven-core/src/main/resources/META-INF/plexus/components.xml
  
  Index: components.xml
  ===================================================================
  RCS file: 
/home/cvs/maven-components/maven-core/src/main/resources/META-INF/plexus/components.xml,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- components.xml    8 May 2004 21:11:17 -0000       1.4
  +++ components.xml    20 May 2004 17:09:31 -0000      1.5
  @@ -5,7 +5,7 @@
         <implementation>org.apache.maven.DefaultMavenCore</implementation>
         <requirements>
           <requirement>
  -          <role>org.apache.maven.plugin.manager.PluginManager</role>
  +          <role>org.apache.maven.plugin.PluginManager</role>
           </requirement>
           <requirement>
             <role>org.apache.maven.project.MavenProjectBuilder</role>
  
  
  
  1.13      +10 -10    
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.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- plexus.xml        8 May 2004 21:11:17 -0000       1.12
  +++ plexus.xml        20 May 2004 17:09:31 -0000      1.13
  @@ -2,11 +2,11 @@
     <component-discoverer-manager 
implementation="org.codehaus.plexus.component.discovery.DefaultComponentDiscovererManager">
       <listeners>
         <listener>
  -        <role>org.apache.maven.plugin.manager.PluginManager</role>
  +        <role>org.apache.maven.plugin.PluginManager</role>
         </listener>
       </listeners>
       <component-discoverers>
  -      <component-discoverer 
implementation="org.apache.maven.plugin.discovery.MavenPluginDiscoverer"/>
  +      <component-discoverer 
implementation="org.apache.maven.plugin.MavenPluginDiscoverer"/>
       </component-discoverers>
     </component-discoverer-manager>
     <resources>
  @@ -14,26 +14,26 @@
     </resources>
     <components>
       <component>
  -      <role>org.apache.maven.plugin.manager.PluginManager</role>
  -      
<implementation>org.apache.maven.plugin.manager.DefaultPluginManager</implementation>
  +      <role>org.apache.maven.plugin.PluginManager</role>
  +      <implementation>org.apache.maven.plugin.DefaultPluginManager</implementation>
         <configuration>
           <maven-home>${maven.home}</maven-home>
         </configuration>
       </component>
       <component>
  -      <role>org.apache.maven.plugin.manager.executor.PluginExecutor</role>
  +      <role>org.apache.maven.plugin.executor.PluginExecutor</role>
         <role-hint>field</role-hint>
  -      
<implementation>org.apache.maven.plugin.manager.executor.FieldPluginExecutor</implementation>
  +      <implementation>org.apache.maven.plugin.FieldPluginExecutor</implementation>
       </component>
       <component>
  -      <role>org.apache.maven.plugin.manager.executor.PluginExecutor</role>
  +      <role>org.apache.maven.plugin.PluginExecutor</role>
         <role-hint>setter</role-hint>
  -      
<implementation>org.apache.maven.plugin.manager.executor.SetterPluginExecutor</implementation>
  +      <implementation>org.apache.maven.plugin.SetterPluginExecutor</implementation>
       </component>
       <component>
  -      <role>org.apache.maven.plugin.manager.executor.PluginExecutor</role>
  +      <role>org.apache.maven.plugin.PluginExecutor</role>
         <role-hint>integrated</role-hint>
  -      
<implementation>org.apache.maven.plugin.manager.executor.IntegratedPluginExecutor</implementation>
  +      
<implementation>org.apache.maven.plugin.IntegratedPluginExecutor</implementation>
       </component>
     </components>
   </configuration>
  
  
  
  1.9       +7 -52     
maven-components/maven-core/src/test/java/org/apache/maven/plugin/PluginTest.java
  
  Index: PluginTest.java
  ===================================================================
  RCS file: 
/home/cvs/maven-components/maven-core/src/test/java/org/apache/maven/plugin/PluginTest.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- PluginTest.java   15 May 2004 06:23:11 -0000      1.8
  +++ PluginTest.java   20 May 2004 17:09:31 -0000      1.9
  @@ -18,9 +18,10 @@
   
   import org.apache.maven.MavenCore;
   import org.apache.maven.MavenPlexusComponentTestBase;
  -import org.apache.maven.plugin.PluginDescriptor;
  -import org.apache.maven.plugin.PluginDescriptorBuilder;
  -import org.apache.maven.plugin.manager.PluginManager;
  +import org.apache.maven.plugin.descriptor.PluginDescriptor;
  +import org.apache.maven.plugin.descriptor.PluginDescriptorBuilder;
  +import org.apache.maven.plugin.PluginManager;
  +import org.apache.maven.plugin.MavenPluginDescriptor;
   
   import java.io.File;
   import java.io.InputStream;
  @@ -60,9 +61,9 @@
   
           PluginDescriptor pd = builder.build( new InputStreamReader( is ) );
   
  -        getContainer().addComponentDescriptor( pd );
  +        getContainer().addComponentDescriptor( new MavenPluginDescriptor( pd ) );
   
  -        pluginMM.processPluginDescriptor( pd );
  +        pluginMM.processPluginDescriptor( new MavenPluginDescriptor( pd ) );
       }
   
       public void testIntegratedPlugin()
  @@ -83,51 +84,5 @@
           assertEquals( "maven-core", integratedPlugin.getArtifactId() );
   
           assertEquals( "bar", integratedPlugin.getFoo() );
  -    }
  -
  -    public void testSetterPlugin()
  -        throws Exception
  -    {
  -        registerPlugin( "setter-plugin.xml" );
  -
  -        MavenCore maven = (MavenCore) lookup( MavenCore.ROLE );
  -
  -        maven.execute( new File( System.getProperty( "user.dir"), "project.xml" ), 
"setter-execute" );
  -
  -        // Now the goal has been attain, but because the instantiation strategy is 
per-lookup
  -        // We can't get the plugin object that executed. So we've made a little 
class called
  -        // PluginFieldState which has some static fields that are set by the 
FieldPlugin
  -        // executing.
  -
  -        assertTrue( SetterPluginState.executed );
  -
  -        assertEquals( "Maven", SetterPluginState.name );
  -
  -        assertEquals( "maven-core", SetterPluginState.artifactId );
  -
  -        assertEquals( "bar", SetterPluginState.foo );
  -    }
  -
  -    public void testFieldPlugin()
  -        throws Exception
  -    {
  -        registerPlugin( "field-plugin.xml" );
  -
  -        MavenCore maven = (MavenCore) lookup( MavenCore.ROLE );
  -
  -        maven.execute( new File( System.getProperty( "user.dir"), "project.xml" ), 
"field-execute" );
  -
  -        // Now the goal has been attain, but because the instantiation strategy is 
per-lookup
  -        // We can't get the plugin object that executed. So we've made a little 
class called
  -        // PluginFieldState which has some static fields that are set by the 
FieldPlugin
  -        // executing.
  -
  -        assertTrue( FieldPluginState.executed );
  -
  -        assertEquals( "Maven", FieldPluginState.name );
  -
  -        assertEquals( "maven-core", FieldPluginState.artifactId );
  -
  -        assertEquals( "bar", FieldPluginState.foo );
       }
   }
  
  
  
  1.4       +1 -1      
maven-components/maven-core/src/test/resources/org/apache/maven/plugin/integrated-plugin.xml
  
  Index: integrated-plugin.xml
  ===================================================================
  RCS file: 
/home/cvs/maven-components/maven-core/src/test/resources/org/apache/maven/plugin/integrated-plugin.xml,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- integrated-plugin.xml     22 Mar 2004 18:05:39 -0000      1.3
  +++ integrated-plugin.xml     20 May 2004 17:09:31 -0000      1.4
  @@ -1,7 +1,7 @@
   <plugin>
     <id>integrated-plugin</id>
     <implementation>org.apache.maven.plugin.IntegratedPlugin</implementation>
  -  <instantiation-strategy>singleton</instantiation-strategy>
  +  <instantiationStrategy>singleton</instantiationStrategy>
     <mode>integrated</mode>
     <goals>
       <goal>
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to