1
2
3
4
5 package org.apache.maven.toolchain.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.toolchain.TrackableBase;
25 import org.apache.maven.api.toolchain.PersistedToolchains;
26 import org.apache.maven.api.toolchain.ToolchainModel;
27 import org.codehaus.plexus.util.ReaderFactory;
28 import org.codehaus.plexus.util.xml.pull.EntityReplacementMap;
29 import org.codehaus.plexus.util.xml.pull.MXParser;
30 import org.codehaus.plexus.util.xml.pull.MXSerializer;
31 import org.codehaus.plexus.util.xml.pull.XmlPullParser;
32 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
33 import org.codehaus.plexus.util.xml.pull.XmlSerializer;
34
35 @Generated
36 public class MavenToolchainsXpp3Writer
37 {
38
39
40
41
42
43
44
45 private static final String NAMESPACE = null;
46
47
48
49
50 private String fileComment = null;
51
52
53
54
55
56
57
58
59
60
61
62 public void setFileComment( String fileComment )
63 {
64 this.fileComment = fileComment;
65 }
66
67
68
69
70
71
72
73
74 public void write( Writer writer, PersistedToolchains persistedToolchains )
75 throws java.io.IOException
76 {
77 XmlSerializer serializer = new MXSerializer();
78 serializer.setProperty( "http://xmlpull.org/v1/doc/properties.html#serializer-indentation", " " );
79 serializer.setProperty( "http://xmlpull.org/v1/doc/properties.html#serializer-line-separator", "\n" );
80 serializer.setOutput( writer );
81 serializer.startDocument( persistedToolchains.getModelEncoding(), null );
82 writePersistedToolchains( "toolchains", persistedToolchains, serializer );
83 serializer.endDocument();
84 }
85
86
87
88
89
90
91
92
93 public void write( OutputStream stream, PersistedToolchains persistedToolchains )
94 throws java.io.IOException
95 {
96 XmlSerializer serializer = new MXSerializer();
97 serializer.setProperty( "http://xmlpull.org/v1/doc/properties.html#serializer-indentation", " " );
98 serializer.setProperty( "http://xmlpull.org/v1/doc/properties.html#serializer-line-separator", "\n" );
99 serializer.setOutput( stream, persistedToolchains.getModelEncoding() );
100 serializer.startDocument( persistedToolchains.getModelEncoding(), null );
101 writePersistedToolchains( "toolchains", persistedToolchains, serializer );
102 serializer.endDocument();
103 }
104
105
106
107
108
109
110
111
112 protected void writeDomToSerializer( org.apache.maven.api.xml.XmlNode dom, XmlSerializer serializer )
113 throws java.io.IOException
114 {
115 serializer.startTag( NAMESPACE, dom.getName() );
116
117 for ( Map.Entry<String, String> attribute : dom.getAttributes().entrySet() )
118 {
119 serializer.attribute( NAMESPACE, attribute.getKey(), attribute.getValue() );
120 }
121 for ( XmlNode aChild : dom.getChildren() )
122 {
123 writeDomToSerializer( aChild, serializer );
124 }
125
126 String value = dom.getValue();
127 if ( value != null )
128 {
129 serializer.text( value );
130 }
131
132 serializer.endTag( NAMESPACE, dom.getName() );
133
134 }
135
136
137 private void writeTrackableBase( String tagName, TrackableBase trackableBase, XmlSerializer serializer )
138 throws IOException
139 {
140 if ( trackableBase != null )
141 {
142 serializer.startTag( NAMESPACE, tagName );
143 serializer.endTag( NAMESPACE, tagName );
144 }
145 }
146
147 private void writePersistedToolchains( String tagName, PersistedToolchains persistedToolchains, XmlSerializer serializer )
148 throws IOException
149 {
150 if ( persistedToolchains != null )
151 {
152 if ( this.fileComment != null )
153 {
154 serializer.comment(this.fileComment);
155 }
156 serializer.setPrefix( "", "http://maven.apache.org/POM/4.0.0" );
157 serializer.setPrefix( "xsi", "http://www.w3.org/2001/XMLSchema-instance" );
158 serializer.startTag( NAMESPACE, tagName );
159 serializer.attribute( "", "xsi:schemaLocation", "http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" );
160 writeList( "toolchains", true, persistedToolchains.getToolchains(), serializer, t -> writeToolchainModel( "toolchain", t, serializer ) );
161 serializer.endTag( NAMESPACE, tagName );
162 }
163 }
164
165 private void writeToolchainModel( String tagName, ToolchainModel toolchainModel, XmlSerializer serializer )
166 throws IOException
167 {
168 if ( toolchainModel != null )
169 {
170 serializer.startTag( NAMESPACE, tagName );
171 writeTag( "type", null, toolchainModel.getType(), serializer );
172 writeProperties( "provides", toolchainModel.getProvides(), serializer );
173 writeDom( toolchainModel.getConfiguration(), serializer );
174 serializer.endTag( NAMESPACE, tagName );
175 }
176 }
177
178 @FunctionalInterface
179 private interface ElementWriter<T>
180 {
181 public void write( T t ) throws IOException;
182 }
183
184 private <T> void writeList( String tagName, List<T> list, XmlSerializer serializer, ElementWriter<T> writer )
185 throws IOException
186 {
187 writeList( tagName, false, list, serializer, writer );
188 }
189
190 private <T> void writeList( String tagName, boolean flat, List<T> list, XmlSerializer serializer, ElementWriter<T> writer )
191 throws IOException
192 {
193 if ( list != null && !list.isEmpty() )
194 {
195 if ( !flat )
196 {
197 serializer.startTag( NAMESPACE, tagName );
198 }
199 for ( T t : list )
200 {
201 writer.write( t );
202 }
203 if ( !flat )
204 {
205 serializer.endTag( NAMESPACE, tagName );
206 }
207 }
208 }
209
210 private <T> void writeProperties( String tagName, Map<String, String> props, XmlSerializer serializer )
211 throws IOException
212 {
213 if ( props != null && !props.isEmpty() )
214 {
215 serializer.startTag( NAMESPACE, tagName );
216 for ( Map.Entry<String, String> entry : props.entrySet() )
217 {
218 writeTag( entry.getKey(), null, entry.getValue(), serializer );
219 }
220 serializer.endTag( NAMESPACE, tagName );
221 }
222 }
223
224 private void writeDom( XmlNode dom, XmlSerializer serializer )
225 throws IOException
226 {
227 if ( dom != null )
228 {
229 serializer.startTag( NAMESPACE, dom.getName() );
230 for ( Map.Entry<String, String> attr : dom.getAttributes().entrySet() )
231 {
232 serializer.attribute( NAMESPACE, attr.getKey(), attr.getValue() );
233 }
234 for ( XmlNode child : dom.getChildren() )
235 {
236 writeDom( child, serializer );
237 }
238 String value = dom.getValue();
239 if ( value != null )
240 {
241 serializer.text( value );
242 }
243 serializer.endTag( NAMESPACE, dom.getName() );
244 }
245 }
246
247 private void writeTag( String tagName, String defaultValue, String value, XmlSerializer serializer )
248 throws IOException
249 {
250 if ( value != null && !Objects.equals( defaultValue, value ) )
251 {
252 serializer.startTag( NAMESPACE, tagName ).text( value ).endTag( NAMESPACE, tagName );
253 }
254 }
255
256 private void writeAttr( String attrName, String value, XmlSerializer serializer )
257 throws IOException
258 {
259 if ( value != null )
260 {
261 serializer.attribute( NAMESPACE, attrName, value );
262 }
263 }
264
265 }