1 package org.andromda.maven.plugin.cartridge.site;
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
19 public class HelpMojo
20 extends AbstractMojo
21 {
22
23
24
25
26
27 private boolean detail;
28
29
30
31
32
33
34 private java.lang.String goal;
35
36
37
38
39
40
41 private int lineLength;
42
43
44
45
46
47
48 private int indentSize;
49
50
51
52 public void execute()
53 throws MojoExecutionException
54 {
55 if ( lineLength <= 0 )
56 {
57 getLog().warn( "The parameter 'lineLength' should be positive, using '80' as default." );
58 lineLength = 80;
59 }
60 if ( indentSize <= 0 )
61 {
62 getLog().warn( "The parameter 'indentSize' should be positive, using '2' as default." );
63 indentSize = 2;
64 }
65
66 StringBuffer sb = new StringBuffer();
67
68 append( sb, "org.andromda.maven.plugins.site:andromda-site-cartridge-plugin:3.5-SNAPSHOT", 0 );
69 append( sb, "", 0 );
70
71 append( sb, "AndroMDA Site Cartridge Plugin", 0 );
72 append( sb, "A plugin that enhances the maven site plugin and perform cartridge specific tasks required at the site creation phase. One of its tasks is to run AndroMDA over the cartridge HowTo model and unpack the HowTo pictures archive.", 1 );
73 append( sb, "", 0 );
74
75 if ( goal == null || goal.length() <= 0 )
76 {
77 append( sb, "This plugin has 2 goals:", 0 );
78 append( sb, "", 0 );
79 }
80
81 if ( goal == null || goal.length() <= 0 || "generate-cartridge-howto-artifacts".equals( goal ) )
82 {
83 append( sb, "andromda-site-cartridge:generate-cartridge-howto-artifacts", 0 );
84 append( sb, "Goal that runs AndroMDA over the howto model to generate the cartridge java source files which are referenced via the cartridge xhtml docs. It also unpacks the cartridge related archive files, such as the howto pictures for the cartridge site documentation, to target/site/howto locations preparing for deployment.", 1 );
85 append( sb, "", 0 );
86 if ( detail )
87 {
88 append( sb, "Available parameters:", 1 );
89 append( sb, "", 0 );
90
91 append( sb, "configurationUri", 2 );
92 append( sb, "This is the URI to the AndroMDA configuration file.", 3 );
93 append( sb, "Required: Yes", 3 );
94 append( sb, "Expression: file:${basedir}/conf/howto/andromda.xml", 3 );
95 append( sb, "", 0 );
96
97 append( sb, "howtoCartridgePicturesOutputDirectory", 2 );
98 append( sb, "Path to the cartride howto pictures destination extraction directory", 3 );
99 append( sb, "Expression: ${basedir}/target/site/howto", 3 );
100 append( sb, "", 0 );
101
102 append( sb, "howtoCartridgePicturesSourcePath", 2 );
103 append( sb, "Path to the cartridge howto pictures zip source. This file\'s path is typically cartridge/src/site/resource/howto/HowToPictures.zip.", 3 );
104 append( sb, "Expression: ${basedir}/src/site/resources/howto/HowToPictures.zip", 3 );
105 append( sb, "", 0 );
106
107 append( sb, "modelOutputHistory", 2 );
108 append( sb, "The directory where the model generation output history is located (Modelname file containing a list of files generated by that model).", 3 );
109 append( sb, "Expression: ${project.build.directory}/history", 3 );
110 append( sb, "", 0 );
111
112 append( sb, "projectName (Default: ${project.name})", 2 );
113 append( sb, "The name of the project injected from pom.xml. Not used.", 3 );
114 append( sb, "", 0 );
115
116 append( sb, "propertyFiles", 2 );
117 append( sb, "(no description available)", 3 );
118 append( sb, "Expression: ${project.build.filters}", 3 );
119 append( sb, "", 0 );
120 }
121 }
122
123 if ( goal == null || goal.length() <= 0 || "help".equals( goal ) )
124 {
125 append( sb, "andromda-site-cartridge:help", 0 );
126 append( sb, "Display help information on andromda-site-cartridge-plugin.\nCall\n\u00a0\u00a0mvn\u00a0andromda-site-cartridge:help\u00a0-Ddetail=true\u00a0-Dgoal=<goal-name>\nto display parameter details.", 1 );
127 append( sb, "", 0 );
128 if ( detail )
129 {
130 append( sb, "Available parameters:", 1 );
131 append( sb, "", 0 );
132
133 append( sb, "detail (Default: false)", 2 );
134 append( sb, "If true, display all settable properties for each goal.", 3 );
135 append( sb, "Expression: ${detail}", 3 );
136 append( sb, "", 0 );
137
138 append( sb, "goal", 2 );
139 append( sb, "The name of the goal for which to show help. If unspecified, all goals will be displayed.", 3 );
140 append( sb, "Expression: ${goal}", 3 );
141 append( sb, "", 0 );
142
143 append( sb, "indentSize (Default: 2)", 2 );
144 append( sb, "The number of spaces per indentation level, should be positive.", 3 );
145 append( sb, "Expression: ${indentSize}", 3 );
146 append( sb, "", 0 );
147
148 append( sb, "lineLength (Default: 80)", 2 );
149 append( sb, "The maximum length of a display line, should be positive.", 3 );
150 append( sb, "Expression: ${lineLength}", 3 );
151 append( sb, "", 0 );
152 }
153 }
154
155 if ( getLog().isInfoEnabled() )
156 {
157 getLog().info( sb.toString() );
158 }
159 }
160
161
162
163
164
165
166
167
168
169
170 private static String repeat( String str, int repeat )
171 {
172 StringBuffer buffer = new StringBuffer( repeat * str.length() );
173
174 for ( int i = 0; i < repeat; i++ )
175 {
176 buffer.append( str );
177 }
178
179 return buffer.toString();
180 }
181
182
183
184
185
186
187
188
189
190 private void append( StringBuffer sb, String description, int indent )
191 {
192 for ( Iterator it = toLines( description, indent, indentSize, lineLength ).iterator(); it.hasNext(); )
193 {
194 sb.append( it.next().toString() ).append( '\n' );
195 }
196 }
197
198
199
200
201
202
203
204
205
206
207
208 private static List toLines( String text, int indent, int indentSize, int lineLength )
209 {
210 List lines = new ArrayList();
211
212 String ind = repeat( "\t", indent );
213 String[] plainLines = text.split( "(\r\n)|(\r)|(\n)" );
214 for ( int i = 0; i < plainLines.length; i++ )
215 {
216 toLines( lines, ind + plainLines[i], indentSize, lineLength );
217 }
218
219 return lines;
220 }
221
222
223
224
225
226
227
228
229
230 private static void toLines( List lines, String line, int indentSize, int lineLength )
231 {
232 int lineIndent = getIndentLevel( line );
233 StringBuffer buf = new StringBuffer( 256 );
234 String[] tokens = line.split( " +" );
235 for ( int i = 0; i < tokens.length; i++ )
236 {
237 String token = tokens[i];
238 if ( i > 0 )
239 {
240 if ( buf.length() + token.length() >= lineLength )
241 {
242 lines.add( buf.toString() );
243 buf.setLength( 0 );
244 buf.append( repeat( " ", lineIndent * indentSize ) );
245 }
246 else
247 {
248 buf.append( ' ' );
249 }
250 }
251 for ( int j = 0; j < token.length(); j++ )
252 {
253 char c = token.charAt( j );
254 if ( c == '\t' )
255 {
256 buf.append( repeat( " ", indentSize - buf.length() % indentSize ) );
257 }
258 else if ( c == '\u00A0' )
259 {
260 buf.append( ' ' );
261 }
262 else
263 {
264 buf.append( c );
265 }
266 }
267 }
268 lines.add( buf.toString() );
269 }
270
271
272
273
274
275
276
277 private static int getIndentLevel( String line )
278 {
279 int level = 0;
280 for ( int i = 0; i < line.length() && line.charAt( i ) == '\t'; i++ )
281 {
282 level++;
283 }
284 for ( int i = level + 1; i <= level + 4 && i < line.length(); i++ )
285 {
286 if ( line.charAt( i ) == '\t' )
287 {
288 level++;
289 break;
290 }
291 }
292 return level;
293 }
294 }