View Javadoc
1   package org.apache.maven.shared.release.phase;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *   http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  import java.util.List;
23  import java.util.Map;
24  
25  import org.apache.maven.model.Scm;
26  import org.apache.maven.project.MavenProject;
27  import org.apache.maven.scm.repository.ScmRepository;
28  import org.apache.maven.shared.release.ReleaseExecutionException;
29  import org.apache.maven.shared.release.ReleaseResult;
30  import org.apache.maven.shared.release.config.ReleaseDescriptor;
31  import org.apache.maven.shared.release.scm.ScmTranslator;
32  import org.jdom.Element;
33  import org.jdom.Namespace;
34  
35  /**
36   * Rewrite POMs for future development
37   *
38   * @author <a href="mailto:brett@apache.org">Brett Porter</a>
39   */
40  public class RewritePomsForDevelopmentPhase
41      extends AbstractRewritePomsPhase
42  {
43      @Override
44      protected void transformScm( MavenProject project, Element rootElement, Namespace namespace,
45                                   ReleaseDescriptor releaseDescriptor, String projectId, ScmRepository scmRepository,
46                                   ReleaseResult result, String commonBasedir )
47          throws ReleaseExecutionException
48      {
49          // If SCM is null in original model, it is inherited, no mods needed
50          if ( project.getScm() != null )
51          {
52              Element scmRoot = rootElement.getChild( "scm", namespace );
53              if ( scmRoot != null )
54              {
55                  @SuppressWarnings( "unchecked" )
56                  Map<String, Scm> originalScmInfo = releaseDescriptor.getOriginalScmInfo();
57                  // check containsKey, not == null, as we store null as a value
58                  if ( !originalScmInfo.containsKey( projectId ) )
59                  {
60                      throw new ReleaseExecutionException(
61                          "Unable to find original SCM info for '" + project.getName() + "'" );
62                  }
63  
64                  ScmTranslator translator = getScmTranslators().get( scmRepository.getProvider() );
65                  if ( translator != null )
66                  {
67                      Scm scm = originalScmInfo.get( projectId );
68  
69                      if ( scm != null )
70                      {
71                          rewriteElement( "connection", scm.getConnection(), scmRoot, namespace );
72                          rewriteElement( "developerConnection", scm.getDeveloperConnection(), scmRoot, namespace );
73                          rewriteElement( "url", scm.getUrl(), scmRoot, namespace );
74                          rewriteElement( "tag", translator.resolveTag( scm.getTag() ), scmRoot, namespace );
75                      }
76                      else
77                      {
78                          // cleanly remove the SCM element
79                          rewriteElement( "scm", null, rootElement, namespace );
80                      }
81                  }
82                  else
83                  {
84                      String message = "No SCM translator found - skipping rewrite";
85                      result.appendDebug( message );
86                      getLogger().debug( message );
87                  }
88              }
89          }
90      }
91  
92      @SuppressWarnings( "unchecked" )
93      @Override
94      protected Map<String, String> getOriginalVersionMap( ReleaseDescriptor releaseDescriptor,
95                                                           List<MavenProject> reactorProjects, boolean simulate )
96      {
97          return simulate
98              ? releaseDescriptor.getOriginalVersions( reactorProjects )
99              : releaseDescriptor.getReleaseVersions();
100     }
101 
102     @SuppressWarnings( "unchecked" )
103     @Override
104     protected Map<String, String> getNextVersionMap( ReleaseDescriptor releaseDescriptor )
105     {
106         return releaseDescriptor.getDevelopmentVersions();
107     }
108 
109     @Override
110     protected String getResolvedSnapshotVersion( String artifactVersionlessKey,
111                                                  Map<String, Map<String, String>> resolvedSnapshotsMap )
112     {
113         Map<String, String> versionsMap = resolvedSnapshotsMap.get( artifactVersionlessKey );
114 
115         if ( versionsMap != null )
116         {
117             return versionsMap.get( ReleaseDescriptor.DEVELOPMENT_KEY );
118         }
119         else
120         {
121             return null;
122         }
123     }
124 }