1 package org.apache.maven.plugin.cxx.utils.release;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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
35
36
37
38 public class DefaultCxxReleaseManager
39 implements CxxReleaseManager
40 {
41
42
43
44
45
46 private Map<String, CxxReleasePhase> phases;
47
48
49
50
51
52 private List<String> branchPhases;
53
54
55
56
57
58 private List<String> releasePhases;
59
60
61 private Log log = null;
62
63
64
65
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
137
138
139
140
141
142
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