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/01/29 16:26:31 UTC
svn commit: r738893 - in /maven/components/sisbell-plugin-manager:
maven-project-builder/src/main/java/org/apache/maven/project/builder/
maven-project/src/main/java/org/apache/maven/project/builder/
maven-project/src/main/java/org/apache/maven/project/...
Author: sisbell
Date: Thu Jan 29 15:26:30 2009
New Revision: 738893
URL: http://svn.apache.org/viewvc?rev=738893&view=rev
Log:
Added in support for mixins, specifically plugin mixins.
Added:
maven/components/sisbell-plugin-manager/maven-project/src/main/java/org/apache/maven/project/builder/Mixer.java
maven/components/sisbell-plugin-manager/maven-project/src/main/java/org/apache/maven/project/builder/PluginMixin.java
maven/components/sisbell-plugin-manager/maven-project/src/test/java/org/apache/maven/project/builder/PluginBuilderTest.java
maven/components/sisbell-plugin-manager/maven-project/src/test/resources-mixins/
maven/components/sisbell-plugin-manager/maven-project/src/test/resources-mixins/plugins/
maven/components/sisbell-plugin-manager/maven-project/src/test/resources-mixins/plugins/simple/
maven/components/sisbell-plugin-manager/maven-project/src/test/resources-mixins/plugins/simple/mixin.xml
maven/components/sisbell-plugin-manager/maven-project/src/test/resources-project-builder/plugin-merge-simple/
maven/components/sisbell-plugin-manager/maven-project/src/test/resources-project-builder/plugin-merge-simple/pom.xml
Modified:
maven/components/sisbell-plugin-manager/maven-project-builder/src/main/java/org/apache/maven/project/builder/PomTransformer.java
maven/components/sisbell-plugin-manager/maven-project/src/main/java/org/apache/maven/project/builder/PomClassicTransformer.java
maven/components/sisbell-plugin-manager/maven-project/src/main/java/org/apache/maven/project/builder/impl/DefaultProjectBuilder.java
maven/components/sisbell-plugin-manager/maven-project/src/test/java/org/apache/maven/project/builder/PomConstructionTest.java
Modified: maven/components/sisbell-plugin-manager/maven-project-builder/src/main/java/org/apache/maven/project/builder/PomTransformer.java
URL: http://svn.apache.org/viewvc/maven/components/sisbell-plugin-manager/maven-project-builder/src/main/java/org/apache/maven/project/builder/PomTransformer.java?rev=738893&r1=738892&r2=738893&view=diff
==============================================================================
--- maven/components/sisbell-plugin-manager/maven-project-builder/src/main/java/org/apache/maven/project/builder/PomTransformer.java (original)
+++ maven/components/sisbell-plugin-manager/maven-project-builder/src/main/java/org/apache/maven/project/builder/PomTransformer.java Thu Jan 29 15:26:30 2009
@@ -162,8 +162,7 @@
ProjectUri.Build.Resources.Resource.directory,
ProjectUri.Build.TestResources.TestResource.directory,
ProjectUri.Build.Filters.filter,
- ProjectUri.Reporting.outputDirectory ) ) );
-
+ ProjectUri.Reporting.outputDirectory ) ) );
/**
* @see ModelTransformer#transformToDomainModel(java.util.List, java.util.List)
*/
Added: maven/components/sisbell-plugin-manager/maven-project/src/main/java/org/apache/maven/project/builder/Mixer.java
URL: http://svn.apache.org/viewvc/maven/components/sisbell-plugin-manager/maven-project/src/main/java/org/apache/maven/project/builder/Mixer.java?rev=738893&view=auto
==============================================================================
--- maven/components/sisbell-plugin-manager/maven-project/src/main/java/org/apache/maven/project/builder/Mixer.java (added)
+++ maven/components/sisbell-plugin-manager/maven-project/src/main/java/org/apache/maven/project/builder/Mixer.java Thu Jan 29 15:26:30 2009
@@ -0,0 +1,14 @@
+package org.apache.maven.project.builder;
+
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.model.Model;
+
+import java.io.IOException;
+
+
+public interface Mixer
+{
+
+ Model mixPlugin(Plugin plugin, Model model) throws IOException;
+}
Added: maven/components/sisbell-plugin-manager/maven-project/src/main/java/org/apache/maven/project/builder/PluginMixin.java
URL: http://svn.apache.org/viewvc/maven/components/sisbell-plugin-manager/maven-project/src/main/java/org/apache/maven/project/builder/PluginMixin.java?rev=738893&view=auto
==============================================================================
--- maven/components/sisbell-plugin-manager/maven-project/src/main/java/org/apache/maven/project/builder/PluginMixin.java (added)
+++ maven/components/sisbell-plugin-manager/maven-project/src/main/java/org/apache/maven/project/builder/PluginMixin.java Thu Jan 29 15:26:30 2009
@@ -0,0 +1,112 @@
+package org.apache.maven.project.builder;
+
+import org.apache.maven.shared.model.InputStreamDomainModel;
+import org.apache.maven.shared.model.ModelProperty;
+import org.apache.maven.shared.model.ModelMarshaller;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.Build;
+import org.apache.maven.model.io.xpp3.MavenXpp3Writer;
+import org.codehaus.plexus.util.WriterFactory;
+import org.codehaus.plexus.util.IOUtil;
+import org.codehaus.plexus.util.ReaderFactory;
+
+import java.io.*;
+import java.util.List;
+import java.util.Set;
+import java.util.HashSet;
+import java.util.ArrayList;
+
+
+public class PluginMixin implements InputStreamDomainModel {
+
+
+ /**
+ * Bytes containing the underlying model
+ */
+ private byte[] inputBytes;
+
+ /**
+ * History of joins and deletes of model properties
+ */
+ private String eventHistory;
+
+ private List<ModelProperty> modelProperties;
+
+ public PluginMixin(Plugin plugin)
+ throws IOException
+ {
+ Model model = new Model();
+ Build build = new Build();
+ build.addPlugin(plugin);
+ model.setBuild(build);
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ Writer out = null;
+ MavenXpp3Writer writer = new MavenXpp3Writer();
+ try
+ {
+ out = WriterFactory.newXmlWriter( baos );
+ writer.write( out, model );
+ }
+ finally
+ {
+ if ( out != null )
+ {
+ out.close();
+ }
+ }
+ inputBytes = baos.toByteArray();
+ }
+
+ public InputStream getInputStream() {
+ byte[] copy = new byte[inputBytes.length];
+ System.arraycopy( inputBytes, 0, copy, 0, inputBytes.length );
+ return new ByteArrayInputStream( copy );
+ }
+
+ public List<ModelProperty> getModelProperties() throws IOException {
+ if(modelProperties == null)
+ {
+ Set<String> s = new HashSet<String>();
+ //TODO: Should add all collections from ProjectUri
+ s.addAll(PomTransformer.URIS);
+ s.add(ProjectUri.Build.PluginManagement.Plugins.Plugin.Executions.xUri);
+ s.add(ProjectUri.DependencyManagement.Dependencies.Dependency.Exclusions.xUri);
+ s.add(ProjectUri.Dependencies.Dependency.Exclusions.xUri);
+ s.add(ProjectUri.Build.Plugins.Plugin.Executions.xUri);
+ s.add(ProjectUri.Build.Plugins.Plugin.Executions.Execution.Goals.xURI);
+ s.add(ProjectUri.Reporting.Plugins.Plugin.ReportSets.xUri);
+ s.add(ProjectUri.Reporting.Plugins.Plugin.ReportSets.ReportSet.configuration);
+ s.add(ProjectUri.Build.Plugins.Plugin.Executions.Execution.configuration);
+ modelProperties = ModelMarshaller.marshallXmlToModelProperties(
+ getInputStream(), ProjectUri.baseUri, s );
+ }
+ return new ArrayList<ModelProperty>(modelProperties);
+ }
+
+ public String getEventHistory() {
+ return eventHistory;
+ }
+
+ public void setEventHistory(String eventHistory) {
+ this.eventHistory = eventHistory;
+ }
+
+ /**
+ * Returns XML model as string
+ *
+ * @return XML model as string
+ */
+ public String asString()
+ {
+ try
+ {
+ return IOUtil.toString( ReaderFactory.newXmlReader( new ByteArrayInputStream( inputBytes ) ) );
+ }
+ catch ( IOException ioe )
+ {
+ // should not occur: everything is in-memory
+ return "";
+ }
+ }
+}
Modified: maven/components/sisbell-plugin-manager/maven-project/src/main/java/org/apache/maven/project/builder/PomClassicTransformer.java
URL: http://svn.apache.org/viewvc/maven/components/sisbell-plugin-manager/maven-project/src/main/java/org/apache/maven/project/builder/PomClassicTransformer.java?rev=738893&r1=738892&r2=738893&view=diff
==============================================================================
--- maven/components/sisbell-plugin-manager/maven-project/src/main/java/org/apache/maven/project/builder/PomClassicTransformer.java (original)
+++ maven/components/sisbell-plugin-manager/maven-project/src/main/java/org/apache/maven/project/builder/PomClassicTransformer.java Thu Jan 29 15:26:30 2009
@@ -44,6 +44,10 @@
DomainModel domainModel)
throws IOException
{
+ if(! ( domainModel instanceof PomClassicDomainModel ) )
+ {
+ return;
+ }
Interpolator.interpolateModelProperties( modelProperties, interpolatorProperties, (PomClassicDomainModel) domainModel);
}
}
Modified: maven/components/sisbell-plugin-manager/maven-project/src/main/java/org/apache/maven/project/builder/impl/DefaultProjectBuilder.java
URL: http://svn.apache.org/viewvc/maven/components/sisbell-plugin-manager/maven-project/src/main/java/org/apache/maven/project/builder/impl/DefaultProjectBuilder.java?rev=738893&r1=738892&r2=738893&view=diff
==============================================================================
--- maven/components/sisbell-plugin-manager/maven-project/src/main/java/org/apache/maven/project/builder/impl/DefaultProjectBuilder.java (original)
+++ maven/components/sisbell-plugin-manager/maven-project/src/main/java/org/apache/maven/project/builder/impl/DefaultProjectBuilder.java Thu Jan 29 15:26:30 2009
@@ -23,7 +23,6 @@
import java.io.IOException;
import java.io.Reader;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
@@ -34,21 +33,12 @@
import org.apache.maven.artifact.factory.ArtifactFactory;
import org.apache.maven.model.Model;
import org.apache.maven.model.Parent;
+import org.apache.maven.model.Plugin;
import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
import org.apache.maven.project.MavenProject;
import org.apache.maven.project.ProjectBuilderConfiguration;
-import org.apache.maven.project.builder.ArtifactModelContainerFactory;
-import org.apache.maven.project.builder.IdModelContainerFactory;
-import org.apache.maven.project.builder.PomArtifactResolver;
-import org.apache.maven.project.builder.PomClassicDomainModel;
-import org.apache.maven.project.builder.PomClassicDomainModelFactory;
-import org.apache.maven.project.builder.PomClassicTransformer;
-import org.apache.maven.project.builder.PomTransformer;
-import org.apache.maven.project.builder.ProjectBuilder;
-import org.apache.maven.shared.model.DomainModel;
-import org.apache.maven.shared.model.InterpolatorProperty;
-import org.apache.maven.shared.model.ModelEventListener;
-import org.apache.maven.shared.model.ModelTransformerContext;
+import org.apache.maven.project.builder.*;
+import org.apache.maven.shared.model.*;
import org.codehaus.plexus.component.annotations.Component;
import org.codehaus.plexus.component.annotations.Requirement;
import org.codehaus.plexus.logging.LogEnabled;
@@ -61,7 +51,7 @@
*/
@Component(role = ProjectBuilder.class)
public class DefaultProjectBuilder
- implements ProjectBuilder, LogEnabled
+ implements ProjectBuilder, Mixer, LogEnabled
{
@Requirement
private ArtifactFactory artifactFactory;
@@ -371,5 +361,28 @@
}
return superModel;
- }
+ }
+
+ public Model mixPlugin(Plugin plugin, Model model) throws IOException
+ {
+ //TODO - interpolation
+ 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 ) );
+ return transformedDomainModel.getModel();
+ // List<ModelProperty> pluginProperties = ModelMarshaller.marshallXmlToModelProperties(
+ // (new PluginMixin(plugin)).getInputStream(), ProjectUri.Build.Plugins.xUri, null);
+
+ }
}
Added: maven/components/sisbell-plugin-manager/maven-project/src/test/java/org/apache/maven/project/builder/PluginBuilderTest.java
URL: http://svn.apache.org/viewvc/maven/components/sisbell-plugin-manager/maven-project/src/test/java/org/apache/maven/project/builder/PluginBuilderTest.java?rev=738893&view=auto
==============================================================================
--- maven/components/sisbell-plugin-manager/maven-project/src/test/java/org/apache/maven/project/builder/PluginBuilderTest.java (added)
+++ maven/components/sisbell-plugin-manager/maven-project/src/test/java/org/apache/maven/project/builder/PluginBuilderTest.java Thu Jan 29 15:26:30 2009
@@ -0,0 +1,4 @@
+package org.apache.maven.project.builder;
+
+public class PluginBuilderTest {
+}
Modified: maven/components/sisbell-plugin-manager/maven-project/src/test/java/org/apache/maven/project/builder/PomConstructionTest.java
URL: http://svn.apache.org/viewvc/maven/components/sisbell-plugin-manager/maven-project/src/test/java/org/apache/maven/project/builder/PomConstructionTest.java?rev=738893&r1=738892&r2=738893&view=diff
==============================================================================
--- maven/components/sisbell-plugin-manager/maven-project/src/test/java/org/apache/maven/project/builder/PomConstructionTest.java (original)
+++ maven/components/sisbell-plugin-manager/maven-project/src/test/java/org/apache/maven/project/builder/PomConstructionTest.java Thu Jan 29 15:26:30 2009
@@ -21,14 +21,19 @@
import java.io.File;
import java.io.IOException;
+import java.io.FileInputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.maven.MavenTools;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.project.harness.PomTestWrapper;
import org.codehaus.plexus.PlexusTestCase;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
public class PomConstructionTest
extends PlexusTestCase
@@ -36,19 +41,27 @@
private static String BASE_POM_DIR = "src/test/resources-project-builder";
+ private static String BASE_MIXIN_DIR = "src/test/resources-mixins";
+
private ProjectBuilder projectBuilder;
+ private Mixer mixer;
+
private MavenTools mavenTools;
private PomArtifactResolver pomArtifactResolver;
private File testDirectory;
+ private File testMixinDirectory;
+
protected void setUp()
throws Exception
{
testDirectory = new File( getBasedir(), BASE_POM_DIR );
+ testMixinDirectory = new File( getBasedir(), BASE_MIXIN_DIR );
projectBuilder = lookup( ProjectBuilder.class );
+ mixer = (Mixer) projectBuilder;
mavenTools = lookup( MavenTools.class );
pomArtifactResolver = new PomArtifactResolver()
{
@@ -62,6 +75,18 @@
};
}
+ public void testPluginMergeSimple()
+ throws Exception
+ {
+ Model model = buildPom( "plugin-merge-simple" ).getDomainModel().getModel();
+ Model plugin = buildMixin("plugins/simple");
+
+ model = mixer.mixPlugin((Plugin) plugin.getBuild().getPlugins().get(0), model);
+
+ PomTestWrapper pom = new PomTestWrapper( model );
+ assertEquals( "FAILED", pom.getValue( "build/plugins[1]/configuration[1]/propertiesFile" ) );
+ }
+
// Some better conventions for the test poms needs to be created and each of these tests
// that represent a verification of a specification item needs to be a couple lines at most.
// The expressions help a lot, but we need a clean to pick up a directory of POMs, automatically load
@@ -731,11 +756,24 @@
return new PomTestWrapper( pomFile, projectBuilder.buildModel( pomFile, null, pomArtifactResolver ) );
}
+ private Model buildMixin( String mixinPath )
+ throws IOException, XmlPullParserException
+ {
+ File mixinFile = new File( testMixinDirectory , mixinPath );
+ if ( mixinFile.isDirectory() )
+ {
+ mixinFile = new File( mixinFile, "mixin.xml" );
+ }
+ FileInputStream pluginStream = new FileInputStream( mixinFile );
+ MavenXpp3Reader reader = new MavenXpp3Reader();
+ return reader.read(pluginStream, false);
+ }
+
protected void assertModelEquals( PomTestWrapper pom, Object expected, String expression )
{
assertEquals( expected, pom.getValue( expression ) );
}
-
+
// Need to get this to walk around a directory and automatically build up the artifact set. If we
// follow some standard conventions this can be simple.
class FileBasedPomArtifactResolver
Added: maven/components/sisbell-plugin-manager/maven-project/src/test/resources-mixins/plugins/simple/mixin.xml
URL: http://svn.apache.org/viewvc/maven/components/sisbell-plugin-manager/maven-project/src/test/resources-mixins/plugins/simple/mixin.xml?rev=738893&view=auto
==============================================================================
--- maven/components/sisbell-plugin-manager/maven-project/src/test/resources-mixins/plugins/simple/mixin.xml (added)
+++ maven/components/sisbell-plugin-manager/maven-project/src/test/resources-mixins/plugins/simple/mixin.xml Thu Jan 29 15:26:30 2009
@@ -0,0 +1,14 @@
+<project>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-configuration</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ <configuration>
+ <propertiesFile>FAILED</propertiesFile>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
Added: maven/components/sisbell-plugin-manager/maven-project/src/test/resources-project-builder/plugin-merge-simple/pom.xml
URL: http://svn.apache.org/viewvc/maven/components/sisbell-plugin-manager/maven-project/src/test/resources-project-builder/plugin-merge-simple/pom.xml?rev=738893&view=auto
==============================================================================
--- maven/components/sisbell-plugin-manager/maven-project/src/test/resources-project-builder/plugin-merge-simple/pom.xml (added)
+++ maven/components/sisbell-plugin-manager/maven-project/src/test/resources-project-builder/plugin-merge-simple/pom.xml Thu Jan 29 15:26:30 2009
@@ -0,0 +1,17 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.sonatype.nexus</groupId>
+ <artifactId>nexus-indexer</artifactId>
+ <version>1.1.3-SNAPSHOT</version>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.its.plugins</groupId>
+ <artifactId>maven-it-plugin-configuration</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ </plugin>
+ </plugins>
+ </build>
+</project>
\ No newline at end of file
Re: svn commit: r738893 - in /maven/components/sisbell-plugin-manager: maven-project-builder/src/main/java/org/apache/maven/project/builder/ maven-project/src/main/java/org/apache/maven/project/builder/ maven-project/src/main/java/org/apache/maven/project/...
Posted by Brett Porter <br...@apache.org>.
On 30/01/2009, at 2:26 AM, sisbell@apache.org wrote:
> Author: sisbell
> Date: Thu Jan 29 15:26:30 2009
> New Revision: 738893
>
> URL: http://svn.apache.org/viewvc?rev=738893&view=rev
Hi Shane, I think you forgot the 'branches' part of the URL when this
was created - can you move it over please?
Thanks,
Brett
--
Brett Porter
brett@apache.org
http://blogs.exist.com/bporter/
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org