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