[MRELEASE-952] Replace JDom as XML transformer
Rewrite plugins based on Model


git-svn-id: https://svn.apache.org/repos/asf/maven/release/trunk@1742718 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractRewritePomsPhase.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractRewritePomsPhase.java
index 0f55a2d..c42b70e 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractRewritePomsPhase.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractRewritePomsPhase.java
@@ -36,8 +36,10 @@
 
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.ArtifactUtils;
+import org.apache.maven.model.Build;
 import org.apache.maven.model.Model;
 import org.apache.maven.model.ModelBase;
+import org.apache.maven.model.Profile;
 import org.apache.maven.model.Scm;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.scm.ScmException;
@@ -334,12 +336,27 @@
         roots.add( rootElement );
         roots.addAll( getChildren( rootElement, "profiles", "profile" ) );
 
-        if ( modelTarget.getBuild() != null )
+        Build buildTarget = modelTarget.getBuild();
+        if ( buildTarget != null )
         {
             // profile.build.extensions doesn't exist, so only rewrite project.build.extensions  
-            rewriteArtifactVersions( toMavenCoordinates( modelTarget.getBuild().getExtensions() ), mappedVersions,
+            rewriteArtifactVersions( toMavenCoordinates( buildTarget.getExtensions() ), mappedVersions,
                                      resolvedSnapshotDependencies, originalVersions, model, properties, result,
                                      releaseDescriptor );
+            
+            rewriteArtifactVersions( toMavenCoordinates( buildTarget.getPlugins() ), mappedVersions,
+                                     resolvedSnapshotDependencies, originalVersions, model, properties, result,
+                                     releaseDescriptor );
+        }
+        
+        for ( Profile profile : modelTarget.getProfiles() )
+        {
+            if ( profile.getBuild() != null )
+            {
+                rewriteArtifactVersions( toMavenCoordinates( profile.getBuild().getPlugins() ), mappedVersions,
+                                         resolvedSnapshotDependencies, originalVersions, model, properties, result,
+                                         releaseDescriptor );
+            }
         }
         
         List<ModelBase> modelBases = new ArrayList<ModelBase>();
@@ -357,14 +374,12 @@
                                          mappedVersions, resolvedSnapshotDependencies, originalVersions, model,
                                          properties, result, releaseDescriptor );
             }
+            
         }
 
         for ( Element root : roots )
         {
-            
-
             List<Element> pluginElements = new ArrayList<Element>();
-            pluginElements.addAll( getChildren( root, "build", "plugins", "plugin" ) );
             pluginElements.addAll( getChildren( root, "build", "pluginManagement", "plugins", "plugin" ) );
             
             List<MavenCoordinate> pluginCoordinates = new ArrayList<MavenCoordinate>( pluginElements.size() );
@@ -373,6 +388,8 @@
                 pluginCoordinates.add( new JDomMavenCoordinate( pluginElement ) );
             }
 
+            pluginElements.addAll( getChildren( root, "build", "plugins", "plugin" ) );
+
             rewriteArtifactVersions( pluginCoordinates, mappedVersions, resolvedSnapshotDependencies, originalVersions,
                                     model, properties, result, releaseDescriptor );
 
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomBuild.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomBuild.java
index 6153fb7..b35a969 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomBuild.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomBuild.java
@@ -274,7 +274,25 @@
     @Override

     public List<Plugin> getPlugins()

     {

-        throw new UnsupportedOperationException();

+        Element pluginsElm = build.getChild( "plugins", build.getNamespace() );

+        if ( pluginsElm == null )

+        {

+            return Collections.emptyList();

+        }

+        else

+        {

+            List<Element> pluginElms =

+                pluginsElm.getChildren( "plugin", build.getNamespace() );

+

+            List<Plugin> plugins = new ArrayList<Plugin>( pluginElms.size() );

+

+            for ( Element pluginElm : pluginElms )

+            {

+                plugins.add( new JDomPlugin( pluginElm ) );

+            }

+

+            return plugins;

+        }

     }

 

     @Override

diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomModel.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomModel.java
index ba3f963..951d7f5 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomModel.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomModel.java
@@ -96,7 +96,6 @@
         return project.getChild( "parent", project.getNamespace() );

     }

     

-    

     @Override

     public List<Profile> getProfiles()

     {

diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomPlugin.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomPlugin.java
new file mode 100644
index 0000000..f79fed7
--- /dev/null
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomPlugin.java
@@ -0,0 +1,193 @@
+package org.apache.maven.shared.release.transform.jdom;

+

+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you 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.util.ArrayList;

+import java.util.Collections;

+import java.util.List;

+import java.util.Map;

+

+import org.apache.maven.model.Dependency;

+import org.apache.maven.model.Plugin;

+import org.apache.maven.model.PluginExecution;

+import org.apache.maven.shared.release.transform.MavenCoordinate;

+import org.jdom.Element;

+

+/**

+ * JDom implementation of poms PLUGIN element

+ * 

+ * @author Robert Scholte

+ * @since 3.0

+ */

+public class JDomPlugin extends Plugin implements MavenCoordinate

+{

+    private Element plugin;

+    private final MavenCoordinate coordinate;

+

+    public JDomPlugin( Element plugin )

+    {

+        this.plugin = plugin;

+        this.coordinate = new JDomMavenCoordinate( plugin );

+    }

+

+    @Override

+    public void addDependency( Dependency dependency )

+    {

+        throw new UnsupportedOperationException();

+    }

+

+    @Override

+    public void addExecution( PluginExecution pluginExecution )

+    {

+        throw new UnsupportedOperationException();

+    }

+

+    @Override

+    public String getArtifactId()

+    {

+        return coordinate.getArtifactId();

+    }

+

+    @Override

+    public List<Dependency> getDependencies()

+    {

+        Element dependenciesElm = plugin.getChild( "dependencies", plugin.getNamespace() );

+        if ( dependenciesElm == null )

+        {

+            return Collections.emptyList();

+        }

+        else

+        {

+            List<Element> dependencyElms =

+                dependenciesElm.getChildren( "dependency", plugin.getNamespace() );

+

+            List<Dependency> dependencies = new ArrayList<Dependency>( dependencyElms.size() );

+

+            for ( Element dependencyElm : dependencyElms )

+            {

+                dependencies.add( new JDomDependency( dependencyElm ) );

+            }

+

+            return dependencies;

+        }

+    }

+

+    @Override

+    public List<PluginExecution> getExecutions()

+    {

+        throw new UnsupportedOperationException();

+    }

+

+    @Override

+    public Object getGoals()

+    {

+        throw new UnsupportedOperationException();

+    }

+

+    @Override

+    public String getGroupId()

+    {

+        return coordinate.getGroupId();

+    }

+

+    @Override

+    public String getVersion()

+    {

+        return coordinate.getVersion();

+    }

+

+    @Override

+    public boolean isExtensions()

+    {

+        throw new UnsupportedOperationException();

+    }

+

+    @Override

+    public void removeDependency( Dependency dependency )

+    {

+        throw new UnsupportedOperationException();

+    }

+

+    @Override

+    public void removeExecution( PluginExecution pluginExecution )

+    {

+        throw new UnsupportedOperationException();

+    }

+

+    @Override

+    public void setArtifactId( String artifactId )

+    {

+        throw new UnsupportedOperationException();

+    }

+

+    @Override

+    public void setDependencies( List<Dependency> dependencies )

+    {

+        throw new UnsupportedOperationException();

+    }

+

+    @Override

+    public void setExecutions( List<PluginExecution> executions )

+    {

+        throw new UnsupportedOperationException();

+    }

+

+    @Override

+    public void setExtensions( boolean extensions )

+    {

+        throw new UnsupportedOperationException();

+    }

+

+    @Override

+    public void setGoals( Object goals )

+    {

+        throw new UnsupportedOperationException();

+    }

+

+    @Override

+    public void setGroupId( String groupId )

+    {

+        throw new UnsupportedOperationException();

+    }

+

+    @Override

+    public void setVersion( String version )

+    {

+        coordinate.setVersion( version );

+    }

+

+    @Override

+    public void flushExecutionMap()

+    {

+        throw new UnsupportedOperationException();

+    }

+

+    @Override

+    public Map getExecutionsAsMap()

+    {

+        throw new UnsupportedOperationException();

+    }

+    

+    @Override

+    public String getName()

+    {

+        return "plugin";

+    }

+}