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