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