1
2
3
4
5 package org.apache.maven.settings.v4;
6
7 import java.io.IOException;
8 import java.io.InputStream;
9 import java.io.OutputStream;
10 import java.io.Reader;
11 import java.io.Writer;
12 import java.text.DateFormat;
13 import java.util.ArrayList;
14 import java.util.Date;
15 import java.util.HashSet;
16 import java.util.List;
17 import java.util.Map;
18 import java.util.Objects;
19 import java.util.Properties;
20 import java.util.Set;
21 import org.apache.maven.api.annotations.Generated;
22 import org.apache.maven.api.xml.XmlNode;
23 import org.apache.maven.internal.xml.XmlNodeBuilder;
24 import org.apache.maven.api.settings.TrackableBase;
25 import org.apache.maven.api.settings.IdentifiableBase;
26 import org.apache.maven.api.settings.Settings;
27 import org.apache.maven.api.settings.Proxy;
28 import org.apache.maven.api.settings.Server;
29 import org.apache.maven.api.settings.Mirror;
30 import org.apache.maven.api.settings.Profile;
31 import org.apache.maven.api.settings.Activation;
32 import org.apache.maven.api.settings.RepositoryBase;
33 import org.apache.maven.api.settings.Repository;
34 import org.apache.maven.api.settings.RepositoryPolicy;
35 import org.apache.maven.api.settings.ActivationProperty;
36 import org.apache.maven.api.settings.ActivationOS;
37 import org.apache.maven.api.settings.ActivationFile;
38 import org.codehaus.plexus.util.ReaderFactory;
39 import org.codehaus.plexus.util.xml.pull.EntityReplacementMap;
40 import org.codehaus.plexus.util.xml.pull.MXParser;
41 import org.codehaus.plexus.util.xml.pull.MXSerializer;
42 import org.codehaus.plexus.util.xml.pull.XmlPullParser;
43 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
44 import org.codehaus.plexus.util.xml.pull.XmlSerializer;
45
46 @Generated
47 public class SettingsXpp3Writer
48 {
49
50
51
52
53
54
55
56 private static final String NAMESPACE = null;
57
58
59
60
61 private String fileComment = null;
62
63
64
65
66
67
68
69
70
71
72
73 public void setFileComment( String fileComment )
74 {
75 this.fileComment = fileComment;
76 }
77
78
79
80
81
82
83
84
85 public void write( Writer writer, Settings settings )
86 throws java.io.IOException
87 {
88 XmlSerializer serializer = new MXSerializer();
89 serializer.setProperty( "http://xmlpull.org/v1/doc/properties.html#serializer-indentation", " " );
90 serializer.setProperty( "http://xmlpull.org/v1/doc/properties.html#serializer-line-separator", "\n" );
91 serializer.setOutput( writer );
92 serializer.startDocument( settings.getModelEncoding(), null );
93 writeSettings( "settings", settings, serializer );
94 serializer.endDocument();
95 }
96
97
98
99
100
101
102
103
104 public void write( OutputStream stream, Settings settings )
105 throws java.io.IOException
106 {
107 XmlSerializer serializer = new MXSerializer();
108 serializer.setProperty( "http://xmlpull.org/v1/doc/properties.html#serializer-indentation", " " );
109 serializer.setProperty( "http://xmlpull.org/v1/doc/properties.html#serializer-line-separator", "\n" );
110 serializer.setOutput( stream, settings.getModelEncoding() );
111 serializer.startDocument( settings.getModelEncoding(), null );
112 writeSettings( "settings", settings, serializer );
113 serializer.endDocument();
114 }
115
116
117
118
119
120
121
122
123 protected void writeDomToSerializer( org.apache.maven.api.xml.XmlNode dom, XmlSerializer serializer )
124 throws java.io.IOException
125 {
126 serializer.startTag( NAMESPACE, dom.getName() );
127
128 for ( Map.Entry<String, String> attribute : dom.getAttributes().entrySet() )
129 {
130 serializer.attribute( NAMESPACE, attribute.getKey(), attribute.getValue() );
131 }
132 for ( XmlNode aChild : dom.getChildren() )
133 {
134 writeDomToSerializer( aChild, serializer );
135 }
136
137 String value = dom.getValue();
138 if ( value != null )
139 {
140 serializer.text( value );
141 }
142
143 serializer.endTag( NAMESPACE, dom.getName() );
144
145 }
146
147
148 private void writeTrackableBase( String tagName, TrackableBase trackableBase, XmlSerializer serializer )
149 throws IOException
150 {
151 if ( trackableBase != null )
152 {
153 serializer.startTag( NAMESPACE, tagName );
154 serializer.endTag( NAMESPACE, tagName );
155 }
156 }
157
158 private void writeIdentifiableBase( String tagName, IdentifiableBase identifiableBase, XmlSerializer serializer )
159 throws IOException
160 {
161 if ( identifiableBase != null )
162 {
163 serializer.startTag( NAMESPACE, tagName );
164 writeTag( "id", "default", identifiableBase.getId(), serializer );
165 serializer.endTag( NAMESPACE, tagName );
166 }
167 }
168
169 private void writeSettings( String tagName, Settings settings, XmlSerializer serializer )
170 throws IOException
171 {
172 if ( settings != null )
173 {
174 if ( this.fileComment != null )
175 {
176 serializer.comment(this.fileComment);
177 }
178 serializer.setPrefix( "", "http://maven.apache.org/POM/4.0.0" );
179 serializer.setPrefix( "xsi", "http://www.w3.org/2001/XMLSchema-instance" );
180 serializer.startTag( NAMESPACE, tagName );
181 serializer.attribute( "", "xsi:schemaLocation", "http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" );
182 writeTag( "localRepository", null, settings.getLocalRepository(), serializer );
183 writeTag( "interactiveMode", "true", settings.isInteractiveMode() ? null : "false", serializer );
184 writeTag( "usePluginRegistry", "false", settings.isUsePluginRegistry() ? "true" : null, serializer );
185 writeTag( "offline", "false", settings.isOffline() ? "true" : null, serializer );
186 writeList( "proxies", false, settings.getProxies(), serializer, t -> writeProxy( "proxy", t, serializer ) );
187 writeList( "servers", false, settings.getServers(), serializer, t -> writeServer( "server", t, serializer ) );
188 writeList( "mirrors", false, settings.getMirrors(), serializer, t -> writeMirror( "mirror", t, serializer ) );
189 writeList( "profiles", false, settings.getProfiles(), serializer, t -> writeProfile( "profile", t, serializer ) );
190 writeList( "activeProfiles", settings.getActiveProfiles(), serializer, t -> writeTag( "activeProfile", "new java.util.ArrayList/*<String>*/()", t, serializer ) );
191 writeList( "pluginGroups", settings.getPluginGroups(), serializer, t -> writeTag( "pluginGroup", "new java.util.ArrayList/*<String>*/()", t, serializer ) );
192 serializer.endTag( NAMESPACE, tagName );
193 }
194 }
195
196 private void writeProxy( String tagName, Proxy proxy, XmlSerializer serializer )
197 throws IOException
198 {
199 if ( proxy != null )
200 {
201 serializer.startTag( NAMESPACE, tagName );
202 writeTag( "active", "true", proxy.isActive() ? null : "false", serializer );
203 writeTag( "protocol", "http", proxy.getProtocol(), serializer );
204 writeTag( "username", null, proxy.getUsername(), serializer );
205 writeTag( "password", null, proxy.getPassword(), serializer );
206 writeTag( "port", "8080", Integer.toString( proxy.getPort() ), serializer );
207 writeTag( "host", null, proxy.getHost(), serializer );
208 writeTag( "nonProxyHosts", null, proxy.getNonProxyHosts(), serializer );
209 writeTag( "id", "default", proxy.getId(), serializer );
210 serializer.endTag( NAMESPACE, tagName );
211 }
212 }
213
214 private void writeServer( String tagName, Server server, XmlSerializer serializer )
215 throws IOException
216 {
217 if ( server != null )
218 {
219 serializer.startTag( NAMESPACE, tagName );
220 writeTag( "username", null, server.getUsername(), serializer );
221 writeTag( "password", null, server.getPassword(), serializer );
222 writeTag( "privateKey", null, server.getPrivateKey(), serializer );
223 writeTag( "passphrase", null, server.getPassphrase(), serializer );
224 writeTag( "filePermissions", null, server.getFilePermissions(), serializer );
225 writeTag( "directoryPermissions", null, server.getDirectoryPermissions(), serializer );
226 writeDom( server.getConfiguration(), serializer );
227 writeTag( "id", "default", server.getId(), serializer );
228 serializer.endTag( NAMESPACE, tagName );
229 }
230 }
231
232 private void writeMirror( String tagName, Mirror mirror, XmlSerializer serializer )
233 throws IOException
234 {
235 if ( mirror != null )
236 {
237 serializer.startTag( NAMESPACE, tagName );
238 writeTag( "mirrorOf", null, mirror.getMirrorOf(), serializer );
239 writeTag( "name", null, mirror.getName(), serializer );
240 writeTag( "url", null, mirror.getUrl(), serializer );
241 writeTag( "layout", "default", mirror.getLayout(), serializer );
242 writeTag( "mirrorOfLayouts", "default,legacy", mirror.getMirrorOfLayouts(), serializer );
243 writeTag( "blocked", "false", mirror.isBlocked() ? "true" : null, serializer );
244 writeTag( "id", "default", mirror.getId(), serializer );
245 serializer.endTag( NAMESPACE, tagName );
246 }
247 }
248
249 private void writeProfile( String tagName, Profile profile, XmlSerializer serializer )
250 throws IOException
251 {
252 if ( profile != null )
253 {
254 serializer.startTag( NAMESPACE, tagName );
255 writeActivation( "activation", profile.getActivation(), serializer );
256 writeProperties( "properties", profile.getProperties(), serializer );
257 writeList( "repositories", false, profile.getRepositories(), serializer, t -> writeRepository( "repository", t, serializer ) );
258 writeList( "pluginRepositories", false, profile.getPluginRepositories(), serializer, t -> writeRepository( "pluginRepository", t, serializer ) );
259 writeTag( "id", "default", profile.getId(), serializer );
260 serializer.endTag( NAMESPACE, tagName );
261 }
262 }
263
264 private void writeActivation( String tagName, Activation activation, XmlSerializer serializer )
265 throws IOException
266 {
267 if ( activation != null )
268 {
269 serializer.startTag( NAMESPACE, tagName );
270 writeTag( "activeByDefault", "false", activation.isActiveByDefault() ? "true" : null, serializer );
271 writeTag( "jdk", null, activation.getJdk(), serializer );
272 writeActivationOS( "os", activation.getOs(), serializer );
273 writeActivationProperty( "property", activation.getProperty(), serializer );
274 writeActivationFile( "file", activation.getFile(), serializer );
275 serializer.endTag( NAMESPACE, tagName );
276 }
277 }
278
279 private void writeRepositoryBase( String tagName, RepositoryBase repositoryBase, XmlSerializer serializer )
280 throws IOException
281 {
282 if ( repositoryBase != null )
283 {
284 serializer.startTag( NAMESPACE, tagName );
285 writeTag( "id", null, repositoryBase.getId(), serializer );
286 writeTag( "name", null, repositoryBase.getName(), serializer );
287 writeTag( "url", null, repositoryBase.getUrl(), serializer );
288 writeTag( "layout", "default", repositoryBase.getLayout(), serializer );
289 serializer.endTag( NAMESPACE, tagName );
290 }
291 }
292
293 private void writeRepository( String tagName, Repository repository, XmlSerializer serializer )
294 throws IOException
295 {
296 if ( repository != null )
297 {
298 serializer.startTag( NAMESPACE, tagName );
299 writeRepositoryPolicy( "releases", repository.getReleases(), serializer );
300 writeRepositoryPolicy( "snapshots", repository.getSnapshots(), serializer );
301 writeTag( "id", null, repository.getId(), serializer );
302 writeTag( "name", null, repository.getName(), serializer );
303 writeTag( "url", null, repository.getUrl(), serializer );
304 writeTag( "layout", "default", repository.getLayout(), serializer );
305 serializer.endTag( NAMESPACE, tagName );
306 }
307 }
308
309 private void writeRepositoryPolicy( String tagName, RepositoryPolicy repositoryPolicy, XmlSerializer serializer )
310 throws IOException
311 {
312 if ( repositoryPolicy != null )
313 {
314 serializer.startTag( NAMESPACE, tagName );
315 writeTag( "enabled", "true", repositoryPolicy.isEnabled() ? null : "false", serializer );
316 writeTag( "updatePolicy", null, repositoryPolicy.getUpdatePolicy(), serializer );
317 writeTag( "checksumPolicy", null, repositoryPolicy.getChecksumPolicy(), serializer );
318 serializer.endTag( NAMESPACE, tagName );
319 }
320 }
321
322 private void writeActivationProperty( String tagName, ActivationProperty activationProperty, XmlSerializer serializer )
323 throws IOException
324 {
325 if ( activationProperty != null )
326 {
327 serializer.startTag( NAMESPACE, tagName );
328 writeTag( "name", null, activationProperty.getName(), serializer );
329 writeTag( "value", null, activationProperty.getValue(), serializer );
330 serializer.endTag( NAMESPACE, tagName );
331 }
332 }
333
334 private void writeActivationOS( String tagName, ActivationOS activationOS, XmlSerializer serializer )
335 throws IOException
336 {
337 if ( activationOS != null )
338 {
339 serializer.startTag( NAMESPACE, tagName );
340 writeTag( "name", null, activationOS.getName(), serializer );
341 writeTag( "family", null, activationOS.getFamily(), serializer );
342 writeTag( "arch", null, activationOS.getArch(), serializer );
343 writeTag( "version", null, activationOS.getVersion(), serializer );
344 serializer.endTag( NAMESPACE, tagName );
345 }
346 }
347
348 private void writeActivationFile( String tagName, ActivationFile activationFile, XmlSerializer serializer )
349 throws IOException
350 {
351 if ( activationFile != null )
352 {
353 serializer.startTag( NAMESPACE, tagName );
354 writeTag( "missing", null, activationFile.getMissing(), serializer );
355 writeTag( "exists", null, activationFile.getExists(), serializer );
356 serializer.endTag( NAMESPACE, tagName );
357 }
358 }
359
360 @FunctionalInterface
361 private interface ElementWriter<T>
362 {
363 public void write( T t ) throws IOException;
364 }
365
366 private <T> void writeList( String tagName, List<T> list, XmlSerializer serializer, ElementWriter<T> writer )
367 throws IOException
368 {
369 writeList( tagName, false, list, serializer, writer );
370 }
371
372 private <T> void writeList( String tagName, boolean flat, List<T> list, XmlSerializer serializer, ElementWriter<T> writer )
373 throws IOException
374 {
375 if ( list != null && !list.isEmpty() )
376 {
377 if ( !flat )
378 {
379 serializer.startTag( NAMESPACE, tagName );
380 }
381 for ( T t : list )
382 {
383 writer.write( t );
384 }
385 if ( !flat )
386 {
387 serializer.endTag( NAMESPACE, tagName );
388 }
389 }
390 }
391
392 private <T> void writeProperties( String tagName, Map<String, String> props, XmlSerializer serializer )
393 throws IOException
394 {
395 if ( props != null && !props.isEmpty() )
396 {
397 serializer.startTag( NAMESPACE, tagName );
398 for ( Map.Entry<String, String> entry : props.entrySet() )
399 {
400 writeTag( entry.getKey(), null, entry.getValue(), serializer );
401 }
402 serializer.endTag( NAMESPACE, tagName );
403 }
404 }
405
406 private void writeDom( XmlNode dom, XmlSerializer serializer )
407 throws IOException
408 {
409 if ( dom != null )
410 {
411 serializer.startTag( NAMESPACE, dom.getName() );
412 for ( Map.Entry<String, String> attr : dom.getAttributes().entrySet() )
413 {
414 serializer.attribute( NAMESPACE, attr.getKey(), attr.getValue() );
415 }
416 for ( XmlNode child : dom.getChildren() )
417 {
418 writeDom( child, serializer );
419 }
420 String value = dom.getValue();
421 if ( value != null )
422 {
423 serializer.text( value );
424 }
425 serializer.endTag( NAMESPACE, dom.getName() );
426 }
427 }
428
429 private void writeTag( String tagName, String defaultValue, String value, XmlSerializer serializer )
430 throws IOException
431 {
432 if ( value != null && !Objects.equals( defaultValue, value ) )
433 {
434 serializer.startTag( NAMESPACE, tagName ).text( value ).endTag( NAMESPACE, tagName );
435 }
436 }
437
438 private void writeAttr( String attrName, String value, XmlSerializer serializer )
439 throws IOException
440 {
441 if ( value != null )
442 {
443 serializer.attribute( NAMESPACE, attrName, value );
444 }
445 }
446
447 }