View Javadoc
1   // =================== DO NOT EDIT THIS FILE ====================
2   //  Generated by Modello Velocity from writer.vm
3   //  template, any modifications will be overwritten.
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       //- Class/Member Variables -/
40      //--------------------------/
41  
42      /**
43       * Field NAMESPACE.
44       */
45      private static final String NAMESPACE = null;
46  
47      /**
48       * Field fileComment.
49       */
50      private String fileComment = null;
51  
52  
53        //-----------/
54       //- Methods -/
55      //-----------/
56  
57      /**
58       * Method setFileComment.
59       *
60       * @param fileComment a fileComment object.
61       */
62      public void setFileComment( String fileComment )
63      {
64          this.fileComment = fileComment;
65      } //-- void setFileComment( String )
66  
67      /**
68       * Method write.
69       *
70       * @param writer a writer object
71       * @param persistedToolchains a PersistedToolchains object
72       * @throws java.io.IOException java.io.IOException if any
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      } //-- void write( Writer, PersistedToolchains )
85  
86      /**
87       * Method write.
88       *
89       * @param stream a stream object
90       * @param persistedToolchains a PersistedToolchains object
91       * @throws java.io.IOException java.io.IOException if any
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     } //-- void write( OutputStream, PersistedToolchains )
104 
105     /**
106      * Method writeDomToSerializer.
107      *
108      * @param dom a dom object.
109      * @param serializer a serializer object.
110      * @throws java.io.IOException java.io.IOException if any.
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     } //-- void writeDomToSerializer( org.apache.maven.api.xml.XmlNode, XmlSerializer )
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 }