View Javadoc

1   package org.codehaus.mojo.retrotranslator;
2   
3   import java.util.ArrayList;
4   import java.util.Iterator;
5   import java.util.List;
6   import java.util.StringTokenizer;
7   
8   import org.apache.maven.plugin.AbstractMojo;
9   import org.apache.maven.plugin.MojoExecutionException;
10  
11  /**
12   * Display help information on 'org.codehaus.mojo:retrotranslator-maven-plugin' plugin. Call 'mvn retrotranslator:help -Ddetail=true' to display all details.
13   *
14   * @version generated on Thu Sep 04 23:00:20 ICT 2008
15   * @goal help
16   */
17  public class HelpMojo
18      extends AbstractMojo
19  {
20      /** 80-character display buffer */
21      private static final int DEFAULT_WIDTH = 80;
22  
23      /** 4 indent spaces */
24      private static final String DEFAULT_INDENT = repeat( " ", 2 );
25  
26      /**
27       * If true, display all settable properies for each goal.
28       *
29       * @parameter expression="${detail}" default-value="false"
30       */
31      private boolean detail;
32  
33      /** {@inheritDoc} */
34      public void execute()
35          throws MojoExecutionException
36      {
37          StringBuffer sb = new StringBuffer();
38  
39          sb.append( "The 'org.codehaus.mojo:retrotranslator-maven-plugin' plugin has 5 goals:" ).append( "\n" );
40          sb.append( "\n" );
41  
42          sb.append( "retrotranslator:help" ).append( "\n" );
43          for ( Iterator it = toLines( "Display help information on 'org.codehaus.mojo:retrotranslator-maven-plugin' plugin. Call 'mvn retrotranslator:help -Ddetail=true' to display all details." ).iterator(); it.hasNext(); )
44          {
45              sb.append( it.next().toString() ).append( "\n" );
46          }
47          if ( detail )
48          {
49              sb.append( "\n" );
50  
51              sb.append( repeat( " ", 2 ) );
52              sb.append( "Available parameters:" ).append( "\n" );
53  
54              sb.append( "\n" );
55  
56          for ( Iterator it = toLines( "detail (Default: 'false')", repeat( " ", 4 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
57          {
58              sb.append( it.next().toString() ).append( "\n" );
59          }
60              for ( Iterator it = toLines( "If true, display all settable properies for each goal.", repeat( " ", 6 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
61              {
62                  sb.append( it.next().toString() ).append( "\n" );
63              }
64          }
65  
66          sb.append( "\n" );
67  
68          sb.append( "retrotranslator:translate" ).append( "\n" );
69          for ( Iterator it = toLines( "Retrotranslates jars and classes." ).iterator(); it.hasNext(); )
70          {
71              sb.append( it.next().toString() ).append( "\n" );
72          }
73          if ( detail )
74          {
75              sb.append( "\n" );
76  
77              sb.append( repeat( " ", 2 ) );
78              sb.append( "Available parameters:" ).append( "\n" );
79  
80              sb.append( "\n" );
81  
82          for ( Iterator it = toLines( "advanced (Default: 'false')", repeat( " ", 4 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
83          {
84              sb.append( it.next().toString() ).append( "\n" );
85          }
86              for ( Iterator it = toLines( "Whether to use alternative implementations of Java 1.4 classes and methods for better Java 5 compatibility.", repeat( " ", 6 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
87              {
88                  sb.append( it.next().toString() ).append( "\n" );
89              }
90          for ( Iterator it = toLines( "backport", repeat( " ", 4 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
91          {
92              sb.append( it.next().toString() ).append( "\n" );
93          }
94              for ( Iterator it = toLines( "Informs the translator about user-defined backport packages. Package names should be separated by semicolons.", repeat( " ", 6 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
95              {
96                  sb.append( it.next().toString() ).append( "\n" );
97              }
98          for ( Iterator it = toLines( "destdir", repeat( " ", 4 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
99          {
100             sb.append( it.next().toString() ).append( "\n" );
101         }
102             for ( Iterator it = toLines( "The directory to place translated classes.", repeat( " ", 6 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
103             {
104                 sb.append( it.next().toString() ).append( "\n" );
105             }
106         for ( Iterator it = toLines( "destjar", repeat( " ", 4 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
107         {
108             sb.append( it.next().toString() ).append( "\n" );
109         }
110             for ( Iterator it = toLines( "The JAR file to place translated classes.", repeat( " ", 6 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
111             {
112                 sb.append( it.next().toString() ).append( "\n" );
113             }
114         for ( Iterator it = toLines( "dirsets", repeat( " ", 4 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
115         {
116             sb.append( it.next().toString() ).append( "\n" );
117         }
118             for ( Iterator it = toLines( "Directories to include in the translation.", repeat( " ", 6 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
119             {
120                 sb.append( it.next().toString() ).append( "\n" );
121             }
122         for ( Iterator it = toLines( "embed", repeat( " ", 4 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
123         {
124             sb.append( it.next().toString() ).append( "\n" );
125         }
126             for ( Iterator it = toLines( "The package name for a private copy of retrotranslator-runtime-n.n.n.jar and backport-util-concurrent-n.n.jar to be put with translated classes.", repeat( " ", 6 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
127             {
128                 sb.append( it.next().toString() ).append( "\n" );
129             }
130         for ( Iterator it = toLines( "failonwarning (Default: 'true')", repeat( " ", 4 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
131         {
132             sb.append( it.next().toString() ).append( "\n" );
133         }
134             for ( Iterator it = toLines( "Fails build when verification has failed.", repeat( " ", 6 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
135             {
136                 sb.append( it.next().toString() ).append( "\n" );
137             }
138         for ( Iterator it = toLines( "filesets", repeat( " ", 4 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
139         {
140             sb.append( it.next().toString() ).append( "\n" );
141         }
142             for ( Iterator it = toLines( "Files to include in the translation.", repeat( " ", 6 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
143             {
144                 sb.append( it.next().toString() ).append( "\n" );
145             }
146         for ( Iterator it = toLines( "jarfilesets", repeat( " ", 4 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
147         {
148             sb.append( it.next().toString() ).append( "\n" );
149         }
150             for ( Iterator it = toLines( "Jar files to include in the translation.", repeat( " ", 6 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
151             {
152                 sb.append( it.next().toString() ).append( "\n" );
153             }
154         for ( Iterator it = toLines( "lazy (Default: 'false')", repeat( " ", 4 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
155         {
156             sb.append( it.next().toString() ).append( "\n" );
157         }
158             for ( Iterator it = toLines( "Asks the translator to only transform classes compiled with a target greater than the current one.", repeat( " ", 6 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
159             {
160                 sb.append( it.next().toString() ).append( "\n" );
161             }
162         for ( Iterator it = toLines( "retainapi (Default: 'false')", repeat( " ", 4 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
163         {
164             sb.append( it.next().toString() ).append( "\n" );
165         }
166             for ( Iterator it = toLines( "Asks the translator to modify classes for JVM 1.4 compatibility but keep use of Java 5 API.", repeat( " ", 6 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
167             {
168                 sb.append( it.next().toString() ).append( "\n" );
169             }
170         for ( Iterator it = toLines( "retainflags (Default: 'false')", repeat( " ", 4 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
171         {
172             sb.append( it.next().toString() ).append( "\n" );
173         }
174             for ( Iterator it = toLines( "Asks the translator to keep Java 5 specific access modifiers.", repeat( " ", 6 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
175             {
176                 sb.append( it.next().toString() ).append( "\n" );
177             }
178         for ( Iterator it = toLines( "srcmask (Default: '*.class')", repeat( " ", 4 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
179         {
180             sb.append( it.next().toString() ).append( "\n" );
181         }
182             for ( Iterator it = toLines( "The wildcard pattern specifying files that should be translated (either bytecode or UTF-8 text), e.g. '*.class*.tld'. There are three special characters: '*?'.", repeat( " ", 6 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
183             {
184                 sb.append( it.next().toString() ).append( "\n" );
185             }
186         for ( Iterator it = toLines( "stripsign (Default: 'false')", repeat( " ", 4 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
187         {
188             sb.append( it.next().toString() ).append( "\n" );
189         }
190             for ( Iterator it = toLines( "Asks the translator to strip signature (generics) information.", repeat( " ", 6 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
191             {
192                 sb.append( it.next().toString() ).append( "\n" );
193             }
194         for ( Iterator it = toLines( "target (Default: '1.4')", repeat( " ", 4 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
195         {
196             sb.append( it.next().toString() ).append( "\n" );
197         }
198             for ( Iterator it = toLines( "To make Java 6 classes compatible with Java 5 set this option to 1.5 and supply user-defined backport packages.", repeat( " ", 6 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
199             {
200                 sb.append( it.next().toString() ).append( "\n" );
201             }
202         for ( Iterator it = toLines( "verbose (Default: 'false')", repeat( " ", 4 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
203         {
204             sb.append( it.next().toString() ).append( "\n" );
205         }
206             for ( Iterator it = toLines( "Asks the translator for verbose output.", repeat( " ", 6 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
207             {
208                 sb.append( it.next().toString() ).append( "\n" );
209             }
210         for ( Iterator it = toLines( "verify (Default: 'false')", repeat( " ", 4 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
211         {
212             sb.append( it.next().toString() ).append( "\n" );
213         }
214             for ( Iterator it = toLines( "Asks the translator to examine translated bytecode for references to classes, methods, or fields that cannot be found in the provided classpath.", repeat( " ", 6 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
215             {
216                 sb.append( it.next().toString() ).append( "\n" );
217             }
218         for ( Iterator it = toLines( "verifyClasspath", repeat( " ", 4 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
219         {
220             sb.append( it.next().toString() ).append( "\n" );
221         }
222             for ( Iterator it = toLines( "The classpath for the verification including rt.jar, jce.jar, jsse.jar (from JRE 1.4). The retrotranslator-runtime-n.n.n.jar, and backport-util-concurrent-n.n.jar are included by default, they are not required to be defined here.", repeat( " ", 6 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
223             {
224                 sb.append( it.next().toString() ).append( "\n" );
225             }
226         }
227 
228         sb.append( "\n" );
229 
230         sb.append( "retrotranslator:translate-project" ).append( "\n" );
231         for ( Iterator it = toLines( "Retrotranslates the artifact for the current project." ).iterator(); it.hasNext(); )
232         {
233             sb.append( it.next().toString() ).append( "\n" );
234         }
235         if ( detail )
236         {
237             sb.append( "\n" );
238 
239             sb.append( repeat( " ", 2 ) );
240             sb.append( "Available parameters:" ).append( "\n" );
241 
242             sb.append( "\n" );
243 
244         for ( Iterator it = toLines( "advanced (Default: 'false')", repeat( " ", 4 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
245         {
246             sb.append( it.next().toString() ).append( "\n" );
247         }
248             for ( Iterator it = toLines( "Whether to use alternative implementations of Java 1.4 classes and methods for better Java 5 compatibility.", repeat( " ", 6 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
249             {
250                 sb.append( it.next().toString() ).append( "\n" );
251             }
252         for ( Iterator it = toLines( "attach (Default: 'true')", repeat( " ", 4 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
253         {
254             sb.append( it.next().toString() ).append( "\n" );
255         }
256             for ( Iterator it = toLines( "Flag to enable/disable attaching retrotranslated artifacts.", repeat( " ", 6 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
257             {
258                 sb.append( it.next().toString() ).append( "\n" );
259             }
260         for ( Iterator it = toLines( "backport", repeat( " ", 4 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
261         {
262             sb.append( it.next().toString() ).append( "\n" );
263         }
264             for ( Iterator it = toLines( "Informs the translator about user-defined backport packages. Package names should be separated by semicolons.", repeat( " ", 6 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
265             {
266                 sb.append( it.next().toString() ).append( "\n" );
267             }
268         for ( Iterator it = toLines( "baseName", repeat( " ", 4 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
269         {
270             sb.append( it.next().toString() ).append( "\n" );
271         }
272             for ( Iterator it = toLines( "The base-name of the generated artifact.", repeat( " ", 6 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
273             {
274                 sb.append( it.next().toString() ).append( "\n" );
275             }
276         for ( Iterator it = toLines( "classifier (Default: 'jdk14')", repeat( " ", 4 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
277         {
278             sb.append( it.next().toString() ).append( "\n" );
279         }
280             for ( Iterator it = toLines( "The classifier used when attaching the retrotranslated project artifact.", repeat( " ", 6 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
281             {
282                 sb.append( it.next().toString() ).append( "\n" );
283             }
284         for ( Iterator it = toLines( "destJar", repeat( " ", 4 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
285         {
286             sb.append( it.next().toString() ).append( "\n" );
287         }
288             for ( Iterator it = toLines( "No description available.", repeat( " ", 6 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
289             {
290                 sb.append( it.next().toString() ).append( "\n" );
291             }
292         for ( Iterator it = toLines( "embed", repeat( " ", 4 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
293         {
294             sb.append( it.next().toString() ).append( "\n" );
295         }
296             for ( Iterator it = toLines( "The package name for a private copy of retrotranslator-runtime-n.n.n.jar and backport-util-concurrent-n.n.jar to be put with translated classes.", repeat( " ", 6 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
297             {
298                 sb.append( it.next().toString() ).append( "\n" );
299             }
300         for ( Iterator it = toLines( "failonwarning (Default: 'true')", repeat( " ", 4 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
301         {
302             sb.append( it.next().toString() ).append( "\n" );
303         }
304             for ( Iterator it = toLines( "Fails build when verification has failed.", repeat( " ", 6 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
305             {
306                 sb.append( it.next().toString() ).append( "\n" );
307             }
308         for ( Iterator it = toLines( "lazy (Default: 'false')", repeat( " ", 4 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
309         {
310             sb.append( it.next().toString() ).append( "\n" );
311         }
312             for ( Iterator it = toLines( "Asks the translator to only transform classes compiled with a target greater than the current one.", repeat( " ", 6 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
313             {
314                 sb.append( it.next().toString() ).append( "\n" );
315             }
316         for ( Iterator it = toLines( "outputDirectory", repeat( " ", 4 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
317         {
318             sb.append( it.next().toString() ).append( "\n" );
319         }
320             for ( Iterator it = toLines( "Where to put the translated artifact.", repeat( " ", 6 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
321             {
322                 sb.append( it.next().toString() ).append( "\n" );
323             }
324         for ( Iterator it = toLines( "replace", repeat( " ", 4 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
325         {
326             sb.append( it.next().toString() ).append( "\n" );
327         }
328             for ( Iterator it = toLines( "Replace the artifact with the retrotranslated artifact.", repeat( " ", 6 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
329             {
330                 sb.append( it.next().toString() ).append( "\n" );
331             }
332         for ( Iterator it = toLines( "retainapi (Default: 'false')", repeat( " ", 4 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
333         {
334             sb.append( it.next().toString() ).append( "\n" );
335         }
336             for ( Iterator it = toLines( "Asks the translator to modify classes for JVM 1.4 compatibility but keep use of Java 5 API.", repeat( " ", 6 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
337             {
338                 sb.append( it.next().toString() ).append( "\n" );
339             }
340         for ( Iterator it = toLines( "retainflags (Default: 'false')", repeat( " ", 4 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
341         {
342             sb.append( it.next().toString() ).append( "\n" );
343         }
344             for ( Iterator it = toLines( "Asks the translator to keep Java 5 specific access modifiers.", repeat( " ", 6 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
345             {
346                 sb.append( it.next().toString() ).append( "\n" );
347             }
348         for ( Iterator it = toLines( "srcmask (Default: '*.class')", repeat( " ", 4 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
349         {
350             sb.append( it.next().toString() ).append( "\n" );
351         }
352             for ( Iterator it = toLines( "The wildcard pattern specifying files that should be translated (either bytecode or UTF-8 text), e.g. '*.class*.tld'. There are three special characters: '*?'.", repeat( " ", 6 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
353             {
354                 sb.append( it.next().toString() ).append( "\n" );
355             }
356         for ( Iterator it = toLines( "stripsign (Default: 'false')", repeat( " ", 4 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
357         {
358             sb.append( it.next().toString() ).append( "\n" );
359         }
360             for ( Iterator it = toLines( "Asks the translator to strip signature (generics) information.", repeat( " ", 6 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
361             {
362                 sb.append( it.next().toString() ).append( "\n" );
363             }
364         for ( Iterator it = toLines( "target (Default: '1.4')", repeat( " ", 4 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
365         {
366             sb.append( it.next().toString() ).append( "\n" );
367         }
368             for ( Iterator it = toLines( "To make Java 6 classes compatible with Java 5 set this option to 1.5 and supply user-defined backport packages.", repeat( " ", 6 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
369             {
370                 sb.append( it.next().toString() ).append( "\n" );
371             }
372         for ( Iterator it = toLines( "verbose (Default: 'false')", repeat( " ", 4 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
373         {
374             sb.append( it.next().toString() ).append( "\n" );
375         }
376             for ( Iterator it = toLines( "Asks the translator for verbose output.", repeat( " ", 6 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
377             {
378                 sb.append( it.next().toString() ).append( "\n" );
379             }
380         for ( Iterator it = toLines( "verify (Default: 'false')", repeat( " ", 4 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
381         {
382             sb.append( it.next().toString() ).append( "\n" );
383         }
384             for ( Iterator it = toLines( "Asks the translator to examine translated bytecode for references to classes, methods, or fields that cannot be found in the provided classpath.", repeat( " ", 6 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
385             {
386                 sb.append( it.next().toString() ).append( "\n" );
387             }
388         for ( Iterator it = toLines( "verifyClasspath", repeat( " ", 4 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
389         {
390             sb.append( it.next().toString() ).append( "\n" );
391         }
392             for ( Iterator it = toLines( "The classpath for the verification including rt.jar, jce.jar, jsse.jar (from JRE 1.4). The retrotranslator-runtime-n.n.n.jar, and backport-util-concurrent-n.n.jar are included by default, they are not required to be defined here.", repeat( " ", 6 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
393             {
394                 sb.append( it.next().toString() ).append( "\n" );
395             }
396         }
397 
398         sb.append( "\n" );
399 
400         sb.append( "retrotranslator:translate-war" ).append( "\n" );
401         for ( Iterator it = toLines( "Retrotranslates the classes in the war, as well as all jars in WEB-INF/lib. Creates a new war with the specified classifier with these retrotranslations." ).iterator(); it.hasNext(); )
402         {
403             sb.append( it.next().toString() ).append( "\n" );
404         }
405         if ( detail )
406         {
407             sb.append( "\n" );
408 
409             sb.append( repeat( " ", 2 ) );
410             sb.append( "Available parameters:" ).append( "\n" );
411 
412             sb.append( "\n" );
413 
414         for ( Iterator it = toLines( "advanced (Default: 'false')", repeat( " ", 4 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
415         {
416             sb.append( it.next().toString() ).append( "\n" );
417         }
418             for ( Iterator it = toLines( "Whether to use alternative implementations of Java 1.4 classes and methods for better Java 5 compatibility.", repeat( " ", 6 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
419             {
420                 sb.append( it.next().toString() ).append( "\n" );
421             }
422         for ( Iterator it = toLines( "attach (Default: 'true')", repeat( " ", 4 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
423         {
424             sb.append( it.next().toString() ).append( "\n" );
425         }
426             for ( Iterator it = toLines( "Flag to enable/disable attaching retrotranslated artifacts.", repeat( " ", 6 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
427             {
428                 sb.append( it.next().toString() ).append( "\n" );
429             }
430         for ( Iterator it = toLines( "backport", repeat( " ", 4 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
431         {
432             sb.append( it.next().toString() ).append( "\n" );
433         }
434             for ( Iterator it = toLines( "Informs the translator about user-defined backport packages. Package names should be separated by semicolons.", repeat( " ", 6 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
435             {
436                 sb.append( it.next().toString() ).append( "\n" );
437             }
438         for ( Iterator it = toLines( "baseName", repeat( " ", 4 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
439         {
440             sb.append( it.next().toString() ).append( "\n" );
441         }
442             for ( Iterator it = toLines( "The base-name of the generated artifact.", repeat( " ", 6 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
443             {
444                 sb.append( it.next().toString() ).append( "\n" );
445             }
446         for ( Iterator it = toLines( "classifier (Default: 'jdk14')", repeat( " ", 4 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
447         {
448             sb.append( it.next().toString() ).append( "\n" );
449         }
450             for ( Iterator it = toLines( "The classifier used when attaching the retrotranslated project artifact.", repeat( " ", 6 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
451             {
452                 sb.append( it.next().toString() ).append( "\n" );
453             }
454         for ( Iterator it = toLines( "embed", repeat( " ", 4 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
455         {
456             sb.append( it.next().toString() ).append( "\n" );
457         }
458             for ( Iterator it = toLines( "The package name for a private copy of retrotranslator-runtime-n.n.n.jar and backport-util-concurrent-n.n.jar to be put with translated classes.", repeat( " ", 6 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
459             {
460                 sb.append( it.next().toString() ).append( "\n" );
461             }
462         for ( Iterator it = toLines( "failonwarning (Default: 'true')", repeat( " ", 4 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
463         {
464             sb.append( it.next().toString() ).append( "\n" );
465         }
466             for ( Iterator it = toLines( "Fails build when verification has failed.", repeat( " ", 6 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
467             {
468                 sb.append( it.next().toString() ).append( "\n" );
469             }
470         for ( Iterator it = toLines( "jarfileset", repeat( " ", 4 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
471         {
472             sb.append( it.next().toString() ).append( "\n" );
473         }
474             for ( Iterator it = toLines( "A set of jar files to include in the translation. Note: any basedir will be ignored and reset to WEB-INF/lib", repeat( " ", 6 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
475             {
476                 sb.append( it.next().toString() ).append( "\n" );
477             }
478         for ( Iterator it = toLines( "lazy (Default: 'false')", repeat( " ", 4 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
479         {
480             sb.append( it.next().toString() ).append( "\n" );
481         }
482             for ( Iterator it = toLines( "Asks the translator to only transform classes compiled with a target greater than the current one.", repeat( " ", 6 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
483             {
484                 sb.append( it.next().toString() ).append( "\n" );
485             }
486         for ( Iterator it = toLines( "outputDirectory", repeat( " ", 4 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
487         {
488             sb.append( it.next().toString() ).append( "\n" );
489         }
490             for ( Iterator it = toLines( "Where to put the translated artifact.", repeat( " ", 6 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
491             {
492                 sb.append( it.next().toString() ).append( "\n" );
493             }
494         for ( Iterator it = toLines( "retainapi (Default: 'false')", repeat( " ", 4 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
495         {
496             sb.append( it.next().toString() ).append( "\n" );
497         }
498             for ( Iterator it = toLines( "Asks the translator to modify classes for JVM 1.4 compatibility but keep use of Java 5 API.", repeat( " ", 6 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
499             {
500                 sb.append( it.next().toString() ).append( "\n" );
501             }
502         for ( Iterator it = toLines( "retainflags (Default: 'false')", repeat( " ", 4 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
503         {
504             sb.append( it.next().toString() ).append( "\n" );
505         }
506             for ( Iterator it = toLines( "Asks the translator to keep Java 5 specific access modifiers.", repeat( " ", 6 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
507             {
508                 sb.append( it.next().toString() ).append( "\n" );
509             }
510         for ( Iterator it = toLines( "srcmask (Default: '*.class')", repeat( " ", 4 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
511         {
512             sb.append( it.next().toString() ).append( "\n" );
513         }
514             for ( Iterator it = toLines( "The wildcard pattern specifying files that should be translated (either bytecode or UTF-8 text), e.g. '*.class*.tld'. There are three special characters: '*?'.", repeat( " ", 6 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
515             {
516                 sb.append( it.next().toString() ).append( "\n" );
517             }
518         for ( Iterator it = toLines( "stripsign (Default: 'false')", repeat( " ", 4 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
519         {
520             sb.append( it.next().toString() ).append( "\n" );
521         }
522             for ( Iterator it = toLines( "Asks the translator to strip signature (generics) information.", repeat( " ", 6 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
523             {
524                 sb.append( it.next().toString() ).append( "\n" );
525             }
526         for ( Iterator it = toLines( "target (Default: '1.4')", repeat( " ", 4 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
527         {
528             sb.append( it.next().toString() ).append( "\n" );
529         }
530             for ( Iterator it = toLines( "To make Java 6 classes compatible with Java 5 set this option to 1.5 and supply user-defined backport packages.", repeat( " ", 6 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
531             {
532                 sb.append( it.next().toString() ).append( "\n" );
533             }
534         for ( Iterator it = toLines( "verbose (Default: 'false')", repeat( " ", 4 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
535         {
536             sb.append( it.next().toString() ).append( "\n" );
537         }
538             for ( Iterator it = toLines( "Asks the translator for verbose output.", repeat( " ", 6 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
539             {
540                 sb.append( it.next().toString() ).append( "\n" );
541             }
542         for ( Iterator it = toLines( "verify (Default: 'false')", repeat( " ", 4 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
543         {
544             sb.append( it.next().toString() ).append( "\n" );
545         }
546             for ( Iterator it = toLines( "Asks the translator to examine translated bytecode for references to classes, methods, or fields that cannot be found in the provided classpath.", repeat( " ", 6 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
547             {
548                 sb.append( it.next().toString() ).append( "\n" );
549             }
550         for ( Iterator it = toLines( "verifyClasspath", repeat( " ", 4 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
551         {
552             sb.append( it.next().toString() ).append( "\n" );
553         }
554             for ( Iterator it = toLines( "The classpath for the verification including rt.jar, jce.jar, jsse.jar (from JRE 1.4). The retrotranslator-runtime-n.n.n.jar, and backport-util-concurrent-n.n.jar are included by default, they are not required to be defined here.", repeat( " ", 6 ), DEFAULT_WIDTH ).iterator(); it.hasNext(); )
555             {
556                 sb.append( it.next().toString() ).append( "\n" );
557             }
558         }
559 
560         sb.append( "\n" );
561 
562         sb.append( "retrotranslator:help" ).append( "\n" );
563         for ( Iterator it = toLines( "Display help information on 'org.codehaus.mojo:retrotranslator-maven-plugin' plugin. Call 'mvn retrotranslator:help -Ddetail=true' to display all details." ).iterator(); it.hasNext(); )
564         {
565             sb.append( it.next().toString() ).append( "\n" );
566         }
567 
568         if ( getLog().isInfoEnabled() )
569         {
570             getLog().info( sb.toString() );
571         }
572     }
573 
574     /**
575      * <p>Repeat a String <code>n</code> times to form a new string.</p>
576      *
577      * @param str String to repeat
578      * @param repeat number of times to repeat str
579      * @return String with repeated String
580      * @throws NegativeArraySizeException if <code>repeat < 0</code>
581      * @throws NullPointerException if str is <code>null</code>
582      */
583     private static String repeat( String str, int repeat )
584     {
585         StringBuffer buffer = new StringBuffer( repeat * str.length() );
586 
587         for ( int i = 0; i < repeat; i++ )
588         {
589             buffer.append( str );
590         }
591 
592         return buffer.toString();
593     }
594 
595     /**
596      * <p>Give a list of lines for the <code>str</code>. Each line is indented by 4 spaces
597      * and has a maximum of <code>80</code> characters.</p>
598      *
599      * @param str String to split in lines
600      * @return List of lines
601      * @throws NullPointerException if str is <code>null</code>
602      */
603     private static List toLines( String str )
604     {
605         return toLines( str, DEFAULT_INDENT, DEFAULT_WIDTH );
606     }
607 
608     /**
609      * <p>Give a list of lines for the <code>str</code>. Each line is indented by <code>indent</code>
610      * and has a maximum of <code>size</code> characters.</p>
611      *
612      * @param str String to split in lines
613      * @param indent the string to precede each line
614      * @param size the size of the character display buffer
615      * @return List of lines
616      * @throws IllegalArgumentException if <code>size < 0</code>
617      * @throws NullPointerException if str is <code>null</code>
618      */
619     private static List toLines( String str, String indent, int size )
620     {
621         List sentences = new ArrayList();
622 
623         if ( indent == null )
624         {
625             indent = "";
626         }
627 
628         if ( size < 0 )
629         {
630             throw new IllegalArgumentException( "size should be positive" );
631         }
632 
633         StringBuffer tmp = new StringBuffer( indent );
634         StringTokenizer tokenizer = new StringTokenizer( str, " " );
635         while ( tokenizer.hasMoreTokens() )
636         {
637             String word = tokenizer.nextToken();
638 
639             if ( tmp.length() + word.length() + 1 < size )
640             {
641                 tmp.append( word ).append( " " );
642             }
643             else
644             {
645                 sentences.add( tmp.toString() );
646                 tmp = new StringBuffer( indent );
647                 tmp.append( word ).append( " " );
648             }
649         }
650 
651         if ( tmp.toString().length() > 0 )
652         {
653             sentences.add( tmp.toString() );
654         }
655 
656         return sentences;
657     }
658 }