1 | |
package org.apache.maven.plugins.repository; |
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-repository-plugin:2.3.1", 0 ); |
68 | 0 | append( sb, "", 0 ); |
69 | |
|
70 | 0 | append( sb, "Maven Repository Plugin", 0 ); |
71 | 0 | append( sb, "Creates bundles of artifacts that should be manually uploaded to the central Maven repository.", 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 || "bundle-create".equals( goal ) ) |
81 | |
{ |
82 | 0 | append( sb, "repository:bundle-create", 0 ); |
83 | 0 | append( sb, "Goal which creates an upload bundle for a project built with Maven.", 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, "disableMaterialization (Default: false)", 2 ); |
91 | 0 | append( sb, "Disable validations to make sure bundle supports project materialization.\nWARNING: This means your project will be MUCH harder to use.", 3 ); |
92 | 0 | append( sb, "", 0 ); |
93 | |
} |
94 | |
} |
95 | |
|
96 | 0 | if ( goal == null || goal.length() <= 0 || "bundle-pack".equals( goal ) ) |
97 | |
{ |
98 | 0 | append( sb, "repository:bundle-pack", 0 ); |
99 | 0 | append( sb, "Packs artifacts already available in a local repository in a bundle for an upload requests. It requires that the artifact has a POM in the local repository. It will check for mandatory elements, asking interactively for missing values. Can be used to generate bundles for third parties artifacts that have been manually added to the local repository.", 1 ); |
100 | 0 | append( sb, "", 0 ); |
101 | 0 | if ( detail ) |
102 | |
{ |
103 | 0 | append( sb, "Available parameters:", 1 ); |
104 | 0 | append( sb, "", 0 ); |
105 | |
|
106 | 0 | append( sb, "artifactId", 2 ); |
107 | 0 | append( sb, "ArtifactId for the artifact to create an upload bundle for.", 3 ); |
108 | 0 | append( sb, "", 0 ); |
109 | |
|
110 | 0 | append( sb, "disableMaterialization (Default: false)", 2 ); |
111 | 0 | append( sb, "Disable validations to make sure bundle supports project materialization.\nWARNING: This means your project will be MUCH harder to use.", 3 ); |
112 | 0 | append( sb, "", 0 ); |
113 | |
|
114 | 0 | append( sb, "groupId", 2 ); |
115 | 0 | append( sb, "GroupId for the artifact to create an upload bundle for.", 3 ); |
116 | 0 | append( sb, "", 0 ); |
117 | |
|
118 | 0 | append( sb, "scmConnection", 2 ); |
119 | 0 | append( sb, "Read-only URL for SCM tool connections, in cases where this isn\'t provided by the POM.\nNOTE: This should be a standard maven-scm URL. See the format guidelines for more information.", 3 ); |
120 | 0 | append( sb, "", 0 ); |
121 | |
|
122 | 0 | append( sb, "scmUrl", 2 ); |
123 | 0 | append( sb, "Viewable URL for SCM connections, in cases where this isn\'t provided by the POM.", 3 ); |
124 | 0 | append( sb, "", 0 ); |
125 | |
|
126 | 0 | append( sb, "version", 2 ); |
127 | 0 | append( sb, "Version for the artifact to create an upload bundle for.", 3 ); |
128 | 0 | append( sb, "", 0 ); |
129 | |
} |
130 | |
} |
131 | |
|
132 | 0 | if ( goal == null || goal.length() <= 0 || "help".equals( goal ) ) |
133 | |
{ |
134 | 0 | append( sb, "repository:help", 0 ); |
135 | 0 | append( sb, "Display help information on maven-repository-plugin.\nCall\n\u00a0\u00a0mvn\u00a0repository:help\u00a0-Ddetail=true\u00a0-Dgoal=<goal-name>\nto display parameter details.", 1 ); |
136 | 0 | append( sb, "", 0 ); |
137 | 0 | if ( detail ) |
138 | |
{ |
139 | 0 | append( sb, "Available parameters:", 1 ); |
140 | 0 | append( sb, "", 0 ); |
141 | |
|
142 | 0 | append( sb, "detail (Default: false)", 2 ); |
143 | 0 | append( sb, "If true, display all settable properties for each goal.", 3 ); |
144 | 0 | append( sb, "", 0 ); |
145 | |
|
146 | 0 | append( sb, "goal", 2 ); |
147 | 0 | append( sb, "The name of the goal for which to show help. If unspecified, all goals will be displayed.", 3 ); |
148 | 0 | append( sb, "", 0 ); |
149 | |
|
150 | 0 | append( sb, "indentSize (Default: 2)", 2 ); |
151 | 0 | append( sb, "The number of spaces per indentation level, should be positive.", 3 ); |
152 | 0 | append( sb, "", 0 ); |
153 | |
|
154 | 0 | append( sb, "lineLength (Default: 80)", 2 ); |
155 | 0 | append( sb, "The maximum length of a display line, should be positive.", 3 ); |
156 | 0 | append( sb, "", 0 ); |
157 | |
} |
158 | |
} |
159 | |
|
160 | 0 | if ( getLog().isInfoEnabled() ) |
161 | |
{ |
162 | 0 | getLog().info( sb.toString() ); |
163 | |
} |
164 | 0 | } |
165 | |
|
166 | |
|
167 | |
|
168 | |
|
169 | |
|
170 | |
|
171 | |
|
172 | |
|
173 | |
|
174 | |
|
175 | |
private static String repeat( String str, int repeat ) |
176 | |
{ |
177 | 0 | StringBuffer buffer = new StringBuffer( repeat * str.length() ); |
178 | |
|
179 | 0 | for ( int i = 0; i < repeat; i++ ) |
180 | |
{ |
181 | 0 | buffer.append( str ); |
182 | |
} |
183 | |
|
184 | 0 | return buffer.toString(); |
185 | |
} |
186 | |
|
187 | |
|
188 | |
|
189 | |
|
190 | |
|
191 | |
|
192 | |
|
193 | |
|
194 | |
|
195 | |
private void append( StringBuffer sb, String description, int indent ) |
196 | |
{ |
197 | 0 | for ( Iterator it = toLines( description, indent, indentSize, lineLength ).iterator(); it.hasNext(); ) |
198 | |
{ |
199 | 0 | sb.append( it.next().toString() ).append( '\n' ); |
200 | |
} |
201 | 0 | } |
202 | |
|
203 | |
|
204 | |
|
205 | |
|
206 | |
|
207 | |
|
208 | |
|
209 | |
|
210 | |
|
211 | |
|
212 | |
|
213 | |
private static List toLines( String text, int indent, int indentSize, int lineLength ) |
214 | |
{ |
215 | 0 | List lines = new ArrayList(); |
216 | |
|
217 | 0 | String ind = repeat( "\t", indent ); |
218 | 0 | String[] plainLines = text.split( "(\r\n)|(\r)|(\n)" ); |
219 | 0 | for ( int i = 0; i < plainLines.length; i++ ) |
220 | |
{ |
221 | 0 | toLines( lines, ind + plainLines[i], indentSize, lineLength ); |
222 | |
} |
223 | |
|
224 | 0 | return lines; |
225 | |
} |
226 | |
|
227 | |
|
228 | |
|
229 | |
|
230 | |
|
231 | |
|
232 | |
|
233 | |
|
234 | |
|
235 | |
private static void toLines( List lines, String line, int indentSize, int lineLength ) |
236 | |
{ |
237 | 0 | int lineIndent = getIndentLevel( line ); |
238 | 0 | StringBuffer buf = new StringBuffer( 256 ); |
239 | 0 | String[] tokens = line.split( " +" ); |
240 | 0 | for ( int i = 0; i < tokens.length; i++ ) |
241 | |
{ |
242 | 0 | String token = tokens[i]; |
243 | 0 | if ( i > 0 ) |
244 | |
{ |
245 | 0 | if ( buf.length() + token.length() >= lineLength ) |
246 | |
{ |
247 | 0 | lines.add( buf.toString() ); |
248 | 0 | buf.setLength( 0 ); |
249 | 0 | buf.append( repeat( " ", lineIndent * indentSize ) ); |
250 | |
} |
251 | |
else |
252 | |
{ |
253 | 0 | buf.append( ' ' ); |
254 | |
} |
255 | |
} |
256 | 0 | for ( int j = 0; j < token.length(); j++ ) |
257 | |
{ |
258 | 0 | char c = token.charAt( j ); |
259 | 0 | if ( c == '\t' ) |
260 | |
{ |
261 | 0 | buf.append( repeat( " ", indentSize - buf.length() % indentSize ) ); |
262 | |
} |
263 | 0 | else if ( c == '\u00A0' ) |
264 | |
{ |
265 | 0 | buf.append( ' ' ); |
266 | |
} |
267 | |
else |
268 | |
{ |
269 | 0 | buf.append( c ); |
270 | |
} |
271 | |
} |
272 | |
} |
273 | 0 | lines.add( buf.toString() ); |
274 | 0 | } |
275 | |
|
276 | |
|
277 | |
|
278 | |
|
279 | |
|
280 | |
|
281 | |
|
282 | |
private static int getIndentLevel( String line ) |
283 | |
{ |
284 | 0 | int level = 0; |
285 | 0 | for ( int i = 0; i < line.length() && line.charAt( i ) == '\t'; i++ ) |
286 | |
{ |
287 | 0 | level++; |
288 | |
} |
289 | 0 | for ( int i = level + 1; i <= level + 4 && i < line.length(); i++ ) |
290 | |
{ |
291 | 0 | if ( line.charAt( i ) == '\t' ) |
292 | |
{ |
293 | 0 | level++; |
294 | 0 | break; |
295 | |
} |
296 | |
} |
297 | 0 | return level; |
298 | |
} |
299 | |
} |