View Javadoc
1   // =================== DO NOT EDIT THIS FILE ====================
2   // Generated by Modello 2.1.2,
3   // any modifications will be overwritten.
4   // ==============================================================
5   
6   package org.apache.maven.artifact.repository.metadata.io.xpp3;
7   
8     //---------------------------------/
9    //- Imported classes and packages -/
10  //---------------------------------/
11  
12  import java.io.IOException;
13  import java.io.InputStream;
14  import java.io.Reader;
15  import java.text.DateFormat;
16  import org.apache.maven.artifact.repository.metadata.Metadata;
17  import org.apache.maven.artifact.repository.metadata.Plugin;
18  import org.apache.maven.artifact.repository.metadata.Snapshot;
19  import org.apache.maven.artifact.repository.metadata.SnapshotVersion;
20  import org.apache.maven.artifact.repository.metadata.Versioning;
21  import org.codehaus.plexus.util.ReaderFactory;
22  import org.codehaus.plexus.util.xml.pull.EntityReplacementMap;
23  import org.codehaus.plexus.util.xml.pull.MXParser;
24  import org.codehaus.plexus.util.xml.pull.XmlPullParser;
25  import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
26  
27  /**
28   * Class MetadataXpp3Reader.
29   * 
30   * @version $Revision$ $Date$
31   */
32  @SuppressWarnings( "all" )
33  public class MetadataXpp3Reader
34  {
35  
36        //--------------------------/
37       //- Class/Member Variables -/
38      //--------------------------/
39  
40      /**
41       * If set the parser will be loaded with all single characters
42       * from the XHTML specification.
43       * The entities used:
44       * <ul>
45       * <li>http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent</li>
46       * <li>http://www.w3.org/TR/xhtml1/DTD/xhtml-special.ent</li>
47       * <li>http://www.w3.org/TR/xhtml1/DTD/xhtml-symbol.ent</li>
48       * </ul>
49       */
50      private boolean addDefaultEntities = true;
51  
52      /**
53       * Field contentTransformer.
54       */
55      public final ContentTransformer contentTransformer;
56  
57  
58        //----------------/
59       //- Constructors -/
60      //----------------/
61  
62      public MetadataXpp3Reader()
63      {
64          this( new ContentTransformer()
65          {
66              public String transform( String source, String fieldName )
67              {
68                  return source;
69              }
70          } );
71      } //-- org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Reader()
72  
73      public MetadataXpp3Reader(ContentTransformer contentTransformer)
74      {
75          this.contentTransformer = contentTransformer;
76      } //-- org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Reader(ContentTransformer)
77  
78  
79        //-----------/
80       //- Methods -/
81      //-----------/
82  
83      /**
84       * Method checkFieldWithDuplicate.
85       * 
86       * @param parser a parser object.
87       * @param parsed a parsed object.
88       * @param alias a alias object.
89       * @param tagName a tagName object.
90       * @throws XmlPullParserException XmlPullParserException if
91       * any.
92       * @return boolean
93       */
94      private boolean checkFieldWithDuplicate( XmlPullParser parser, String tagName, String alias, java.util.Set parsed )
95          throws XmlPullParserException
96      {
97          if ( !( parser.getName().equals( tagName ) || parser.getName().equals( alias ) ) )
98          {
99              return false;
100         }
101         if ( !parsed.add( tagName ) )
102         {
103             throw new XmlPullParserException( "Duplicated tag: '" + tagName + "'", parser, null );
104         }
105         return true;
106     } //-- boolean checkFieldWithDuplicate( XmlPullParser, String, String, java.util.Set )
107 
108     /**
109      * Method checkUnknownAttribute.
110      * 
111      * @param parser a parser object.
112      * @param strict a strict object.
113      * @param tagName a tagName object.
114      * @param attribute a attribute object.
115      * @throws XmlPullParserException XmlPullParserException if
116      * any.
117      * @throws IOException IOException if any.
118      */
119     private void checkUnknownAttribute( XmlPullParser parser, String attribute, String tagName, boolean strict )
120         throws XmlPullParserException, IOException
121     {
122         // strictXmlAttributes = true for model: if strict == true, not only elements are checked but attributes too
123         if ( strict )
124         {
125             throw new XmlPullParserException( "Unknown attribute '" + attribute + "' for tag '" + tagName + "'", parser, null );
126         }
127     } //-- void checkUnknownAttribute( XmlPullParser, String, String, boolean )
128 
129     /**
130      * Method checkUnknownElement.
131      * 
132      * @param parser a parser object.
133      * @param strict a strict object.
134      * @throws XmlPullParserException XmlPullParserException if
135      * any.
136      * @throws IOException IOException if any.
137      */
138     private void checkUnknownElement( XmlPullParser parser, boolean strict )
139         throws XmlPullParserException, IOException
140     {
141         if ( strict )
142         {
143             throw new XmlPullParserException( "Unrecognised tag: '" + parser.getName() + "'", parser, null );
144         }
145 
146         for ( int unrecognizedTagCount = 1; unrecognizedTagCount > 0; )
147         {
148             int eventType = parser.next();
149             if ( eventType == XmlPullParser.START_TAG )
150             {
151                 unrecognizedTagCount++;
152             }
153             else if ( eventType == XmlPullParser.END_TAG )
154             {
155                 unrecognizedTagCount--;
156             }
157         }
158     } //-- void checkUnknownElement( XmlPullParser, boolean )
159 
160     /**
161      * Returns the state of the "add default entities" flag.
162      * 
163      * @return boolean
164      */
165     public boolean getAddDefaultEntities()
166     {
167         return addDefaultEntities;
168     } //-- boolean getAddDefaultEntities()
169 
170     /**
171      * Method getBooleanValue.
172      * 
173      * @param s a s object.
174      * @param parser a parser object.
175      * @param attribute a attribute object.
176      * @throws XmlPullParserException XmlPullParserException if
177      * any.
178      * @return boolean
179      */
180     private boolean getBooleanValue( String s, String attribute, XmlPullParser parser )
181         throws XmlPullParserException
182     {
183         return getBooleanValue( s, attribute, parser, null );
184     } //-- boolean getBooleanValue( String, String, XmlPullParser )
185 
186     /**
187      * Method getBooleanValue.
188      * 
189      * @param s a s object.
190      * @param defaultValue a defaultValue object.
191      * @param parser a parser object.
192      * @param attribute a attribute object.
193      * @throws XmlPullParserException XmlPullParserException if
194      * any.
195      * @return boolean
196      */
197     private boolean getBooleanValue( String s, String attribute, XmlPullParser parser, String defaultValue )
198         throws XmlPullParserException
199     {
200         if ( s != null && s.length() != 0 )
201         {
202             return Boolean.valueOf( s ).booleanValue();
203         }
204         if ( defaultValue != null )
205         {
206             return Boolean.valueOf( defaultValue ).booleanValue();
207         }
208         return false;
209     } //-- boolean getBooleanValue( String, String, XmlPullParser, String )
210 
211     /**
212      * Method getByteValue.
213      * 
214      * @param s a s object.
215      * @param strict a strict object.
216      * @param parser a parser object.
217      * @param attribute a attribute object.
218      * @throws XmlPullParserException XmlPullParserException if
219      * any.
220      * @return byte
221      */
222     private byte getByteValue( String s, String attribute, XmlPullParser parser, boolean strict )
223         throws XmlPullParserException
224     {
225         if ( s != null )
226         {
227             try
228             {
229                 return Byte.valueOf( s ).byteValue();
230             }
231             catch ( NumberFormatException nfe )
232             {
233                 if ( strict )
234                 {
235                     throw new XmlPullParserException( "Unable to parse element '" + attribute + "', must be a byte", parser, nfe );
236                 }
237             }
238         }
239         return 0;
240     } //-- byte getByteValue( String, String, XmlPullParser, boolean )
241 
242     /**
243      * Method getCharacterValue.
244      * 
245      * @param s a s object.
246      * @param parser a parser object.
247      * @param attribute a attribute object.
248      * @throws XmlPullParserException XmlPullParserException if
249      * any.
250      * @return char
251      */
252     private char getCharacterValue( String s, String attribute, XmlPullParser parser )
253         throws XmlPullParserException
254     {
255         if ( s != null )
256         {
257             return s.charAt( 0 );
258         }
259         return 0;
260     } //-- char getCharacterValue( String, String, XmlPullParser )
261 
262     /**
263      * Method getDateValue.
264      * 
265      * @param s a s object.
266      * @param parser a parser object.
267      * @param attribute a attribute object.
268      * @throws XmlPullParserException XmlPullParserException if
269      * any.
270      * @return Date
271      */
272     private java.util.Date getDateValue( String s, String attribute, XmlPullParser parser )
273         throws XmlPullParserException
274     {
275         return getDateValue( s, attribute, null, parser );
276     } //-- java.util.Date getDateValue( String, String, XmlPullParser )
277 
278     /**
279      * Method getDateValue.
280      * 
281      * @param s a s object.
282      * @param parser a parser object.
283      * @param dateFormat a dateFormat object.
284      * @param attribute a attribute object.
285      * @throws XmlPullParserException XmlPullParserException if
286      * any.
287      * @return Date
288      */
289     private java.util.Date getDateValue( String s, String attribute, String dateFormat, XmlPullParser parser )
290         throws XmlPullParserException
291     {
292         if ( s != null )
293         {
294             String effectiveDateFormat = dateFormat;
295             if ( dateFormat == null )
296             {
297                 effectiveDateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS";
298             }
299             if ( "long".equals( effectiveDateFormat ) )
300             {
301                 try
302                 {
303                     return new java.util.Date( Long.parseLong( s ) );
304                 }
305                 catch ( NumberFormatException e )
306                 {
307                     throw new XmlPullParserException( e.getMessage(), parser, e );
308                 }
309             }
310             else
311             {
312                 try
313                 {
314                     DateFormat dateParser = new java.text.SimpleDateFormat( effectiveDateFormat, java.util.Locale.US );
315                     return dateParser.parse( s );
316                 }
317                 catch ( java.text.ParseException e )
318                 {
319                     throw new XmlPullParserException( e.getMessage(), parser, e );
320                 }
321             }
322         }
323         return null;
324     } //-- java.util.Date getDateValue( String, String, String, XmlPullParser )
325 
326     /**
327      * Method getDoubleValue.
328      * 
329      * @param s a s object.
330      * @param strict a strict object.
331      * @param parser a parser object.
332      * @param attribute a attribute object.
333      * @throws XmlPullParserException XmlPullParserException if
334      * any.
335      * @return double
336      */
337     private double getDoubleValue( String s, String attribute, XmlPullParser parser, boolean strict )
338         throws XmlPullParserException
339     {
340         if ( s != null )
341         {
342             try
343             {
344                 return Double.valueOf( s ).doubleValue();
345             }
346             catch ( NumberFormatException nfe )
347             {
348                 if ( strict )
349                 {
350                     throw new XmlPullParserException( "Unable to parse element '" + attribute + "', must be a floating point number", parser, nfe );
351                 }
352             }
353         }
354         return 0;
355     } //-- double getDoubleValue( String, String, XmlPullParser, boolean )
356 
357     /**
358      * Method getFloatValue.
359      * 
360      * @param s a s object.
361      * @param strict a strict object.
362      * @param parser a parser object.
363      * @param attribute a attribute object.
364      * @throws XmlPullParserException XmlPullParserException if
365      * any.
366      * @return float
367      */
368     private float getFloatValue( String s, String attribute, XmlPullParser parser, boolean strict )
369         throws XmlPullParserException
370     {
371         if ( s != null )
372         {
373             try
374             {
375                 return Float.valueOf( s ).floatValue();
376             }
377             catch ( NumberFormatException nfe )
378             {
379                 if ( strict )
380                 {
381                     throw new XmlPullParserException( "Unable to parse element '" + attribute + "', must be a floating point number", parser, nfe );
382                 }
383             }
384         }
385         return 0;
386     } //-- float getFloatValue( String, String, XmlPullParser, boolean )
387 
388     /**
389      * Method getIntegerValue.
390      * 
391      * @param s a s object.
392      * @param strict a strict object.
393      * @param parser a parser object.
394      * @param attribute a attribute object.
395      * @throws XmlPullParserException XmlPullParserException if
396      * any.
397      * @return int
398      */
399     private int getIntegerValue( String s, String attribute, XmlPullParser parser, boolean strict )
400         throws XmlPullParserException
401     {
402         if ( s != null )
403         {
404             try
405             {
406                 return Integer.valueOf( s ).intValue();
407             }
408             catch ( NumberFormatException nfe )
409             {
410                 if ( strict )
411                 {
412                     throw new XmlPullParserException( "Unable to parse element '" + attribute + "', must be an integer", parser, nfe );
413                 }
414             }
415         }
416         return 0;
417     } //-- int getIntegerValue( String, String, XmlPullParser, boolean )
418 
419     /**
420      * Method getLongValue.
421      * 
422      * @param s a s object.
423      * @param strict a strict object.
424      * @param parser a parser object.
425      * @param attribute a attribute object.
426      * @throws XmlPullParserException XmlPullParserException if
427      * any.
428      * @return long
429      */
430     private long getLongValue( String s, String attribute, XmlPullParser parser, boolean strict )
431         throws XmlPullParserException
432     {
433         if ( s != null )
434         {
435             try
436             {
437                 return Long.valueOf( s ).longValue();
438             }
439             catch ( NumberFormatException nfe )
440             {
441                 if ( strict )
442                 {
443                     throw new XmlPullParserException( "Unable to parse element '" + attribute + "', must be a long integer", parser, nfe );
444                 }
445             }
446         }
447         return 0;
448     } //-- long getLongValue( String, String, XmlPullParser, boolean )
449 
450     /**
451      * Method getRequiredAttributeValue.
452      * 
453      * @param s a s object.
454      * @param strict a strict object.
455      * @param parser a parser object.
456      * @param attribute a attribute object.
457      * @throws XmlPullParserException XmlPullParserException if
458      * any.
459      * @return String
460      */
461     private String getRequiredAttributeValue( String s, String attribute, XmlPullParser parser, boolean strict )
462         throws XmlPullParserException
463     {
464         if ( s == null )
465         {
466             if ( strict )
467             {
468                 throw new XmlPullParserException( "Missing required value for attribute '" + attribute + "'", parser, null );
469             }
470         }
471         return s;
472     } //-- String getRequiredAttributeValue( String, String, XmlPullParser, boolean )
473 
474     /**
475      * Method getShortValue.
476      * 
477      * @param s a s object.
478      * @param strict a strict object.
479      * @param parser a parser object.
480      * @param attribute a attribute object.
481      * @throws XmlPullParserException XmlPullParserException if
482      * any.
483      * @return short
484      */
485     private short getShortValue( String s, String attribute, XmlPullParser parser, boolean strict )
486         throws XmlPullParserException
487     {
488         if ( s != null )
489         {
490             try
491             {
492                 return Short.valueOf( s ).shortValue();
493             }
494             catch ( NumberFormatException nfe )
495             {
496                 if ( strict )
497                 {
498                     throw new XmlPullParserException( "Unable to parse element '" + attribute + "', must be a short integer", parser, nfe );
499                 }
500             }
501         }
502         return 0;
503     } //-- short getShortValue( String, String, XmlPullParser, boolean )
504 
505     /**
506      * Method getTrimmedValue.
507      * 
508      * @param s a s object.
509      * @return String
510      */
511     private String getTrimmedValue( String s )
512     {
513         if ( s != null )
514         {
515             s = s.trim();
516         }
517         return s;
518     } //-- String getTrimmedValue( String )
519 
520     /**
521      * Method interpolatedTrimmed.
522      * 
523      * @param value a value object.
524      * @param context a context object.
525      * @return String
526      */
527     private String interpolatedTrimmed( String value, String context )
528     {
529         return getTrimmedValue( contentTransformer.transform( value, context ) );
530     } //-- String interpolatedTrimmed( String, String )
531 
532     /**
533      * Method nextTag.
534      * 
535      * @param parser a parser object.
536      * @throws IOException IOException if any.
537      * @throws XmlPullParserException XmlPullParserException if
538      * any.
539      * @return int
540      */
541     private int nextTag( XmlPullParser parser )
542         throws IOException, XmlPullParserException
543     {
544         int eventType = parser.next();
545         if ( eventType == XmlPullParser.TEXT )
546         {
547             eventType = parser.next();
548         }
549         if ( eventType != XmlPullParser.START_TAG && eventType != XmlPullParser.END_TAG )
550         {
551             throw new XmlPullParserException( "expected START_TAG or END_TAG not " + XmlPullParser.TYPES[eventType], parser, null );
552         }
553         return eventType;
554     } //-- int nextTag( XmlPullParser )
555 
556     /**
557      * Method read.
558      * 
559      * @param parser a parser object.
560      * @param strict a strict object.
561      * @throws IOException IOException if any.
562      * @throws XmlPullParserException XmlPullParserException if
563      * any.
564      * @return Metadata
565      */
566     public Metadata read( XmlPullParser parser, boolean strict )
567         throws IOException, XmlPullParserException
568     {
569         Metadata metadata = null;
570         int eventType = parser.getEventType();
571         boolean parsed = false;
572         while ( eventType != XmlPullParser.END_DOCUMENT )
573         {
574             if ( eventType == XmlPullParser.START_TAG )
575             {
576                 if ( strict && ! "metadata".equals( parser.getName() ) )
577                 {
578                     throw new XmlPullParserException( "Expected root element 'metadata' but found '" + parser.getName() + "'", parser, null );
579                 }
580                 else if ( parsed )
581                 {
582                     // fallback, already expected a XmlPullParserException due to invalid XML
583                     throw new XmlPullParserException( "Duplicated tag: 'metadata'", parser, null );
584                 }
585                 metadata = parseMetadata( parser, strict );
586                 metadata.setModelEncoding( parser.getInputEncoding() );
587                 parsed = true;
588             }
589             eventType = parser.next();
590         }
591         if ( parsed )
592         {
593             return metadata;
594         }
595         throw new XmlPullParserException( "Expected root element 'metadata' but found no element at all: invalid XML document", parser, null );
596     } //-- Metadata read( XmlPullParser, boolean )
597 
598     /**
599      * @see ReaderFactory#newXmlReader
600      * 
601      * @param reader a reader object.
602      * @param strict a strict object.
603      * @throws IOException IOException if any.
604      * @throws XmlPullParserException XmlPullParserException if
605      * any.
606      * @return Metadata
607      */
608     public Metadata read( Reader reader, boolean strict )
609         throws IOException, XmlPullParserException
610     {
611         XmlPullParser parser = addDefaultEntities ? new MXParser(EntityReplacementMap.defaultEntityReplacementMap) : new MXParser( );
612 
613         parser.setInput( reader );
614 
615 
616         return read( parser, strict );
617     } //-- Metadata read( Reader, boolean )
618 
619     /**
620      * @see ReaderFactory#newXmlReader
621      * 
622      * @param reader a reader object.
623      * @throws IOException IOException if any.
624      * @throws XmlPullParserException XmlPullParserException if
625      * any.
626      * @return Metadata
627      */
628     public Metadata read( Reader reader )
629         throws IOException, XmlPullParserException
630     {
631         return read( reader, true );
632     } //-- Metadata read( Reader )
633 
634     /**
635      * Method read.
636      * 
637      * @param in a in object.
638      * @param strict a strict object.
639      * @throws IOException IOException if any.
640      * @throws XmlPullParserException XmlPullParserException if
641      * any.
642      * @return Metadata
643      */
644     public Metadata read( InputStream in, boolean strict )
645         throws IOException, XmlPullParserException
646     {
647         return read( ReaderFactory.newXmlReader( in ), strict );
648     } //-- Metadata read( InputStream, boolean )
649 
650     /**
651      * Method read.
652      * 
653      * @param in a in object.
654      * @throws IOException IOException if any.
655      * @throws XmlPullParserException XmlPullParserException if
656      * any.
657      * @return Metadata
658      */
659     public Metadata read( InputStream in )
660         throws IOException, XmlPullParserException
661     {
662         return read( ReaderFactory.newXmlReader( in ) );
663     } //-- Metadata read( InputStream )
664 
665     /**
666      * Method parseMetadata.
667      * 
668      * @param parser a parser object.
669      * @param strict a strict object.
670      * @throws IOException IOException if any.
671      * @throws XmlPullParserException XmlPullParserException if
672      * any.
673      * @return Metadata
674      */
675     private Metadata parseMetadata( XmlPullParser parser, boolean strict )
676         throws IOException, XmlPullParserException
677     {
678         String tagName = parser.getName();
679         Metadata metadata = new Metadata();
680         for ( int i = parser.getAttributeCount() - 1; i >= 0; i-- )
681         {
682             String name = parser.getAttributeName( i );
683             String value = parser.getAttributeValue( i );
684 
685             if ( name.indexOf( ':' ) >= 0 )
686             {
687                 // just ignore attributes with non-default namespace (for example: xmlns:xsi)
688             }
689             else if ( "xmlns".equals( name ) )
690             {
691                 // ignore xmlns attribute in root class, which is a reserved attribute name
692             }
693             else if ( "modelVersion".equals( name ) )
694             {
695                 metadata.setModelVersion( interpolatedTrimmed( value, "modelVersion" ) );
696             }
697             else
698             {
699                 checkUnknownAttribute( parser, name, tagName, strict );
700             }
701         }
702         java.util.Set parsed = new java.util.HashSet();
703         while ( ( strict ? parser.nextTag() : nextTag( parser ) ) == XmlPullParser.START_TAG )
704         {
705             if ( checkFieldWithDuplicate( parser, "groupId", null, parsed ) )
706             {
707                 metadata.setGroupId( interpolatedTrimmed( parser.nextText(), "groupId" ) );
708             }
709             else if ( checkFieldWithDuplicate( parser, "artifactId", null, parsed ) )
710             {
711                 metadata.setArtifactId( interpolatedTrimmed( parser.nextText(), "artifactId" ) );
712             }
713             else if ( checkFieldWithDuplicate( parser, "versioning", null, parsed ) )
714             {
715                 metadata.setVersioning( parseVersioning( parser, strict ) );
716             }
717             else if ( checkFieldWithDuplicate( parser, "version", null, parsed ) )
718             {
719                 metadata.setVersion( interpolatedTrimmed( parser.nextText(), "version" ) );
720             }
721             else if ( checkFieldWithDuplicate( parser, "plugins", null, parsed ) )
722             {
723                 java.util.List<Plugin> plugins = new java.util.ArrayList<Plugin>();
724                 while ( parser.nextTag() == XmlPullParser.START_TAG )
725                 {
726                     if ( "plugin".equals( parser.getName() ) )
727                     {
728                         plugins.add( parsePlugin( parser, strict ) );
729                     }
730                     else
731                     {
732                         checkUnknownElement( parser, strict );
733                     }
734                 }
735                 metadata.setPlugins( plugins );
736             }
737             else
738             {
739                 checkUnknownElement( parser, strict );
740             }
741         }
742         return metadata;
743     } //-- Metadata parseMetadata( XmlPullParser, boolean )
744 
745     /**
746      * Method parsePlugin.
747      * 
748      * @param parser a parser object.
749      * @param strict a strict object.
750      * @throws IOException IOException if any.
751      * @throws XmlPullParserException XmlPullParserException if
752      * any.
753      * @return Plugin
754      */
755     private Plugin parsePlugin( XmlPullParser parser, boolean strict )
756         throws IOException, XmlPullParserException
757     {
758         String tagName = parser.getName();
759         Plugin plugin = new Plugin();
760         for ( int i = parser.getAttributeCount() - 1; i >= 0; i-- )
761         {
762             String name = parser.getAttributeName( i );
763             String value = parser.getAttributeValue( i );
764 
765             if ( name.indexOf( ':' ) >= 0 )
766             {
767                 // just ignore attributes with non-default namespace (for example: xmlns:xsi)
768             }
769             else
770             {
771                 checkUnknownAttribute( parser, name, tagName, strict );
772             }
773         }
774         java.util.Set parsed = new java.util.HashSet();
775         while ( ( strict ? parser.nextTag() : nextTag( parser ) ) == XmlPullParser.START_TAG )
776         {
777             if ( checkFieldWithDuplicate( parser, "name", null, parsed ) )
778             {
779                 plugin.setName( interpolatedTrimmed( parser.nextText(), "name" ) );
780             }
781             else if ( checkFieldWithDuplicate( parser, "prefix", null, parsed ) )
782             {
783                 plugin.setPrefix( interpolatedTrimmed( parser.nextText(), "prefix" ) );
784             }
785             else if ( checkFieldWithDuplicate( parser, "artifactId", null, parsed ) )
786             {
787                 plugin.setArtifactId( interpolatedTrimmed( parser.nextText(), "artifactId" ) );
788             }
789             else
790             {
791                 checkUnknownElement( parser, strict );
792             }
793         }
794         return plugin;
795     } //-- Plugin parsePlugin( XmlPullParser, boolean )
796 
797     /**
798      * Method parseSnapshot.
799      * 
800      * @param parser a parser object.
801      * @param strict a strict object.
802      * @throws IOException IOException if any.
803      * @throws XmlPullParserException XmlPullParserException if
804      * any.
805      * @return Snapshot
806      */
807     private Snapshot parseSnapshot( XmlPullParser parser, boolean strict )
808         throws IOException, XmlPullParserException
809     {
810         String tagName = parser.getName();
811         Snapshot snapshot = new Snapshot();
812         for ( int i = parser.getAttributeCount() - 1; i >= 0; i-- )
813         {
814             String name = parser.getAttributeName( i );
815             String value = parser.getAttributeValue( i );
816 
817             if ( name.indexOf( ':' ) >= 0 )
818             {
819                 // just ignore attributes with non-default namespace (for example: xmlns:xsi)
820             }
821             else
822             {
823                 checkUnknownAttribute( parser, name, tagName, strict );
824             }
825         }
826         java.util.Set parsed = new java.util.HashSet();
827         while ( ( strict ? parser.nextTag() : nextTag( parser ) ) == XmlPullParser.START_TAG )
828         {
829             if ( checkFieldWithDuplicate( parser, "timestamp", null, parsed ) )
830             {
831                 snapshot.setTimestamp( interpolatedTrimmed( parser.nextText(), "timestamp" ) );
832             }
833             else if ( checkFieldWithDuplicate( parser, "buildNumber", null, parsed ) )
834             {
835                 snapshot.setBuildNumber( getIntegerValue( interpolatedTrimmed( parser.nextText(), "buildNumber" ), "buildNumber", parser, strict ) );
836             }
837             else if ( checkFieldWithDuplicate( parser, "localCopy", null, parsed ) )
838             {
839                 snapshot.setLocalCopy( getBooleanValue( interpolatedTrimmed( parser.nextText(), "localCopy" ), "localCopy", parser, "false" ) );
840             }
841             else
842             {
843                 checkUnknownElement( parser, strict );
844             }
845         }
846         return snapshot;
847     } //-- Snapshot parseSnapshot( XmlPullParser, boolean )
848 
849     /**
850      * Method parseSnapshotVersion.
851      * 
852      * @param parser a parser object.
853      * @param strict a strict object.
854      * @throws IOException IOException if any.
855      * @throws XmlPullParserException XmlPullParserException if
856      * any.
857      * @return SnapshotVersion
858      */
859     private SnapshotVersion parseSnapshotVersion( XmlPullParser parser, boolean strict )
860         throws IOException, XmlPullParserException
861     {
862         String tagName = parser.getName();
863         SnapshotVersion snapshotVersion = new SnapshotVersion();
864         for ( int i = parser.getAttributeCount() - 1; i >= 0; i-- )
865         {
866             String name = parser.getAttributeName( i );
867             String value = parser.getAttributeValue( i );
868 
869             if ( name.indexOf( ':' ) >= 0 )
870             {
871                 // just ignore attributes with non-default namespace (for example: xmlns:xsi)
872             }
873             else
874             {
875                 checkUnknownAttribute( parser, name, tagName, strict );
876             }
877         }
878         java.util.Set parsed = new java.util.HashSet();
879         while ( ( strict ? parser.nextTag() : nextTag( parser ) ) == XmlPullParser.START_TAG )
880         {
881             if ( checkFieldWithDuplicate( parser, "classifier", null, parsed ) )
882             {
883                 snapshotVersion.setClassifier( interpolatedTrimmed( parser.nextText(), "classifier" ) );
884             }
885             else if ( checkFieldWithDuplicate( parser, "extension", null, parsed ) )
886             {
887                 snapshotVersion.setExtension( interpolatedTrimmed( parser.nextText(), "extension" ) );
888             }
889             else if ( checkFieldWithDuplicate( parser, "value", null, parsed ) )
890             {
891                 snapshotVersion.setVersion( interpolatedTrimmed( parser.nextText(), "value" ) );
892             }
893             else if ( checkFieldWithDuplicate( parser, "updated", null, parsed ) )
894             {
895                 snapshotVersion.setUpdated( interpolatedTrimmed( parser.nextText(), "updated" ) );
896             }
897             else
898             {
899                 checkUnknownElement( parser, strict );
900             }
901         }
902         return snapshotVersion;
903     } //-- SnapshotVersion parseSnapshotVersion( XmlPullParser, boolean )
904 
905     /**
906      * Method parseVersioning.
907      * 
908      * @param parser a parser object.
909      * @param strict a strict object.
910      * @throws IOException IOException if any.
911      * @throws XmlPullParserException XmlPullParserException if
912      * any.
913      * @return Versioning
914      */
915     private Versioning parseVersioning( XmlPullParser parser, boolean strict )
916         throws IOException, XmlPullParserException
917     {
918         String tagName = parser.getName();
919         Versioning versioning = new Versioning();
920         for ( int i = parser.getAttributeCount() - 1; i >= 0; i-- )
921         {
922             String name = parser.getAttributeName( i );
923             String value = parser.getAttributeValue( i );
924 
925             if ( name.indexOf( ':' ) >= 0 )
926             {
927                 // just ignore attributes with non-default namespace (for example: xmlns:xsi)
928             }
929             else
930             {
931                 checkUnknownAttribute( parser, name, tagName, strict );
932             }
933         }
934         java.util.Set parsed = new java.util.HashSet();
935         while ( ( strict ? parser.nextTag() : nextTag( parser ) ) == XmlPullParser.START_TAG )
936         {
937             if ( checkFieldWithDuplicate( parser, "latest", null, parsed ) )
938             {
939                 versioning.setLatest( interpolatedTrimmed( parser.nextText(), "latest" ) );
940             }
941             else if ( checkFieldWithDuplicate( parser, "release", null, parsed ) )
942             {
943                 versioning.setRelease( interpolatedTrimmed( parser.nextText(), "release" ) );
944             }
945             else if ( checkFieldWithDuplicate( parser, "versions", null, parsed ) )
946             {
947                 java.util.List<String> versions = new java.util.ArrayList<String>();
948                 while ( parser.nextTag() == XmlPullParser.START_TAG )
949                 {
950                     if ( "version".equals( parser.getName() ) )
951                     {
952                         versions.add( interpolatedTrimmed( parser.nextText(), "versions" ) );
953                     }
954                     else
955                     {
956                         checkUnknownElement( parser, strict );
957                     }
958                 }
959                 versioning.setVersions( versions );
960             }
961             else if ( checkFieldWithDuplicate( parser, "lastUpdated", null, parsed ) )
962             {
963                 versioning.setLastUpdated( interpolatedTrimmed( parser.nextText(), "lastUpdated" ) );
964             }
965             else if ( checkFieldWithDuplicate( parser, "snapshot", null, parsed ) )
966             {
967                 versioning.setSnapshot( parseSnapshot( parser, strict ) );
968             }
969             else if ( checkFieldWithDuplicate( parser, "snapshotVersions", null, parsed ) )
970             {
971                 java.util.List<SnapshotVersion> snapshotVersions = new java.util.ArrayList<SnapshotVersion>();
972                 while ( parser.nextTag() == XmlPullParser.START_TAG )
973                 {
974                     if ( "snapshotVersion".equals( parser.getName() ) )
975                     {
976                         snapshotVersions.add( parseSnapshotVersion( parser, strict ) );
977                     }
978                     else
979                     {
980                         checkUnknownElement( parser, strict );
981                     }
982                 }
983                 versioning.setSnapshotVersions( snapshotVersions );
984             }
985             else
986             {
987                 checkUnknownElement( parser, strict );
988             }
989         }
990         return versioning;
991     } //-- Versioning parseVersioning( XmlPullParser, boolean )
992 
993     /**
994      * Sets the state of the "add default entities" flag.
995      * 
996      * @param addDefaultEntities a addDefaultEntities object.
997      */
998     public void setAddDefaultEntities( boolean addDefaultEntities )
999     {
1000         this.addDefaultEntities = addDefaultEntities;
1001     } //-- void setAddDefaultEntities( boolean )
1002 
1003     public static interface ContentTransformer
1004 {
1005     /**
1006      * Interpolate the value read from the xpp3 document
1007      * @param source The source value
1008      * @param fieldName A description of the field being interpolated. The implementation may use this to
1009      *                           log stuff.
1010      * @return The interpolated value.
1011      */
1012     String transform( String source, String fieldName );
1013 }
1014 
1015 }