Author: rfscholte Date: Sat May 7 13:24:55 2016 New Revision: 1742710 URL: http://svn.apache.org/viewvc?rev=1742710&view=rev Log: [MRELEASE-952] Replace JDom as XML transformer Rewrite extensions based on Model
Added: maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomBuild.java maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomDependency.java maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomExtension.java maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomModelBase.java maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomProfile.java 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/JDomModel.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=1742710&r1=1742709&r2=1742710&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 13:24:55 2016 @@ -37,6 +37,7 @@ import java.util.regex.Pattern; import org.apache.maven.artifact.Artifact; import org.apache.maven.artifact.ArtifactUtils; import org.apache.maven.model.Model; +import org.apache.maven.model.ModelBase; import org.apache.maven.model.Scm; import org.apache.maven.project.MavenProject; import org.apache.maven.scm.ScmException; @@ -318,19 +319,33 @@ public abstract class AbstractRewritePom releaseDescriptor.getResolvedSnapshotDependencies(); Model model = project.getModel(); - Properties properties = new JDomModel( rootElement ).getProperties(); + JDomModel modelTarget = new JDomModel( rootElement ); + + Properties properties = modelTarget.getProperties(); - String parentVersion = rewriteParent( project, new JDomModel( rootElement ), mappedVersions, + String parentVersion = rewriteParent( project, modelTarget, mappedVersions, resolvedSnapshotDependencies, originalVersions ); String projectId = ArtifactUtils.versionlessKey( project.getGroupId(), project.getArtifactId() ); - rewriteVersion( new JDomModel( rootElement ), mappedVersions, projectId, project, parentVersion ); + rewriteVersion( modelTarget, mappedVersions, projectId, project, parentVersion ); List<Element> roots = new ArrayList<Element>(); roots.add( rootElement ); roots.addAll( getChildren( rootElement, "profiles", "profile" ) ); + if ( modelTarget.getBuild() != null ) + { + // profile.build.extensions doesn't exist, so only rewrite project.build.extensions + rewriteArtifactVersions( toMavenCoordinates( modelTarget.getBuild().getExtensions() ), mappedVersions, + resolvedSnapshotDependencies, originalVersions, model, properties, result, + releaseDescriptor ); + } + + List<ModelBase> modelBases = new ArrayList<ModelBase>(); + modelBases.add( modelTarget ); + modelBases.addAll( modelTarget.getProfiles() ); + for ( Element root : roots ) { rewriteArtifactVersions( getMavenCoordinates( root, "dependencies", "dependency" ), mappedVersions, @@ -341,10 +356,6 @@ public abstract class AbstractRewritePom mappedVersions, resolvedSnapshotDependencies, originalVersions, model, properties, result, releaseDescriptor ); - rewriteArtifactVersions( getMavenCoordinates( root, "build", "extensions", "extension" ), mappedVersions, - resolvedSnapshotDependencies, originalVersions, model, properties, result, - releaseDescriptor ); - List<Element> pluginElements = new ArrayList<Element>(); pluginElements.addAll( getChildren( root, "build", "plugins", "plugin" ) ); pluginElements.addAll( getChildren( root, "build", "pluginManagement", "plugins", "plugin" ) ); @@ -369,7 +380,7 @@ public abstract class AbstractRewritePom resolvedSnapshotDependencies, originalVersions, model, properties, result, releaseDescriptor ); } - + String commonBasedir; try { @@ -381,7 +392,7 @@ public abstract class AbstractRewritePom + e.getMessage(), e ); } - transformScm( project, new JDomModel( rootElement ), releaseDescriptor, projectId, scmRepository, result, + transformScm( project, modelTarget, releaseDescriptor, projectId, scmRepository, result, commonBasedir ); } @@ -787,4 +798,23 @@ public abstract class AbstractRewritePom return StringUtils.replace( urlPath, trunkPath.substring( i ), tagPath.substring( i ) ); } } + + private Collection<MavenCoordinate> toMavenCoordinates( List<?> objects ) + { + Collection<MavenCoordinate> coordinates = new ArrayList<MavenCoordinate>( objects.size() ); + for ( Object object : objects ) + { + if ( object instanceof MavenCoordinate ) + { + coordinates.add( (MavenCoordinate) object ); + } + else + { + throw new UnsupportedOperationException(); + } + } + return coordinates; + } + + } Added: maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomBuild.java URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomBuild.java?rev=1742710&view=auto ============================================================================== --- maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomBuild.java (added) +++ maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomBuild.java Sat May 7 13:24:55 2016 @@ -0,0 +1,303 @@ +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.Build; +import org.apache.maven.model.Extension; +import org.apache.maven.model.Plugin; +import org.apache.maven.model.PluginManagement; +import org.apache.maven.model.Resource; +import org.jdom.Element; +/** + * JDom implementation of poms BUILD element + * + * @author Robert Scholte + * @since 3.0 + */ +public class JDomBuild + extends Build +{ + private final Element build; + + public JDomBuild( Element build ) + { + this.build = build; + } + + @Override + public void addExtension( Extension extension ) + { + throw new UnsupportedOperationException(); + } + + @Override + public List<Extension> getExtensions() + { + Element extensionsElm = build.getChild( "extensions", build.getNamespace() ); + if ( extensionsElm == null ) + { + return Collections.emptyList(); + } + else + { + List<Element> extensionElms = extensionsElm.getChildren( "extension", build.getNamespace() ); + + List<Extension> extensions = new ArrayList<Extension>( extensionElms.size() ); + for ( Element extensionElm : extensionElms ) + { + extensions.add( new JDomExtension( extensionElm ) ); + } + return extensions; + } + } + + @Override + public String getOutputDirectory() + { + throw new UnsupportedOperationException(); + } + + @Override + public String getScriptSourceDirectory() + { + throw new UnsupportedOperationException(); + } + + @Override + public String getSourceDirectory() + { + throw new UnsupportedOperationException(); + } + + @Override + public String getTestOutputDirectory() + { + throw new UnsupportedOperationException(); + } + + @Override + public String getTestSourceDirectory() + { + throw new UnsupportedOperationException(); + } + + @Override + public void removeExtension( Extension extension ) + { + throw new UnsupportedOperationException(); + } + + @Override + public void setExtensions( List<Extension> extensions ) + { + throw new UnsupportedOperationException(); + } + + @Override + public void setOutputDirectory( String outputDirectory ) + { + throw new UnsupportedOperationException(); + } + + @Override + public void setScriptSourceDirectory( String scriptSourceDirectory ) + { + throw new UnsupportedOperationException(); + } + + @Override + public void setSourceDirectory( String sourceDirectory ) + { + throw new UnsupportedOperationException(); + } + + @Override + public void setTestOutputDirectory( String testOutputDirectory ) + { + throw new UnsupportedOperationException(); + } + + @Override + public void setTestSourceDirectory( String testSourceDirectory ) + { + throw new UnsupportedOperationException(); + } + + @Override + public void addFilter( String string ) + { + throw new UnsupportedOperationException(); + } + + @Override + public void addResource( Resource resource ) + { + throw new UnsupportedOperationException(); + } + + @Override + public void addTestResource( Resource resource ) + { + throw new UnsupportedOperationException(); + } + + @Override + public String getDefaultGoal() + { + throw new UnsupportedOperationException(); + } + + @Override + public String getDirectory() + { + throw new UnsupportedOperationException(); + } + + @Override + public List<String> getFilters() + { + throw new UnsupportedOperationException(); + } + + @Override + public String getFinalName() + { + throw new UnsupportedOperationException(); + } + + @Override + public List<Resource> getResources() + { + throw new UnsupportedOperationException(); + } + + @Override + public List<Resource> getTestResources() + { + throw new UnsupportedOperationException(); + } + + @Override + public void removeFilter( String string ) + { + throw new UnsupportedOperationException(); + } + + @Override + public void removeResource( Resource resource ) + { + throw new UnsupportedOperationException(); + } + + @Override + public void removeTestResource( Resource resource ) + { + throw new UnsupportedOperationException(); + } + + @Override + public void setDefaultGoal( String defaultGoal ) + { + throw new UnsupportedOperationException(); + } + + @Override + public void setDirectory( String directory ) + { + throw new UnsupportedOperationException(); + } + + @Override + public void setFilters( List<String> filters ) + { + throw new UnsupportedOperationException(); + } + + @Override + public void setFinalName( String finalName ) + { + throw new UnsupportedOperationException(); + } + + @Override + public void setResources( List<Resource> resources ) + { + throw new UnsupportedOperationException(); + } + + @Override + public void setTestResources( List<Resource> testResources ) + { + throw new UnsupportedOperationException(); + } + + @Override + public PluginManagement getPluginManagement() + { + throw new UnsupportedOperationException(); + } + + @Override + public void setPluginManagement( PluginManagement pluginManagement ) + { + throw new UnsupportedOperationException(); + } + + @Override + public void addPlugin( Plugin plugin ) + { + throw new UnsupportedOperationException(); + } + + @Override + public List<Plugin> getPlugins() + { + throw new UnsupportedOperationException(); + } + + @Override + public void removePlugin( Plugin plugin ) + { + throw new UnsupportedOperationException(); + } + + @Override + public void setPlugins( List<Plugin> plugins ) + { + throw new UnsupportedOperationException(); + } + + @Override + public void flushPluginMap() + { + throw new UnsupportedOperationException(); + } + + @Override + public Map getPluginsAsMap() + { + throw new UnsupportedOperationException(); + } +} Added: maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomDependency.java URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomDependency.java?rev=1742710&view=auto ============================================================================== --- maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomDependency.java (added) +++ maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomDependency.java Sat May 7 13:24:55 2016 @@ -0,0 +1,169 @@ +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 org.apache.maven.model.Dependency; +import org.apache.maven.model.Exclusion; +import org.apache.maven.shared.release.transform.MavenCoordinate; +import org.jdom.Element; + +/** + * JDom implementation of poms DEPENDENCY element + * + * @author Robert Scholte + * @since 3.0 + */ +public class JDomDependency extends Dependency implements MavenCoordinate +{ + private final MavenCoordinate coordinate; + + public JDomDependency( Element dependency ) + { + this.coordinate = new JDomMavenCoordinate( dependency ); + } + + @Override + public void addExclusion( Exclusion exclusion ) + { + throw new UnsupportedOperationException(); + } + + @Override + public String getArtifactId() + { + return coordinate.getArtifactId(); + } + + @Override + public String getClassifier() + { + throw new UnsupportedOperationException(); + } + + @Override + public List<Exclusion> getExclusions() + { + throw new UnsupportedOperationException(); + } + + @Override + public String getGroupId() + { + return coordinate.getGroupId(); + } + + @Override + public String getScope() + { + throw new UnsupportedOperationException(); + } + + @Override + public String getSystemPath() + { + throw new UnsupportedOperationException(); + } + + @Override + public String getType() + { + throw new UnsupportedOperationException(); + } + + @Override + public String getVersion() + { + return coordinate.getVersion(); + } + + @Override + public boolean isOptional() + { + throw new UnsupportedOperationException(); + } + + @Override + public void removeExclusion( Exclusion exclusion ) + { + throw new UnsupportedOperationException(); + } + + @Override + public void setArtifactId( String artifactId ) + { + throw new UnsupportedOperationException(); + } + + @Override + public void setClassifier( String classifier ) + { + throw new UnsupportedOperationException(); + } + + @Override + public void setExclusions( List<Exclusion> exclusions ) + { + throw new UnsupportedOperationException(); + } + + @Override + public void setGroupId( String groupId ) + { + throw new UnsupportedOperationException(); + } + + @Override + public void setOptional( boolean optional ) + { + throw new UnsupportedOperationException(); + } + + @Override + public void setScope( String scope ) + { + throw new UnsupportedOperationException(); + } + + @Override + public void setSystemPath( String systemPath ) + { + throw new UnsupportedOperationException(); + } + + @Override + public void setType( String type ) + { + throw new UnsupportedOperationException(); + } + + @Override + public void setVersion( String version ) + { + coordinate.setVersion( version ); + } + + @Override + public String getName() + { + return "dependency"; + } +} Added: maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomExtension.java URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomExtension.java?rev=1742710&view=auto ============================================================================== --- maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomExtension.java (added) +++ maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomExtension.java Sat May 7 13:24:55 2016 @@ -0,0 +1,82 @@ +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 org.apache.maven.model.Extension; +import org.apache.maven.shared.release.transform.MavenCoordinate; +import org.jdom.Element; + +/** + * JDom implementation of poms EXTENSION element + * + * @author Robert Scholte + * @since 3.0 + */ +public class JDomExtension extends Extension implements MavenCoordinate +{ + private final MavenCoordinate coordinate; + + public JDomExtension( Element extension ) + { + this.coordinate = new JDomMavenCoordinate( extension ); + } + + @Override + public String getArtifactId() + { + return coordinate.getArtifactId(); + } + + @Override + public String getGroupId() + { + return coordinate.getGroupId(); + } + + @Override + public String getVersion() + { + return coordinate.getVersion(); + } + + @Override + public void setArtifactId( String artifactId ) + { + throw new UnsupportedOperationException(); + } + + @Override + public void setGroupId( String groupId ) + { + throw new UnsupportedOperationException(); + } + + @Override + public void setVersion( String version ) + { + coordinate.setVersion( version ); + } + + @Override + public String getName() + { + return "extension"; + } +} Modified: maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomModel.java URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomModel.java?rev=1742710&r1=1742709&r2=1742710&view=diff ============================================================================== --- maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomModel.java (original) +++ maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomModel.java Sat May 7 13:24:55 2016 @@ -19,10 +19,15 @@ package org.apache.maven.shared.release. * under the License. */ +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; import java.util.Properties; +import org.apache.maven.model.Build; import org.apache.maven.model.Model; import org.apache.maven.model.Parent; +import org.apache.maven.model.Profile; import org.apache.maven.model.Scm; import org.jdom.Document; import org.jdom.Element; @@ -38,17 +43,26 @@ public class JDomModel extends Model { private final Element project; + private final JDomModelBase modelBase; + public JDomModel( Document document ) { - this.project = document.getRootElement(); + this( document.getRootElement() ); } public JDomModel( Element project ) { this.project = project; + this.modelBase = new JDomModelBase( project ); } @Override + public Build getBuild() + { + return modelBase.getBuild(); + } + + @Override public Parent getParent() { Element elm = getParentElement(); @@ -68,6 +82,31 @@ public class JDomModel extends Model return project.getChild( "parent", project.getNamespace() ); } + + @Override + public List<Profile> getProfiles() + { + Element profilesElm = project.getChild( "profiles", project.getNamespace() ); + if ( profilesElm == null ) + { + return Collections.emptyList(); + } + else + { + List<Element> profileElms = profilesElm.getChildren( "profile", project.getNamespace() ); + + List<Profile> profiles = new ArrayList<Profile>( profileElms.size() ); + + for ( Element profileElm : profileElms ) + { + profiles.add( new JDomProfile( profileElm ) ); + } + + return profiles; + } + } + + @Override public Properties getProperties() { @@ -108,7 +147,8 @@ public class JDomModel extends Model @Override public Scm getScm() - { Element elm = project.getChild( "scm", project.getNamespace() ); + { + Element elm = project.getChild( "scm", project.getNamespace() ); if ( elm == null ) { return null; @@ -154,6 +194,5 @@ public class JDomModel extends Model { JDomUtils.rewriteValue( versionElement, version ); } - } } Added: maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomModelBase.java URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomModelBase.java?rev=1742710&view=auto ============================================================================== --- maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomModelBase.java (added) +++ maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomModelBase.java Sat May 7 13:24:55 2016 @@ -0,0 +1,52 @@ +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 org.apache.maven.model.Build; +import org.jdom.Element; + +/** + * + * @author Robert Scholte + * @since 3.0 + */ +public class JDomModelBase +{ + private final Element modelBase; + + public JDomModelBase( Element modelBase ) + { + this.modelBase = modelBase; + } + + public Build getBuild() + { + Element elm = modelBase.getChild( "build", modelBase.getNamespace() ); + if ( elm == null ) + { + return null; + } + else + { + // this way build setters change DOM tree immediately + return new JDomBuild( elm ); + } + } +} Added: maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomProfile.java URL: http://svn.apache.org/viewvc/maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomProfile.java?rev=1742710&view=auto ============================================================================== --- maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomProfile.java (added) +++ maven/release/trunk/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom/JDomProfile.java Sat May 7 13:24:55 2016 @@ -0,0 +1,47 @@ +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 org.apache.maven.model.BuildBase; +import org.apache.maven.model.Profile; +import org.jdom.Element; + +/** + * JDom implementation of poms PROFILE element + * + * @author Robert Scholte + * @since 3.0 + */ +public class JDomProfile + extends Profile +{ + private final JDomModelBase modelBase; + + public JDomProfile( Element profile ) + { + this.modelBase = new JDomModelBase( profile ) ; + } + + @Override + public BuildBase getBuild() + { + return modelBase.getBuild(); + } +}