[MRELEASE-952] Replace JDom as XML transformer
Rewrite reporting plugins


git-svn-id: https://svn.apache.org/repos/asf/maven/release/trunk@1742721 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 bdd093d..6f12bdf 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
@@ -26,7 +26,6 @@
 import java.io.Writer;
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
@@ -62,7 +61,6 @@
 import org.apache.maven.shared.release.scm.ScmRepositoryConfigurator;
 import org.apache.maven.shared.release.scm.ScmTranslator;
 import org.apache.maven.shared.release.transform.MavenCoordinate;
-import org.apache.maven.shared.release.transform.jdom.JDomMavenCoordinate;
 import org.apache.maven.shared.release.transform.jdom.JDomModel;
 import org.apache.maven.shared.release.util.ReleaseUtil;
 import org.codehaus.plexus.util.IOUtil;
@@ -334,10 +332,6 @@
 
         rewriteVersion( modelTarget, mappedVersions, projectId, project, parentVersion );
 
-        List<Element> roots = new ArrayList<Element>();
-        roots.add( rootElement );
-        roots.addAll( getChildren( rootElement, "profiles", "profile" ) );
-
         Build buildTarget = modelTarget.getBuild();
         if ( buildTarget != null )
         {
@@ -420,13 +414,13 @@
                                          mappedVersions, resolvedSnapshotDependencies, originalVersions, model,
                                          properties, result, releaseDescriptor );
             }
-        }
-
-        for ( Element root : roots )
-        {
-            rewriteArtifactVersions( getMavenCoordinates( root, "reporting", "plugins", "plugin" ), mappedVersions,
-                                    resolvedSnapshotDependencies, originalVersions, model, properties, result,
-                                    releaseDescriptor );
+            
+            if ( modelBase.getReporting() != null )
+            {
+                rewriteArtifactVersions( toMavenCoordinates( modelBase.getReporting().getPlugins() ), mappedVersions,
+                                         resolvedSnapshotDependencies, originalVersions, model, properties, result,
+                                         releaseDescriptor );
+            }
         }
         
         String commonBasedir;
@@ -444,33 +438,6 @@
                       commonBasedir );
     }
 
-    @SuppressWarnings( "unchecked" )
-    private List<Element> getChildren( Element root, String... names )
-    {
-        Element parent = root;
-        for ( int i = 0; i < names.length - 1 && parent != null; i++ )
-        {
-            parent = parent.getChild( names[i], parent.getNamespace() );
-        }
-        if ( parent == null )
-        {
-            return Collections.emptyList();
-        }
-        return parent.getChildren( names[names.length - 1], parent.getNamespace() );
-    }
-    
-    private List<MavenCoordinate> getMavenCoordinates( Element root, String... names )
-    {
-        List<Element> children = getChildren( root, names );
-        
-        List<MavenCoordinate> coordinates = new ArrayList<MavenCoordinate>( children.size() );
-        for ( Element child : children )
-        {
-            coordinates.add( new JDomMavenCoordinate( child ) );
-        }
-        return coordinates;
-    }
-
     private void rewriteVersion( Model modelTarget, Map<String, String> mappedVersions, String projectId,
                                  MavenProject project, String parentVersion )
         throws ReleaseFailureException
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 951d7f5..b727269 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
@@ -30,6 +30,7 @@
 import org.apache.maven.model.Model;

 import org.apache.maven.model.Parent;

 import org.apache.maven.model.Profile;

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

 import org.apache.maven.model.Scm;

 import org.jdom.Document;

 import org.jdom.Element;

@@ -136,6 +137,21 @@
     }

     

     @Override

+    public Reporting getReporting()

+    {

+        Element reporting = project.getChild( "reporting", project.getNamespace() );

+        

+        if ( reporting == null )

+        {

+            return null;

+        }

+        else

+        {

+            return new JDomReporting( reporting );

+        }

+    }

+    

+    @Override

     public void setScm( Scm scm )

     {

         if ( scm == null )

diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomReportPlugin.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomReportPlugin.java
new file mode 100644
index 0000000..4a10ace
--- /dev/null
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomReportPlugin.java
@@ -0,0 +1,165 @@
+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.List;

+import java.util.Map;

+

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

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

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

+import org.jdom.Element;

+

+/**

+ * JDom implementation of poms reports PLUGIN element

+ * 

+ * @author Robert Scholte

+ * @since 3.0

+ */

+public class JDomReportPlugin

+    extends ReportPlugin implements MavenCoordinate

+{

+    private final MavenCoordinate coordinate;

+

+    public JDomReportPlugin( Element reportPlugin )

+    {

+        this.coordinate = new JDomMavenCoordinate( reportPlugin );

+    }

+

+    @Override

+    public void addReportSet( ReportSet reportSet )

+    {

+        throw new UnsupportedOperationException();

+    }

+

+    @Override

+    public String getArtifactId()

+    {

+        return coordinate.getArtifactId();

+    }

+

+    @Override

+    public Object getConfiguration()

+    {

+        throw new UnsupportedOperationException();

+    }

+

+    @Override

+    public String getGroupId()

+    {

+        return coordinate.getGroupId();

+    }

+

+    @Override

+    public String getInherited()

+    {

+        throw new UnsupportedOperationException();

+    }

+

+    @Override

+    public List<ReportSet> getReportSets()

+    {

+        throw new UnsupportedOperationException();

+    }

+

+    @Override

+    public String getVersion()

+    {

+        return coordinate.getVersion();

+    }

+

+    @Override

+    public void removeReportSet( ReportSet reportSet )

+    {

+        throw new UnsupportedOperationException();

+    }

+

+    @Override

+    public void setArtifactId( String artifactId )

+    {

+        throw new UnsupportedOperationException();

+    }

+

+    @Override

+    public void setConfiguration( Object configuration )

+    {

+        throw new UnsupportedOperationException();

+    }

+

+    @Override

+    public void setGroupId( String groupId )

+    {

+        throw new UnsupportedOperationException();

+    }

+

+    @Override

+    public void setInherited( String inherited )

+    {

+        throw new UnsupportedOperationException();

+    }

+

+    @Override

+    public void setReportSets( List<ReportSet> reportSets )

+    {

+        throw new UnsupportedOperationException();

+    }

+

+    @Override

+    public void setVersion( String version )

+    {

+        coordinate.setVersion( version );

+    }

+

+    @Override

+    public void flushReportSetMap()

+    {

+        throw new UnsupportedOperationException();

+    }

+

+    @Override

+    public Map getReportSetsAsMap()

+    {

+        throw new UnsupportedOperationException();

+    }

+

+    @Override

+    public String getKey()

+    {

+        throw new UnsupportedOperationException();

+    }

+

+    @Override

+    public void unsetInheritanceApplied()

+    {

+        throw new UnsupportedOperationException();

+    }

+

+    @Override

+    public boolean isInheritanceApplied()

+    {

+        throw new UnsupportedOperationException();

+    }

+    

+    @Override

+    public String getName()

+    {

+        return "plugin";

+    }

+}

diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomReporting.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomReporting.java
new file mode 100644
index 0000000..554e241
--- /dev/null
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomReporting.java
@@ -0,0 +1,141 @@
+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.ReportPlugin;

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

+import org.jdom.Element;

+

+/**

+ * JDom implementation of poms REPORTING element

+ * 

+ * @author Robert Scholte

+ * @since 3.0

+ */

+public class JDomReporting extends Reporting

+{

+

+    private final Element reporting;

+    

+    public JDomReporting( Element reporting )

+    {

+        this.reporting = reporting;

+    }

+

+    @Override

+    public void addPlugin( ReportPlugin reportPlugin )

+    {

+        throw new UnsupportedOperationException();

+    }

+

+    @Override

+    public String getOutputDirectory()

+    {

+        throw new UnsupportedOperationException();

+    }

+

+    @Override

+    public List<ReportPlugin> getPlugins()

+    {

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

+        if ( pluginsElm == null )

+        {

+            return Collections.emptyList();

+        }

+        else

+        {

+            List<Element> pluginElms = pluginsElm.getChildren( "plugin", reporting.getNamespace() );

+

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

+

+            for ( Element pluginElm : pluginElms )

+            {

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

+            }

+

+            return plugins;

+        }

+    }

+

+    @Override

+    public Boolean isExcludeDefaultsValue()

+    {

+        throw new UnsupportedOperationException();

+    }

+

+    @Override

+    public void removePlugin( ReportPlugin reportPlugin )

+    {

+        throw new UnsupportedOperationException();

+    }

+

+    @Override

+    public void setExcludeDefaultsValue( Boolean excludeDefaultsValue )

+    {

+        throw new UnsupportedOperationException();

+    }

+

+    @Override

+    public void setOutputDirectory( String outputDirectory )

+    {

+        throw new UnsupportedOperationException();

+    }

+

+    @Override

+    public void setPlugins( List<ReportPlugin> plugins )

+    {

+        throw new UnsupportedOperationException();

+    }

+

+    @Override

+    public void flushReportPluginMap()

+    {

+        throw new UnsupportedOperationException();

+    }

+

+    @Override

+    public Map getReportPluginsAsMap()

+    {

+        throw new UnsupportedOperationException();

+    }

+

+    @Override

+    public boolean isExcludeDefaults()

+    {

+        throw new UnsupportedOperationException();

+    }

+

+    @Override

+    public void setExcludeDefaults( boolean excludeDefaults )

+    {

+        throw new UnsupportedOperationException();

+    }

+

+    @Override

+    public void setExcludeDefaultsValue( String excludeDefaults )

+    {

+        throw new UnsupportedOperationException();

+    }

+}