View Javadoc
1   package org.apache.maven.plugin.cxx.utils.release;
2   
3   /*
4    * Copyright (C) 2011-2016, Neticoa SAS France - Tous droits réservés.
5    * Author(s) : Franck Bonin, Neticoa SAS France
6    *
7    * Licensed under the Apache License, Version 2.0 (the "License");
8    * you may not use this file except in compliance with the License.
9    * You may obtain a copy of the License at
10   *
11   *     http://www.apache.org/licenses/LICENSE-2.0
12   *
13   * Unless required by applicable law or agreed to in writing, software
14   * distributed under the License is distributed on an "AS IS" BASIS,
15   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16   * See the License for the specific language governing permissions and
17   * limitations under the License.
18   *
19   */
20   
21  import java.util.List;
22  import java.util.Map;
23  import java.util.Collections;
24  import org.apache.maven.plugin.MojoExecutionException;
25  import org.apache.maven.plugin.MojoFailureException;
26  import org.apache.maven.project.MavenProject;
27  import org.apache.maven.shared.release.env.ReleaseEnvironment;
28  import org.apache.maven.shared.release.ReleaseResult;
29  import org.apache.maven.plugin.logging.Log;
30  
31  
32  /**
33   * 
34   * @author Franck Bonin
35   * 
36   * @plexus.component role="org.apache.maven.plugin.cxx.utils.release.CxxReleaseManager" role-hint="default"
37   */
38  public class DefaultCxxReleaseManager
39      implements CxxReleaseManager
40  {
41    
42      /**
43       * all known phases.
44       * component loaded with plexus, see components.xml
45       */
46      private Map<String, CxxReleasePhase> phases;
47  
48      /**
49       * The phases to run to perform a branch.
50       * list loaded with plexus, see components.xml
51       */
52      private List<String> branchPhases;
53  
54      /**
55      * The phases to run to perform a release.
56      * list loaded with plexus, see components.xml
57      */
58      private List<String> releasePhases;
59      
60      
61      private Log log = null;
62      
63      /**
64       *
65       * @param log
66       */
67      public void setLog( Log log )
68      {
69          this.log = log;
70          for ( CxxReleasePhase phase : phases.values() )
71          {
72              phase.setLog( log );
73          }
74      }
75      
76      protected Log getLog()
77      {
78          return log;
79      }
80      
81      public ReleaseResult branch( CxxReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment,
82            List<MavenProject> reactorProjects )
83            throws MojoExecutionException, MojoFailureException
84      {
85          getLog().info( "Running branch cycle ..." );
86          return run( branchPhases, releaseDescriptor, releaseEnvironment, reactorProjects );
87      }
88      
89      public ReleaseResult release( CxxReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment,
90            List<MavenProject> reactorProjects )
91            throws MojoExecutionException, MojoFailureException
92      {
93          getLog().info( "Running release cycle ..." );
94          return run( releasePhases, releaseDescriptor, releaseEnvironment, reactorProjects );
95      }
96      
97      protected ReleaseResult run( List<String> phasesToRun, CxxReleaseDescriptor releaseDescriptor,
98                ReleaseEnvironment releaseEnvironment, List<MavenProject> reactorProjects )
99                throws MojoExecutionException, MojoFailureException
100     {
101         ReleaseResult result = new ReleaseResult();
102         
103         result.setStartTime( System.currentTimeMillis() );
104         
105         try
106         {
107             for ( String phaseName : phasesToRun )
108             {
109                 CxxReleasePhase phase = this.phases.get( phaseName );
110                 
111                 if ( null != phase )
112                 {
113                     
114                     ReleaseResult phaseResult = null;
115                     try
116                     {
117                         getLog().info( "Start " + phaseName +  " phase" );
118                         phaseResult = phase.run( releaseDescriptor, releaseEnvironment, reactorProjects );
119                     }
120                     finally
121                     {
122                         if ( result != null && phaseResult != null )
123                         {
124                             result.appendOutput( phaseResult.getOutput() );
125                         }
126                     }
127                 }
128                 else
129                 {
130                     throw new MojoExecutionException( "Try to run " + phaseName 
131                         + " but it's not a valide phase name" ); 
132                 }
133             }
134             result.setResultCode( ReleaseResult.SUCCESS );
135         }
136         /*catch ( MojoExecutionException e )
137         {
138             captureException( result,  e );
139         }
140         catch ( MojoFailureException e )
141         {
142             captureException( result,  e );
143         }*/
144         finally
145         {
146             result.setEndTime( System.currentTimeMillis() );
147             getLog().info( "Cycle end" );
148         }
149         
150         clean( phasesToRun, releaseDescriptor, reactorProjects );
151         
152         return result;
153     }
154     
155     private void captureException( ReleaseResult result, Exception e )
156     {
157         result.appendError( e );
158 
159         result.setResultCode( ReleaseResult.ERROR );
160     }
161     
162     public void cleanRelease( CxxReleaseDescriptor releaseDescriptor, List<MavenProject> reactorProjects )
163     {
164         getLog().info( "Cleaning up after release..." );
165         
166         clean( releasePhases, releaseDescriptor, reactorProjects );
167     }
168     
169     public void cleanBranch( CxxReleaseDescriptor releaseDescriptor, List<MavenProject> reactorProjects )
170     {
171         getLog().info( "Cleaning up after branch..." );
172         
173         clean( branchPhases, releaseDescriptor, reactorProjects );
174     }
175     
176     protected void clean( List<String> phasesToRun, CxxReleaseDescriptor releaseDescriptor,
177         List<MavenProject> reactorProjects )
178     {
179         List<String> phasesToRunReverse = phasesToRun.subList( 0, phasesToRun.size() );
180         Collections.reverse( phasesToRunReverse );
181 
182         for ( String name : phasesToRunReverse )
183         {
184             CxxReleasePhase phase = phases.get( name );
185 
186             phase.clean( reactorProjects );
187         }
188     }
189 }
190