1 | |
package org.apache.maven.plugin.jxr; |
2 | |
|
3 | |
import java.util.ArrayList; |
4 | |
import java.util.Iterator; |
5 | |
import java.util.List; |
6 | |
|
7 | |
import org.apache.maven.plugin.AbstractMojo; |
8 | |
import org.apache.maven.plugin.MojoExecutionException; |
9 | |
|
10 | |
|
11 | |
|
12 | |
|
13 | |
|
14 | |
|
15 | |
|
16 | |
|
17 | |
|
18 | 0 | public class HelpMojo |
19 | |
extends AbstractMojo |
20 | |
{ |
21 | |
|
22 | |
|
23 | |
|
24 | |
|
25 | |
|
26 | |
private boolean detail; |
27 | |
|
28 | |
|
29 | |
|
30 | |
|
31 | |
|
32 | |
|
33 | |
private java.lang.String goal; |
34 | |
|
35 | |
|
36 | |
|
37 | |
|
38 | |
|
39 | |
|
40 | |
private int lineLength; |
41 | |
|
42 | |
|
43 | |
|
44 | |
|
45 | |
|
46 | |
|
47 | |
private int indentSize; |
48 | |
|
49 | |
|
50 | |
|
51 | |
public void execute() |
52 | |
throws MojoExecutionException |
53 | |
{ |
54 | 0 | if ( lineLength <= 0 ) |
55 | |
{ |
56 | 0 | getLog().warn( "The parameter 'lineLength' should be positive, using '80' as default." ); |
57 | 0 | lineLength = 80; |
58 | |
} |
59 | 0 | if ( indentSize <= 0 ) |
60 | |
{ |
61 | 0 | getLog().warn( "The parameter 'indentSize' should be positive, using '2' as default." ); |
62 | 0 | indentSize = 2; |
63 | |
} |
64 | |
|
65 | 0 | StringBuffer sb = new StringBuffer(); |
66 | |
|
67 | 0 | append( sb, "org.apache.maven.plugins:maven-jxr-plugin:2.2", 0 ); |
68 | 0 | append( sb, "", 0 ); |
69 | |
|
70 | 0 | append( sb, "Maven JXR Plugin", 0 ); |
71 | 0 | append( sb, "Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project\'s build, reporting and documentation from a central piece of information.", 1 ); |
72 | 0 | append( sb, "", 0 ); |
73 | |
|
74 | 0 | if ( goal == null || goal.length() <= 0 ) |
75 | |
{ |
76 | 0 | append( sb, "This plugin has 3 goals:", 0 ); |
77 | 0 | append( sb, "", 0 ); |
78 | |
} |
79 | |
|
80 | 0 | if ( goal == null || goal.length() <= 0 || "help".equals( goal ) ) |
81 | |
{ |
82 | 0 | append( sb, "jxr:help", 0 ); |
83 | 0 | append( sb, "Display help information on maven-jxr-plugin.\nCall\n\u00a0\u00a0mvn\u00a0jxr:help\u00a0-Ddetail=true\u00a0-Dgoal=<goal-name>\nto display parameter details.", 1 ); |
84 | 0 | append( sb, "", 0 ); |
85 | 0 | if ( detail ) |
86 | |
{ |
87 | 0 | append( sb, "Available parameters:", 1 ); |
88 | 0 | append( sb, "", 0 ); |
89 | |
|
90 | 0 | append( sb, "detail (Default: false)", 2 ); |
91 | 0 | append( sb, "If true, display all settable properties for each goal.", 3 ); |
92 | 0 | append( sb, "", 0 ); |
93 | |
|
94 | 0 | append( sb, "goal", 2 ); |
95 | 0 | append( sb, "The name of the goal for which to show help. If unspecified, all goals will be displayed.", 3 ); |
96 | 0 | append( sb, "", 0 ); |
97 | |
|
98 | 0 | append( sb, "indentSize (Default: 2)", 2 ); |
99 | 0 | append( sb, "The number of spaces per indentation level, should be positive.", 3 ); |
100 | 0 | append( sb, "", 0 ); |
101 | |
|
102 | 0 | append( sb, "lineLength (Default: 80)", 2 ); |
103 | 0 | append( sb, "The maximum length of a display line, should be positive.", 3 ); |
104 | 0 | append( sb, "", 0 ); |
105 | |
} |
106 | |
} |
107 | |
|
108 | 0 | if ( goal == null || goal.length() <= 0 || "jxr".equals( goal ) ) |
109 | |
{ |
110 | 0 | append( sb, "jxr:jxr", 0 ); |
111 | 0 | append( sb, "Creates an html-based, cross referenced version of Java source code for a project.", 1 ); |
112 | 0 | append( sb, "", 0 ); |
113 | 0 | if ( detail ) |
114 | |
{ |
115 | 0 | append( sb, "Available parameters:", 1 ); |
116 | 0 | append( sb, "", 0 ); |
117 | |
|
118 | 0 | append( sb, "aggregate (Default: false)", 2 ); |
119 | 0 | append( sb, "Whether to build an aggregated report at the root, or build individual reports.", 3 ); |
120 | 0 | append( sb, "", 0 ); |
121 | |
|
122 | 0 | append( sb, "bottom (Default: Copyright © {inceptionYear}-{currentYear} {projectOrganizationName}. All Rights Reserved.)", 2 ); |
123 | 0 | append( sb, "String uses at the bottom of the Xref HTML files.", 3 ); |
124 | 0 | append( sb, "", 0 ); |
125 | |
|
126 | 0 | append( sb, "destDir", 2 ); |
127 | 0 | append( sb, "Folder where the Xref files will be copied to.", 3 ); |
128 | 0 | append( sb, "", 0 ); |
129 | |
|
130 | 0 | append( sb, "docTitle", 2 ); |
131 | 0 | append( sb, "Title of main page of the Xref HTML files.", 3 ); |
132 | 0 | append( sb, "", 0 ); |
133 | |
|
134 | 0 | append( sb, "excludes", 2 ); |
135 | 0 | append( sb, "A list of exclude patterns to use. By default no files are excluded.", 3 ); |
136 | 0 | append( sb, "", 0 ); |
137 | |
|
138 | 0 | append( sb, "includes", 2 ); |
139 | 0 | append( sb, "A list of include patterns to use. By default all .java files are included.", 3 ); |
140 | 0 | append( sb, "", 0 ); |
141 | |
|
142 | 0 | append( sb, "inputEncoding (Default: ${project.build.sourceEncoding})", 2 ); |
143 | 0 | append( sb, "File input encoding.", 3 ); |
144 | 0 | append( sb, "", 0 ); |
145 | |
|
146 | 0 | append( sb, "javadocDir", 2 ); |
147 | 0 | append( sb, "Folder where Javadoc is generated for this project.", 3 ); |
148 | 0 | append( sb, "", 0 ); |
149 | |
|
150 | 0 | append( sb, "linkJavadoc (Default: true)", 2 ); |
151 | 0 | append( sb, "Link the Javadoc from the Source XRef. Defaults to true and will link automatically if javadoc plugin is being used.", 3 ); |
152 | 0 | append( sb, "", 0 ); |
153 | |
|
154 | 0 | append( sb, "outputDirectory", 2 ); |
155 | 0 | append( sb, "Output folder where the main page of the report will be generated. Note that this parameter is only relevant if the goal is run directly from the command line or from the default lifecycle. If the goal is run indirectly as part of a site generation, the output directory configured in the Maven Site Plugin will be used instead.", 3 ); |
156 | 0 | append( sb, "", 0 ); |
157 | |
|
158 | 0 | append( sb, "outputEncoding (Default: ${project.reporting.outputEncoding})", 2 ); |
159 | 0 | append( sb, "File output encoding.", 3 ); |
160 | 0 | append( sb, "", 0 ); |
161 | |
|
162 | 0 | append( sb, "sourcePath", 2 ); |
163 | 0 | append( sb, "Specifies the source path where the java files are located. The paths are separated by \';\'.", 3 ); |
164 | 0 | append( sb, "", 0 ); |
165 | |
|
166 | 0 | append( sb, "stylesheet (Default: stylesheet.css)", 2 ); |
167 | 0 | append( sb, "Style sheet used for the Xref HTML files. Should not be used. If used, should be an absolute path, like \'${basedir}/myStyles.css\'.", 3 ); |
168 | 0 | append( sb, "", 0 ); |
169 | |
|
170 | 0 | append( sb, "templateDir (Default: templates)", 2 ); |
171 | 0 | append( sb, "Directory where Velocity templates can be found to generate overviews, frames and summaries. Should not be used. If used, should be an absolute path, like \'${basedir}/myTemplates\'.", 3 ); |
172 | 0 | append( sb, "", 0 ); |
173 | |
|
174 | 0 | append( sb, "windowTitle", 2 ); |
175 | 0 | append( sb, "Title of window of the Xref HTML files.", 3 ); |
176 | 0 | append( sb, "", 0 ); |
177 | |
} |
178 | |
} |
179 | |
|
180 | 0 | if ( goal == null || goal.length() <= 0 || "test-jxr".equals( goal ) ) |
181 | |
{ |
182 | 0 | append( sb, "jxr:test-jxr", 0 ); |
183 | 0 | append( sb, "Creates an html-based, cross referenced version of Java source code for a project\'s test sources.", 1 ); |
184 | 0 | append( sb, "", 0 ); |
185 | 0 | if ( detail ) |
186 | |
{ |
187 | 0 | append( sb, "Available parameters:", 1 ); |
188 | 0 | append( sb, "", 0 ); |
189 | |
|
190 | 0 | append( sb, "aggregate (Default: false)", 2 ); |
191 | 0 | append( sb, "Whether to build an aggregated report at the root, or build individual reports.", 3 ); |
192 | 0 | append( sb, "", 0 ); |
193 | |
|
194 | 0 | append( sb, "bottom (Default: Copyright © {inceptionYear}-{currentYear} {projectOrganizationName}. All Rights Reserved.)", 2 ); |
195 | 0 | append( sb, "String uses at the bottom of the Xref HTML files.", 3 ); |
196 | 0 | append( sb, "", 0 ); |
197 | |
|
198 | 0 | append( sb, "destDir", 2 ); |
199 | 0 | append( sb, "Folder where the Xref files will be copied to.", 3 ); |
200 | 0 | append( sb, "", 0 ); |
201 | |
|
202 | 0 | append( sb, "docTitle", 2 ); |
203 | 0 | append( sb, "Title of main page of the Xref HTML files.", 3 ); |
204 | 0 | append( sb, "", 0 ); |
205 | |
|
206 | 0 | append( sb, "excludes", 2 ); |
207 | 0 | append( sb, "A list of exclude patterns to use. By default no files are excluded.", 3 ); |
208 | 0 | append( sb, "", 0 ); |
209 | |
|
210 | 0 | append( sb, "includes", 2 ); |
211 | 0 | append( sb, "A list of include patterns to use. By default all .java files are included.", 3 ); |
212 | 0 | append( sb, "", 0 ); |
213 | |
|
214 | 0 | append( sb, "inputEncoding (Default: ${project.build.sourceEncoding})", 2 ); |
215 | 0 | append( sb, "File input encoding.", 3 ); |
216 | 0 | append( sb, "", 0 ); |
217 | |
|
218 | 0 | append( sb, "linkJavadoc (Default: true)", 2 ); |
219 | 0 | append( sb, "Link the Javadoc from the Source XRef. Defaults to true and will link automatically if javadoc plugin is being used.", 3 ); |
220 | 0 | append( sb, "", 0 ); |
221 | |
|
222 | 0 | append( sb, "outputDirectory", 2 ); |
223 | 0 | append( sb, "Output folder where the main page of the report will be generated. Note that this parameter is only relevant if the goal is run directly from the command line or from the default lifecycle. If the goal is run indirectly as part of a site generation, the output directory configured in the Maven Site Plugin will be used instead.", 3 ); |
224 | 0 | append( sb, "", 0 ); |
225 | |
|
226 | 0 | append( sb, "outputEncoding (Default: ${project.reporting.outputEncoding})", 2 ); |
227 | 0 | append( sb, "File output encoding.", 3 ); |
228 | 0 | append( sb, "", 0 ); |
229 | |
|
230 | 0 | append( sb, "stylesheet (Default: stylesheet.css)", 2 ); |
231 | 0 | append( sb, "Style sheet used for the Xref HTML files. Should not be used. If used, should be an absolute path, like \'${basedir}/myStyles.css\'.", 3 ); |
232 | 0 | append( sb, "", 0 ); |
233 | |
|
234 | 0 | append( sb, "templateDir (Default: templates)", 2 ); |
235 | 0 | append( sb, "Directory where Velocity templates can be found to generate overviews, frames and summaries. Should not be used. If used, should be an absolute path, like \'${basedir}/myTemplates\'.", 3 ); |
236 | 0 | append( sb, "", 0 ); |
237 | |
|
238 | 0 | append( sb, "testJavadocDir", 2 ); |
239 | 0 | append( sb, "Folder where Test Javadoc is generated for this project.", 3 ); |
240 | 0 | append( sb, "", 0 ); |
241 | |
|
242 | 0 | append( sb, "windowTitle", 2 ); |
243 | 0 | append( sb, "Title of window of the Xref HTML files.", 3 ); |
244 | 0 | append( sb, "", 0 ); |
245 | |
} |
246 | |
} |
247 | |
|
248 | 0 | if ( getLog().isInfoEnabled() ) |
249 | |
{ |
250 | 0 | getLog().info( sb.toString() ); |
251 | |
} |
252 | 0 | } |
253 | |
|
254 | |
|
255 | |
|
256 | |
|
257 | |
|
258 | |
|
259 | |
|
260 | |
|
261 | |
|
262 | |
|
263 | |
private static String repeat( String str, int repeat ) |
264 | |
{ |
265 | 0 | StringBuffer buffer = new StringBuffer( repeat * str.length() ); |
266 | |
|
267 | 0 | for ( int i = 0; i < repeat; i++ ) |
268 | |
{ |
269 | 0 | buffer.append( str ); |
270 | |
} |
271 | |
|
272 | 0 | return buffer.toString(); |
273 | |
} |
274 | |
|
275 | |
|
276 | |
|
277 | |
|
278 | |
|
279 | |
|
280 | |
|
281 | |
|
282 | |
|
283 | |
private void append( StringBuffer sb, String description, int indent ) |
284 | |
{ |
285 | 0 | for ( Iterator it = toLines( description, indent, indentSize, lineLength ).iterator(); it.hasNext(); ) |
286 | |
{ |
287 | 0 | sb.append( it.next().toString() ).append( '\n' ); |
288 | |
} |
289 | 0 | } |
290 | |
|
291 | |
|
292 | |
|
293 | |
|
294 | |
|
295 | |
|
296 | |
|
297 | |
|
298 | |
|
299 | |
|
300 | |
|
301 | |
private static List toLines( String text, int indent, int indentSize, int lineLength ) |
302 | |
{ |
303 | 0 | List lines = new ArrayList(); |
304 | |
|
305 | 0 | String ind = repeat( "\t", indent ); |
306 | 0 | String[] plainLines = text.split( "(\r\n)|(\r)|(\n)" ); |
307 | 0 | for ( int i = 0; i < plainLines.length; i++ ) |
308 | |
{ |
309 | 0 | toLines( lines, ind + plainLines[i], indentSize, lineLength ); |
310 | |
} |
311 | |
|
312 | 0 | return lines; |
313 | |
} |
314 | |
|
315 | |
|
316 | |
|
317 | |
|
318 | |
|
319 | |
|
320 | |
|
321 | |
|
322 | |
|
323 | |
private static void toLines( List lines, String line, int indentSize, int lineLength ) |
324 | |
{ |
325 | 0 | int lineIndent = getIndentLevel( line ); |
326 | 0 | StringBuffer buf = new StringBuffer( 256 ); |
327 | 0 | String[] tokens = line.split( " +" ); |
328 | 0 | for ( int i = 0; i < tokens.length; i++ ) |
329 | |
{ |
330 | 0 | String token = tokens[i]; |
331 | 0 | if ( i > 0 ) |
332 | |
{ |
333 | 0 | if ( buf.length() + token.length() >= lineLength ) |
334 | |
{ |
335 | 0 | lines.add( buf.toString() ); |
336 | 0 | buf.setLength( 0 ); |
337 | 0 | buf.append( repeat( " ", lineIndent * indentSize ) ); |
338 | |
} |
339 | |
else |
340 | |
{ |
341 | 0 | buf.append( ' ' ); |
342 | |
} |
343 | |
} |
344 | 0 | for ( int j = 0; j < token.length(); j++ ) |
345 | |
{ |
346 | 0 | char c = token.charAt( j ); |
347 | 0 | if ( c == '\t' ) |
348 | |
{ |
349 | 0 | buf.append( repeat( " ", indentSize - buf.length() % indentSize ) ); |
350 | |
} |
351 | 0 | else if ( c == '\u00A0' ) |
352 | |
{ |
353 | 0 | buf.append( ' ' ); |
354 | |
} |
355 | |
else |
356 | |
{ |
357 | 0 | buf.append( c ); |
358 | |
} |
359 | |
} |
360 | |
} |
361 | 0 | lines.add( buf.toString() ); |
362 | 0 | } |
363 | |
|
364 | |
|
365 | |
|
366 | |
|
367 | |
|
368 | |
|
369 | |
|
370 | |
private static int getIndentLevel( String line ) |
371 | |
{ |
372 | 0 | int level = 0; |
373 | 0 | for ( int i = 0; i < line.length() && line.charAt( i ) == '\t'; i++ ) |
374 | |
{ |
375 | 0 | level++; |
376 | |
} |
377 | 0 | for ( int i = level + 1; i <= level + 4 && i < line.length(); i++ ) |
378 | |
{ |
379 | 0 | if ( line.charAt( i ) == '\t' ) |
380 | |
{ |
381 | 0 | level++; |
382 | 0 | break; |
383 | |
} |
384 | |
} |
385 | 0 | return level; |
386 | |
} |
387 | |
} |