1 |
|
package org.apache.maven.changes; |
2 |
|
|
3 |
|
|
4 |
|
|
5 |
|
|
6 |
|
|
7 |
|
|
8 |
|
|
9 |
|
|
10 |
|
|
11 |
|
|
12 |
|
|
13 |
|
|
14 |
|
|
15 |
|
|
16 |
|
|
17 |
|
|
18 |
|
|
19 |
|
import org.apache.maven.doxia.sink.Sink; |
20 |
|
import org.apache.maven.plugin.logging.Log; |
21 |
|
import org.apache.maven.reporting.MavenReportException; |
22 |
|
|
23 |
|
import java.util.List; |
24 |
|
import java.util.ResourceBundle; |
25 |
|
|
26 |
|
|
27 |
|
|
28 |
|
|
29 |
|
|
30 |
|
|
31 |
|
public class ChangesReportGenerator |
32 |
|
{ |
33 |
|
private ChangesXML report; |
34 |
0 |
|
35 |
0 |
private String issueLink; |
36 |
0 |
|
37 |
|
private String url; |
38 |
0 |
|
39 |
0 |
public ChangesReportGenerator() |
40 |
0 |
{ |
41 |
0 |
} |
42 |
0 |
|
43 |
0 |
public ChangesReportGenerator( String xmlPath, Log log ) |
44 |
0 |
{ |
45 |
0 |
report = new ChangesXML( xmlPath, log ); |
46 |
0 |
} |
47 |
|
|
48 |
|
public void setIssueLink( String issueLink ) |
49 |
0 |
{ |
50 |
0 |
this.issueLink = issueLink; |
51 |
0 |
} |
52 |
|
|
53 |
|
public String getIssueLink() |
54 |
0 |
{ |
55 |
0 |
return issueLink; |
56 |
0 |
} |
57 |
|
|
58 |
|
public void setUrl( String url ) |
59 |
0 |
{ |
60 |
0 |
this.url = url; |
61 |
0 |
} |
62 |
|
|
63 |
|
public String getUrl() |
64 |
0 |
{ |
65 |
0 |
return url; |
66 |
0 |
} |
67 |
0 |
|
68 |
0 |
public void doGenerateEmptyReport( ResourceBundle bundle, Sink sink, String message ) |
69 |
0 |
{ |
70 |
0 |
sinkBeginReport( sink, bundle ); |
71 |
0 |
|
72 |
0 |
sink.text( message ); |
73 |
0 |
|
74 |
0 |
sinkEndReport( sink ); |
75 |
0 |
} |
76 |
0 |
|
77 |
0 |
public void doGenerateReport( ResourceBundle bundle, Sink sink ) |
78 |
0 |
throws MavenReportException |
79 |
0 |
{ |
80 |
0 |
sinkBeginReport( sink, bundle ); |
81 |
0 |
|
82 |
0 |
constructReleaseHistory( sink, bundle ); |
83 |
0 |
|
84 |
0 |
constructReleases( sink, bundle ); |
85 |
0 |
|
86 |
0 |
sinkEndReport( sink ); |
87 |
0 |
} |
88 |
0 |
|
89 |
0 |
private void constructActions( Sink sink, List actionList, ResourceBundle bundle ) |
90 |
0 |
{ |
91 |
0 |
sink.table(); |
92 |
0 |
|
93 |
0 |
sink.tableRow(); |
94 |
0 |
|
95 |
0 |
sinkHeader( sink, bundle.getString( "report.changes.label.type" ) ); |
96 |
0 |
|
97 |
0 |
sinkHeader( sink, bundle.getString( "report.changes.label.changes" ) ); |
98 |
0 |
|
99 |
0 |
sinkHeader( sink, bundle.getString( "report.changes.label.by" ) ); |
100 |
0 |
|
101 |
0 |
sink.tableRow_(); |
102 |
0 |
|
103 |
0 |
for ( int idx = 0; idx < actionList.size(); idx++ ) |
104 |
0 |
{ |
105 |
0 |
Action action = (Action) actionList.get( idx ); |
106 |
0 |
|
107 |
0 |
sink.tableRow(); |
108 |
0 |
|
109 |
0 |
sinkShowTypeIcon( sink, action.getType() ); |
110 |
0 |
|
111 |
0 |
sink.tableCell(); |
112 |
0 |
|
113 |
0 |
sink.rawText( action.getAction() ); |
114 |
0 |
|
115 |
0 |
if ( action.getIssue() != null ) |
116 |
0 |
{ |
117 |
0 |
sink.text( " " + bundle.getString( "report.changes.text.fixes" ) + " " ); |
118 |
0 |
|
119 |
0 |
if ( this.url == null || this.url.trim().equals( "" ) ) |
120 |
0 |
{ |
121 |
0 |
sink.text( action.getIssue() ); |
122 |
0 |
|
123 |
0 |
} |
124 |
0 |
else |
125 |
0 |
{ |
126 |
0 |
sink.link( parseIssueLink( action.getIssue() ) ); |
127 |
0 |
|
128 |
0 |
sink.text( action.getIssue() ); |
129 |
0 |
|
130 |
0 |
sinkFigure( "images/external.png", sink ); |
131 |
0 |
|
132 |
0 |
sink.link_(); |
133 |
0 |
|
134 |
0 |
} |
135 |
0 |
sink.text( "." ); |
136 |
0 |
} |
137 |
0 |
|
138 |
0 |
if ( action.getDueTo() != null ) |
139 |
0 |
{ |
140 |
0 |
sink.text( " " + bundle.getString( "report.changes.text.thanx" ) + " " ); |
141 |
0 |
|
142 |
0 |
if ( action.getDueToEmail() != null ) |
143 |
0 |
{ |
144 |
0 |
sinkLink( sink, action.getDueTo(), "mailto:" + action.getDueToEmail() ); |
145 |
0 |
} |
146 |
0 |
else |
147 |
0 |
{ |
148 |
0 |
sink.text( action.getDueTo() ); |
149 |
0 |
} |
150 |
0 |
|
151 |
0 |
sink.text( "." ); |
152 |
0 |
} |
153 |
0 |
|
154 |
0 |
sink.tableCell_(); |
155 |
0 |
|
156 |
0 |
sinkCellLink( sink, action.getDev(), "team-list.html#" + action.getDev() ); |
157 |
0 |
|
158 |
0 |
sink.tableRow_(); |
159 |
0 |
} |
160 |
0 |
|
161 |
0 |
sink.table(); |
162 |
0 |
} |
163 |
0 |
|
164 |
0 |
private void constructReleaseHistory( Sink sink, ResourceBundle bundle ) |
165 |
0 |
{ |
166 |
0 |
sinkSectionTitle2Anchor( sink, bundle.getString( "report.changes.label.releasehistory" ), bundle |
167 |
0 |
.getString( "report.changes.label.releasehistory" ) ); |
168 |
0 |
|
169 |
0 |
List releaseList = report.getReleaseList(); |
170 |
0 |
|
171 |
0 |
sink.table(); |
172 |
0 |
|
173 |
0 |
sink.tableRow(); |
174 |
0 |
|
175 |
0 |
sinkHeader( sink, bundle.getString( "report.changes.label.version" ) ); |
176 |
0 |
|
177 |
0 |
sinkHeader( sink, bundle.getString( "report.changes.label.date" ) ); |
178 |
0 |
|
179 |
0 |
sinkHeader( sink, bundle.getString( "report.changes.label.description" ) ); |
180 |
0 |
|
181 |
0 |
sink.tableRow_(); |
182 |
0 |
|
183 |
0 |
for ( int idx = 0; idx < releaseList.size(); idx++ ) |
184 |
0 |
{ |
185 |
0 |
Release release = (Release) releaseList.get( idx ); |
186 |
0 |
|
187 |
0 |
sink.tableRow(); |
188 |
0 |
|
189 |
0 |
sinkCellLink( sink, release.getVersion(), "#" + release.getVersion() ); |
190 |
0 |
|
191 |
0 |
sinkCell( sink, release.getDateRelease() ); |
192 |
0 |
|
193 |
0 |
sinkCell( sink, release.getDescription() ); |
194 |
0 |
|
195 |
0 |
sink.tableRow_(); |
196 |
0 |
} |
197 |
0 |
|
198 |
0 |
sink.table_(); |
199 |
0 |
|
200 |
0 |
sink.lineBreak(); |
201 |
0 |
|
202 |
0 |
|
203 |
0 |
|
204 |
0 |
|
205 |
0 |
|
206 |
0 |
|
207 |
0 |
|
208 |
0 |
|
209 |
0 |
|
210 |
0 |
|
211 |
0 |
sink.lineBreak(); |
212 |
0 |
} |
213 |
0 |
|
214 |
0 |
private void constructReleases( Sink sink, ResourceBundle bundle ) |
215 |
0 |
{ |
216 |
0 |
List releaseList = report.getReleaseList(); |
217 |
0 |
|
218 |
0 |
for ( int idx = 0; idx < releaseList.size(); idx++ ) |
219 |
0 |
{ |
220 |
0 |
Release release = (Release) releaseList.get( idx ); |
221 |
0 |
|
222 |
0 |
sinkSectionTitle2Anchor( sink, bundle.getString( "report.changes.label.release" ) + " " |
223 |
0 |
+ release.getVersion() + " - " + release.getDateRelease(), release.getVersion() ); |
224 |
0 |
|
225 |
0 |
constructActions( sink, release.getAction(), bundle ); |
226 |
0 |
} |
227 |
0 |
} |
228 |
0 |
|
229 |
0 |
private String parseIssueLink( String issue ) |
230 |
0 |
{ |
231 |
0 |
String parseLink = ""; |
232 |
0 |
|
233 |
0 |
String url = this.url.substring( 0, this.url.lastIndexOf( "/" ) ); |
234 |
0 |
|
235 |
0 |
parseLink = this.issueLink.replaceFirst( "%ISSUE%", issue ); |
236 |
0 |
|
237 |
0 |
parseLink = parseLink.replaceFirst( "%URL%", url ); |
238 |
0 |
|
239 |
0 |
return parseLink; |
240 |
0 |
} |
241 |
0 |
|
242 |
0 |
private void sinkBeginReport( Sink sink, ResourceBundle bundle ) |
243 |
0 |
{ |
244 |
0 |
sink.head(); |
245 |
0 |
|
246 |
0 |
sink.text( bundle.getString( "report.changes.header" ) ); |
247 |
0 |
|
248 |
0 |
sink.head_(); |
249 |
0 |
|
250 |
0 |
sink.body(); |
251 |
0 |
|
252 |
0 |
sinkSectionTitle1Anchor( sink, bundle.getString( "report.changes.header" ), bundle |
253 |
0 |
.getString( "report.changes.header" ) ); |
254 |
0 |
} |
255 |
0 |
|
256 |
0 |
private void sinkCell( Sink sink, String text ) |
257 |
0 |
{ |
258 |
0 |
sink.tableCell(); |
259 |
0 |
|
260 |
0 |
sink.text( text ); |
261 |
0 |
|
262 |
0 |
sink.tableCell_(); |
263 |
0 |
} |
264 |
0 |
|
265 |
0 |
private void sinkCellLink( Sink sink, String text, String link ) |
266 |
0 |
{ |
267 |
0 |
sink.tableCell(); |
268 |
0 |
|
269 |
0 |
sinkLink( sink, text, link ); |
270 |
0 |
|
271 |
0 |
sink.tableCell_(); |
272 |
0 |
} |
273 |
0 |
|
274 |
0 |
private void sinkEndReport( Sink sink ) |
275 |
0 |
{ |
276 |
0 |
sink.body_(); |
277 |
0 |
|
278 |
0 |
sink.flush(); |
279 |
0 |
|
280 |
0 |
sink.close(); |
281 |
0 |
} |
282 |
0 |
|
283 |
0 |
private void sinkFigure( String image, Sink sink ) |
284 |
0 |
{ |
285 |
0 |
sink.figure(); |
286 |
0 |
|
287 |
0 |
sink.figureGraphics( image ); |
288 |
0 |
|
289 |
0 |
sink.figure_(); |
290 |
0 |
} |
291 |
0 |
|
292 |
0 |
private void sinkHeader( Sink sink, String header ) |
293 |
0 |
{ |
294 |
0 |
sink.tableHeaderCell(); |
295 |
0 |
|
296 |
0 |
sink.text( header ); |
297 |
0 |
|
298 |
0 |
sink.tableHeaderCell_(); |
299 |
0 |
} |
300 |
0 |
|
301 |
0 |
private void sinkLink( Sink sink, String text, String link ) |
302 |
0 |
{ |
303 |
0 |
sink.link( link ); |
304 |
0 |
|
305 |
0 |
sink.text( text ); |
306 |
0 |
|
307 |
0 |
sink.link_(); |
308 |
0 |
} |
309 |
0 |
|
310 |
0 |
private void sinkSectionTitle1Anchor( Sink sink, String text, String anchor ) |
311 |
0 |
{ |
312 |
0 |
sink.sectionTitle1(); |
313 |
0 |
sink.text( text ); |
314 |
0 |
sink.sectionTitle1_(); |
315 |
0 |
} |
316 |
0 |
|
317 |
0 |
private void sinkSectionTitle2Anchor( Sink sink, String text, String anchor ) |
318 |
0 |
{ |
319 |
0 |
sink.sectionTitle2(); |
320 |
0 |
sink.anchor( anchor ); |
321 |
0 |
sink.anchor_(); |
322 |
0 |
sink.text( text ); |
323 |
0 |
sink.sectionTitle2_(); |
324 |
0 |
} |
325 |
0 |
|
326 |
0 |
private void sinkShowTypeIcon( Sink sink, String type ) |
327 |
0 |
{ |
328 |
0 |
String image = ""; |
329 |
0 |
|
330 |
0 |
if ( type == null ) |
331 |
0 |
{ |
332 |
0 |
image = "images/icon_help_sml.gif"; |
333 |
0 |
} |
334 |
0 |
else if ( type.equals( "fix" ) ) |
335 |
0 |
{ |
336 |
0 |
image = "images/fix.gif"; |
337 |
0 |
} |
338 |
0 |
else if ( type.equals( "update" ) ) |
339 |
0 |
{ |
340 |
0 |
image = "images/update.gif"; |
341 |
0 |
} |
342 |
0 |
else if ( type.equals( "add" ) ) |
343 |
0 |
{ |
344 |
0 |
image = "images/add.gif"; |
345 |
0 |
} |
346 |
0 |
else if ( type.equals( "remove" ) ) |
347 |
0 |
{ |
348 |
0 |
image = "images/remove.gif"; |
349 |
0 |
} |
350 |
0 |
|
351 |
0 |
sink.tableCell(); |
352 |
0 |
|
353 |
0 |
sinkFigure( image, sink ); |
354 |
0 |
|
355 |
0 |
sink.tableCell_(); |
356 |
0 |
} |
357 |
|
|
358 |
|
} |