You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by si...@apache.org on 2009/02/02 12:50:19 UTC

svn commit: r739965 - in /maven/components/branches/sisbell-plugin-manager: maven-core/src/main/java/org/apache/maven/plugin/ maven-core/src/main/resources/META-INF/plexus/ maven-embedder/src/main/java/org/apache/maven/embedder/ maven-project/src/main/...

Author: sisbell
Date: Mon Feb  2 11:50:18 2009
New Revision: 739965

URL: http://svn.apache.org/viewvc?rev=739965&view=rev
Log:
MNG-3631 - Get plugin config, including mojo descriptor info.

Added:
    maven/components/branches/sisbell-plugin-manager/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginRepository.java
    maven/components/branches/sisbell-plugin-manager/maven-core/src/main/java/org/apache/maven/plugin/PluginRepository.java
Modified:
    maven/components/branches/sisbell-plugin-manager/maven-core/src/main/resources/META-INF/plexus/components.xml
    maven/components/branches/sisbell-plugin-manager/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java
    maven/components/branches/sisbell-plugin-manager/maven-project/src/main/java/org/apache/maven/project/builder/Mixer.java
    maven/components/branches/sisbell-plugin-manager/maven-project/src/main/java/org/apache/maven/project/builder/PluginMixin.java
    maven/components/branches/sisbell-plugin-manager/maven-project/src/main/java/org/apache/maven/project/builder/impl/DefaultProjectBuilder.java
    maven/components/branches/sisbell-plugin-manager/maven-project/src/test/java/org/apache/maven/project/builder/PomConstructionTest.java

Added: maven/components/branches/sisbell-plugin-manager/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginRepository.java
URL: http://svn.apache.org/viewvc/maven/components/branches/sisbell-plugin-manager/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginRepository.java?rev=739965&view=auto
==============================================================================
--- maven/components/branches/sisbell-plugin-manager/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginRepository.java (added)
+++ maven/components/branches/sisbell-plugin-manager/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginRepository.java Mon Feb  2 11:50:18 2009
@@ -0,0 +1,58 @@
+package org.apache.maven.plugin;
+
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.util.xml.Xpp3DomBuilder;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.plugin.descriptor.PluginDescriptor;
+import org.apache.maven.plugin.descriptor.MojoDescriptor;
+
+import java.util.List;
+import java.io.StringReader;
+
+@Component( role = PluginRepository.class)
+public class DefaultPluginRepository implements PluginRepository
+{
+    @Requirement
+    protected MavenPluginCollector pluginCollector;
+
+    public Plugin findPluginById(String id, String mojoId) throws Exception
+    {
+        if(pluginCollector == null)
+        {
+            throw new IllegalArgumentException("pluginCollector: null");
+        }
+
+        if(id == null)
+        {
+            throw new IllegalArgumentException("id: null");
+        }
+
+        String[] token = id.split(":");
+        if(token.length != 3)
+        {
+            throw new IllegalArgumentException("id: does not include complete id");
+        }
+
+        Plugin plugin = new Plugin();
+        plugin.setGroupId(token[0]);
+        plugin.setArtifactId(token[1]);
+        plugin.setVersion(token[2]);
+
+        PluginDescriptor descriptor = pluginCollector.getPluginDescriptor(plugin);
+        if(descriptor == null)
+        {
+            return null;
+        }
+
+        for(MojoDescriptor mojo : (List<MojoDescriptor>) descriptor.getMojos())
+        {
+            if(mojo.getId().equals(id + ":"+ mojoId) && mojo.getMojoConfiguration() != null)
+            {
+                plugin.setConfiguration(Xpp3DomBuilder.build( new StringReader( mojo.getMojoConfiguration().toString() ) ));
+            }
+        }
+
+        return plugin;
+    }
+}

Added: maven/components/branches/sisbell-plugin-manager/maven-core/src/main/java/org/apache/maven/plugin/PluginRepository.java
URL: http://svn.apache.org/viewvc/maven/components/branches/sisbell-plugin-manager/maven-core/src/main/java/org/apache/maven/plugin/PluginRepository.java?rev=739965&view=auto
==============================================================================
--- maven/components/branches/sisbell-plugin-manager/maven-core/src/main/java/org/apache/maven/plugin/PluginRepository.java (added)
+++ maven/components/branches/sisbell-plugin-manager/maven-core/src/main/java/org/apache/maven/plugin/PluginRepository.java Mon Feb  2 11:50:18 2009
@@ -0,0 +1,10 @@
+package org.apache.maven.plugin;
+
+import org.apache.maven.model.Plugin;
+import org.codehaus.plexus.configuration.PlexusConfigurationException;
+
+
+public interface PluginRepository {
+
+    Plugin findPluginById(String pluginId, String mojoId) throws Exception;
+}

Modified: maven/components/branches/sisbell-plugin-manager/maven-core/src/main/resources/META-INF/plexus/components.xml
URL: http://svn.apache.org/viewvc/maven/components/branches/sisbell-plugin-manager/maven-core/src/main/resources/META-INF/plexus/components.xml?rev=739965&r1=739964&r2=739965&view=diff
==============================================================================
--- maven/components/branches/sisbell-plugin-manager/maven-core/src/main/resources/META-INF/plexus/components.xml (original)
+++ maven/components/branches/sisbell-plugin-manager/maven-core/src/main/resources/META-INF/plexus/components.xml Mon Feb  2 11:50:18 2009
@@ -27,6 +27,16 @@
 <component-set>
   <components>
     <component>
+      <role>org.apache.maven.plugin.PluginRepository</role>
+      <role-hint>default</role-hint>
+      <implementation>org.apache.maven.plugin.DefaultPluginRepository</implementation>
+      <requirements>
+        <requirement>
+          <role>org.apache.maven.plugin.MavenPluginCollector</role>
+        </requirement>
+        </requirements>
+    </component>
+    <component>
       <role>org.apache.maven.lifecycle.binding.LifecycleBindingManager</role>
       <role-hint>default</role-hint>
       <implementation>org.apache.maven.lifecycle.binding.DefaultLifecycleBindingManager</implementation>

Modified: maven/components/branches/sisbell-plugin-manager/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java
URL: http://svn.apache.org/viewvc/maven/components/branches/sisbell-plugin-manager/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java?rev=739965&r1=739964&r2=739965&view=diff
==============================================================================
--- maven/components/branches/sisbell-plugin-manager/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java (original)
+++ maven/components/branches/sisbell-plugin-manager/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java Mon Feb  2 11:50:18 2009
@@ -58,18 +58,16 @@
 import org.apache.maven.model.io.xpp3.MavenXpp3Writer;
 import org.apache.maven.monitor.event.DefaultEventDispatcher;
 import org.apache.maven.monitor.event.EventDispatcher;
-import org.apache.maven.plugin.InvalidPluginException;
-import org.apache.maven.plugin.MavenPluginCollector;
-import org.apache.maven.plugin.MavenPluginDiscoverer;
-import org.apache.maven.plugin.PluginManager;
-import org.apache.maven.plugin.PluginManagerException;
-import org.apache.maven.plugin.PluginNotFoundException;
+import org.apache.maven.plugin.*;
 import org.apache.maven.plugin.version.PluginVersionNotFoundException;
 import org.apache.maven.plugin.version.PluginVersionResolutionException;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.project.MavenProjectBuilder;
 import org.apache.maven.project.MavenProjectBuildingResult;
 import org.apache.maven.project.ProjectBuildingException;
+import org.apache.maven.project.builder.ProjectBuilder;
+import org.apache.maven.project.builder.Mixer;
+import org.apache.maven.plugin.PluginRepository;
 import org.apache.maven.reactor.MavenExecutionException;
 import org.apache.maven.reactor.MissingModuleException;
 import org.apache.maven.settings.Settings;
@@ -92,6 +90,7 @@
 import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
 import org.codehaus.plexus.component.repository.exception.ComponentRepositoryException;
 import org.codehaus.plexus.configuration.PlexusConfigurationException;
+import org.codehaus.plexus.configuration.PlexusConfiguration;
 import org.codehaus.plexus.logging.LoggerManager;
 import org.codehaus.plexus.util.IOUtil;
 import org.codehaus.plexus.util.ReaderFactory;
@@ -147,6 +146,10 @@
     private MavenExecutionRequestPopulator populator;
 
     private BuildPlanner buildPlanner;
+
+    private PluginRepository pluginRepository;
+
+    private Mixer mixer;
     
     // ----------------------------------------------------------------------
     // Configuration
@@ -246,6 +249,15 @@
         modelWriter.write( writer, model );
     }
 
+    public PlexusConfiguration getPluginConfiguration(String pluginId, String mojoId, Model model) throws Exception
+    {        
+        try {
+            return mixer.mixPluginAndReturnConfig(pluginRepository.findPluginById(pluginId, mojoId), model);
+        } catch (PlexusConfigurationException e) {
+            throw new IOException(e.getMessage());
+        }
+    }
+
     // ----------------------------------------------------------------------
     // Settings
     // ----------------------------------------------------------------------
@@ -656,6 +668,10 @@
 
             artifactHandlerManager = container.lookup( ArtifactHandlerManager.class );
 
+            pluginRepository = container.lookup( PluginRepository.class );
+
+            mixer = (Mixer) container.lookup( ProjectBuilder.class );
+
             // This is temporary as we can probably cache a single request and use it for default values and
             // simply cascade values in from requests used for individual executions.
             request = new DefaultMavenExecutionRequest();

Modified: maven/components/branches/sisbell-plugin-manager/maven-project/src/main/java/org/apache/maven/project/builder/Mixer.java
URL: http://svn.apache.org/viewvc/maven/components/branches/sisbell-plugin-manager/maven-project/src/main/java/org/apache/maven/project/builder/Mixer.java?rev=739965&r1=739964&r2=739965&view=diff
==============================================================================
--- maven/components/branches/sisbell-plugin-manager/maven-project/src/main/java/org/apache/maven/project/builder/Mixer.java (original)
+++ maven/components/branches/sisbell-plugin-manager/maven-project/src/main/java/org/apache/maven/project/builder/Mixer.java Mon Feb  2 11:50:18 2009
@@ -3,6 +3,7 @@
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.model.Plugin;
 import org.apache.maven.model.Model;
+import org.codehaus.plexus.configuration.PlexusConfiguration;
 
 import java.io.IOException;
 
@@ -11,4 +12,6 @@
 {
 
     Model mixPlugin(Plugin plugin, Model model) throws IOException;
+
+    PlexusConfiguration mixPluginAndReturnConfig(Plugin plugin, Model model) throws IOException;
 }

Modified: maven/components/branches/sisbell-plugin-manager/maven-project/src/main/java/org/apache/maven/project/builder/PluginMixin.java
URL: http://svn.apache.org/viewvc/maven/components/branches/sisbell-plugin-manager/maven-project/src/main/java/org/apache/maven/project/builder/PluginMixin.java?rev=739965&r1=739964&r2=739965&view=diff
==============================================================================
--- maven/components/branches/sisbell-plugin-manager/maven-project/src/main/java/org/apache/maven/project/builder/PluginMixin.java (original)
+++ maven/components/branches/sisbell-plugin-manager/maven-project/src/main/java/org/apache/maven/project/builder/PluginMixin.java Mon Feb  2 11:50:18 2009
@@ -36,6 +36,10 @@
     public PluginMixin(Plugin plugin)
         throws IOException
     {
+        if(plugin == null)
+        {
+            throw new IllegalArgumentException("plugin: null");
+        }
         Model model = new Model();
         Build build = new Build();
         build.addPlugin(plugin);

Modified: maven/components/branches/sisbell-plugin-manager/maven-project/src/main/java/org/apache/maven/project/builder/impl/DefaultProjectBuilder.java
URL: http://svn.apache.org/viewvc/maven/components/branches/sisbell-plugin-manager/maven-project/src/main/java/org/apache/maven/project/builder/impl/DefaultProjectBuilder.java?rev=739965&r1=739964&r2=739965&view=diff
==============================================================================
--- maven/components/branches/sisbell-plugin-manager/maven-project/src/main/java/org/apache/maven/project/builder/impl/DefaultProjectBuilder.java (original)
+++ maven/components/branches/sisbell-plugin-manager/maven-project/src/main/java/org/apache/maven/project/builder/impl/DefaultProjectBuilder.java Mon Feb  2 11:50:18 2009
@@ -39,12 +39,16 @@
 import org.apache.maven.project.ProjectBuilderConfiguration;
 import org.apache.maven.project.builder.*;
 import org.apache.maven.shared.model.*;
+import org.apache.maven.shared.model.impl.DefaultModelDataSource;
 import org.codehaus.plexus.component.annotations.Component;
 import org.codehaus.plexus.component.annotations.Requirement;
 import org.codehaus.plexus.logging.LogEnabled;
 import org.codehaus.plexus.logging.Logger;
 import org.codehaus.plexus.util.IOUtil;
 import org.codehaus.plexus.util.ReaderFactory;
+import org.codehaus.plexus.configuration.PlexusConfiguration;
+import org.codehaus.plexus.configuration.xml.XmlPlexusConfiguration;
+import org.apache.maven.shared.model.ModelMarshaller;
 
 /**
  * Default implementation of the project builder.
@@ -385,4 +389,61 @@
       //          (new PluginMixin(plugin)).getInputStream(), ProjectUri.Build.Plugins.xUri, null);
         
     }
+
+    public PlexusConfiguration mixPluginAndReturnConfig(Plugin plugin, Model model) throws IOException
+    {
+        List<DomainModel> domainModels = new ArrayList<DomainModel>();
+        domainModels.add( new PluginMixin(plugin) );
+        domainModels.add( new PomClassicDomainModel(model) );
+
+        PomClassicTransformer transformer = new PomClassicTransformer( new PomClassicDomainModelFactory() );
+
+        ModelTransformerContext ctx = new ModelTransformerContext(PomTransformer.MODEL_CONTAINER_INFOS );
+
+        PomClassicDomainModel transformedDomainModel = ( (PomClassicDomainModel) ctx.transform( domainModels,
+                                                                                                transformer,
+                                                                                                transformer,
+                                                                                                Collections.EMPTY_LIST,
+                                                                                                null,
+                                                                                                listeners ) );
+        ModelDataSource source =
+                new DefaultModelDataSource(transformedDomainModel.getModelProperties(), PomTransformer.MODEL_CONTAINER_FACTORIES);
+        for(ModelContainer pluginContainer : source.queryFor(ProjectUri.Build.Plugins.Plugin.xUri))
+        {
+            if(matchesIdOfPlugin(pluginContainer, plugin))
+            {
+                List<ModelProperty> config = new ArrayList<ModelProperty>();
+                for(ModelProperty mp : pluginContainer.getProperties())
+                {
+                    if(mp.getUri().startsWith(ProjectUri.Build.Plugins.Plugin.configuration))
+                    {
+                        config.add(mp);
+                    }
+                }
+                return new XmlPlexusConfiguration(ModelMarshaller.unmarshalModelPropertiesToXml(config, ProjectUri.Build.Plugins.Plugin.xUri));
+
+            }
+        }
+        return null;       
+    }
+
+    private static boolean matchesIdOfPlugin(ModelContainer mc, Plugin plugin)
+    {   
+        List<ModelProperty> props = mc.getProperties();
+        return getValueByUri(ProjectUri.Build.Plugins.Plugin.groupId, props).equals(plugin.getGroupId())
+                && getValueByUri(ProjectUri.Build.Plugins.Plugin.artifactId, props).equals(plugin.getArtifactId())
+                && getValueByUri(ProjectUri.Build.Plugins.Plugin.version, props).equals(plugin.getVersion());
+    }
+
+    private static String getValueByUri(String uri, List<ModelProperty> modelProperties)
+    {
+        for(ModelProperty mp : modelProperties)
+        {
+            if(mp.getUri().equals(uri))
+            {
+                return mp.getResolvedValue();
+            }
+        }
+        return "";
+    }
 }

Modified: maven/components/branches/sisbell-plugin-manager/maven-project/src/test/java/org/apache/maven/project/builder/PomConstructionTest.java
URL: http://svn.apache.org/viewvc/maven/components/branches/sisbell-plugin-manager/maven-project/src/test/java/org/apache/maven/project/builder/PomConstructionTest.java?rev=739965&r1=739964&r2=739965&view=diff
==============================================================================
--- maven/components/branches/sisbell-plugin-manager/maven-project/src/test/java/org/apache/maven/project/builder/PomConstructionTest.java (original)
+++ maven/components/branches/sisbell-plugin-manager/maven-project/src/test/java/org/apache/maven/project/builder/PomConstructionTest.java Mon Feb  2 11:50:18 2009
@@ -33,15 +33,19 @@
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.project.harness.PomTestWrapper;
 import org.codehaus.plexus.PlexusTestCase;
+import org.codehaus.plexus.configuration.PlexusConfiguration;
+import org.codehaus.plexus.configuration.xml.XmlPlexusConfiguration;
 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
 
 public class PomConstructionTest
     extends PlexusTestCase
 {
 
-    private static String BASE_POM_DIR = "src/test/resources-project-builder";
+    private static String BASE_DIR = "src/test";
 
-    private static String BASE_MIXIN_DIR = "src/test/resources-mixins";
+    private static String BASE_POM_DIR = BASE_DIR + "/resources-project-builder";
+
+    private static String BASE_MIXIN_DIR = BASE_DIR + "/resources-mixins";
 
     private ProjectBuilder projectBuilder;