Author: rfscholte Date: Sat May 7 22:24:40 2016 New Revision: 1742759 URL: http://svn.apache.org/viewvc?rev=1742759&view=rev Log: [MRELEASE-952] Replace JDom as XML transformer Implement loading of ETL, Phases are now free from org.jdom classes
Modified: maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractRewritePomsPhase.java maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomModelETL.java Modified: maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractRewritePomsPhase.java URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractRewritePomsPhase.java?rev=1742759&r1=1742758&r2=1742759&view=diff ============================================================================== --- maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractRewritePomsPhase.java (original) +++ maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractRewritePomsPhase.java Sat May 7 22:24:40 2016 @@ -21,10 +21,8 @@ package org.apache.maven.shared.release. import java.io.File; import java.io.IOException; -import java.io.Writer; import java.util.ArrayList; import java.util.Collection; -import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Properties; @@ -59,15 +57,7 @@ import org.apache.maven.shared.release.s import org.apache.maven.shared.release.transform.MavenCoordinate; import org.apache.maven.shared.release.transform.jdom.JDomModelETL; import org.apache.maven.shared.release.util.ReleaseUtil; -import org.codehaus.plexus.util.IOUtil; import org.codehaus.plexus.util.StringUtils; -import org.codehaus.plexus.util.WriterFactory; -import org.jdom.Document; -import org.jdom.Element; -import org.jdom.Namespace; -import org.jdom.filter.ElementFilter; -import org.jdom.output.Format; -import org.jdom.output.XMLOutputter; /** * Base class for rewriting phases. @@ -182,6 +172,8 @@ public abstract class AbstractRewritePom JDomModelETL etl = new JDomModelETL(); etl.setLs( ls ); + etl.setProject( project ); + etl.setReleaseDescriptor( releaseDescriptor ); etl.extract( pomFile ); @@ -210,20 +202,18 @@ public abstract class AbstractRewritePom transformDocument( project, etl.getModel(), releaseDescriptor, reactorProjects, scmRepository, result, simulate ); - Document document = etl.getDocument(); - String intro = etl.getIntro(); - String outtro = etl.getOuttro(); - + File outputFile; if ( simulate ) { - File outputFile = new File( pomFile.getParentFile(), pomFile.getName() + "." + pomSuffix ); - writePom( outputFile, document, releaseDescriptor, project.getModelVersion(), intro, outtro ); + outputFile = new File( pomFile.getParentFile(), pomFile.getName() + "." + pomSuffix ); } else { - writePom( pomFile, document, releaseDescriptor, project.getModelVersion(), intro, outtro, scmRepository, - provider ); + outputFile = pomFile; + prepareScm( pomFile, releaseDescriptor, scmRepository, provider ); } + etl.load( outputFile ); + } private void transformDocument( MavenProject project, Model modelTarget, ReleaseDescriptor releaseDescriptor, @@ -547,8 +537,8 @@ public abstract class AbstractRewritePom } } - private void writePom( File pomFile, Document document, ReleaseDescriptor releaseDescriptor, String modelVersion, - String intro, String outtro, ScmRepository repository, ScmProvider provider ) + private void prepareScm( File pomFile, ReleaseDescriptor releaseDescriptor, ScmRepository repository, + ScmProvider provider ) throws ReleaseExecutionException, ReleaseScmCommandException { try @@ -568,67 +558,9 @@ public abstract class AbstractRewritePom { throw new ReleaseExecutionException( "An error occurred enabling edit mode: " + e.getMessage(), e ); } - - writePom( pomFile, document, releaseDescriptor, modelVersion, intro, outtro ); } - private void writePom( File pomFile, Document document, ReleaseDescriptor releaseDescriptor, String modelVersion, - String intro, String outtro ) - throws ReleaseExecutionException - { - Element rootElement = document.getRootElement(); - - if ( releaseDescriptor.isAddSchema() ) - { - Namespace pomNamespace = Namespace.getNamespace( "", "http://maven.apache.org/POM/" + modelVersion ); - rootElement.setNamespace( pomNamespace ); - Namespace xsiNamespace = Namespace.getNamespace( "xsi", "http://www.w3.org/2001/XMLSchema-instance" ); - rootElement.addNamespaceDeclaration( xsiNamespace ); - - if ( rootElement.getAttribute( "schemaLocation", xsiNamespace ) == null ) - { - rootElement.setAttribute( "schemaLocation", "http://maven.apache.org/POM/" + modelVersion - + " http://maven.apache.org/maven-v" + modelVersion.replace( '.', '_' ) + ".xsd", xsiNamespace ); - } - - // the empty namespace is considered equal to the POM namespace, so match them up to avoid extra xmlns="" - ElementFilter elementFilter = new ElementFilter( Namespace.getNamespace( "" ) ); - for ( Iterator<?> i = rootElement.getDescendants( elementFilter ); i.hasNext(); ) - { - Element e = (Element) i.next(); - e.setNamespace( pomNamespace ); - } - } - - Writer writer = null; - try - { - writer = WriterFactory.newXmlWriter( pomFile ); - - if ( intro != null ) - { - writer.write( intro ); - } - - Format format = Format.getRawFormat(); - format.setLineSeparator( ls ); - XMLOutputter out = new XMLOutputter( format ); - out.output( document.getRootElement(), writer ); - - if ( outtro != null ) - { - writer.write( outtro ); - } - } - catch ( IOException e ) - { - throw new ReleaseExecutionException( "Error writing POM: " + e.getMessage(), e ); - } - finally - { - IOUtil.close( writer ); - } - } + protected abstract String getResolvedSnapshotVersion( String artifactVersionlessKey, Map<String, Map<String, String>> resolvedSnapshots ); Modified: maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomModelETL.java URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomModelETL.java?rev=1742759&r1=1742758&r2=1742759&view=diff ============================================================================== --- maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomModelETL.java (original) +++ maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomModelETL.java Sat May 7 22:24:40 2016 @@ -23,18 +23,26 @@ import java.io.File; import java.io.IOException; import java.io.StringReader; import java.io.StringWriter; +import java.io.Writer; import java.util.Iterator; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.apache.maven.model.Model; +import org.apache.maven.project.MavenProject; import org.apache.maven.shared.release.ReleaseExecutionException; +import org.apache.maven.shared.release.config.ReleaseDescriptor; import org.apache.maven.shared.release.util.ReleaseUtil; +import org.codehaus.plexus.util.IOUtil; +import org.codehaus.plexus.util.WriterFactory; import org.jdom.CDATA; import org.jdom.Comment; import org.jdom.Document; +import org.jdom.Element; import org.jdom.JDOMException; +import org.jdom.Namespace; import org.jdom.filter.ContentFilter; +import org.jdom.filter.ElementFilter; import org.jdom.input.SAXBuilder; import org.jdom.output.Format; import org.jdom.output.XMLOutputter; @@ -47,6 +55,10 @@ import org.jdom.output.XMLOutputter; */ public class JDomModelETL { + private ReleaseDescriptor releaseDescriptor; + + private MavenProject project; + private Document document; private String intro = null; @@ -59,6 +71,16 @@ public class JDomModelETL this.ls = ls; } + public void setReleaseDescriptor( ReleaseDescriptor releaseDescriptor ) + { + this.releaseDescriptor = releaseDescriptor; + } + + public void setProject( MavenProject project ) + { + this.project = project; + } + public void extract( File pomFile ) throws ReleaseExecutionException { try @@ -133,9 +155,9 @@ public class JDomModelETL } - public void load() + public void load( File targetFile ) throws ReleaseExecutionException { - + writePom( targetFile, document, releaseDescriptor, project.getModelVersion(), intro, outtro ); } // will be removed once transform() is implemented @@ -144,24 +166,6 @@ public class JDomModelETL return new JDomModel( document ); } - // will be removed once load() is implemented - public Document getDocument() - { - return document; - } - - // will be removed once load() is implemented - public String getIntro() - { - return intro; - } - - // will be removed once load() is implemented - public String getOuttro() - { - return outtro; - } - private void normaliseLineEndings( Document document ) { for ( Iterator<?> i = document.getDescendants( new ContentFilter( ContentFilter.COMMENT ) ); i.hasNext(); ) @@ -175,5 +179,63 @@ public class JDomModelETL c.setText( ReleaseUtil.normalizeLineEndings( c.getText(), ls ) ); } } + + private void writePom( File pomFile, Document document, ReleaseDescriptor releaseDescriptor, String modelVersion, + String intro, String outtro ) + throws ReleaseExecutionException + { + Element rootElement = document.getRootElement(); + + if ( releaseDescriptor.isAddSchema() ) + { + Namespace pomNamespace = Namespace.getNamespace( "", "http://maven.apache.org/POM/" + modelVersion ); + rootElement.setNamespace( pomNamespace ); + Namespace xsiNamespace = Namespace.getNamespace( "xsi", "http://www.w3.org/2001/XMLSchema-instance" ); + rootElement.addNamespaceDeclaration( xsiNamespace ); + + if ( rootElement.getAttribute( "schemaLocation", xsiNamespace ) == null ) + { + rootElement.setAttribute( "schemaLocation", "http://maven.apache.org/POM/" + modelVersion + + " http://maven.apache.org/maven-v" + modelVersion.replace( '.', '_' ) + ".xsd", xsiNamespace ); + } + + // the empty namespace is considered equal to the POM namespace, so match them up to avoid extra xmlns="" + ElementFilter elementFilter = new ElementFilter( Namespace.getNamespace( "" ) ); + for ( Iterator<?> i = rootElement.getDescendants( elementFilter ); i.hasNext(); ) + { + Element e = (Element) i.next(); + e.setNamespace( pomNamespace ); + } + } + + Writer writer = null; + try + { + writer = WriterFactory.newXmlWriter( pomFile ); + + if ( intro != null ) + { + writer.write( intro ); + } + + Format format = Format.getRawFormat(); + format.setLineSeparator( ls ); + XMLOutputter out = new XMLOutputter( format ); + out.output( document.getRootElement(), writer ); + + if ( outtro != null ) + { + writer.write( outtro ); + } + } + catch ( IOException e ) + { + throw new ReleaseExecutionException( "Error writing POM: " + e.getMessage(), e ); + } + finally + { + IOUtil.close( writer ); + } + } }