001// =================== DO NOT EDIT THIS FILE ====================
002// Generated by Modello 1.8.3,
003// any modifications will be overwritten.
004// ==============================================================
005
006package org.apache.maven.model.io.xpp3;
007
008  //---------------------------------/
009 //- Imported classes and packages -/
010//---------------------------------/
011
012import java.io.IOException;
013import java.io.InputStream;
014import java.io.Reader;
015import java.text.DateFormat;
016import org.apache.maven.model.Activation;
017import org.apache.maven.model.ActivationFile;
018import org.apache.maven.model.ActivationOS;
019import org.apache.maven.model.ActivationProperty;
020import org.apache.maven.model.Build;
021import org.apache.maven.model.BuildBase;
022import org.apache.maven.model.CiManagement;
023import org.apache.maven.model.ConfigurationContainer;
024import org.apache.maven.model.Contributor;
025import org.apache.maven.model.Dependency;
026import org.apache.maven.model.DependencyManagement;
027import org.apache.maven.model.DeploymentRepository;
028import org.apache.maven.model.Developer;
029import org.apache.maven.model.DistributionManagement;
030import org.apache.maven.model.Exclusion;
031import org.apache.maven.model.Extension;
032import org.apache.maven.model.FileSet;
033import org.apache.maven.model.InputLocation;
034import org.apache.maven.model.InputSource;
035import org.apache.maven.model.IssueManagement;
036import org.apache.maven.model.License;
037import org.apache.maven.model.MailingList;
038import org.apache.maven.model.Model;
039import org.apache.maven.model.ModelBase;
040import org.apache.maven.model.Notifier;
041import org.apache.maven.model.Organization;
042import org.apache.maven.model.Parent;
043import org.apache.maven.model.PatternSet;
044import org.apache.maven.model.Plugin;
045import org.apache.maven.model.PluginConfiguration;
046import org.apache.maven.model.PluginContainer;
047import org.apache.maven.model.PluginExecution;
048import org.apache.maven.model.PluginManagement;
049import org.apache.maven.model.Prerequisites;
050import org.apache.maven.model.Profile;
051import org.apache.maven.model.Relocation;
052import org.apache.maven.model.ReportPlugin;
053import org.apache.maven.model.ReportSet;
054import org.apache.maven.model.Reporting;
055import org.apache.maven.model.Repository;
056import org.apache.maven.model.RepositoryBase;
057import org.apache.maven.model.RepositoryPolicy;
058import org.apache.maven.model.Resource;
059import org.apache.maven.model.Scm;
060import org.apache.maven.model.Site;
061import org.codehaus.plexus.util.ReaderFactory;
062import org.codehaus.plexus.util.xml.pull.EntityReplacementMap;
063import org.codehaus.plexus.util.xml.pull.MXParser;
064import org.codehaus.plexus.util.xml.pull.XmlPullParser;
065import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
066
067/**
068 * Class MavenXpp3ReaderEx.
069 * 
070 * @version $Revision$ $Date$
071 */
072@SuppressWarnings( "all" )
073public class MavenXpp3ReaderEx
074{
075
076      //--------------------------/
077     //- Class/Member Variables -/
078    //--------------------------/
079
080    /**
081     * If set the parser will be loaded with all single characters
082     * from the XHTML specification.
083     * The entities used:
084     * <ul>
085     * <li>http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent</li>
086     * <li>http://www.w3.org/TR/xhtml1/DTD/xhtml-special.ent</li>
087     * <li>http://www.w3.org/TR/xhtml1/DTD/xhtml-symbol.ent</li>
088     * </ul>
089     */
090    private boolean addDefaultEntities = true;
091
092    /**
093     * Field contentTransformer.
094     */
095    public final ContentTransformer contentTransformer;
096
097
098      //----------------/
099     //- Constructors -/
100    //----------------/
101
102    public MavenXpp3ReaderEx()
103    {
104        this( new ContentTransformer()
105        {
106            public String transform( String source, String fieldName )
107            {
108                return source;
109            }
110        } );
111    } //-- org.apache.maven.model.io.xpp3.MavenXpp3ReaderEx()
112
113    public MavenXpp3ReaderEx(ContentTransformer contentTransformer)
114    {
115        this.contentTransformer = contentTransformer;
116    } //-- org.apache.maven.model.io.xpp3.MavenXpp3ReaderEx(ContentTransformer)
117
118
119      //-----------/
120     //- Methods -/
121    //-----------/
122
123    /**
124     * Method checkFieldWithDuplicate.
125     * 
126     * @param parser
127     * @param parsed
128     * @param alias
129     * @param tagName
130     * @throws XmlPullParserException
131     * @return boolean
132     */
133    private boolean checkFieldWithDuplicate( XmlPullParser parser, String tagName, String alias, java.util.Set parsed )
134        throws XmlPullParserException
135    {
136        if ( !( parser.getName().equals( tagName ) || parser.getName().equals( alias ) ) )
137        {
138            return false;
139        }
140        if ( !parsed.add( tagName ) )
141        {
142            throw new XmlPullParserException( "Duplicated tag: '" + tagName + "'", parser, null );
143        }
144        return true;
145    } //-- boolean checkFieldWithDuplicate( XmlPullParser, String, String, java.util.Set )
146
147    /**
148     * Method checkUnknownAttribute.
149     * 
150     * @param parser
151     * @param strict
152     * @param tagName
153     * @param attribute
154     * @throws XmlPullParserException
155     * @throws IOException
156     */
157    private void checkUnknownAttribute( XmlPullParser parser, String attribute, String tagName, boolean strict )
158        throws XmlPullParserException, IOException
159    {
160        // strictXmlAttributes = true for model: if strict == true, not only elements are checked but attributes too
161        if ( strict )
162        {
163            throw new XmlPullParserException( "Unknown attribute '" + attribute + "' for tag '" + tagName + "'", parser, null );
164        }
165    } //-- void checkUnknownAttribute( XmlPullParser, String, String, boolean )
166
167    /**
168     * Method checkUnknownElement.
169     * 
170     * @param parser
171     * @param strict
172     * @throws XmlPullParserException
173     * @throws IOException
174     */
175    private void checkUnknownElement( XmlPullParser parser, boolean strict )
176        throws XmlPullParserException, IOException
177    {
178        if ( strict )
179        {
180            throw new XmlPullParserException( "Unrecognised tag: '" + parser.getName() + "'", parser, null );
181        }
182
183        for ( int unrecognizedTagCount = 1; unrecognizedTagCount > 0; )
184        {
185            int eventType = parser.next();
186            if ( eventType == XmlPullParser.START_TAG )
187            {
188                unrecognizedTagCount++;
189            }
190            else if ( eventType == XmlPullParser.END_TAG )
191            {
192                unrecognizedTagCount--;
193            }
194        }
195    } //-- void checkUnknownElement( XmlPullParser, boolean )
196
197    /**
198     * Returns the state of the "add default entities" flag.
199     * 
200     * @return boolean
201     */
202    public boolean getAddDefaultEntities()
203    {
204        return addDefaultEntities;
205    } //-- boolean getAddDefaultEntities()
206
207    /**
208     * Method getBooleanValue.
209     * 
210     * @param s
211     * @param parser
212     * @param attribute
213     * @throws XmlPullParserException
214     * @return boolean
215     */
216    private boolean getBooleanValue( String s, String attribute, XmlPullParser parser )
217        throws XmlPullParserException
218    {
219        return getBooleanValue( s, attribute, parser, null );
220    } //-- boolean getBooleanValue( String, String, XmlPullParser )
221
222    /**
223     * Method getBooleanValue.
224     * 
225     * @param s
226     * @param defaultValue
227     * @param parser
228     * @param attribute
229     * @throws XmlPullParserException
230     * @return boolean
231     */
232    private boolean getBooleanValue( String s, String attribute, XmlPullParser parser, String defaultValue )
233        throws XmlPullParserException
234    {
235        if ( s != null && s.length() != 0 )
236        {
237            return Boolean.valueOf( s ).booleanValue();
238        }
239        if ( defaultValue != null )
240        {
241            return Boolean.valueOf( defaultValue ).booleanValue();
242        }
243        return false;
244    } //-- boolean getBooleanValue( String, String, XmlPullParser, String )
245
246    /**
247     * Method getByteValue.
248     * 
249     * @param s
250     * @param strict
251     * @param parser
252     * @param attribute
253     * @throws XmlPullParserException
254     * @return byte
255     */
256    private byte getByteValue( String s, String attribute, XmlPullParser parser, boolean strict )
257        throws XmlPullParserException
258    {
259        if ( s != null )
260        {
261            try
262            {
263                return Byte.valueOf( s ).byteValue();
264            }
265            catch ( NumberFormatException nfe )
266            {
267                if ( strict )
268                {
269                    throw new XmlPullParserException( "Unable to parse element '" + attribute + "', must be a byte", parser, nfe );
270                }
271            }
272        }
273        return 0;
274    } //-- byte getByteValue( String, String, XmlPullParser, boolean )
275
276    /**
277     * Method getCharacterValue.
278     * 
279     * @param s
280     * @param parser
281     * @param attribute
282     * @throws XmlPullParserException
283     * @return char
284     */
285    private char getCharacterValue( String s, String attribute, XmlPullParser parser )
286        throws XmlPullParserException
287    {
288        if ( s != null )
289        {
290            return s.charAt( 0 );
291        }
292        return 0;
293    } //-- char getCharacterValue( String, String, XmlPullParser )
294
295    /**
296     * Method getDateValue.
297     * 
298     * @param s
299     * @param parser
300     * @param attribute
301     * @throws XmlPullParserException
302     * @return Date
303     */
304    private java.util.Date getDateValue( String s, String attribute, XmlPullParser parser )
305        throws XmlPullParserException
306    {
307        return getDateValue( s, attribute, null, parser );
308    } //-- java.util.Date getDateValue( String, String, XmlPullParser )
309
310    /**
311     * Method getDateValue.
312     * 
313     * @param s
314     * @param parser
315     * @param dateFormat
316     * @param attribute
317     * @throws XmlPullParserException
318     * @return Date
319     */
320    private java.util.Date getDateValue( String s, String attribute, String dateFormat, XmlPullParser parser )
321        throws XmlPullParserException
322    {
323        if ( s != null )
324        {
325            String effectiveDateFormat = dateFormat;
326            if ( dateFormat == null )
327            {
328                effectiveDateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS";
329            }
330            if ( "long".equals( effectiveDateFormat ) )
331            {
332                try
333                {
334                    return new java.util.Date( Long.parseLong( s ) );
335                }
336                catch ( NumberFormatException e )
337                {
338                    throw new XmlPullParserException( e.getMessage(), parser, e );
339                }
340            }
341            else
342            {
343                try
344                {
345                    DateFormat dateParser = new java.text.SimpleDateFormat( effectiveDateFormat, java.util.Locale.US );
346                    return dateParser.parse( s );
347                }
348                catch ( java.text.ParseException e )
349                {
350                    throw new XmlPullParserException( e.getMessage(), parser, e );
351                }
352            }
353        }
354        return null;
355    } //-- java.util.Date getDateValue( String, String, String, XmlPullParser )
356
357    /**
358     * Method getDoubleValue.
359     * 
360     * @param s
361     * @param strict
362     * @param parser
363     * @param attribute
364     * @throws XmlPullParserException
365     * @return double
366     */
367    private double getDoubleValue( String s, String attribute, XmlPullParser parser, boolean strict )
368        throws XmlPullParserException
369    {
370        if ( s != null )
371        {
372            try
373            {
374                return Double.valueOf( s ).doubleValue();
375            }
376            catch ( NumberFormatException nfe )
377            {
378                if ( strict )
379                {
380                    throw new XmlPullParserException( "Unable to parse element '" + attribute + "', must be a floating point number", parser, nfe );
381                }
382            }
383        }
384        return 0;
385    } //-- double getDoubleValue( String, String, XmlPullParser, boolean )
386
387    /**
388     * Method getFloatValue.
389     * 
390     * @param s
391     * @param strict
392     * @param parser
393     * @param attribute
394     * @throws XmlPullParserException
395     * @return float
396     */
397    private float getFloatValue( String s, String attribute, XmlPullParser parser, boolean strict )
398        throws XmlPullParserException
399    {
400        if ( s != null )
401        {
402            try
403            {
404                return Float.valueOf( s ).floatValue();
405            }
406            catch ( NumberFormatException nfe )
407            {
408                if ( strict )
409                {
410                    throw new XmlPullParserException( "Unable to parse element '" + attribute + "', must be a floating point number", parser, nfe );
411                }
412            }
413        }
414        return 0;
415    } //-- float getFloatValue( String, String, XmlPullParser, boolean )
416
417    /**
418     * Method getIntegerValue.
419     * 
420     * @param s
421     * @param strict
422     * @param parser
423     * @param attribute
424     * @throws XmlPullParserException
425     * @return int
426     */
427    private int getIntegerValue( String s, String attribute, XmlPullParser parser, boolean strict )
428        throws XmlPullParserException
429    {
430        if ( s != null )
431        {
432            try
433            {
434                return Integer.valueOf( s ).intValue();
435            }
436            catch ( NumberFormatException nfe )
437            {
438                if ( strict )
439                {
440                    throw new XmlPullParserException( "Unable to parse element '" + attribute + "', must be an integer", parser, nfe );
441                }
442            }
443        }
444        return 0;
445    } //-- int getIntegerValue( String, String, XmlPullParser, boolean )
446
447    /**
448     * Method getLongValue.
449     * 
450     * @param s
451     * @param strict
452     * @param parser
453     * @param attribute
454     * @throws XmlPullParserException
455     * @return long
456     */
457    private long getLongValue( String s, String attribute, XmlPullParser parser, boolean strict )
458        throws XmlPullParserException
459    {
460        if ( s != null )
461        {
462            try
463            {
464                return Long.valueOf( s ).longValue();
465            }
466            catch ( NumberFormatException nfe )
467            {
468                if ( strict )
469                {
470                    throw new XmlPullParserException( "Unable to parse element '" + attribute + "', must be a long integer", parser, nfe );
471                }
472            }
473        }
474        return 0;
475    } //-- long getLongValue( String, String, XmlPullParser, boolean )
476
477    /**
478     * Method getRequiredAttributeValue.
479     * 
480     * @param s
481     * @param strict
482     * @param parser
483     * @param attribute
484     * @throws XmlPullParserException
485     * @return String
486     */
487    private String getRequiredAttributeValue( String s, String attribute, XmlPullParser parser, boolean strict )
488        throws XmlPullParserException
489    {
490        if ( s == null )
491        {
492            if ( strict )
493            {
494                throw new XmlPullParserException( "Missing required value for attribute '" + attribute + "'", parser, null );
495            }
496        }
497        return s;
498    } //-- String getRequiredAttributeValue( String, String, XmlPullParser, boolean )
499
500    /**
501     * Method getShortValue.
502     * 
503     * @param s
504     * @param strict
505     * @param parser
506     * @param attribute
507     * @throws XmlPullParserException
508     * @return short
509     */
510    private short getShortValue( String s, String attribute, XmlPullParser parser, boolean strict )
511        throws XmlPullParserException
512    {
513        if ( s != null )
514        {
515            try
516            {
517                return Short.valueOf( s ).shortValue();
518            }
519            catch ( NumberFormatException nfe )
520            {
521                if ( strict )
522                {
523                    throw new XmlPullParserException( "Unable to parse element '" + attribute + "', must be a short integer", parser, nfe );
524                }
525            }
526        }
527        return 0;
528    } //-- short getShortValue( String, String, XmlPullParser, boolean )
529
530    /**
531     * Method getTrimmedValue.
532     * 
533     * @param s
534     * @return String
535     */
536    private String getTrimmedValue( String s )
537    {
538        if ( s != null )
539        {
540            s = s.trim();
541        }
542        return s;
543    } //-- String getTrimmedValue( String )
544
545    /**
546     * Method interpolatedTrimmed.
547     * 
548     * @param value
549     * @param context
550     * @return String
551     */
552    private String interpolatedTrimmed( String value, String context )
553    {
554        return getTrimmedValue( contentTransformer.transform( value, context ) );
555    } //-- String interpolatedTrimmed( String, String )
556
557    /**
558     * Method nextTag.
559     * 
560     * @param parser
561     * @throws IOException
562     * @throws XmlPullParserException
563     * @return int
564     */
565    private int nextTag( XmlPullParser parser )
566        throws IOException, XmlPullParserException
567    {
568        int eventType = parser.next();
569        if ( eventType == XmlPullParser.TEXT )
570        {
571            eventType = parser.next();
572        }
573        if ( eventType != XmlPullParser.START_TAG && eventType != XmlPullParser.END_TAG )
574        {
575            throw new XmlPullParserException( "expected START_TAG or END_TAG not " + XmlPullParser.TYPES[eventType], parser, null );
576        }
577        return eventType;
578    } //-- int nextTag( XmlPullParser )
579
580    /**
581     * @see ReaderFactory#newXmlReader
582     * 
583     * @param reader
584     * @param source
585     * @param strict
586     * @throws IOException
587     * @throws XmlPullParserException
588     * @return Model
589     */
590    public Model read( Reader reader, boolean strict, InputSource source )
591        throws IOException, XmlPullParserException
592    {
593        XmlPullParser parser = addDefaultEntities ? new MXParser(EntityReplacementMap.defaultEntityReplacementMap) : new MXParser( );
594
595        parser.setInput( reader );
596
597
598        return read( parser, strict, source );
599    } //-- Model read( Reader, boolean, InputSource )
600
601    /**
602     * Method read.
603     * 
604     * @param in
605     * @param source
606     * @param strict
607     * @throws IOException
608     * @throws XmlPullParserException
609     * @return Model
610     */
611    public Model read( InputStream in, boolean strict, InputSource source )
612        throws IOException, XmlPullParserException
613    {
614        return read( ReaderFactory.newXmlReader( in ), strict, source );
615    } //-- Model read( InputStream, boolean, InputSource )
616
617    /**
618     * Method parseActivation.
619     * 
620     * @param parser
621     * @param source
622     * @param strict
623     * @throws IOException
624     * @throws XmlPullParserException
625     * @return Activation
626     */
627    private Activation parseActivation( XmlPullParser parser, boolean strict, InputSource source )
628        throws IOException, XmlPullParserException
629    {
630        String tagName = parser.getName();
631        Activation activation = new Activation();
632        InputLocation _location;
633        _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
634        activation.setLocation( "", _location );
635        for ( int i = parser.getAttributeCount() - 1; i >= 0; i-- )
636        {
637            String name = parser.getAttributeName( i );
638            String value = parser.getAttributeValue( i );
639
640            if ( name.indexOf( ':' ) >= 0 )
641            {
642                // just ignore attributes with non-default namespace (for example: xmlns:xsi)
643            }
644            else
645            {
646                checkUnknownAttribute( parser, name, tagName, strict );
647            }
648        }
649        java.util.Set parsed = new java.util.HashSet();
650        while ( ( strict ? parser.nextTag() : nextTag( parser ) ) == XmlPullParser.START_TAG )
651        {
652            if ( checkFieldWithDuplicate( parser, "activeByDefault", null, parsed ) )
653            {
654                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
655                activation.setLocation( "activeByDefault", _location );
656                activation.setActiveByDefault( getBooleanValue( interpolatedTrimmed( parser.nextText(), "activeByDefault" ), "activeByDefault", parser, "false" ) );
657            }
658            else if ( checkFieldWithDuplicate( parser, "jdk", null, parsed ) )
659            {
660                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
661                activation.setLocation( "jdk", _location );
662                activation.setJdk( interpolatedTrimmed( parser.nextText(), "jdk" ) );
663            }
664            else if ( checkFieldWithDuplicate( parser, "os", null, parsed ) )
665            {
666                activation.setOs( parseActivationOS( parser, strict, source ) );
667            }
668            else if ( checkFieldWithDuplicate( parser, "property", null, parsed ) )
669            {
670                activation.setProperty( parseActivationProperty( parser, strict, source ) );
671            }
672            else if ( checkFieldWithDuplicate( parser, "file", null, parsed ) )
673            {
674                activation.setFile( parseActivationFile( parser, strict, source ) );
675            }
676            else
677            {
678                checkUnknownElement( parser, strict );
679            }
680        }
681        return activation;
682    } //-- Activation parseActivation( XmlPullParser, boolean, InputSource )
683
684    /**
685     * Method parseActivationFile.
686     * 
687     * @param parser
688     * @param source
689     * @param strict
690     * @throws IOException
691     * @throws XmlPullParserException
692     * @return ActivationFile
693     */
694    private ActivationFile parseActivationFile( XmlPullParser parser, boolean strict, InputSource source )
695        throws IOException, XmlPullParserException
696    {
697        String tagName = parser.getName();
698        ActivationFile activationFile = new ActivationFile();
699        InputLocation _location;
700        _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
701        activationFile.setLocation( "", _location );
702        for ( int i = parser.getAttributeCount() - 1; i >= 0; i-- )
703        {
704            String name = parser.getAttributeName( i );
705            String value = parser.getAttributeValue( i );
706
707            if ( name.indexOf( ':' ) >= 0 )
708            {
709                // just ignore attributes with non-default namespace (for example: xmlns:xsi)
710            }
711            else
712            {
713                checkUnknownAttribute( parser, name, tagName, strict );
714            }
715        }
716        java.util.Set parsed = new java.util.HashSet();
717        while ( ( strict ? parser.nextTag() : nextTag( parser ) ) == XmlPullParser.START_TAG )
718        {
719            if ( checkFieldWithDuplicate( parser, "missing", null, parsed ) )
720            {
721                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
722                activationFile.setLocation( "missing", _location );
723                activationFile.setMissing( interpolatedTrimmed( parser.nextText(), "missing" ) );
724            }
725            else if ( checkFieldWithDuplicate( parser, "exists", null, parsed ) )
726            {
727                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
728                activationFile.setLocation( "exists", _location );
729                activationFile.setExists( interpolatedTrimmed( parser.nextText(), "exists" ) );
730            }
731            else
732            {
733                checkUnknownElement( parser, strict );
734            }
735        }
736        return activationFile;
737    } //-- ActivationFile parseActivationFile( XmlPullParser, boolean, InputSource )
738
739    /**
740     * Method parseActivationOS.
741     * 
742     * @param parser
743     * @param source
744     * @param strict
745     * @throws IOException
746     * @throws XmlPullParserException
747     * @return ActivationOS
748     */
749    private ActivationOS parseActivationOS( XmlPullParser parser, boolean strict, InputSource source )
750        throws IOException, XmlPullParserException
751    {
752        String tagName = parser.getName();
753        ActivationOS activationOS = new ActivationOS();
754        InputLocation _location;
755        _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
756        activationOS.setLocation( "", _location );
757        for ( int i = parser.getAttributeCount() - 1; i >= 0; i-- )
758        {
759            String name = parser.getAttributeName( i );
760            String value = parser.getAttributeValue( i );
761
762            if ( name.indexOf( ':' ) >= 0 )
763            {
764                // just ignore attributes with non-default namespace (for example: xmlns:xsi)
765            }
766            else
767            {
768                checkUnknownAttribute( parser, name, tagName, strict );
769            }
770        }
771        java.util.Set parsed = new java.util.HashSet();
772        while ( ( strict ? parser.nextTag() : nextTag( parser ) ) == XmlPullParser.START_TAG )
773        {
774            if ( checkFieldWithDuplicate( parser, "name", null, parsed ) )
775            {
776                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
777                activationOS.setLocation( "name", _location );
778                activationOS.setName( interpolatedTrimmed( parser.nextText(), "name" ) );
779            }
780            else if ( checkFieldWithDuplicate( parser, "family", null, parsed ) )
781            {
782                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
783                activationOS.setLocation( "family", _location );
784                activationOS.setFamily( interpolatedTrimmed( parser.nextText(), "family" ) );
785            }
786            else if ( checkFieldWithDuplicate( parser, "arch", null, parsed ) )
787            {
788                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
789                activationOS.setLocation( "arch", _location );
790                activationOS.setArch( interpolatedTrimmed( parser.nextText(), "arch" ) );
791            }
792            else if ( checkFieldWithDuplicate( parser, "version", null, parsed ) )
793            {
794                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
795                activationOS.setLocation( "version", _location );
796                activationOS.setVersion( interpolatedTrimmed( parser.nextText(), "version" ) );
797            }
798            else
799            {
800                checkUnknownElement( parser, strict );
801            }
802        }
803        return activationOS;
804    } //-- ActivationOS parseActivationOS( XmlPullParser, boolean, InputSource )
805
806    /**
807     * Method parseActivationProperty.
808     * 
809     * @param parser
810     * @param source
811     * @param strict
812     * @throws IOException
813     * @throws XmlPullParserException
814     * @return ActivationProperty
815     */
816    private ActivationProperty parseActivationProperty( XmlPullParser parser, boolean strict, InputSource source )
817        throws IOException, XmlPullParserException
818    {
819        String tagName = parser.getName();
820        ActivationProperty activationProperty = new ActivationProperty();
821        InputLocation _location;
822        _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
823        activationProperty.setLocation( "", _location );
824        for ( int i = parser.getAttributeCount() - 1; i >= 0; i-- )
825        {
826            String name = parser.getAttributeName( i );
827            String value = parser.getAttributeValue( i );
828
829            if ( name.indexOf( ':' ) >= 0 )
830            {
831                // just ignore attributes with non-default namespace (for example: xmlns:xsi)
832            }
833            else
834            {
835                checkUnknownAttribute( parser, name, tagName, strict );
836            }
837        }
838        java.util.Set parsed = new java.util.HashSet();
839        while ( ( strict ? parser.nextTag() : nextTag( parser ) ) == XmlPullParser.START_TAG )
840        {
841            if ( checkFieldWithDuplicate( parser, "name", null, parsed ) )
842            {
843                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
844                activationProperty.setLocation( "name", _location );
845                activationProperty.setName( interpolatedTrimmed( parser.nextText(), "name" ) );
846            }
847            else if ( checkFieldWithDuplicate( parser, "value", null, parsed ) )
848            {
849                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
850                activationProperty.setLocation( "value", _location );
851                activationProperty.setValue( interpolatedTrimmed( parser.nextText(), "value" ) );
852            }
853            else
854            {
855                checkUnknownElement( parser, strict );
856            }
857        }
858        return activationProperty;
859    } //-- ActivationProperty parseActivationProperty( XmlPullParser, boolean, InputSource )
860
861    /**
862     * Method parseBuild.
863     * 
864     * @param parser
865     * @param source
866     * @param strict
867     * @throws IOException
868     * @throws XmlPullParserException
869     * @return Build
870     */
871    private Build parseBuild( XmlPullParser parser, boolean strict, InputSource source )
872        throws IOException, XmlPullParserException
873    {
874        String tagName = parser.getName();
875        Build build = new Build();
876        InputLocation _location;
877        _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
878        build.setLocation( "", _location );
879        for ( int i = parser.getAttributeCount() - 1; i >= 0; i-- )
880        {
881            String name = parser.getAttributeName( i );
882            String value = parser.getAttributeValue( i );
883
884            if ( name.indexOf( ':' ) >= 0 )
885            {
886                // just ignore attributes with non-default namespace (for example: xmlns:xsi)
887            }
888            else
889            {
890                checkUnknownAttribute( parser, name, tagName, strict );
891            }
892        }
893        java.util.Set parsed = new java.util.HashSet();
894        while ( ( strict ? parser.nextTag() : nextTag( parser ) ) == XmlPullParser.START_TAG )
895        {
896            if ( checkFieldWithDuplicate( parser, "sourceDirectory", null, parsed ) )
897            {
898                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
899                build.setLocation( "sourceDirectory", _location );
900                build.setSourceDirectory( interpolatedTrimmed( parser.nextText(), "sourceDirectory" ) );
901            }
902            else if ( checkFieldWithDuplicate( parser, "scriptSourceDirectory", null, parsed ) )
903            {
904                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
905                build.setLocation( "scriptSourceDirectory", _location );
906                build.setScriptSourceDirectory( interpolatedTrimmed( parser.nextText(), "scriptSourceDirectory" ) );
907            }
908            else if ( checkFieldWithDuplicate( parser, "testSourceDirectory", null, parsed ) )
909            {
910                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
911                build.setLocation( "testSourceDirectory", _location );
912                build.setTestSourceDirectory( interpolatedTrimmed( parser.nextText(), "testSourceDirectory" ) );
913            }
914            else if ( checkFieldWithDuplicate( parser, "outputDirectory", null, parsed ) )
915            {
916                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
917                build.setLocation( "outputDirectory", _location );
918                build.setOutputDirectory( interpolatedTrimmed( parser.nextText(), "outputDirectory" ) );
919            }
920            else if ( checkFieldWithDuplicate( parser, "testOutputDirectory", null, parsed ) )
921            {
922                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
923                build.setLocation( "testOutputDirectory", _location );
924                build.setTestOutputDirectory( interpolatedTrimmed( parser.nextText(), "testOutputDirectory" ) );
925            }
926            else if ( checkFieldWithDuplicate( parser, "extensions", null, parsed ) )
927            {
928                java.util.List extensions = new java.util.ArrayList/*<Extension>*/();
929                build.setExtensions( extensions );
930                while ( parser.nextTag() == XmlPullParser.START_TAG )
931                {
932                    if ( "extension".equals( parser.getName() ) )
933                    {
934                        extensions.add( parseExtension( parser, strict, source ) );
935                    }
936                    else
937                    {
938                        checkUnknownElement( parser, strict );
939                    }
940                }
941            }
942            else if ( checkFieldWithDuplicate( parser, "defaultGoal", null, parsed ) )
943            {
944                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
945                build.setLocation( "defaultGoal", _location );
946                build.setDefaultGoal( interpolatedTrimmed( parser.nextText(), "defaultGoal" ) );
947            }
948            else if ( checkFieldWithDuplicate( parser, "resources", null, parsed ) )
949            {
950                java.util.List resources = new java.util.ArrayList/*<Resource>*/();
951                build.setResources( resources );
952                while ( parser.nextTag() == XmlPullParser.START_TAG )
953                {
954                    if ( "resource".equals( parser.getName() ) )
955                    {
956                        resources.add( parseResource( parser, strict, source ) );
957                    }
958                    else
959                    {
960                        checkUnknownElement( parser, strict );
961                    }
962                }
963            }
964            else if ( checkFieldWithDuplicate( parser, "testResources", null, parsed ) )
965            {
966                java.util.List testResources = new java.util.ArrayList/*<Resource>*/();
967                build.setTestResources( testResources );
968                while ( parser.nextTag() == XmlPullParser.START_TAG )
969                {
970                    if ( "testResource".equals( parser.getName() ) )
971                    {
972                        testResources.add( parseResource( parser, strict, source ) );
973                    }
974                    else
975                    {
976                        checkUnknownElement( parser, strict );
977                    }
978                }
979            }
980            else if ( checkFieldWithDuplicate( parser, "directory", null, parsed ) )
981            {
982                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
983                build.setLocation( "directory", _location );
984                build.setDirectory( interpolatedTrimmed( parser.nextText(), "directory" ) );
985            }
986            else if ( checkFieldWithDuplicate( parser, "finalName", null, parsed ) )
987            {
988                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
989                build.setLocation( "finalName", _location );
990                build.setFinalName( interpolatedTrimmed( parser.nextText(), "finalName" ) );
991            }
992            else if ( checkFieldWithDuplicate( parser, "filters", null, parsed ) )
993            {
994                java.util.List filters = new java.util.ArrayList/*<String>*/();
995                build.setFilters( filters );
996                InputLocation _locations;
997                _locations = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
998                build.setLocation( "filters", _locations );
999                while ( parser.nextTag() == XmlPullParser.START_TAG )
1000                {
1001                    if ( "filter".equals( parser.getName() ) )
1002                    {
1003                        _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1004                        _locations.setLocation( Integer.valueOf( filters.size() ), _location );
1005                        filters.add( interpolatedTrimmed( parser.nextText(), "filters" ) );
1006                    }
1007                    else
1008                    {
1009                        checkUnknownElement( parser, strict );
1010                    }
1011                }
1012            }
1013            else if ( checkFieldWithDuplicate( parser, "pluginManagement", null, parsed ) )
1014            {
1015                build.setPluginManagement( parsePluginManagement( parser, strict, source ) );
1016            }
1017            else if ( checkFieldWithDuplicate( parser, "plugins", null, parsed ) )
1018            {
1019                java.util.List plugins = new java.util.ArrayList/*<Plugin>*/();
1020                build.setPlugins( plugins );
1021                while ( parser.nextTag() == XmlPullParser.START_TAG )
1022                {
1023                    if ( "plugin".equals( parser.getName() ) )
1024                    {
1025                        plugins.add( parsePlugin( parser, strict, source ) );
1026                    }
1027                    else
1028                    {
1029                        checkUnknownElement( parser, strict );
1030                    }
1031                }
1032            }
1033            else
1034            {
1035                checkUnknownElement( parser, strict );
1036            }
1037        }
1038        return build;
1039    } //-- Build parseBuild( XmlPullParser, boolean, InputSource )
1040
1041    /**
1042     * Method parseBuildBase.
1043     * 
1044     * @param parser
1045     * @param source
1046     * @param strict
1047     * @throws IOException
1048     * @throws XmlPullParserException
1049     * @return BuildBase
1050     */
1051    private BuildBase parseBuildBase( XmlPullParser parser, boolean strict, InputSource source )
1052        throws IOException, XmlPullParserException
1053    {
1054        String tagName = parser.getName();
1055        BuildBase buildBase = new BuildBase();
1056        InputLocation _location;
1057        _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1058        buildBase.setLocation( "", _location );
1059        for ( int i = parser.getAttributeCount() - 1; i >= 0; i-- )
1060        {
1061            String name = parser.getAttributeName( i );
1062            String value = parser.getAttributeValue( i );
1063
1064            if ( name.indexOf( ':' ) >= 0 )
1065            {
1066                // just ignore attributes with non-default namespace (for example: xmlns:xsi)
1067            }
1068            else
1069            {
1070                checkUnknownAttribute( parser, name, tagName, strict );
1071            }
1072        }
1073        java.util.Set parsed = new java.util.HashSet();
1074        while ( ( strict ? parser.nextTag() : nextTag( parser ) ) == XmlPullParser.START_TAG )
1075        {
1076            if ( checkFieldWithDuplicate( parser, "defaultGoal", null, parsed ) )
1077            {
1078                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1079                buildBase.setLocation( "defaultGoal", _location );
1080                buildBase.setDefaultGoal( interpolatedTrimmed( parser.nextText(), "defaultGoal" ) );
1081            }
1082            else if ( checkFieldWithDuplicate( parser, "resources", null, parsed ) )
1083            {
1084                java.util.List resources = new java.util.ArrayList/*<Resource>*/();
1085                buildBase.setResources( resources );
1086                while ( parser.nextTag() == XmlPullParser.START_TAG )
1087                {
1088                    if ( "resource".equals( parser.getName() ) )
1089                    {
1090                        resources.add( parseResource( parser, strict, source ) );
1091                    }
1092                    else
1093                    {
1094                        checkUnknownElement( parser, strict );
1095                    }
1096                }
1097            }
1098            else if ( checkFieldWithDuplicate( parser, "testResources", null, parsed ) )
1099            {
1100                java.util.List testResources = new java.util.ArrayList/*<Resource>*/();
1101                buildBase.setTestResources( testResources );
1102                while ( parser.nextTag() == XmlPullParser.START_TAG )
1103                {
1104                    if ( "testResource".equals( parser.getName() ) )
1105                    {
1106                        testResources.add( parseResource( parser, strict, source ) );
1107                    }
1108                    else
1109                    {
1110                        checkUnknownElement( parser, strict );
1111                    }
1112                }
1113            }
1114            else if ( checkFieldWithDuplicate( parser, "directory", null, parsed ) )
1115            {
1116                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1117                buildBase.setLocation( "directory", _location );
1118                buildBase.setDirectory( interpolatedTrimmed( parser.nextText(), "directory" ) );
1119            }
1120            else if ( checkFieldWithDuplicate( parser, "finalName", null, parsed ) )
1121            {
1122                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1123                buildBase.setLocation( "finalName", _location );
1124                buildBase.setFinalName( interpolatedTrimmed( parser.nextText(), "finalName" ) );
1125            }
1126            else if ( checkFieldWithDuplicate( parser, "filters", null, parsed ) )
1127            {
1128                java.util.List filters = new java.util.ArrayList/*<String>*/();
1129                buildBase.setFilters( filters );
1130                InputLocation _locations;
1131                _locations = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1132                buildBase.setLocation( "filters", _locations );
1133                while ( parser.nextTag() == XmlPullParser.START_TAG )
1134                {
1135                    if ( "filter".equals( parser.getName() ) )
1136                    {
1137                        _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1138                        _locations.setLocation( Integer.valueOf( filters.size() ), _location );
1139                        filters.add( interpolatedTrimmed( parser.nextText(), "filters" ) );
1140                    }
1141                    else
1142                    {
1143                        checkUnknownElement( parser, strict );
1144                    }
1145                }
1146            }
1147            else if ( checkFieldWithDuplicate( parser, "pluginManagement", null, parsed ) )
1148            {
1149                buildBase.setPluginManagement( parsePluginManagement( parser, strict, source ) );
1150            }
1151            else if ( checkFieldWithDuplicate( parser, "plugins", null, parsed ) )
1152            {
1153                java.util.List plugins = new java.util.ArrayList/*<Plugin>*/();
1154                buildBase.setPlugins( plugins );
1155                while ( parser.nextTag() == XmlPullParser.START_TAG )
1156                {
1157                    if ( "plugin".equals( parser.getName() ) )
1158                    {
1159                        plugins.add( parsePlugin( parser, strict, source ) );
1160                    }
1161                    else
1162                    {
1163                        checkUnknownElement( parser, strict );
1164                    }
1165                }
1166            }
1167            else
1168            {
1169                checkUnknownElement( parser, strict );
1170            }
1171        }
1172        return buildBase;
1173    } //-- BuildBase parseBuildBase( XmlPullParser, boolean, InputSource )
1174
1175    /**
1176     * Method parseCiManagement.
1177     * 
1178     * @param parser
1179     * @param source
1180     * @param strict
1181     * @throws IOException
1182     * @throws XmlPullParserException
1183     * @return CiManagement
1184     */
1185    private CiManagement parseCiManagement( XmlPullParser parser, boolean strict, InputSource source )
1186        throws IOException, XmlPullParserException
1187    {
1188        String tagName = parser.getName();
1189        CiManagement ciManagement = new CiManagement();
1190        InputLocation _location;
1191        _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1192        ciManagement.setLocation( "", _location );
1193        for ( int i = parser.getAttributeCount() - 1; i >= 0; i-- )
1194        {
1195            String name = parser.getAttributeName( i );
1196            String value = parser.getAttributeValue( i );
1197
1198            if ( name.indexOf( ':' ) >= 0 )
1199            {
1200                // just ignore attributes with non-default namespace (for example: xmlns:xsi)
1201            }
1202            else
1203            {
1204                checkUnknownAttribute( parser, name, tagName, strict );
1205            }
1206        }
1207        java.util.Set parsed = new java.util.HashSet();
1208        while ( ( strict ? parser.nextTag() : nextTag( parser ) ) == XmlPullParser.START_TAG )
1209        {
1210            if ( checkFieldWithDuplicate( parser, "system", null, parsed ) )
1211            {
1212                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1213                ciManagement.setLocation( "system", _location );
1214                ciManagement.setSystem( interpolatedTrimmed( parser.nextText(), "system" ) );
1215            }
1216            else if ( checkFieldWithDuplicate( parser, "url", null, parsed ) )
1217            {
1218                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1219                ciManagement.setLocation( "url", _location );
1220                ciManagement.setUrl( interpolatedTrimmed( parser.nextText(), "url" ) );
1221            }
1222            else if ( checkFieldWithDuplicate( parser, "notifiers", null, parsed ) )
1223            {
1224                java.util.List notifiers = new java.util.ArrayList/*<Notifier>*/();
1225                ciManagement.setNotifiers( notifiers );
1226                while ( parser.nextTag() == XmlPullParser.START_TAG )
1227                {
1228                    if ( "notifier".equals( parser.getName() ) )
1229                    {
1230                        notifiers.add( parseNotifier( parser, strict, source ) );
1231                    }
1232                    else
1233                    {
1234                        checkUnknownElement( parser, strict );
1235                    }
1236                }
1237            }
1238            else
1239            {
1240                checkUnknownElement( parser, strict );
1241            }
1242        }
1243        return ciManagement;
1244    } //-- CiManagement parseCiManagement( XmlPullParser, boolean, InputSource )
1245
1246    /**
1247     * Method parseConfigurationContainer.
1248     * 
1249     * @param parser
1250     * @param source
1251     * @param strict
1252     * @throws IOException
1253     * @throws XmlPullParserException
1254     * @return ConfigurationContainer
1255     */
1256    private ConfigurationContainer parseConfigurationContainer( XmlPullParser parser, boolean strict, InputSource source )
1257        throws IOException, XmlPullParserException
1258    {
1259        String tagName = parser.getName();
1260        ConfigurationContainer configurationContainer = new ConfigurationContainer();
1261        InputLocation _location;
1262        _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1263        configurationContainer.setLocation( "", _location );
1264        for ( int i = parser.getAttributeCount() - 1; i >= 0; i-- )
1265        {
1266            String name = parser.getAttributeName( i );
1267            String value = parser.getAttributeValue( i );
1268
1269            if ( name.indexOf( ':' ) >= 0 )
1270            {
1271                // just ignore attributes with non-default namespace (for example: xmlns:xsi)
1272            }
1273            else
1274            {
1275                checkUnknownAttribute( parser, name, tagName, strict );
1276            }
1277        }
1278        java.util.Set parsed = new java.util.HashSet();
1279        while ( ( strict ? parser.nextTag() : nextTag( parser ) ) == XmlPullParser.START_TAG )
1280        {
1281            if ( checkFieldWithDuplicate( parser, "inherited", null, parsed ) )
1282            {
1283                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1284                configurationContainer.setLocation( "inherited", _location );
1285                configurationContainer.setInherited( interpolatedTrimmed( parser.nextText(), "inherited" ) );
1286            }
1287            else if ( checkFieldWithDuplicate( parser, "configuration", null, parsed ) )
1288            {
1289                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1290                configurationContainer.setLocation( "configuration", _location );
1291                configurationContainer.setConfiguration( org.codehaus.plexus.util.xml.Xpp3DomBuilder.build( parser, true ) );
1292            }
1293            else
1294            {
1295                checkUnknownElement( parser, strict );
1296            }
1297        }
1298        return configurationContainer;
1299    } //-- ConfigurationContainer parseConfigurationContainer( XmlPullParser, boolean, InputSource )
1300
1301    /**
1302     * Method parseContributor.
1303     * 
1304     * @param parser
1305     * @param source
1306     * @param strict
1307     * @throws IOException
1308     * @throws XmlPullParserException
1309     * @return Contributor
1310     */
1311    private Contributor parseContributor( XmlPullParser parser, boolean strict, InputSource source )
1312        throws IOException, XmlPullParserException
1313    {
1314        String tagName = parser.getName();
1315        Contributor contributor = new Contributor();
1316        InputLocation _location;
1317        _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1318        contributor.setLocation( "", _location );
1319        for ( int i = parser.getAttributeCount() - 1; i >= 0; i-- )
1320        {
1321            String name = parser.getAttributeName( i );
1322            String value = parser.getAttributeValue( i );
1323
1324            if ( name.indexOf( ':' ) >= 0 )
1325            {
1326                // just ignore attributes with non-default namespace (for example: xmlns:xsi)
1327            }
1328            else
1329            {
1330                checkUnknownAttribute( parser, name, tagName, strict );
1331            }
1332        }
1333        java.util.Set parsed = new java.util.HashSet();
1334        while ( ( strict ? parser.nextTag() : nextTag( parser ) ) == XmlPullParser.START_TAG )
1335        {
1336            if ( checkFieldWithDuplicate( parser, "name", null, parsed ) )
1337            {
1338                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1339                contributor.setLocation( "name", _location );
1340                contributor.setName( interpolatedTrimmed( parser.nextText(), "name" ) );
1341            }
1342            else if ( checkFieldWithDuplicate( parser, "email", null, parsed ) )
1343            {
1344                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1345                contributor.setLocation( "email", _location );
1346                contributor.setEmail( interpolatedTrimmed( parser.nextText(), "email" ) );
1347            }
1348            else if ( checkFieldWithDuplicate( parser, "url", null, parsed ) )
1349            {
1350                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1351                contributor.setLocation( "url", _location );
1352                contributor.setUrl( interpolatedTrimmed( parser.nextText(), "url" ) );
1353            }
1354            else if ( checkFieldWithDuplicate( parser, "organization", "organisation", parsed ) )
1355            {
1356                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1357                contributor.setLocation( "organization", _location );
1358                contributor.setOrganization( interpolatedTrimmed( parser.nextText(), "organization" ) );
1359            }
1360            else if ( checkFieldWithDuplicate( parser, "organizationUrl", "organisationUrl", parsed ) )
1361            {
1362                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1363                contributor.setLocation( "organizationUrl", _location );
1364                contributor.setOrganizationUrl( interpolatedTrimmed( parser.nextText(), "organizationUrl" ) );
1365            }
1366            else if ( checkFieldWithDuplicate( parser, "roles", null, parsed ) )
1367            {
1368                java.util.List roles = new java.util.ArrayList/*<String>*/();
1369                contributor.setRoles( roles );
1370                InputLocation _locations;
1371                _locations = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1372                contributor.setLocation( "roles", _locations );
1373                while ( parser.nextTag() == XmlPullParser.START_TAG )
1374                {
1375                    if ( "role".equals( parser.getName() ) )
1376                    {
1377                        _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1378                        _locations.setLocation( Integer.valueOf( roles.size() ), _location );
1379                        roles.add( interpolatedTrimmed( parser.nextText(), "roles" ) );
1380                    }
1381                    else
1382                    {
1383                        checkUnknownElement( parser, strict );
1384                    }
1385                }
1386            }
1387            else if ( checkFieldWithDuplicate( parser, "timezone", null, parsed ) )
1388            {
1389                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1390                contributor.setLocation( "timezone", _location );
1391                contributor.setTimezone( interpolatedTrimmed( parser.nextText(), "timezone" ) );
1392            }
1393            else if ( checkFieldWithDuplicate( parser, "properties", null, parsed ) )
1394            {
1395                InputLocation _locations;
1396                _locations = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1397                contributor.setLocation( "properties", _locations );
1398                while ( parser.nextTag() == XmlPullParser.START_TAG )
1399                {
1400                    String key = parser.getName();
1401                    _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1402                    _locations.setLocation( key, _location );
1403                    String value = parser.nextText().trim();
1404                    contributor.addProperty( key, value );
1405                }
1406            }
1407            else
1408            {
1409                checkUnknownElement( parser, strict );
1410            }
1411        }
1412        return contributor;
1413    } //-- Contributor parseContributor( XmlPullParser, boolean, InputSource )
1414
1415    /**
1416     * Method parseDependency.
1417     * 
1418     * @param parser
1419     * @param source
1420     * @param strict
1421     * @throws IOException
1422     * @throws XmlPullParserException
1423     * @return Dependency
1424     */
1425    private Dependency parseDependency( XmlPullParser parser, boolean strict, InputSource source )
1426        throws IOException, XmlPullParserException
1427    {
1428        String tagName = parser.getName();
1429        Dependency dependency = new Dependency();
1430        InputLocation _location;
1431        _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1432        dependency.setLocation( "", _location );
1433        for ( int i = parser.getAttributeCount() - 1; i >= 0; i-- )
1434        {
1435            String name = parser.getAttributeName( i );
1436            String value = parser.getAttributeValue( i );
1437
1438            if ( name.indexOf( ':' ) >= 0 )
1439            {
1440                // just ignore attributes with non-default namespace (for example: xmlns:xsi)
1441            }
1442            else
1443            {
1444                checkUnknownAttribute( parser, name, tagName, strict );
1445            }
1446        }
1447        java.util.Set parsed = new java.util.HashSet();
1448        while ( ( strict ? parser.nextTag() : nextTag( parser ) ) == XmlPullParser.START_TAG )
1449        {
1450            if ( checkFieldWithDuplicate( parser, "groupId", null, parsed ) )
1451            {
1452                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1453                dependency.setLocation( "groupId", _location );
1454                dependency.setGroupId( interpolatedTrimmed( parser.nextText(), "groupId" ) );
1455            }
1456            else if ( checkFieldWithDuplicate( parser, "artifactId", null, parsed ) )
1457            {
1458                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1459                dependency.setLocation( "artifactId", _location );
1460                dependency.setArtifactId( interpolatedTrimmed( parser.nextText(), "artifactId" ) );
1461            }
1462            else if ( checkFieldWithDuplicate( parser, "version", null, parsed ) )
1463            {
1464                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1465                dependency.setLocation( "version", _location );
1466                dependency.setVersion( interpolatedTrimmed( parser.nextText(), "version" ) );
1467            }
1468            else if ( checkFieldWithDuplicate( parser, "type", null, parsed ) )
1469            {
1470                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1471                dependency.setLocation( "type", _location );
1472                dependency.setType( interpolatedTrimmed( parser.nextText(), "type" ) );
1473            }
1474            else if ( checkFieldWithDuplicate( parser, "classifier", null, parsed ) )
1475            {
1476                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1477                dependency.setLocation( "classifier", _location );
1478                dependency.setClassifier( interpolatedTrimmed( parser.nextText(), "classifier" ) );
1479            }
1480            else if ( checkFieldWithDuplicate( parser, "scope", null, parsed ) )
1481            {
1482                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1483                dependency.setLocation( "scope", _location );
1484                dependency.setScope( interpolatedTrimmed( parser.nextText(), "scope" ) );
1485            }
1486            else if ( checkFieldWithDuplicate( parser, "systemPath", null, parsed ) )
1487            {
1488                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1489                dependency.setLocation( "systemPath", _location );
1490                dependency.setSystemPath( interpolatedTrimmed( parser.nextText(), "systemPath" ) );
1491            }
1492            else if ( checkFieldWithDuplicate( parser, "exclusions", null, parsed ) )
1493            {
1494                java.util.List exclusions = new java.util.ArrayList/*<Exclusion>*/();
1495                dependency.setExclusions( exclusions );
1496                while ( parser.nextTag() == XmlPullParser.START_TAG )
1497                {
1498                    if ( "exclusion".equals( parser.getName() ) )
1499                    {
1500                        exclusions.add( parseExclusion( parser, strict, source ) );
1501                    }
1502                    else
1503                    {
1504                        checkUnknownElement( parser, strict );
1505                    }
1506                }
1507            }
1508            else if ( checkFieldWithDuplicate( parser, "optional", null, parsed ) )
1509            {
1510                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1511                dependency.setLocation( "optional", _location );
1512                dependency.setOptional( interpolatedTrimmed( parser.nextText(), "optional" ) );
1513            }
1514            else
1515            {
1516                checkUnknownElement( parser, strict );
1517            }
1518        }
1519        return dependency;
1520    } //-- Dependency parseDependency( XmlPullParser, boolean, InputSource )
1521
1522    /**
1523     * Method parseDependencyManagement.
1524     * 
1525     * @param parser
1526     * @param source
1527     * @param strict
1528     * @throws IOException
1529     * @throws XmlPullParserException
1530     * @return DependencyManagement
1531     */
1532    private DependencyManagement parseDependencyManagement( XmlPullParser parser, boolean strict, InputSource source )
1533        throws IOException, XmlPullParserException
1534    {
1535        String tagName = parser.getName();
1536        DependencyManagement dependencyManagement = new DependencyManagement();
1537        InputLocation _location;
1538        _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1539        dependencyManagement.setLocation( "", _location );
1540        for ( int i = parser.getAttributeCount() - 1; i >= 0; i-- )
1541        {
1542            String name = parser.getAttributeName( i );
1543            String value = parser.getAttributeValue( i );
1544
1545            if ( name.indexOf( ':' ) >= 0 )
1546            {
1547                // just ignore attributes with non-default namespace (for example: xmlns:xsi)
1548            }
1549            else
1550            {
1551                checkUnknownAttribute( parser, name, tagName, strict );
1552            }
1553        }
1554        java.util.Set parsed = new java.util.HashSet();
1555        while ( ( strict ? parser.nextTag() : nextTag( parser ) ) == XmlPullParser.START_TAG )
1556        {
1557            if ( checkFieldWithDuplicate( parser, "dependencies", null, parsed ) )
1558            {
1559                java.util.List dependencies = new java.util.ArrayList/*<Dependency>*/();
1560                dependencyManagement.setDependencies( dependencies );
1561                while ( parser.nextTag() == XmlPullParser.START_TAG )
1562                {
1563                    if ( "dependency".equals( parser.getName() ) )
1564                    {
1565                        dependencies.add( parseDependency( parser, strict, source ) );
1566                    }
1567                    else
1568                    {
1569                        checkUnknownElement( parser, strict );
1570                    }
1571                }
1572            }
1573            else
1574            {
1575                checkUnknownElement( parser, strict );
1576            }
1577        }
1578        return dependencyManagement;
1579    } //-- DependencyManagement parseDependencyManagement( XmlPullParser, boolean, InputSource )
1580
1581    /**
1582     * Method parseDeploymentRepository.
1583     * 
1584     * @param parser
1585     * @param source
1586     * @param strict
1587     * @throws IOException
1588     * @throws XmlPullParserException
1589     * @return DeploymentRepository
1590     */
1591    private DeploymentRepository parseDeploymentRepository( XmlPullParser parser, boolean strict, InputSource source )
1592        throws IOException, XmlPullParserException
1593    {
1594        String tagName = parser.getName();
1595        DeploymentRepository deploymentRepository = new DeploymentRepository();
1596        InputLocation _location;
1597        _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1598        deploymentRepository.setLocation( "", _location );
1599        for ( int i = parser.getAttributeCount() - 1; i >= 0; i-- )
1600        {
1601            String name = parser.getAttributeName( i );
1602            String value = parser.getAttributeValue( i );
1603
1604            if ( name.indexOf( ':' ) >= 0 )
1605            {
1606                // just ignore attributes with non-default namespace (for example: xmlns:xsi)
1607            }
1608            else
1609            {
1610                checkUnknownAttribute( parser, name, tagName, strict );
1611            }
1612        }
1613        java.util.Set parsed = new java.util.HashSet();
1614        while ( ( strict ? parser.nextTag() : nextTag( parser ) ) == XmlPullParser.START_TAG )
1615        {
1616            if ( checkFieldWithDuplicate( parser, "uniqueVersion", null, parsed ) )
1617            {
1618                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1619                deploymentRepository.setLocation( "uniqueVersion", _location );
1620                deploymentRepository.setUniqueVersion( getBooleanValue( interpolatedTrimmed( parser.nextText(), "uniqueVersion" ), "uniqueVersion", parser, "true" ) );
1621            }
1622            else if ( checkFieldWithDuplicate( parser, "releases", null, parsed ) )
1623            {
1624                deploymentRepository.setReleases( parseRepositoryPolicy( parser, strict, source ) );
1625            }
1626            else if ( checkFieldWithDuplicate( parser, "snapshots", null, parsed ) )
1627            {
1628                deploymentRepository.setSnapshots( parseRepositoryPolicy( parser, strict, source ) );
1629            }
1630            else if ( checkFieldWithDuplicate( parser, "id", null, parsed ) )
1631            {
1632                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1633                deploymentRepository.setLocation( "id", _location );
1634                deploymentRepository.setId( interpolatedTrimmed( parser.nextText(), "id" ) );
1635            }
1636            else if ( checkFieldWithDuplicate( parser, "name", null, parsed ) )
1637            {
1638                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1639                deploymentRepository.setLocation( "name", _location );
1640                deploymentRepository.setName( interpolatedTrimmed( parser.nextText(), "name" ) );
1641            }
1642            else if ( checkFieldWithDuplicate( parser, "url", null, parsed ) )
1643            {
1644                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1645                deploymentRepository.setLocation( "url", _location );
1646                deploymentRepository.setUrl( interpolatedTrimmed( parser.nextText(), "url" ) );
1647            }
1648            else if ( checkFieldWithDuplicate( parser, "layout", null, parsed ) )
1649            {
1650                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1651                deploymentRepository.setLocation( "layout", _location );
1652                deploymentRepository.setLayout( interpolatedTrimmed( parser.nextText(), "layout" ) );
1653            }
1654            else
1655            {
1656                checkUnknownElement( parser, strict );
1657            }
1658        }
1659        return deploymentRepository;
1660    } //-- DeploymentRepository parseDeploymentRepository( XmlPullParser, boolean, InputSource )
1661
1662    /**
1663     * Method parseDeveloper.
1664     * 
1665     * @param parser
1666     * @param source
1667     * @param strict
1668     * @throws IOException
1669     * @throws XmlPullParserException
1670     * @return Developer
1671     */
1672    private Developer parseDeveloper( XmlPullParser parser, boolean strict, InputSource source )
1673        throws IOException, XmlPullParserException
1674    {
1675        String tagName = parser.getName();
1676        Developer developer = new Developer();
1677        InputLocation _location;
1678        _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1679        developer.setLocation( "", _location );
1680        for ( int i = parser.getAttributeCount() - 1; i >= 0; i-- )
1681        {
1682            String name = parser.getAttributeName( i );
1683            String value = parser.getAttributeValue( i );
1684
1685            if ( name.indexOf( ':' ) >= 0 )
1686            {
1687                // just ignore attributes with non-default namespace (for example: xmlns:xsi)
1688            }
1689            else
1690            {
1691                checkUnknownAttribute( parser, name, tagName, strict );
1692            }
1693        }
1694        java.util.Set parsed = new java.util.HashSet();
1695        while ( ( strict ? parser.nextTag() : nextTag( parser ) ) == XmlPullParser.START_TAG )
1696        {
1697            if ( checkFieldWithDuplicate( parser, "id", null, parsed ) )
1698            {
1699                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1700                developer.setLocation( "id", _location );
1701                developer.setId( interpolatedTrimmed( parser.nextText(), "id" ) );
1702            }
1703            else if ( checkFieldWithDuplicate( parser, "name", null, parsed ) )
1704            {
1705                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1706                developer.setLocation( "name", _location );
1707                developer.setName( interpolatedTrimmed( parser.nextText(), "name" ) );
1708            }
1709            else if ( checkFieldWithDuplicate( parser, "email", null, parsed ) )
1710            {
1711                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1712                developer.setLocation( "email", _location );
1713                developer.setEmail( interpolatedTrimmed( parser.nextText(), "email" ) );
1714            }
1715            else if ( checkFieldWithDuplicate( parser, "url", null, parsed ) )
1716            {
1717                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1718                developer.setLocation( "url", _location );
1719                developer.setUrl( interpolatedTrimmed( parser.nextText(), "url" ) );
1720            }
1721            else if ( checkFieldWithDuplicate( parser, "organization", "organisation", parsed ) )
1722            {
1723                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1724                developer.setLocation( "organization", _location );
1725                developer.setOrganization( interpolatedTrimmed( parser.nextText(), "organization" ) );
1726            }
1727            else if ( checkFieldWithDuplicate( parser, "organizationUrl", "organisationUrl", parsed ) )
1728            {
1729                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1730                developer.setLocation( "organizationUrl", _location );
1731                developer.setOrganizationUrl( interpolatedTrimmed( parser.nextText(), "organizationUrl" ) );
1732            }
1733            else if ( checkFieldWithDuplicate( parser, "roles", null, parsed ) )
1734            {
1735                java.util.List roles = new java.util.ArrayList/*<String>*/();
1736                developer.setRoles( roles );
1737                InputLocation _locations;
1738                _locations = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1739                developer.setLocation( "roles", _locations );
1740                while ( parser.nextTag() == XmlPullParser.START_TAG )
1741                {
1742                    if ( "role".equals( parser.getName() ) )
1743                    {
1744                        _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1745                        _locations.setLocation( Integer.valueOf( roles.size() ), _location );
1746                        roles.add( interpolatedTrimmed( parser.nextText(), "roles" ) );
1747                    }
1748                    else
1749                    {
1750                        checkUnknownElement( parser, strict );
1751                    }
1752                }
1753            }
1754            else if ( checkFieldWithDuplicate( parser, "timezone", null, parsed ) )
1755            {
1756                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1757                developer.setLocation( "timezone", _location );
1758                developer.setTimezone( interpolatedTrimmed( parser.nextText(), "timezone" ) );
1759            }
1760            else if ( checkFieldWithDuplicate( parser, "properties", null, parsed ) )
1761            {
1762                InputLocation _locations;
1763                _locations = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1764                developer.setLocation( "properties", _locations );
1765                while ( parser.nextTag() == XmlPullParser.START_TAG )
1766                {
1767                    String key = parser.getName();
1768                    _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1769                    _locations.setLocation( key, _location );
1770                    String value = parser.nextText().trim();
1771                    developer.addProperty( key, value );
1772                }
1773            }
1774            else
1775            {
1776                checkUnknownElement( parser, strict );
1777            }
1778        }
1779        return developer;
1780    } //-- Developer parseDeveloper( XmlPullParser, boolean, InputSource )
1781
1782    /**
1783     * Method parseDistributionManagement.
1784     * 
1785     * @param parser
1786     * @param source
1787     * @param strict
1788     * @throws IOException
1789     * @throws XmlPullParserException
1790     * @return DistributionManagement
1791     */
1792    private DistributionManagement parseDistributionManagement( XmlPullParser parser, boolean strict, InputSource source )
1793        throws IOException, XmlPullParserException
1794    {
1795        String tagName = parser.getName();
1796        DistributionManagement distributionManagement = new DistributionManagement();
1797        InputLocation _location;
1798        _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1799        distributionManagement.setLocation( "", _location );
1800        for ( int i = parser.getAttributeCount() - 1; i >= 0; i-- )
1801        {
1802            String name = parser.getAttributeName( i );
1803            String value = parser.getAttributeValue( i );
1804
1805            if ( name.indexOf( ':' ) >= 0 )
1806            {
1807                // just ignore attributes with non-default namespace (for example: xmlns:xsi)
1808            }
1809            else
1810            {
1811                checkUnknownAttribute( parser, name, tagName, strict );
1812            }
1813        }
1814        java.util.Set parsed = new java.util.HashSet();
1815        while ( ( strict ? parser.nextTag() : nextTag( parser ) ) == XmlPullParser.START_TAG )
1816        {
1817            if ( checkFieldWithDuplicate( parser, "repository", null, parsed ) )
1818            {
1819                distributionManagement.setRepository( parseDeploymentRepository( parser, strict, source ) );
1820            }
1821            else if ( checkFieldWithDuplicate( parser, "snapshotRepository", null, parsed ) )
1822            {
1823                distributionManagement.setSnapshotRepository( parseDeploymentRepository( parser, strict, source ) );
1824            }
1825            else if ( checkFieldWithDuplicate( parser, "site", null, parsed ) )
1826            {
1827                distributionManagement.setSite( parseSite( parser, strict, source ) );
1828            }
1829            else if ( checkFieldWithDuplicate( parser, "downloadUrl", null, parsed ) )
1830            {
1831                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1832                distributionManagement.setLocation( "downloadUrl", _location );
1833                distributionManagement.setDownloadUrl( interpolatedTrimmed( parser.nextText(), "downloadUrl" ) );
1834            }
1835            else if ( checkFieldWithDuplicate( parser, "relocation", null, parsed ) )
1836            {
1837                distributionManagement.setRelocation( parseRelocation( parser, strict, source ) );
1838            }
1839            else if ( checkFieldWithDuplicate( parser, "status", null, parsed ) )
1840            {
1841                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1842                distributionManagement.setLocation( "status", _location );
1843                distributionManagement.setStatus( interpolatedTrimmed( parser.nextText(), "status" ) );
1844            }
1845            else
1846            {
1847                checkUnknownElement( parser, strict );
1848            }
1849        }
1850        return distributionManagement;
1851    } //-- DistributionManagement parseDistributionManagement( XmlPullParser, boolean, InputSource )
1852
1853    /**
1854     * Method parseExclusion.
1855     * 
1856     * @param parser
1857     * @param source
1858     * @param strict
1859     * @throws IOException
1860     * @throws XmlPullParserException
1861     * @return Exclusion
1862     */
1863    private Exclusion parseExclusion( XmlPullParser parser, boolean strict, InputSource source )
1864        throws IOException, XmlPullParserException
1865    {
1866        String tagName = parser.getName();
1867        Exclusion exclusion = new Exclusion();
1868        InputLocation _location;
1869        _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1870        exclusion.setLocation( "", _location );
1871        for ( int i = parser.getAttributeCount() - 1; i >= 0; i-- )
1872        {
1873            String name = parser.getAttributeName( i );
1874            String value = parser.getAttributeValue( i );
1875
1876            if ( name.indexOf( ':' ) >= 0 )
1877            {
1878                // just ignore attributes with non-default namespace (for example: xmlns:xsi)
1879            }
1880            else
1881            {
1882                checkUnknownAttribute( parser, name, tagName, strict );
1883            }
1884        }
1885        java.util.Set parsed = new java.util.HashSet();
1886        while ( ( strict ? parser.nextTag() : nextTag( parser ) ) == XmlPullParser.START_TAG )
1887        {
1888            if ( checkFieldWithDuplicate( parser, "artifactId", null, parsed ) )
1889            {
1890                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1891                exclusion.setLocation( "artifactId", _location );
1892                exclusion.setArtifactId( interpolatedTrimmed( parser.nextText(), "artifactId" ) );
1893            }
1894            else if ( checkFieldWithDuplicate( parser, "groupId", null, parsed ) )
1895            {
1896                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1897                exclusion.setLocation( "groupId", _location );
1898                exclusion.setGroupId( interpolatedTrimmed( parser.nextText(), "groupId" ) );
1899            }
1900            else
1901            {
1902                checkUnknownElement( parser, strict );
1903            }
1904        }
1905        return exclusion;
1906    } //-- Exclusion parseExclusion( XmlPullParser, boolean, InputSource )
1907
1908    /**
1909     * Method parseExtension.
1910     * 
1911     * @param parser
1912     * @param source
1913     * @param strict
1914     * @throws IOException
1915     * @throws XmlPullParserException
1916     * @return Extension
1917     */
1918    private Extension parseExtension( XmlPullParser parser, boolean strict, InputSource source )
1919        throws IOException, XmlPullParserException
1920    {
1921        String tagName = parser.getName();
1922        Extension extension = new Extension();
1923        InputLocation _location;
1924        _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1925        extension.setLocation( "", _location );
1926        for ( int i = parser.getAttributeCount() - 1; i >= 0; i-- )
1927        {
1928            String name = parser.getAttributeName( i );
1929            String value = parser.getAttributeValue( i );
1930
1931            if ( name.indexOf( ':' ) >= 0 )
1932            {
1933                // just ignore attributes with non-default namespace (for example: xmlns:xsi)
1934            }
1935            else
1936            {
1937                checkUnknownAttribute( parser, name, tagName, strict );
1938            }
1939        }
1940        java.util.Set parsed = new java.util.HashSet();
1941        while ( ( strict ? parser.nextTag() : nextTag( parser ) ) == XmlPullParser.START_TAG )
1942        {
1943            if ( checkFieldWithDuplicate( parser, "groupId", null, parsed ) )
1944            {
1945                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1946                extension.setLocation( "groupId", _location );
1947                extension.setGroupId( interpolatedTrimmed( parser.nextText(), "groupId" ) );
1948            }
1949            else if ( checkFieldWithDuplicate( parser, "artifactId", null, parsed ) )
1950            {
1951                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1952                extension.setLocation( "artifactId", _location );
1953                extension.setArtifactId( interpolatedTrimmed( parser.nextText(), "artifactId" ) );
1954            }
1955            else if ( checkFieldWithDuplicate( parser, "version", null, parsed ) )
1956            {
1957                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1958                extension.setLocation( "version", _location );
1959                extension.setVersion( interpolatedTrimmed( parser.nextText(), "version" ) );
1960            }
1961            else
1962            {
1963                checkUnknownElement( parser, strict );
1964            }
1965        }
1966        return extension;
1967    } //-- Extension parseExtension( XmlPullParser, boolean, InputSource )
1968
1969    /**
1970     * Method parseFileSet.
1971     * 
1972     * @param parser
1973     * @param source
1974     * @param strict
1975     * @throws IOException
1976     * @throws XmlPullParserException
1977     * @return FileSet
1978     */
1979    private FileSet parseFileSet( XmlPullParser parser, boolean strict, InputSource source )
1980        throws IOException, XmlPullParserException
1981    {
1982        String tagName = parser.getName();
1983        FileSet fileSet = new FileSet();
1984        InputLocation _location;
1985        _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
1986        fileSet.setLocation( "", _location );
1987        for ( int i = parser.getAttributeCount() - 1; i >= 0; i-- )
1988        {
1989            String name = parser.getAttributeName( i );
1990            String value = parser.getAttributeValue( i );
1991
1992            if ( name.indexOf( ':' ) >= 0 )
1993            {
1994                // just ignore attributes with non-default namespace (for example: xmlns:xsi)
1995            }
1996            else
1997            {
1998                checkUnknownAttribute( parser, name, tagName, strict );
1999            }
2000        }
2001        java.util.Set parsed = new java.util.HashSet();
2002        while ( ( strict ? parser.nextTag() : nextTag( parser ) ) == XmlPullParser.START_TAG )
2003        {
2004            if ( checkFieldWithDuplicate( parser, "directory", null, parsed ) )
2005            {
2006                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
2007                fileSet.setLocation( "directory", _location );
2008                fileSet.setDirectory( interpolatedTrimmed( parser.nextText(), "directory" ) );
2009            }
2010            else if ( checkFieldWithDuplicate( parser, "includes", null, parsed ) )
2011            {
2012                java.util.List includes = new java.util.ArrayList/*<String>*/();
2013                fileSet.setIncludes( includes );
2014                InputLocation _locations;
2015                _locations = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
2016                fileSet.setLocation( "includes", _locations );
2017                while ( parser.nextTag() == XmlPullParser.START_TAG )
2018                {
2019                    if ( "include".equals( parser.getName() ) )
2020                    {
2021                        _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
2022                        _locations.setLocation( Integer.valueOf( includes.size() ), _location );
2023                        includes.add( interpolatedTrimmed( parser.nextText(), "includes" ) );
2024                    }
2025                    else
2026                    {
2027                        checkUnknownElement( parser, strict );
2028                    }
2029                }
2030            }
2031            else if ( checkFieldWithDuplicate( parser, "excludes", null, parsed ) )
2032            {
2033                java.util.List excludes = new java.util.ArrayList/*<String>*/();
2034                fileSet.setExcludes( excludes );
2035                InputLocation _locations;
2036                _locations = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
2037                fileSet.setLocation( "excludes", _locations );
2038                while ( parser.nextTag() == XmlPullParser.START_TAG )
2039                {
2040                    if ( "exclude".equals( parser.getName() ) )
2041                    {
2042                        _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
2043                        _locations.setLocation( Integer.valueOf( excludes.size() ), _location );
2044                        excludes.add( interpolatedTrimmed( parser.nextText(), "excludes" ) );
2045                    }
2046                    else
2047                    {
2048                        checkUnknownElement( parser, strict );
2049                    }
2050                }
2051            }
2052            else
2053            {
2054                checkUnknownElement( parser, strict );
2055            }
2056        }
2057        return fileSet;
2058    } //-- FileSet parseFileSet( XmlPullParser, boolean, InputSource )
2059
2060    /**
2061     * Method parseIssueManagement.
2062     * 
2063     * @param parser
2064     * @param source
2065     * @param strict
2066     * @throws IOException
2067     * @throws XmlPullParserException
2068     * @return IssueManagement
2069     */
2070    private IssueManagement parseIssueManagement( XmlPullParser parser, boolean strict, InputSource source )
2071        throws IOException, XmlPullParserException
2072    {
2073        String tagName = parser.getName();
2074        IssueManagement issueManagement = new IssueManagement();
2075        InputLocation _location;
2076        _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
2077        issueManagement.setLocation( "", _location );
2078        for ( int i = parser.getAttributeCount() - 1; i >= 0; i-- )
2079        {
2080            String name = parser.getAttributeName( i );
2081            String value = parser.getAttributeValue( i );
2082
2083            if ( name.indexOf( ':' ) >= 0 )
2084            {
2085                // just ignore attributes with non-default namespace (for example: xmlns:xsi)
2086            }
2087            else
2088            {
2089                checkUnknownAttribute( parser, name, tagName, strict );
2090            }
2091        }
2092        java.util.Set parsed = new java.util.HashSet();
2093        while ( ( strict ? parser.nextTag() : nextTag( parser ) ) == XmlPullParser.START_TAG )
2094        {
2095            if ( checkFieldWithDuplicate( parser, "system", null, parsed ) )
2096            {
2097                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
2098                issueManagement.setLocation( "system", _location );
2099                issueManagement.setSystem( interpolatedTrimmed( parser.nextText(), "system" ) );
2100            }
2101            else if ( checkFieldWithDuplicate( parser, "url", null, parsed ) )
2102            {
2103                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
2104                issueManagement.setLocation( "url", _location );
2105                issueManagement.setUrl( interpolatedTrimmed( parser.nextText(), "url" ) );
2106            }
2107            else
2108            {
2109                checkUnknownElement( parser, strict );
2110            }
2111        }
2112        return issueManagement;
2113    } //-- IssueManagement parseIssueManagement( XmlPullParser, boolean, InputSource )
2114
2115    /**
2116     * Method parseLicense.
2117     * 
2118     * @param parser
2119     * @param source
2120     * @param strict
2121     * @throws IOException
2122     * @throws XmlPullParserException
2123     * @return License
2124     */
2125    private License parseLicense( XmlPullParser parser, boolean strict, InputSource source )
2126        throws IOException, XmlPullParserException
2127    {
2128        String tagName = parser.getName();
2129        License license = new License();
2130        InputLocation _location;
2131        _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
2132        license.setLocation( "", _location );
2133        for ( int i = parser.getAttributeCount() - 1; i >= 0; i-- )
2134        {
2135            String name = parser.getAttributeName( i );
2136            String value = parser.getAttributeValue( i );
2137
2138            if ( name.indexOf( ':' ) >= 0 )
2139            {
2140                // just ignore attributes with non-default namespace (for example: xmlns:xsi)
2141            }
2142            else
2143            {
2144                checkUnknownAttribute( parser, name, tagName, strict );
2145            }
2146        }
2147        java.util.Set parsed = new java.util.HashSet();
2148        while ( ( strict ? parser.nextTag() : nextTag( parser ) ) == XmlPullParser.START_TAG )
2149        {
2150            if ( checkFieldWithDuplicate( parser, "name", null, parsed ) )
2151            {
2152                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
2153                license.setLocation( "name", _location );
2154                license.setName( interpolatedTrimmed( parser.nextText(), "name" ) );
2155            }
2156            else if ( checkFieldWithDuplicate( parser, "url", null, parsed ) )
2157            {
2158                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
2159                license.setLocation( "url", _location );
2160                license.setUrl( interpolatedTrimmed( parser.nextText(), "url" ) );
2161            }
2162            else if ( checkFieldWithDuplicate( parser, "distribution", null, parsed ) )
2163            {
2164                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
2165                license.setLocation( "distribution", _location );
2166                license.setDistribution( interpolatedTrimmed( parser.nextText(), "distribution" ) );
2167            }
2168            else if ( checkFieldWithDuplicate( parser, "comments", null, parsed ) )
2169            {
2170                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
2171                license.setLocation( "comments", _location );
2172                license.setComments( interpolatedTrimmed( parser.nextText(), "comments" ) );
2173            }
2174            else
2175            {
2176                checkUnknownElement( parser, strict );
2177            }
2178        }
2179        return license;
2180    } //-- License parseLicense( XmlPullParser, boolean, InputSource )
2181
2182    /**
2183     * Method parseMailingList.
2184     * 
2185     * @param parser
2186     * @param source
2187     * @param strict
2188     * @throws IOException
2189     * @throws XmlPullParserException
2190     * @return MailingList
2191     */
2192    private MailingList parseMailingList( XmlPullParser parser, boolean strict, InputSource source )
2193        throws IOException, XmlPullParserException
2194    {
2195        String tagName = parser.getName();
2196        MailingList mailingList = new MailingList();
2197        InputLocation _location;
2198        _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
2199        mailingList.setLocation( "", _location );
2200        for ( int i = parser.getAttributeCount() - 1; i >= 0; i-- )
2201        {
2202            String name = parser.getAttributeName( i );
2203            String value = parser.getAttributeValue( i );
2204
2205            if ( name.indexOf( ':' ) >= 0 )
2206            {
2207                // just ignore attributes with non-default namespace (for example: xmlns:xsi)
2208            }
2209            else
2210            {
2211                checkUnknownAttribute( parser, name, tagName, strict );
2212            }
2213        }
2214        java.util.Set parsed = new java.util.HashSet();
2215        while ( ( strict ? parser.nextTag() : nextTag( parser ) ) == XmlPullParser.START_TAG )
2216        {
2217            if ( checkFieldWithDuplicate( parser, "name", null, parsed ) )
2218            {
2219                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
2220                mailingList.setLocation( "name", _location );
2221                mailingList.setName( interpolatedTrimmed( parser.nextText(), "name" ) );
2222            }
2223            else if ( checkFieldWithDuplicate( parser, "subscribe", null, parsed ) )
2224            {
2225                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
2226                mailingList.setLocation( "subscribe", _location );
2227                mailingList.setSubscribe( interpolatedTrimmed( parser.nextText(), "subscribe" ) );
2228            }
2229            else if ( checkFieldWithDuplicate( parser, "unsubscribe", null, parsed ) )
2230            {
2231                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
2232                mailingList.setLocation( "unsubscribe", _location );
2233                mailingList.setUnsubscribe( interpolatedTrimmed( parser.nextText(), "unsubscribe" ) );
2234            }
2235            else if ( checkFieldWithDuplicate( parser, "post", null, parsed ) )
2236            {
2237                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
2238                mailingList.setLocation( "post", _location );
2239                mailingList.setPost( interpolatedTrimmed( parser.nextText(), "post" ) );
2240            }
2241            else if ( checkFieldWithDuplicate( parser, "archive", null, parsed ) )
2242            {
2243                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
2244                mailingList.setLocation( "archive", _location );
2245                mailingList.setArchive( interpolatedTrimmed( parser.nextText(), "archive" ) );
2246            }
2247            else if ( checkFieldWithDuplicate( parser, "otherArchives", null, parsed ) )
2248            {
2249                java.util.List otherArchives = new java.util.ArrayList/*<String>*/();
2250                mailingList.setOtherArchives( otherArchives );
2251                InputLocation _locations;
2252                _locations = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
2253                mailingList.setLocation( "otherArchives", _locations );
2254                while ( parser.nextTag() == XmlPullParser.START_TAG )
2255                {
2256                    if ( "otherArchive".equals( parser.getName() ) )
2257                    {
2258                        _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
2259                        _locations.setLocation( Integer.valueOf( otherArchives.size() ), _location );
2260                        otherArchives.add( interpolatedTrimmed( parser.nextText(), "otherArchives" ) );
2261                    }
2262                    else
2263                    {
2264                        checkUnknownElement( parser, strict );
2265                    }
2266                }
2267            }
2268            else
2269            {
2270                checkUnknownElement( parser, strict );
2271            }
2272        }
2273        return mailingList;
2274    } //-- MailingList parseMailingList( XmlPullParser, boolean, InputSource )
2275
2276    /**
2277     * Method parseModel.
2278     * 
2279     * @param parser
2280     * @param source
2281     * @param strict
2282     * @throws IOException
2283     * @throws XmlPullParserException
2284     * @return Model
2285     */
2286    private Model parseModel( XmlPullParser parser, boolean strict, InputSource source )
2287        throws IOException, XmlPullParserException
2288    {
2289        String tagName = parser.getName();
2290        Model model = new Model();
2291        InputLocation _location;
2292        _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
2293        model.setLocation( "", _location );
2294        for ( int i = parser.getAttributeCount() - 1; i >= 0; i-- )
2295        {
2296            String name = parser.getAttributeName( i );
2297            String value = parser.getAttributeValue( i );
2298
2299            if ( name.indexOf( ':' ) >= 0 )
2300            {
2301                // just ignore attributes with non-default namespace (for example: xmlns:xsi)
2302            }
2303            else if ( "xmlns".equals( name ) )
2304            {
2305                // ignore xmlns attribute in root class, which is a reserved attribute name
2306            }
2307            else
2308            {
2309                checkUnknownAttribute( parser, name, tagName, strict );
2310            }
2311        }
2312        java.util.Set parsed = new java.util.HashSet();
2313        while ( ( strict ? parser.nextTag() : nextTag( parser ) ) == XmlPullParser.START_TAG )
2314        {
2315            if ( checkFieldWithDuplicate( parser, "modelVersion", null, parsed ) )
2316            {
2317                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
2318                model.setLocation( "modelVersion", _location );
2319                model.setModelVersion( interpolatedTrimmed( parser.nextText(), "modelVersion" ) );
2320            }
2321            else if ( checkFieldWithDuplicate( parser, "parent", null, parsed ) )
2322            {
2323                model.setParent( parseParent( parser, strict, source ) );
2324            }
2325            else if ( checkFieldWithDuplicate( parser, "groupId", null, parsed ) )
2326            {
2327                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
2328                model.setLocation( "groupId", _location );
2329                model.setGroupId( interpolatedTrimmed( parser.nextText(), "groupId" ) );
2330            }
2331            else if ( checkFieldWithDuplicate( parser, "artifactId", null, parsed ) )
2332            {
2333                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
2334                model.setLocation( "artifactId", _location );
2335                model.setArtifactId( interpolatedTrimmed( parser.nextText(), "artifactId" ) );
2336            }
2337            else if ( checkFieldWithDuplicate( parser, "version", null, parsed ) )
2338            {
2339                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
2340                model.setLocation( "version", _location );
2341                model.setVersion( interpolatedTrimmed( parser.nextText(), "version" ) );
2342            }
2343            else if ( checkFieldWithDuplicate( parser, "packaging", null, parsed ) )
2344            {
2345                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
2346                model.setLocation( "packaging", _location );
2347                model.setPackaging( interpolatedTrimmed( parser.nextText(), "packaging" ) );
2348            }
2349            else if ( checkFieldWithDuplicate( parser, "name", null, parsed ) )
2350            {
2351                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
2352                model.setLocation( "name", _location );
2353                model.setName( interpolatedTrimmed( parser.nextText(), "name" ) );
2354            }
2355            else if ( checkFieldWithDuplicate( parser, "description", null, parsed ) )
2356            {
2357                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
2358                model.setLocation( "description", _location );
2359                model.setDescription( interpolatedTrimmed( parser.nextText(), "description" ) );
2360            }
2361            else if ( checkFieldWithDuplicate( parser, "url", null, parsed ) )
2362            {
2363                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
2364                model.setLocation( "url", _location );
2365                model.setUrl( interpolatedTrimmed( parser.nextText(), "url" ) );
2366            }
2367            else if ( checkFieldWithDuplicate( parser, "inceptionYear", null, parsed ) )
2368            {
2369                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
2370                model.setLocation( "inceptionYear", _location );
2371                model.setInceptionYear( interpolatedTrimmed( parser.nextText(), "inceptionYear" ) );
2372            }
2373            else if ( checkFieldWithDuplicate( parser, "organization", "organisation", parsed ) )
2374            {
2375                model.setOrganization( parseOrganization( parser, strict, source ) );
2376            }
2377            else if ( checkFieldWithDuplicate( parser, "licenses", null, parsed ) )
2378            {
2379                java.util.List licenses = new java.util.ArrayList/*<License>*/();
2380                model.setLicenses( licenses );
2381                while ( parser.nextTag() == XmlPullParser.START_TAG )
2382                {
2383                    if ( "license".equals( parser.getName() ) )
2384                    {
2385                        licenses.add( parseLicense( parser, strict, source ) );
2386                    }
2387                    else
2388                    {
2389                        checkUnknownElement( parser, strict );
2390                    }
2391                }
2392            }
2393            else if ( checkFieldWithDuplicate( parser, "developers", null, parsed ) )
2394            {
2395                java.util.List developers = new java.util.ArrayList/*<Developer>*/();
2396                model.setDevelopers( developers );
2397                while ( parser.nextTag() == XmlPullParser.START_TAG )
2398                {
2399                    if ( "developer".equals( parser.getName() ) )
2400                    {
2401                        developers.add( parseDeveloper( parser, strict, source ) );
2402                    }
2403                    else
2404                    {
2405                        checkUnknownElement( parser, strict );
2406                    }
2407                }
2408            }
2409            else if ( checkFieldWithDuplicate( parser, "contributors", null, parsed ) )
2410            {
2411                java.util.List contributors = new java.util.ArrayList/*<Contributor>*/();
2412                model.setContributors( contributors );
2413                while ( parser.nextTag() == XmlPullParser.START_TAG )
2414                {
2415                    if ( "contributor".equals( parser.getName() ) )
2416                    {
2417                        contributors.add( parseContributor( parser, strict, source ) );
2418                    }
2419                    else
2420                    {
2421                        checkUnknownElement( parser, strict );
2422                    }
2423                }
2424            }
2425            else if ( checkFieldWithDuplicate( parser, "mailingLists", null, parsed ) )
2426            {
2427                java.util.List mailingLists = new java.util.ArrayList/*<MailingList>*/();
2428                model.setMailingLists( mailingLists );
2429                while ( parser.nextTag() == XmlPullParser.START_TAG )
2430                {
2431                    if ( "mailingList".equals( parser.getName() ) )
2432                    {
2433                        mailingLists.add( parseMailingList( parser, strict, source ) );
2434                    }
2435                    else
2436                    {
2437                        checkUnknownElement( parser, strict );
2438                    }
2439                }
2440            }
2441            else if ( checkFieldWithDuplicate( parser, "prerequisites", null, parsed ) )
2442            {
2443                model.setPrerequisites( parsePrerequisites( parser, strict, source ) );
2444            }
2445            else if ( checkFieldWithDuplicate( parser, "modules", null, parsed ) )
2446            {
2447                java.util.List modules = new java.util.ArrayList/*<String>*/();
2448                model.setModules( modules );
2449                InputLocation _locations;
2450                _locations = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
2451                model.setLocation( "modules", _locations );
2452                while ( parser.nextTag() == XmlPullParser.START_TAG )
2453                {
2454                    if ( "module".equals( parser.getName() ) )
2455                    {
2456                        _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
2457                        _locations.setLocation( Integer.valueOf( modules.size() ), _location );
2458                        modules.add( interpolatedTrimmed( parser.nextText(), "modules" ) );
2459                    }
2460                    else
2461                    {
2462                        checkUnknownElement( parser, strict );
2463                    }
2464                }
2465            }
2466            else if ( checkFieldWithDuplicate( parser, "scm", null, parsed ) )
2467            {
2468                model.setScm( parseScm( parser, strict, source ) );
2469            }
2470            else if ( checkFieldWithDuplicate( parser, "issueManagement", null, parsed ) )
2471            {
2472                model.setIssueManagement( parseIssueManagement( parser, strict, source ) );
2473            }
2474            else if ( checkFieldWithDuplicate( parser, "ciManagement", null, parsed ) )
2475            {
2476                model.setCiManagement( parseCiManagement( parser, strict, source ) );
2477            }
2478            else if ( checkFieldWithDuplicate( parser, "distributionManagement", null, parsed ) )
2479            {
2480                model.setDistributionManagement( parseDistributionManagement( parser, strict, source ) );
2481            }
2482            else if ( checkFieldWithDuplicate( parser, "properties", null, parsed ) )
2483            {
2484                InputLocation _locations;
2485                _locations = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
2486                model.setLocation( "properties", _locations );
2487                while ( parser.nextTag() == XmlPullParser.START_TAG )
2488                {
2489                    String key = parser.getName();
2490                    _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
2491                    _locations.setLocation( key, _location );
2492                    String value = parser.nextText().trim();
2493                    model.addProperty( key, value );
2494                }
2495            }
2496            else if ( checkFieldWithDuplicate( parser, "dependencyManagement", null, parsed ) )
2497            {
2498                model.setDependencyManagement( parseDependencyManagement( parser, strict, source ) );
2499            }
2500            else if ( checkFieldWithDuplicate( parser, "dependencies", null, parsed ) )
2501            {
2502                java.util.List dependencies = new java.util.ArrayList/*<Dependency>*/();
2503                model.setDependencies( dependencies );
2504                while ( parser.nextTag() == XmlPullParser.START_TAG )
2505                {
2506                    if ( "dependency".equals( parser.getName() ) )
2507                    {
2508                        dependencies.add( parseDependency( parser, strict, source ) );
2509                    }
2510                    else
2511                    {
2512                        checkUnknownElement( parser, strict );
2513                    }
2514                }
2515            }
2516            else if ( checkFieldWithDuplicate( parser, "repositories", null, parsed ) )
2517            {
2518                java.util.List repositories = new java.util.ArrayList/*<Repository>*/();
2519                model.setRepositories( repositories );
2520                while ( parser.nextTag() == XmlPullParser.START_TAG )
2521                {
2522                    if ( "repository".equals( parser.getName() ) )
2523                    {
2524                        repositories.add( parseRepository( parser, strict, source ) );
2525                    }
2526                    else
2527                    {
2528                        checkUnknownElement( parser, strict );
2529                    }
2530                }
2531            }
2532            else if ( checkFieldWithDuplicate( parser, "pluginRepositories", null, parsed ) )
2533            {
2534                java.util.List pluginRepositories = new java.util.ArrayList/*<Repository>*/();
2535                model.setPluginRepositories( pluginRepositories );
2536                while ( parser.nextTag() == XmlPullParser.START_TAG )
2537                {
2538                    if ( "pluginRepository".equals( parser.getName() ) )
2539                    {
2540                        pluginRepositories.add( parseRepository( parser, strict, source ) );
2541                    }
2542                    else
2543                    {
2544                        checkUnknownElement( parser, strict );
2545                    }
2546                }
2547            }
2548            else if ( checkFieldWithDuplicate( parser, "build", null, parsed ) )
2549            {
2550                model.setBuild( parseBuild( parser, strict, source ) );
2551            }
2552            else if ( checkFieldWithDuplicate( parser, "reports", null, parsed ) )
2553            {
2554                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
2555                model.setLocation( "reports", _location );
2556                model.setReports( org.codehaus.plexus.util.xml.Xpp3DomBuilder.build( parser, true ) );
2557            }
2558            else if ( checkFieldWithDuplicate( parser, "reporting", null, parsed ) )
2559            {
2560                model.setReporting( parseReporting( parser, strict, source ) );
2561            }
2562            else if ( checkFieldWithDuplicate( parser, "profiles", null, parsed ) )
2563            {
2564                java.util.List profiles = new java.util.ArrayList/*<Profile>*/();
2565                model.setProfiles( profiles );
2566                while ( parser.nextTag() == XmlPullParser.START_TAG )
2567                {
2568                    if ( "profile".equals( parser.getName() ) )
2569                    {
2570                        profiles.add( parseProfile( parser, strict, source ) );
2571                    }
2572                    else
2573                    {
2574                        checkUnknownElement( parser, strict );
2575                    }
2576                }
2577            }
2578            else
2579            {
2580                checkUnknownElement( parser, strict );
2581            }
2582        }
2583        return model;
2584    } //-- Model parseModel( XmlPullParser, boolean, InputSource )
2585
2586    /**
2587     * Method parseModelBase.
2588     * 
2589     * @param parser
2590     * @param source
2591     * @param strict
2592     * @throws IOException
2593     * @throws XmlPullParserException
2594     * @return ModelBase
2595     */
2596    private ModelBase parseModelBase( XmlPullParser parser, boolean strict, InputSource source )
2597        throws IOException, XmlPullParserException
2598    {
2599        String tagName = parser.getName();
2600        ModelBase modelBase = new ModelBase();
2601        InputLocation _location;
2602        _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
2603        modelBase.setLocation( "", _location );
2604        for ( int i = parser.getAttributeCount() - 1; i >= 0; i-- )
2605        {
2606            String name = parser.getAttributeName( i );
2607            String value = parser.getAttributeValue( i );
2608
2609            if ( name.indexOf( ':' ) >= 0 )
2610            {
2611                // just ignore attributes with non-default namespace (for example: xmlns:xsi)
2612            }
2613            else
2614            {
2615                checkUnknownAttribute( parser, name, tagName, strict );
2616            }
2617        }
2618        java.util.Set parsed = new java.util.HashSet();
2619        while ( ( strict ? parser.nextTag() : nextTag( parser ) ) == XmlPullParser.START_TAG )
2620        {
2621            if ( checkFieldWithDuplicate( parser, "modules", null, parsed ) )
2622            {
2623                java.util.List modules = new java.util.ArrayList/*<String>*/();
2624                modelBase.setModules( modules );
2625                InputLocation _locations;
2626                _locations = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
2627                modelBase.setLocation( "modules", _locations );
2628                while ( parser.nextTag() == XmlPullParser.START_TAG )
2629                {
2630                    if ( "module".equals( parser.getName() ) )
2631                    {
2632                        _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
2633                        _locations.setLocation( Integer.valueOf( modules.size() ), _location );
2634                        modules.add( interpolatedTrimmed( parser.nextText(), "modules" ) );
2635                    }
2636                    else
2637                    {
2638                        checkUnknownElement( parser, strict );
2639                    }
2640                }
2641            }
2642            else if ( checkFieldWithDuplicate( parser, "distributionManagement", null, parsed ) )
2643            {
2644                modelBase.setDistributionManagement( parseDistributionManagement( parser, strict, source ) );
2645            }
2646            else if ( checkFieldWithDuplicate( parser, "properties", null, parsed ) )
2647            {
2648                InputLocation _locations;
2649                _locations = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
2650                modelBase.setLocation( "properties", _locations );
2651                while ( parser.nextTag() == XmlPullParser.START_TAG )
2652                {
2653                    String key = parser.getName();
2654                    _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
2655                    _locations.setLocation( key, _location );
2656                    String value = parser.nextText().trim();
2657                    modelBase.addProperty( key, value );
2658                }
2659            }
2660            else if ( checkFieldWithDuplicate( parser, "dependencyManagement", null, parsed ) )
2661            {
2662                modelBase.setDependencyManagement( parseDependencyManagement( parser, strict, source ) );
2663            }
2664            else if ( checkFieldWithDuplicate( parser, "dependencies", null, parsed ) )
2665            {
2666                java.util.List dependencies = new java.util.ArrayList/*<Dependency>*/();
2667                modelBase.setDependencies( dependencies );
2668                while ( parser.nextTag() == XmlPullParser.START_TAG )
2669                {
2670                    if ( "dependency".equals( parser.getName() ) )
2671                    {
2672                        dependencies.add( parseDependency( parser, strict, source ) );
2673                    }
2674                    else
2675                    {
2676                        checkUnknownElement( parser, strict );
2677                    }
2678                }
2679            }
2680            else if ( checkFieldWithDuplicate( parser, "repositories", null, parsed ) )
2681            {
2682                java.util.List repositories = new java.util.ArrayList/*<Repository>*/();
2683                modelBase.setRepositories( repositories );
2684                while ( parser.nextTag() == XmlPullParser.START_TAG )
2685                {
2686                    if ( "repository".equals( parser.getName() ) )
2687                    {
2688                        repositories.add( parseRepository( parser, strict, source ) );
2689                    }
2690                    else
2691                    {
2692                        checkUnknownElement( parser, strict );
2693                    }
2694                }
2695            }
2696            else if ( checkFieldWithDuplicate( parser, "pluginRepositories", null, parsed ) )
2697            {
2698                java.util.List pluginRepositories = new java.util.ArrayList/*<Repository>*/();
2699                modelBase.setPluginRepositories( pluginRepositories );
2700                while ( parser.nextTag() == XmlPullParser.START_TAG )
2701                {
2702                    if ( "pluginRepository".equals( parser.getName() ) )
2703                    {
2704                        pluginRepositories.add( parseRepository( parser, strict, source ) );
2705                    }
2706                    else
2707                    {
2708                        checkUnknownElement( parser, strict );
2709                    }
2710                }
2711            }
2712            else if ( checkFieldWithDuplicate( parser, "reports", null, parsed ) )
2713            {
2714                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
2715                modelBase.setLocation( "reports", _location );
2716                modelBase.setReports( org.codehaus.plexus.util.xml.Xpp3DomBuilder.build( parser, true ) );
2717            }
2718            else if ( checkFieldWithDuplicate( parser, "reporting", null, parsed ) )
2719            {
2720                modelBase.setReporting( parseReporting( parser, strict, source ) );
2721            }
2722            else
2723            {
2724                checkUnknownElement( parser, strict );
2725            }
2726        }
2727        return modelBase;
2728    } //-- ModelBase parseModelBase( XmlPullParser, boolean, InputSource )
2729
2730    /**
2731     * Method parseNotifier.
2732     * 
2733     * @param parser
2734     * @param source
2735     * @param strict
2736     * @throws IOException
2737     * @throws XmlPullParserException
2738     * @return Notifier
2739     */
2740    private Notifier parseNotifier( XmlPullParser parser, boolean strict, InputSource source )
2741        throws IOException, XmlPullParserException
2742    {
2743        String tagName = parser.getName();
2744        Notifier notifier = new Notifier();
2745        InputLocation _location;
2746        _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
2747        notifier.setLocation( "", _location );
2748        for ( int i = parser.getAttributeCount() - 1; i >= 0; i-- )
2749        {
2750            String name = parser.getAttributeName( i );
2751            String value = parser.getAttributeValue( i );
2752
2753            if ( name.indexOf( ':' ) >= 0 )
2754            {
2755                // just ignore attributes with non-default namespace (for example: xmlns:xsi)
2756            }
2757            else
2758            {
2759                checkUnknownAttribute( parser, name, tagName, strict );
2760            }
2761        }
2762        java.util.Set parsed = new java.util.HashSet();
2763        while ( ( strict ? parser.nextTag() : nextTag( parser ) ) == XmlPullParser.START_TAG )
2764        {
2765            if ( checkFieldWithDuplicate( parser, "type", null, parsed ) )
2766            {
2767                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
2768                notifier.setLocation( "type", _location );
2769                notifier.setType( interpolatedTrimmed( parser.nextText(), "type" ) );
2770            }
2771            else if ( checkFieldWithDuplicate( parser, "sendOnError", null, parsed ) )
2772            {
2773                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
2774                notifier.setLocation( "sendOnError", _location );
2775                notifier.setSendOnError( getBooleanValue( interpolatedTrimmed( parser.nextText(), "sendOnError" ), "sendOnError", parser, "true" ) );
2776            }
2777            else if ( checkFieldWithDuplicate( parser, "sendOnFailure", null, parsed ) )
2778            {
2779                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
2780                notifier.setLocation( "sendOnFailure", _location );
2781                notifier.setSendOnFailure( getBooleanValue( interpolatedTrimmed( parser.nextText(), "sendOnFailure" ), "sendOnFailure", parser, "true" ) );
2782            }
2783            else if ( checkFieldWithDuplicate( parser, "sendOnSuccess", null, parsed ) )
2784            {
2785                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
2786                notifier.setLocation( "sendOnSuccess", _location );
2787                notifier.setSendOnSuccess( getBooleanValue( interpolatedTrimmed( parser.nextText(), "sendOnSuccess" ), "sendOnSuccess", parser, "true" ) );
2788            }
2789            else if ( checkFieldWithDuplicate( parser, "sendOnWarning", null, parsed ) )
2790            {
2791                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
2792                notifier.setLocation( "sendOnWarning", _location );
2793                notifier.setSendOnWarning( getBooleanValue( interpolatedTrimmed( parser.nextText(), "sendOnWarning" ), "sendOnWarning", parser, "true" ) );
2794            }
2795            else if ( checkFieldWithDuplicate( parser, "address", null, parsed ) )
2796            {
2797                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
2798                notifier.setLocation( "address", _location );
2799                notifier.setAddress( interpolatedTrimmed( parser.nextText(), "address" ) );
2800            }
2801            else if ( checkFieldWithDuplicate( parser, "configuration", null, parsed ) )
2802            {
2803                InputLocation _locations;
2804                _locations = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
2805                notifier.setLocation( "configuration", _locations );
2806                while ( parser.nextTag() == XmlPullParser.START_TAG )
2807                {
2808                    String key = parser.getName();
2809                    _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
2810                    _locations.setLocation( key, _location );
2811                    String value = parser.nextText().trim();
2812                    notifier.addConfiguration( key, value );
2813                }
2814            }
2815            else
2816            {
2817                checkUnknownElement( parser, strict );
2818            }
2819        }
2820        return notifier;
2821    } //-- Notifier parseNotifier( XmlPullParser, boolean, InputSource )
2822
2823    /**
2824     * Method parseOrganization.
2825     * 
2826     * @param parser
2827     * @param source
2828     * @param strict
2829     * @throws IOException
2830     * @throws XmlPullParserException
2831     * @return Organization
2832     */
2833    private Organization parseOrganization( XmlPullParser parser, boolean strict, InputSource source )
2834        throws IOException, XmlPullParserException
2835    {
2836        String tagName = parser.getName();
2837        Organization organization = new Organization();
2838        InputLocation _location;
2839        _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
2840        organization.setLocation( "", _location );
2841        for ( int i = parser.getAttributeCount() - 1; i >= 0; i-- )
2842        {
2843            String name = parser.getAttributeName( i );
2844            String value = parser.getAttributeValue( i );
2845
2846            if ( name.indexOf( ':' ) >= 0 )
2847            {
2848                // just ignore attributes with non-default namespace (for example: xmlns:xsi)
2849            }
2850            else
2851            {
2852                checkUnknownAttribute( parser, name, tagName, strict );
2853            }
2854        }
2855        java.util.Set parsed = new java.util.HashSet();
2856        while ( ( strict ? parser.nextTag() : nextTag( parser ) ) == XmlPullParser.START_TAG )
2857        {
2858            if ( checkFieldWithDuplicate( parser, "name", null, parsed ) )
2859            {
2860                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
2861                organization.setLocation( "name", _location );
2862                organization.setName( interpolatedTrimmed( parser.nextText(), "name" ) );
2863            }
2864            else if ( checkFieldWithDuplicate( parser, "url", null, parsed ) )
2865            {
2866                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
2867                organization.setLocation( "url", _location );
2868                organization.setUrl( interpolatedTrimmed( parser.nextText(), "url" ) );
2869            }
2870            else
2871            {
2872                checkUnknownElement( parser, strict );
2873            }
2874        }
2875        return organization;
2876    } //-- Organization parseOrganization( XmlPullParser, boolean, InputSource )
2877
2878    /**
2879     * Method parseParent.
2880     * 
2881     * @param parser
2882     * @param source
2883     * @param strict
2884     * @throws IOException
2885     * @throws XmlPullParserException
2886     * @return Parent
2887     */
2888    private Parent parseParent( XmlPullParser parser, boolean strict, InputSource source )
2889        throws IOException, XmlPullParserException
2890    {
2891        String tagName = parser.getName();
2892        Parent parent = new Parent();
2893        InputLocation _location;
2894        _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
2895        parent.setLocation( "", _location );
2896        for ( int i = parser.getAttributeCount() - 1; i >= 0; i-- )
2897        {
2898            String name = parser.getAttributeName( i );
2899            String value = parser.getAttributeValue( i );
2900
2901            if ( name.indexOf( ':' ) >= 0 )
2902            {
2903                // just ignore attributes with non-default namespace (for example: xmlns:xsi)
2904            }
2905            else
2906            {
2907                checkUnknownAttribute( parser, name, tagName, strict );
2908            }
2909        }
2910        java.util.Set parsed = new java.util.HashSet();
2911        while ( ( strict ? parser.nextTag() : nextTag( parser ) ) == XmlPullParser.START_TAG )
2912        {
2913            if ( checkFieldWithDuplicate( parser, "groupId", null, parsed ) )
2914            {
2915                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
2916                parent.setLocation( "groupId", _location );
2917                parent.setGroupId( interpolatedTrimmed( parser.nextText(), "groupId" ) );
2918            }
2919            else if ( checkFieldWithDuplicate( parser, "artifactId", null, parsed ) )
2920            {
2921                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
2922                parent.setLocation( "artifactId", _location );
2923                parent.setArtifactId( interpolatedTrimmed( parser.nextText(), "artifactId" ) );
2924            }
2925            else if ( checkFieldWithDuplicate( parser, "version", null, parsed ) )
2926            {
2927                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
2928                parent.setLocation( "version", _location );
2929                parent.setVersion( interpolatedTrimmed( parser.nextText(), "version" ) );
2930            }
2931            else if ( checkFieldWithDuplicate( parser, "relativePath", null, parsed ) )
2932            {
2933                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
2934                parent.setLocation( "relativePath", _location );
2935                parent.setRelativePath( interpolatedTrimmed( parser.nextText(), "relativePath" ) );
2936            }
2937            else
2938            {
2939                checkUnknownElement( parser, strict );
2940            }
2941        }
2942        return parent;
2943    } //-- Parent parseParent( XmlPullParser, boolean, InputSource )
2944
2945    /**
2946     * Method parsePatternSet.
2947     * 
2948     * @param parser
2949     * @param source
2950     * @param strict
2951     * @throws IOException
2952     * @throws XmlPullParserException
2953     * @return PatternSet
2954     */
2955    private PatternSet parsePatternSet( XmlPullParser parser, boolean strict, InputSource source )
2956        throws IOException, XmlPullParserException
2957    {
2958        String tagName = parser.getName();
2959        PatternSet patternSet = new PatternSet();
2960        InputLocation _location;
2961        _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
2962        patternSet.setLocation( "", _location );
2963        for ( int i = parser.getAttributeCount() - 1; i >= 0; i-- )
2964        {
2965            String name = parser.getAttributeName( i );
2966            String value = parser.getAttributeValue( i );
2967
2968            if ( name.indexOf( ':' ) >= 0 )
2969            {
2970                // just ignore attributes with non-default namespace (for example: xmlns:xsi)
2971            }
2972            else
2973            {
2974                checkUnknownAttribute( parser, name, tagName, strict );
2975            }
2976        }
2977        java.util.Set parsed = new java.util.HashSet();
2978        while ( ( strict ? parser.nextTag() : nextTag( parser ) ) == XmlPullParser.START_TAG )
2979        {
2980            if ( checkFieldWithDuplicate( parser, "includes", null, parsed ) )
2981            {
2982                java.util.List includes = new java.util.ArrayList/*<String>*/();
2983                patternSet.setIncludes( includes );
2984                InputLocation _locations;
2985                _locations = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
2986                patternSet.setLocation( "includes", _locations );
2987                while ( parser.nextTag() == XmlPullParser.START_TAG )
2988                {
2989                    if ( "include".equals( parser.getName() ) )
2990                    {
2991                        _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
2992                        _locations.setLocation( Integer.valueOf( includes.size() ), _location );
2993                        includes.add( interpolatedTrimmed( parser.nextText(), "includes" ) );
2994                    }
2995                    else
2996                    {
2997                        checkUnknownElement( parser, strict );
2998                    }
2999                }
3000            }
3001            else if ( checkFieldWithDuplicate( parser, "excludes", null, parsed ) )
3002            {
3003                java.util.List excludes = new java.util.ArrayList/*<String>*/();
3004                patternSet.setExcludes( excludes );
3005                InputLocation _locations;
3006                _locations = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
3007                patternSet.setLocation( "excludes", _locations );
3008                while ( parser.nextTag() == XmlPullParser.START_TAG )
3009                {
3010                    if ( "exclude".equals( parser.getName() ) )
3011                    {
3012                        _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
3013                        _locations.setLocation( Integer.valueOf( excludes.size() ), _location );
3014                        excludes.add( interpolatedTrimmed( parser.nextText(), "excludes" ) );
3015                    }
3016                    else
3017                    {
3018                        checkUnknownElement( parser, strict );
3019                    }
3020                }
3021            }
3022            else
3023            {
3024                checkUnknownElement( parser, strict );
3025            }
3026        }
3027        return patternSet;
3028    } //-- PatternSet parsePatternSet( XmlPullParser, boolean, InputSource )
3029
3030    /**
3031     * Method parsePlugin.
3032     * 
3033     * @param parser
3034     * @param source
3035     * @param strict
3036     * @throws IOException
3037     * @throws XmlPullParserException
3038     * @return Plugin
3039     */
3040    private Plugin parsePlugin( XmlPullParser parser, boolean strict, InputSource source )
3041        throws IOException, XmlPullParserException
3042    {
3043        String tagName = parser.getName();
3044        Plugin plugin = new Plugin();
3045        InputLocation _location;
3046        _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
3047        plugin.setLocation( "", _location );
3048        for ( int i = parser.getAttributeCount() - 1; i >= 0; i-- )
3049        {
3050            String name = parser.getAttributeName( i );
3051            String value = parser.getAttributeValue( i );
3052
3053            if ( name.indexOf( ':' ) >= 0 )
3054            {
3055                // just ignore attributes with non-default namespace (for example: xmlns:xsi)
3056            }
3057            else
3058            {
3059                checkUnknownAttribute( parser, name, tagName, strict );
3060            }
3061        }
3062        java.util.Set parsed = new java.util.HashSet();
3063        while ( ( strict ? parser.nextTag() : nextTag( parser ) ) == XmlPullParser.START_TAG )
3064        {
3065            if ( checkFieldWithDuplicate( parser, "groupId", null, parsed ) )
3066            {
3067                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
3068                plugin.setLocation( "groupId", _location );
3069                plugin.setGroupId( interpolatedTrimmed( parser.nextText(), "groupId" ) );
3070            }
3071            else if ( checkFieldWithDuplicate( parser, "artifactId", null, parsed ) )
3072            {
3073                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
3074                plugin.setLocation( "artifactId", _location );
3075                plugin.setArtifactId( interpolatedTrimmed( parser.nextText(), "artifactId" ) );
3076            }
3077            else if ( checkFieldWithDuplicate( parser, "version", null, parsed ) )
3078            {
3079                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
3080                plugin.setLocation( "version", _location );
3081                plugin.setVersion( interpolatedTrimmed( parser.nextText(), "version" ) );
3082            }
3083            else if ( checkFieldWithDuplicate( parser, "extensions", null, parsed ) )
3084            {
3085                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
3086                plugin.setLocation( "extensions", _location );
3087                plugin.setExtensions( interpolatedTrimmed( parser.nextText(), "extensions" ) );
3088            }
3089            else if ( checkFieldWithDuplicate( parser, "executions", null, parsed ) )
3090            {
3091                java.util.List executions = new java.util.ArrayList/*<PluginExecution>*/();
3092                plugin.setExecutions( executions );
3093                while ( parser.nextTag() == XmlPullParser.START_TAG )
3094                {
3095                    if ( "execution".equals( parser.getName() ) )
3096                    {
3097                        executions.add( parsePluginExecution( parser, strict, source ) );
3098                    }
3099                    else
3100                    {
3101                        checkUnknownElement( parser, strict );
3102                    }
3103                }
3104            }
3105            else if ( checkFieldWithDuplicate( parser, "dependencies", null, parsed ) )
3106            {
3107                java.util.List dependencies = new java.util.ArrayList/*<Dependency>*/();
3108                plugin.setDependencies( dependencies );
3109                while ( parser.nextTag() == XmlPullParser.START_TAG )
3110                {
3111                    if ( "dependency".equals( parser.getName() ) )
3112                    {
3113                        dependencies.add( parseDependency( parser, strict, source ) );
3114                    }
3115                    else
3116                    {
3117                        checkUnknownElement( parser, strict );
3118                    }
3119                }
3120            }
3121            else if ( checkFieldWithDuplicate( parser, "goals", null, parsed ) )
3122            {
3123                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
3124                plugin.setLocation( "goals", _location );
3125                plugin.setGoals( org.codehaus.plexus.util.xml.Xpp3DomBuilder.build( parser, true ) );
3126            }
3127            else if ( checkFieldWithDuplicate( parser, "inherited", null, parsed ) )
3128            {
3129                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
3130                plugin.setLocation( "inherited", _location );
3131                plugin.setInherited( interpolatedTrimmed( parser.nextText(), "inherited" ) );
3132            }
3133            else if ( checkFieldWithDuplicate( parser, "configuration", null, parsed ) )
3134            {
3135                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
3136                plugin.setLocation( "configuration", _location );
3137                plugin.setConfiguration( org.codehaus.plexus.util.xml.Xpp3DomBuilder.build( parser, true ) );
3138            }
3139            else
3140            {
3141                checkUnknownElement( parser, strict );
3142            }
3143        }
3144        return plugin;
3145    } //-- Plugin parsePlugin( XmlPullParser, boolean, InputSource )
3146
3147    /**
3148     * Method parsePluginConfiguration.
3149     * 
3150     * @param parser
3151     * @param source
3152     * @param strict
3153     * @throws IOException
3154     * @throws XmlPullParserException
3155     * @return PluginConfiguration
3156     */
3157    private PluginConfiguration parsePluginConfiguration( XmlPullParser parser, boolean strict, InputSource source )
3158        throws IOException, XmlPullParserException
3159    {
3160        String tagName = parser.getName();
3161        PluginConfiguration pluginConfiguration = new PluginConfiguration();
3162        InputLocation _location;
3163        _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
3164        pluginConfiguration.setLocation( "", _location );
3165        for ( int i = parser.getAttributeCount() - 1; i >= 0; i-- )
3166        {
3167            String name = parser.getAttributeName( i );
3168            String value = parser.getAttributeValue( i );
3169
3170            if ( name.indexOf( ':' ) >= 0 )
3171            {
3172                // just ignore attributes with non-default namespace (for example: xmlns:xsi)
3173            }
3174            else
3175            {
3176                checkUnknownAttribute( parser, name, tagName, strict );
3177            }
3178        }
3179        java.util.Set parsed = new java.util.HashSet();
3180        while ( ( strict ? parser.nextTag() : nextTag( parser ) ) == XmlPullParser.START_TAG )
3181        {
3182            if ( checkFieldWithDuplicate( parser, "pluginManagement", null, parsed ) )
3183            {
3184                pluginConfiguration.setPluginManagement( parsePluginManagement( parser, strict, source ) );
3185            }
3186            else if ( checkFieldWithDuplicate( parser, "plugins", null, parsed ) )
3187            {
3188                java.util.List plugins = new java.util.ArrayList/*<Plugin>*/();
3189                pluginConfiguration.setPlugins( plugins );
3190                while ( parser.nextTag() == XmlPullParser.START_TAG )
3191                {
3192                    if ( "plugin".equals( parser.getName() ) )
3193                    {
3194                        plugins.add( parsePlugin( parser, strict, source ) );
3195                    }
3196                    else
3197                    {
3198                        checkUnknownElement( parser, strict );
3199                    }
3200                }
3201            }
3202            else
3203            {
3204                checkUnknownElement( parser, strict );
3205            }
3206        }
3207        return pluginConfiguration;
3208    } //-- PluginConfiguration parsePluginConfiguration( XmlPullParser, boolean, InputSource )
3209
3210    /**
3211     * Method parsePluginContainer.
3212     * 
3213     * @param parser
3214     * @param source
3215     * @param strict
3216     * @throws IOException
3217     * @throws XmlPullParserException
3218     * @return PluginContainer
3219     */
3220    private PluginContainer parsePluginContainer( XmlPullParser parser, boolean strict, InputSource source )
3221        throws IOException, XmlPullParserException
3222    {
3223        String tagName = parser.getName();
3224        PluginContainer pluginContainer = new PluginContainer();
3225        InputLocation _location;
3226        _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
3227        pluginContainer.setLocation( "", _location );
3228        for ( int i = parser.getAttributeCount() - 1; i >= 0; i-- )
3229        {
3230            String name = parser.getAttributeName( i );
3231            String value = parser.getAttributeValue( i );
3232
3233            if ( name.indexOf( ':' ) >= 0 )
3234            {
3235                // just ignore attributes with non-default namespace (for example: xmlns:xsi)
3236            }
3237            else
3238            {
3239                checkUnknownAttribute( parser, name, tagName, strict );
3240            }
3241        }
3242        java.util.Set parsed = new java.util.HashSet();
3243        while ( ( strict ? parser.nextTag() : nextTag( parser ) ) == XmlPullParser.START_TAG )
3244        {
3245            if ( checkFieldWithDuplicate( parser, "plugins", null, parsed ) )
3246            {
3247                java.util.List plugins = new java.util.ArrayList/*<Plugin>*/();
3248                pluginContainer.setPlugins( plugins );
3249                while ( parser.nextTag() == XmlPullParser.START_TAG )
3250                {
3251                    if ( "plugin".equals( parser.getName() ) )
3252                    {
3253                        plugins.add( parsePlugin( parser, strict, source ) );
3254                    }
3255                    else
3256                    {
3257                        checkUnknownElement( parser, strict );
3258                    }
3259                }
3260            }
3261            else
3262            {
3263                checkUnknownElement( parser, strict );
3264            }
3265        }
3266        return pluginContainer;
3267    } //-- PluginContainer parsePluginContainer( XmlPullParser, boolean, InputSource )
3268
3269    /**
3270     * Method parsePluginExecution.
3271     * 
3272     * @param parser
3273     * @param source
3274     * @param strict
3275     * @throws IOException
3276     * @throws XmlPullParserException
3277     * @return PluginExecution
3278     */
3279    private PluginExecution parsePluginExecution( XmlPullParser parser, boolean strict, InputSource source )
3280        throws IOException, XmlPullParserException
3281    {
3282        String tagName = parser.getName();
3283        PluginExecution pluginExecution = new PluginExecution();
3284        InputLocation _location;
3285        _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
3286        pluginExecution.setLocation( "", _location );
3287        for ( int i = parser.getAttributeCount() - 1; i >= 0; i-- )
3288        {
3289            String name = parser.getAttributeName( i );
3290            String value = parser.getAttributeValue( i );
3291
3292            if ( name.indexOf( ':' ) >= 0 )
3293            {
3294                // just ignore attributes with non-default namespace (for example: xmlns:xsi)
3295            }
3296            else
3297            {
3298                checkUnknownAttribute( parser, name, tagName, strict );
3299            }
3300        }
3301        java.util.Set parsed = new java.util.HashSet();
3302        while ( ( strict ? parser.nextTag() : nextTag( parser ) ) == XmlPullParser.START_TAG )
3303        {
3304            if ( checkFieldWithDuplicate( parser, "id", null, parsed ) )
3305            {
3306                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
3307                pluginExecution.setLocation( "id", _location );
3308                pluginExecution.setId( interpolatedTrimmed( parser.nextText(), "id" ) );
3309            }
3310            else if ( checkFieldWithDuplicate( parser, "phase", null, parsed ) )
3311            {
3312                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
3313                pluginExecution.setLocation( "phase", _location );
3314                pluginExecution.setPhase( interpolatedTrimmed( parser.nextText(), "phase" ) );
3315            }
3316            else if ( checkFieldWithDuplicate( parser, "goals", null, parsed ) )
3317            {
3318                java.util.List goals = new java.util.ArrayList/*<String>*/();
3319                pluginExecution.setGoals( goals );
3320                InputLocation _locations;
3321                _locations = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
3322                pluginExecution.setLocation( "goals", _locations );
3323                while ( parser.nextTag() == XmlPullParser.START_TAG )
3324                {
3325                    if ( "goal".equals( parser.getName() ) )
3326                    {
3327                        _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
3328                        _locations.setLocation( Integer.valueOf( goals.size() ), _location );
3329                        goals.add( interpolatedTrimmed( parser.nextText(), "goals" ) );
3330                    }
3331                    else
3332                    {
3333                        checkUnknownElement( parser, strict );
3334                    }
3335                }
3336            }
3337            else if ( checkFieldWithDuplicate( parser, "inherited", null, parsed ) )
3338            {
3339                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
3340                pluginExecution.setLocation( "inherited", _location );
3341                pluginExecution.setInherited( interpolatedTrimmed( parser.nextText(), "inherited" ) );
3342            }
3343            else if ( checkFieldWithDuplicate( parser, "configuration", null, parsed ) )
3344            {
3345                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
3346                pluginExecution.setLocation( "configuration", _location );
3347                pluginExecution.setConfiguration( org.codehaus.plexus.util.xml.Xpp3DomBuilder.build( parser, true ) );
3348            }
3349            else
3350            {
3351                checkUnknownElement( parser, strict );
3352            }
3353        }
3354        return pluginExecution;
3355    } //-- PluginExecution parsePluginExecution( XmlPullParser, boolean, InputSource )
3356
3357    /**
3358     * Method parsePluginManagement.
3359     * 
3360     * @param parser
3361     * @param source
3362     * @param strict
3363     * @throws IOException
3364     * @throws XmlPullParserException
3365     * @return PluginManagement
3366     */
3367    private PluginManagement parsePluginManagement( XmlPullParser parser, boolean strict, InputSource source )
3368        throws IOException, XmlPullParserException
3369    {
3370        String tagName = parser.getName();
3371        PluginManagement pluginManagement = new PluginManagement();
3372        InputLocation _location;
3373        _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
3374        pluginManagement.setLocation( "", _location );
3375        for ( int i = parser.getAttributeCount() - 1; i >= 0; i-- )
3376        {
3377            String name = parser.getAttributeName( i );
3378            String value = parser.getAttributeValue( i );
3379
3380            if ( name.indexOf( ':' ) >= 0 )
3381            {
3382                // just ignore attributes with non-default namespace (for example: xmlns:xsi)
3383            }
3384            else
3385            {
3386                checkUnknownAttribute( parser, name, tagName, strict );
3387            }
3388        }
3389        java.util.Set parsed = new java.util.HashSet();
3390        while ( ( strict ? parser.nextTag() : nextTag( parser ) ) == XmlPullParser.START_TAG )
3391        {
3392            if ( checkFieldWithDuplicate( parser, "plugins", null, parsed ) )
3393            {
3394                java.util.List plugins = new java.util.ArrayList/*<Plugin>*/();
3395                pluginManagement.setPlugins( plugins );
3396                while ( parser.nextTag() == XmlPullParser.START_TAG )
3397                {
3398                    if ( "plugin".equals( parser.getName() ) )
3399                    {
3400                        plugins.add( parsePlugin( parser, strict, source ) );
3401                    }
3402                    else
3403                    {
3404                        checkUnknownElement( parser, strict );
3405                    }
3406                }
3407            }
3408            else
3409            {
3410                checkUnknownElement( parser, strict );
3411            }
3412        }
3413        return pluginManagement;
3414    } //-- PluginManagement parsePluginManagement( XmlPullParser, boolean, InputSource )
3415
3416    /**
3417     * Method parsePrerequisites.
3418     * 
3419     * @param parser
3420     * @param source
3421     * @param strict
3422     * @throws IOException
3423     * @throws XmlPullParserException
3424     * @return Prerequisites
3425     */
3426    private Prerequisites parsePrerequisites( XmlPullParser parser, boolean strict, InputSource source )
3427        throws IOException, XmlPullParserException
3428    {
3429        String tagName = parser.getName();
3430        Prerequisites prerequisites = new Prerequisites();
3431        InputLocation _location;
3432        _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
3433        prerequisites.setLocation( "", _location );
3434        for ( int i = parser.getAttributeCount() - 1; i >= 0; i-- )
3435        {
3436            String name = parser.getAttributeName( i );
3437            String value = parser.getAttributeValue( i );
3438
3439            if ( name.indexOf( ':' ) >= 0 )
3440            {
3441                // just ignore attributes with non-default namespace (for example: xmlns:xsi)
3442            }
3443            else
3444            {
3445                checkUnknownAttribute( parser, name, tagName, strict );
3446            }
3447        }
3448        java.util.Set parsed = new java.util.HashSet();
3449        while ( ( strict ? parser.nextTag() : nextTag( parser ) ) == XmlPullParser.START_TAG )
3450        {
3451            if ( checkFieldWithDuplicate( parser, "maven", null, parsed ) )
3452            {
3453                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
3454                prerequisites.setLocation( "maven", _location );
3455                prerequisites.setMaven( interpolatedTrimmed( parser.nextText(), "maven" ) );
3456            }
3457            else
3458            {
3459                checkUnknownElement( parser, strict );
3460            }
3461        }
3462        return prerequisites;
3463    } //-- Prerequisites parsePrerequisites( XmlPullParser, boolean, InputSource )
3464
3465    /**
3466     * Method parseProfile.
3467     * 
3468     * @param parser
3469     * @param source
3470     * @param strict
3471     * @throws IOException
3472     * @throws XmlPullParserException
3473     * @return Profile
3474     */
3475    private Profile parseProfile( XmlPullParser parser, boolean strict, InputSource source )
3476        throws IOException, XmlPullParserException
3477    {
3478        String tagName = parser.getName();
3479        Profile profile = new Profile();
3480        InputLocation _location;
3481        _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
3482        profile.setLocation( "", _location );
3483        for ( int i = parser.getAttributeCount() - 1; i >= 0; i-- )
3484        {
3485            String name = parser.getAttributeName( i );
3486            String value = parser.getAttributeValue( i );
3487
3488            if ( name.indexOf( ':' ) >= 0 )
3489            {
3490                // just ignore attributes with non-default namespace (for example: xmlns:xsi)
3491            }
3492            else
3493            {
3494                checkUnknownAttribute( parser, name, tagName, strict );
3495            }
3496        }
3497        java.util.Set parsed = new java.util.HashSet();
3498        while ( ( strict ? parser.nextTag() : nextTag( parser ) ) == XmlPullParser.START_TAG )
3499        {
3500            if ( checkFieldWithDuplicate( parser, "id", null, parsed ) )
3501            {
3502                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
3503                profile.setLocation( "id", _location );
3504                profile.setId( interpolatedTrimmed( parser.nextText(), "id" ) );
3505            }
3506            else if ( checkFieldWithDuplicate( parser, "activation", null, parsed ) )
3507            {
3508                profile.setActivation( parseActivation( parser, strict, source ) );
3509            }
3510            else if ( checkFieldWithDuplicate( parser, "build", null, parsed ) )
3511            {
3512                profile.setBuild( parseBuildBase( parser, strict, source ) );
3513            }
3514            else if ( checkFieldWithDuplicate( parser, "modules", null, parsed ) )
3515            {
3516                java.util.List modules = new java.util.ArrayList/*<String>*/();
3517                profile.setModules( modules );
3518                InputLocation _locations;
3519                _locations = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
3520                profile.setLocation( "modules", _locations );
3521                while ( parser.nextTag() == XmlPullParser.START_TAG )
3522                {
3523                    if ( "module".equals( parser.getName() ) )
3524                    {
3525                        _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
3526                        _locations.setLocation( Integer.valueOf( modules.size() ), _location );
3527                        modules.add( interpolatedTrimmed( parser.nextText(), "modules" ) );
3528                    }
3529                    else
3530                    {
3531                        checkUnknownElement( parser, strict );
3532                    }
3533                }
3534            }
3535            else if ( checkFieldWithDuplicate( parser, "distributionManagement", null, parsed ) )
3536            {
3537                profile.setDistributionManagement( parseDistributionManagement( parser, strict, source ) );
3538            }
3539            else if ( checkFieldWithDuplicate( parser, "properties", null, parsed ) )
3540            {
3541                InputLocation _locations;
3542                _locations = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
3543                profile.setLocation( "properties", _locations );
3544                while ( parser.nextTag() == XmlPullParser.START_TAG )
3545                {
3546                    String key = parser.getName();
3547                    _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
3548                    _locations.setLocation( key, _location );
3549                    String value = parser.nextText().trim();
3550                    profile.addProperty( key, value );
3551                }
3552            }
3553            else if ( checkFieldWithDuplicate( parser, "dependencyManagement", null, parsed ) )
3554            {
3555                profile.setDependencyManagement( parseDependencyManagement( parser, strict, source ) );
3556            }
3557            else if ( checkFieldWithDuplicate( parser, "dependencies", null, parsed ) )
3558            {
3559                java.util.List dependencies = new java.util.ArrayList/*<Dependency>*/();
3560                profile.setDependencies( dependencies );
3561                while ( parser.nextTag() == XmlPullParser.START_TAG )
3562                {
3563                    if ( "dependency".equals( parser.getName() ) )
3564                    {
3565                        dependencies.add( parseDependency( parser, strict, source ) );
3566                    }
3567                    else
3568                    {
3569                        checkUnknownElement( parser, strict );
3570                    }
3571                }
3572            }
3573            else if ( checkFieldWithDuplicate( parser, "repositories", null, parsed ) )
3574            {
3575                java.util.List repositories = new java.util.ArrayList/*<Repository>*/();
3576                profile.setRepositories( repositories );
3577                while ( parser.nextTag() == XmlPullParser.START_TAG )
3578                {
3579                    if ( "repository".equals( parser.getName() ) )
3580                    {
3581                        repositories.add( parseRepository( parser, strict, source ) );
3582                    }
3583                    else
3584                    {
3585                        checkUnknownElement( parser, strict );
3586                    }
3587                }
3588            }
3589            else if ( checkFieldWithDuplicate( parser, "pluginRepositories", null, parsed ) )
3590            {
3591                java.util.List pluginRepositories = new java.util.ArrayList/*<Repository>*/();
3592                profile.setPluginRepositories( pluginRepositories );
3593                while ( parser.nextTag() == XmlPullParser.START_TAG )
3594                {
3595                    if ( "pluginRepository".equals( parser.getName() ) )
3596                    {
3597                        pluginRepositories.add( parseRepository( parser, strict, source ) );
3598                    }
3599                    else
3600                    {
3601                        checkUnknownElement( parser, strict );
3602                    }
3603                }
3604            }
3605            else if ( checkFieldWithDuplicate( parser, "reports", null, parsed ) )
3606            {
3607                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
3608                profile.setLocation( "reports", _location );
3609                profile.setReports( org.codehaus.plexus.util.xml.Xpp3DomBuilder.build( parser, true ) );
3610            }
3611            else if ( checkFieldWithDuplicate( parser, "reporting", null, parsed ) )
3612            {
3613                profile.setReporting( parseReporting( parser, strict, source ) );
3614            }
3615            else
3616            {
3617                checkUnknownElement( parser, strict );
3618            }
3619        }
3620        return profile;
3621    } //-- Profile parseProfile( XmlPullParser, boolean, InputSource )
3622
3623    /**
3624     * Method parseRelocation.
3625     * 
3626     * @param parser
3627     * @param source
3628     * @param strict
3629     * @throws IOException
3630     * @throws XmlPullParserException
3631     * @return Relocation
3632     */
3633    private Relocation parseRelocation( XmlPullParser parser, boolean strict, InputSource source )
3634        throws IOException, XmlPullParserException
3635    {
3636        String tagName = parser.getName();
3637        Relocation relocation = new Relocation();
3638        InputLocation _location;
3639        _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
3640        relocation.setLocation( "", _location );
3641        for ( int i = parser.getAttributeCount() - 1; i >= 0; i-- )
3642        {
3643            String name = parser.getAttributeName( i );
3644            String value = parser.getAttributeValue( i );
3645
3646            if ( name.indexOf( ':' ) >= 0 )
3647            {
3648                // just ignore attributes with non-default namespace (for example: xmlns:xsi)
3649            }
3650            else
3651            {
3652                checkUnknownAttribute( parser, name, tagName, strict );
3653            }
3654        }
3655        java.util.Set parsed = new java.util.HashSet();
3656        while ( ( strict ? parser.nextTag() : nextTag( parser ) ) == XmlPullParser.START_TAG )
3657        {
3658            if ( checkFieldWithDuplicate( parser, "groupId", null, parsed ) )
3659            {
3660                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
3661                relocation.setLocation( "groupId", _location );
3662                relocation.setGroupId( interpolatedTrimmed( parser.nextText(), "groupId" ) );
3663            }
3664            else if ( checkFieldWithDuplicate( parser, "artifactId", null, parsed ) )
3665            {
3666                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
3667                relocation.setLocation( "artifactId", _location );
3668                relocation.setArtifactId( interpolatedTrimmed( parser.nextText(), "artifactId" ) );
3669            }
3670            else if ( checkFieldWithDuplicate( parser, "version", null, parsed ) )
3671            {
3672                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
3673                relocation.setLocation( "version", _location );
3674                relocation.setVersion( interpolatedTrimmed( parser.nextText(), "version" ) );
3675            }
3676            else if ( checkFieldWithDuplicate( parser, "message", null, parsed ) )
3677            {
3678                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
3679                relocation.setLocation( "message", _location );
3680                relocation.setMessage( interpolatedTrimmed( parser.nextText(), "message" ) );
3681            }
3682            else
3683            {
3684                checkUnknownElement( parser, strict );
3685            }
3686        }
3687        return relocation;
3688    } //-- Relocation parseRelocation( XmlPullParser, boolean, InputSource )
3689
3690    /**
3691     * Method parseReportPlugin.
3692     * 
3693     * @param parser
3694     * @param source
3695     * @param strict
3696     * @throws IOException
3697     * @throws XmlPullParserException
3698     * @return ReportPlugin
3699     */
3700    private ReportPlugin parseReportPlugin( XmlPullParser parser, boolean strict, InputSource source )
3701        throws IOException, XmlPullParserException
3702    {
3703        String tagName = parser.getName();
3704        ReportPlugin reportPlugin = new ReportPlugin();
3705        InputLocation _location;
3706        _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
3707        reportPlugin.setLocation( "", _location );
3708        for ( int i = parser.getAttributeCount() - 1; i >= 0; i-- )
3709        {
3710            String name = parser.getAttributeName( i );
3711            String value = parser.getAttributeValue( i );
3712
3713            if ( name.indexOf( ':' ) >= 0 )
3714            {
3715                // just ignore attributes with non-default namespace (for example: xmlns:xsi)
3716            }
3717            else
3718            {
3719                checkUnknownAttribute( parser, name, tagName, strict );
3720            }
3721        }
3722        java.util.Set parsed = new java.util.HashSet();
3723        while ( ( strict ? parser.nextTag() : nextTag( parser ) ) == XmlPullParser.START_TAG )
3724        {
3725            if ( checkFieldWithDuplicate( parser, "groupId", null, parsed ) )
3726            {
3727                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
3728                reportPlugin.setLocation( "groupId", _location );
3729                reportPlugin.setGroupId( interpolatedTrimmed( parser.nextText(), "groupId" ) );
3730            }
3731            else if ( checkFieldWithDuplicate( parser, "artifactId", null, parsed ) )
3732            {
3733                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
3734                reportPlugin.setLocation( "artifactId", _location );
3735                reportPlugin.setArtifactId( interpolatedTrimmed( parser.nextText(), "artifactId" ) );
3736            }
3737            else if ( checkFieldWithDuplicate( parser, "version", null, parsed ) )
3738            {
3739                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
3740                reportPlugin.setLocation( "version", _location );
3741                reportPlugin.setVersion( interpolatedTrimmed( parser.nextText(), "version" ) );
3742            }
3743            else if ( checkFieldWithDuplicate( parser, "reportSets", null, parsed ) )
3744            {
3745                java.util.List reportSets = new java.util.ArrayList/*<ReportSet>*/();
3746                reportPlugin.setReportSets( reportSets );
3747                while ( parser.nextTag() == XmlPullParser.START_TAG )
3748                {
3749                    if ( "reportSet".equals( parser.getName() ) )
3750                    {
3751                        reportSets.add( parseReportSet( parser, strict, source ) );
3752                    }
3753                    else
3754                    {
3755                        checkUnknownElement( parser, strict );
3756                    }
3757                }
3758            }
3759            else if ( checkFieldWithDuplicate( parser, "inherited", null, parsed ) )
3760            {
3761                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
3762                reportPlugin.setLocation( "inherited", _location );
3763                reportPlugin.setInherited( interpolatedTrimmed( parser.nextText(), "inherited" ) );
3764            }
3765            else if ( checkFieldWithDuplicate( parser, "configuration", null, parsed ) )
3766            {
3767                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
3768                reportPlugin.setLocation( "configuration", _location );
3769                reportPlugin.setConfiguration( org.codehaus.plexus.util.xml.Xpp3DomBuilder.build( parser, true ) );
3770            }
3771            else
3772            {
3773                checkUnknownElement( parser, strict );
3774            }
3775        }
3776        return reportPlugin;
3777    } //-- ReportPlugin parseReportPlugin( XmlPullParser, boolean, InputSource )
3778
3779    /**
3780     * Method parseReportSet.
3781     * 
3782     * @param parser
3783     * @param source
3784     * @param strict
3785     * @throws IOException
3786     * @throws XmlPullParserException
3787     * @return ReportSet
3788     */
3789    private ReportSet parseReportSet( XmlPullParser parser, boolean strict, InputSource source )
3790        throws IOException, XmlPullParserException
3791    {
3792        String tagName = parser.getName();
3793        ReportSet reportSet = new ReportSet();
3794        InputLocation _location;
3795        _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
3796        reportSet.setLocation( "", _location );
3797        for ( int i = parser.getAttributeCount() - 1; i >= 0; i-- )
3798        {
3799            String name = parser.getAttributeName( i );
3800            String value = parser.getAttributeValue( i );
3801
3802            if ( name.indexOf( ':' ) >= 0 )
3803            {
3804                // just ignore attributes with non-default namespace (for example: xmlns:xsi)
3805            }
3806            else
3807            {
3808                checkUnknownAttribute( parser, name, tagName, strict );
3809            }
3810        }
3811        java.util.Set parsed = new java.util.HashSet();
3812        while ( ( strict ? parser.nextTag() : nextTag( parser ) ) == XmlPullParser.START_TAG )
3813        {
3814            if ( checkFieldWithDuplicate( parser, "id", null, parsed ) )
3815            {
3816                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
3817                reportSet.setLocation( "id", _location );
3818                reportSet.setId( interpolatedTrimmed( parser.nextText(), "id" ) );
3819            }
3820            else if ( checkFieldWithDuplicate( parser, "reports", null, parsed ) )
3821            {
3822                java.util.List reports = new java.util.ArrayList/*<String>*/();
3823                reportSet.setReports( reports );
3824                InputLocation _locations;
3825                _locations = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
3826                reportSet.setLocation( "reports", _locations );
3827                while ( parser.nextTag() == XmlPullParser.START_TAG )
3828                {
3829                    if ( "report".equals( parser.getName() ) )
3830                    {
3831                        _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
3832                        _locations.setLocation( Integer.valueOf( reports.size() ), _location );
3833                        reports.add( interpolatedTrimmed( parser.nextText(), "reports" ) );
3834                    }
3835                    else
3836                    {
3837                        checkUnknownElement( parser, strict );
3838                    }
3839                }
3840            }
3841            else if ( checkFieldWithDuplicate( parser, "inherited", null, parsed ) )
3842            {
3843                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
3844                reportSet.setLocation( "inherited", _location );
3845                reportSet.setInherited( interpolatedTrimmed( parser.nextText(), "inherited" ) );
3846            }
3847            else if ( checkFieldWithDuplicate( parser, "configuration", null, parsed ) )
3848            {
3849                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
3850                reportSet.setLocation( "configuration", _location );
3851                reportSet.setConfiguration( org.codehaus.plexus.util.xml.Xpp3DomBuilder.build( parser, true ) );
3852            }
3853            else
3854            {
3855                checkUnknownElement( parser, strict );
3856            }
3857        }
3858        return reportSet;
3859    } //-- ReportSet parseReportSet( XmlPullParser, boolean, InputSource )
3860
3861    /**
3862     * Method parseReporting.
3863     * 
3864     * @param parser
3865     * @param source
3866     * @param strict
3867     * @throws IOException
3868     * @throws XmlPullParserException
3869     * @return Reporting
3870     */
3871    private Reporting parseReporting( XmlPullParser parser, boolean strict, InputSource source )
3872        throws IOException, XmlPullParserException
3873    {
3874        String tagName = parser.getName();
3875        Reporting reporting = new Reporting();
3876        InputLocation _location;
3877        _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
3878        reporting.setLocation( "", _location );
3879        for ( int i = parser.getAttributeCount() - 1; i >= 0; i-- )
3880        {
3881            String name = parser.getAttributeName( i );
3882            String value = parser.getAttributeValue( i );
3883
3884            if ( name.indexOf( ':' ) >= 0 )
3885            {
3886                // just ignore attributes with non-default namespace (for example: xmlns:xsi)
3887            }
3888            else
3889            {
3890                checkUnknownAttribute( parser, name, tagName, strict );
3891            }
3892        }
3893        java.util.Set parsed = new java.util.HashSet();
3894        while ( ( strict ? parser.nextTag() : nextTag( parser ) ) == XmlPullParser.START_TAG )
3895        {
3896            if ( checkFieldWithDuplicate( parser, "excludeDefaults", null, parsed ) )
3897            {
3898                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
3899                reporting.setLocation( "excludeDefaults", _location );
3900                reporting.setExcludeDefaults( interpolatedTrimmed( parser.nextText(), "excludeDefaults" ) );
3901            }
3902            else if ( checkFieldWithDuplicate( parser, "outputDirectory", null, parsed ) )
3903            {
3904                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
3905                reporting.setLocation( "outputDirectory", _location );
3906                reporting.setOutputDirectory( interpolatedTrimmed( parser.nextText(), "outputDirectory" ) );
3907            }
3908            else if ( checkFieldWithDuplicate( parser, "plugins", null, parsed ) )
3909            {
3910                java.util.List plugins = new java.util.ArrayList/*<ReportPlugin>*/();
3911                reporting.setPlugins( plugins );
3912                while ( parser.nextTag() == XmlPullParser.START_TAG )
3913                {
3914                    if ( "plugin".equals( parser.getName() ) )
3915                    {
3916                        plugins.add( parseReportPlugin( parser, strict, source ) );
3917                    }
3918                    else
3919                    {
3920                        checkUnknownElement( parser, strict );
3921                    }
3922                }
3923            }
3924            else
3925            {
3926                checkUnknownElement( parser, strict );
3927            }
3928        }
3929        return reporting;
3930    } //-- Reporting parseReporting( XmlPullParser, boolean, InputSource )
3931
3932    /**
3933     * Method parseRepository.
3934     * 
3935     * @param parser
3936     * @param source
3937     * @param strict
3938     * @throws IOException
3939     * @throws XmlPullParserException
3940     * @return Repository
3941     */
3942    private Repository parseRepository( XmlPullParser parser, boolean strict, InputSource source )
3943        throws IOException, XmlPullParserException
3944    {
3945        String tagName = parser.getName();
3946        Repository repository = new Repository();
3947        InputLocation _location;
3948        _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
3949        repository.setLocation( "", _location );
3950        for ( int i = parser.getAttributeCount() - 1; i >= 0; i-- )
3951        {
3952            String name = parser.getAttributeName( i );
3953            String value = parser.getAttributeValue( i );
3954
3955            if ( name.indexOf( ':' ) >= 0 )
3956            {
3957                // just ignore attributes with non-default namespace (for example: xmlns:xsi)
3958            }
3959            else
3960            {
3961                checkUnknownAttribute( parser, name, tagName, strict );
3962            }
3963        }
3964        java.util.Set parsed = new java.util.HashSet();
3965        while ( ( strict ? parser.nextTag() : nextTag( parser ) ) == XmlPullParser.START_TAG )
3966        {
3967            if ( checkFieldWithDuplicate( parser, "releases", null, parsed ) )
3968            {
3969                repository.setReleases( parseRepositoryPolicy( parser, strict, source ) );
3970            }
3971            else if ( checkFieldWithDuplicate( parser, "snapshots", null, parsed ) )
3972            {
3973                repository.setSnapshots( parseRepositoryPolicy( parser, strict, source ) );
3974            }
3975            else if ( checkFieldWithDuplicate( parser, "id", null, parsed ) )
3976            {
3977                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
3978                repository.setLocation( "id", _location );
3979                repository.setId( interpolatedTrimmed( parser.nextText(), "id" ) );
3980            }
3981            else if ( checkFieldWithDuplicate( parser, "name", null, parsed ) )
3982            {
3983                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
3984                repository.setLocation( "name", _location );
3985                repository.setName( interpolatedTrimmed( parser.nextText(), "name" ) );
3986            }
3987            else if ( checkFieldWithDuplicate( parser, "url", null, parsed ) )
3988            {
3989                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
3990                repository.setLocation( "url", _location );
3991                repository.setUrl( interpolatedTrimmed( parser.nextText(), "url" ) );
3992            }
3993            else if ( checkFieldWithDuplicate( parser, "layout", null, parsed ) )
3994            {
3995                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
3996                repository.setLocation( "layout", _location );
3997                repository.setLayout( interpolatedTrimmed( parser.nextText(), "layout" ) );
3998            }
3999            else
4000            {
4001                checkUnknownElement( parser, strict );
4002            }
4003        }
4004        return repository;
4005    } //-- Repository parseRepository( XmlPullParser, boolean, InputSource )
4006
4007    /**
4008     * Method parseRepositoryBase.
4009     * 
4010     * @param parser
4011     * @param source
4012     * @param strict
4013     * @throws IOException
4014     * @throws XmlPullParserException
4015     * @return RepositoryBase
4016     */
4017    private RepositoryBase parseRepositoryBase( XmlPullParser parser, boolean strict, InputSource source )
4018        throws IOException, XmlPullParserException
4019    {
4020        String tagName = parser.getName();
4021        RepositoryBase repositoryBase = new RepositoryBase();
4022        InputLocation _location;
4023        _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
4024        repositoryBase.setLocation( "", _location );
4025        for ( int i = parser.getAttributeCount() - 1; i >= 0; i-- )
4026        {
4027            String name = parser.getAttributeName( i );
4028            String value = parser.getAttributeValue( i );
4029
4030            if ( name.indexOf( ':' ) >= 0 )
4031            {
4032                // just ignore attributes with non-default namespace (for example: xmlns:xsi)
4033            }
4034            else
4035            {
4036                checkUnknownAttribute( parser, name, tagName, strict );
4037            }
4038        }
4039        java.util.Set parsed = new java.util.HashSet();
4040        while ( ( strict ? parser.nextTag() : nextTag( parser ) ) == XmlPullParser.START_TAG )
4041        {
4042            if ( checkFieldWithDuplicate( parser, "id", null, parsed ) )
4043            {
4044                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
4045                repositoryBase.setLocation( "id", _location );
4046                repositoryBase.setId( interpolatedTrimmed( parser.nextText(), "id" ) );
4047            }
4048            else if ( checkFieldWithDuplicate( parser, "name", null, parsed ) )
4049            {
4050                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
4051                repositoryBase.setLocation( "name", _location );
4052                repositoryBase.setName( interpolatedTrimmed( parser.nextText(), "name" ) );
4053            }
4054            else if ( checkFieldWithDuplicate( parser, "url", null, parsed ) )
4055            {
4056                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
4057                repositoryBase.setLocation( "url", _location );
4058                repositoryBase.setUrl( interpolatedTrimmed( parser.nextText(), "url" ) );
4059            }
4060            else if ( checkFieldWithDuplicate( parser, "layout", null, parsed ) )
4061            {
4062                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
4063                repositoryBase.setLocation( "layout", _location );
4064                repositoryBase.setLayout( interpolatedTrimmed( parser.nextText(), "layout" ) );
4065            }
4066            else
4067            {
4068                checkUnknownElement( parser, strict );
4069            }
4070        }
4071        return repositoryBase;
4072    } //-- RepositoryBase parseRepositoryBase( XmlPullParser, boolean, InputSource )
4073
4074    /**
4075     * Method parseRepositoryPolicy.
4076     * 
4077     * @param parser
4078     * @param source
4079     * @param strict
4080     * @throws IOException
4081     * @throws XmlPullParserException
4082     * @return RepositoryPolicy
4083     */
4084    private RepositoryPolicy parseRepositoryPolicy( XmlPullParser parser, boolean strict, InputSource source )
4085        throws IOException, XmlPullParserException
4086    {
4087        String tagName = parser.getName();
4088        RepositoryPolicy repositoryPolicy = new RepositoryPolicy();
4089        InputLocation _location;
4090        _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
4091        repositoryPolicy.setLocation( "", _location );
4092        for ( int i = parser.getAttributeCount() - 1; i >= 0; i-- )
4093        {
4094            String name = parser.getAttributeName( i );
4095            String value = parser.getAttributeValue( i );
4096
4097            if ( name.indexOf( ':' ) >= 0 )
4098            {
4099                // just ignore attributes with non-default namespace (for example: xmlns:xsi)
4100            }
4101            else
4102            {
4103                checkUnknownAttribute( parser, name, tagName, strict );
4104            }
4105        }
4106        java.util.Set parsed = new java.util.HashSet();
4107        while ( ( strict ? parser.nextTag() : nextTag( parser ) ) == XmlPullParser.START_TAG )
4108        {
4109            if ( checkFieldWithDuplicate( parser, "enabled", null, parsed ) )
4110            {
4111                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
4112                repositoryPolicy.setLocation( "enabled", _location );
4113                repositoryPolicy.setEnabled( interpolatedTrimmed( parser.nextText(), "enabled" ) );
4114            }
4115            else if ( checkFieldWithDuplicate( parser, "updatePolicy", null, parsed ) )
4116            {
4117                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
4118                repositoryPolicy.setLocation( "updatePolicy", _location );
4119                repositoryPolicy.setUpdatePolicy( interpolatedTrimmed( parser.nextText(), "updatePolicy" ) );
4120            }
4121            else if ( checkFieldWithDuplicate( parser, "checksumPolicy", null, parsed ) )
4122            {
4123                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
4124                repositoryPolicy.setLocation( "checksumPolicy", _location );
4125                repositoryPolicy.setChecksumPolicy( interpolatedTrimmed( parser.nextText(), "checksumPolicy" ) );
4126            }
4127            else
4128            {
4129                checkUnknownElement( parser, strict );
4130            }
4131        }
4132        return repositoryPolicy;
4133    } //-- RepositoryPolicy parseRepositoryPolicy( XmlPullParser, boolean, InputSource )
4134
4135    /**
4136     * Method parseResource.
4137     * 
4138     * @param parser
4139     * @param source
4140     * @param strict
4141     * @throws IOException
4142     * @throws XmlPullParserException
4143     * @return Resource
4144     */
4145    private Resource parseResource( XmlPullParser parser, boolean strict, InputSource source )
4146        throws IOException, XmlPullParserException
4147    {
4148        String tagName = parser.getName();
4149        Resource resource = new Resource();
4150        InputLocation _location;
4151        _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
4152        resource.setLocation( "", _location );
4153        for ( int i = parser.getAttributeCount() - 1; i >= 0; i-- )
4154        {
4155            String name = parser.getAttributeName( i );
4156            String value = parser.getAttributeValue( i );
4157
4158            if ( name.indexOf( ':' ) >= 0 )
4159            {
4160                // just ignore attributes with non-default namespace (for example: xmlns:xsi)
4161            }
4162            else
4163            {
4164                checkUnknownAttribute( parser, name, tagName, strict );
4165            }
4166        }
4167        java.util.Set parsed = new java.util.HashSet();
4168        while ( ( strict ? parser.nextTag() : nextTag( parser ) ) == XmlPullParser.START_TAG )
4169        {
4170            if ( checkFieldWithDuplicate( parser, "targetPath", null, parsed ) )
4171            {
4172                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
4173                resource.setLocation( "targetPath", _location );
4174                resource.setTargetPath( interpolatedTrimmed( parser.nextText(), "targetPath" ) );
4175            }
4176            else if ( checkFieldWithDuplicate( parser, "filtering", null, parsed ) )
4177            {
4178                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
4179                resource.setLocation( "filtering", _location );
4180                resource.setFiltering( interpolatedTrimmed( parser.nextText(), "filtering" ) );
4181            }
4182            else if ( checkFieldWithDuplicate( parser, "directory", null, parsed ) )
4183            {
4184                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
4185                resource.setLocation( "directory", _location );
4186                resource.setDirectory( interpolatedTrimmed( parser.nextText(), "directory" ) );
4187            }
4188            else if ( checkFieldWithDuplicate( parser, "includes", null, parsed ) )
4189            {
4190                java.util.List includes = new java.util.ArrayList/*<String>*/();
4191                resource.setIncludes( includes );
4192                InputLocation _locations;
4193                _locations = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
4194                resource.setLocation( "includes", _locations );
4195                while ( parser.nextTag() == XmlPullParser.START_TAG )
4196                {
4197                    if ( "include".equals( parser.getName() ) )
4198                    {
4199                        _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
4200                        _locations.setLocation( Integer.valueOf( includes.size() ), _location );
4201                        includes.add( interpolatedTrimmed( parser.nextText(), "includes" ) );
4202                    }
4203                    else
4204                    {
4205                        checkUnknownElement( parser, strict );
4206                    }
4207                }
4208            }
4209            else if ( checkFieldWithDuplicate( parser, "excludes", null, parsed ) )
4210            {
4211                java.util.List excludes = new java.util.ArrayList/*<String>*/();
4212                resource.setExcludes( excludes );
4213                InputLocation _locations;
4214                _locations = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
4215                resource.setLocation( "excludes", _locations );
4216                while ( parser.nextTag() == XmlPullParser.START_TAG )
4217                {
4218                    if ( "exclude".equals( parser.getName() ) )
4219                    {
4220                        _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
4221                        _locations.setLocation( Integer.valueOf( excludes.size() ), _location );
4222                        excludes.add( interpolatedTrimmed( parser.nextText(), "excludes" ) );
4223                    }
4224                    else
4225                    {
4226                        checkUnknownElement( parser, strict );
4227                    }
4228                }
4229            }
4230            else
4231            {
4232                checkUnknownElement( parser, strict );
4233            }
4234        }
4235        return resource;
4236    } //-- Resource parseResource( XmlPullParser, boolean, InputSource )
4237
4238    /**
4239     * Method parseScm.
4240     * 
4241     * @param parser
4242     * @param source
4243     * @param strict
4244     * @throws IOException
4245     * @throws XmlPullParserException
4246     * @return Scm
4247     */
4248    private Scm parseScm( XmlPullParser parser, boolean strict, InputSource source )
4249        throws IOException, XmlPullParserException
4250    {
4251        String tagName = parser.getName();
4252        Scm scm = new Scm();
4253        InputLocation _location;
4254        _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
4255        scm.setLocation( "", _location );
4256        for ( int i = parser.getAttributeCount() - 1; i >= 0; i-- )
4257        {
4258            String name = parser.getAttributeName( i );
4259            String value = parser.getAttributeValue( i );
4260
4261            if ( name.indexOf( ':' ) >= 0 )
4262            {
4263                // just ignore attributes with non-default namespace (for example: xmlns:xsi)
4264            }
4265            else
4266            {
4267                checkUnknownAttribute( parser, name, tagName, strict );
4268            }
4269        }
4270        java.util.Set parsed = new java.util.HashSet();
4271        while ( ( strict ? parser.nextTag() : nextTag( parser ) ) == XmlPullParser.START_TAG )
4272        {
4273            if ( checkFieldWithDuplicate( parser, "connection", null, parsed ) )
4274            {
4275                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
4276                scm.setLocation( "connection", _location );
4277                scm.setConnection( interpolatedTrimmed( parser.nextText(), "connection" ) );
4278            }
4279            else if ( checkFieldWithDuplicate( parser, "developerConnection", null, parsed ) )
4280            {
4281                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
4282                scm.setLocation( "developerConnection", _location );
4283                scm.setDeveloperConnection( interpolatedTrimmed( parser.nextText(), "developerConnection" ) );
4284            }
4285            else if ( checkFieldWithDuplicate( parser, "tag", null, parsed ) )
4286            {
4287                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
4288                scm.setLocation( "tag", _location );
4289                scm.setTag( interpolatedTrimmed( parser.nextText(), "tag" ) );
4290            }
4291            else if ( checkFieldWithDuplicate( parser, "url", null, parsed ) )
4292            {
4293                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
4294                scm.setLocation( "url", _location );
4295                scm.setUrl( interpolatedTrimmed( parser.nextText(), "url" ) );
4296            }
4297            else
4298            {
4299                checkUnknownElement( parser, strict );
4300            }
4301        }
4302        return scm;
4303    } //-- Scm parseScm( XmlPullParser, boolean, InputSource )
4304
4305    /**
4306     * Method parseSite.
4307     * 
4308     * @param parser
4309     * @param source
4310     * @param strict
4311     * @throws IOException
4312     * @throws XmlPullParserException
4313     * @return Site
4314     */
4315    private Site parseSite( XmlPullParser parser, boolean strict, InputSource source )
4316        throws IOException, XmlPullParserException
4317    {
4318        String tagName = parser.getName();
4319        Site site = new Site();
4320        InputLocation _location;
4321        _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
4322        site.setLocation( "", _location );
4323        for ( int i = parser.getAttributeCount() - 1; i >= 0; i-- )
4324        {
4325            String name = parser.getAttributeName( i );
4326            String value = parser.getAttributeValue( i );
4327
4328            if ( name.indexOf( ':' ) >= 0 )
4329            {
4330                // just ignore attributes with non-default namespace (for example: xmlns:xsi)
4331            }
4332            else
4333            {
4334                checkUnknownAttribute( parser, name, tagName, strict );
4335            }
4336        }
4337        java.util.Set parsed = new java.util.HashSet();
4338        while ( ( strict ? parser.nextTag() : nextTag( parser ) ) == XmlPullParser.START_TAG )
4339        {
4340            if ( checkFieldWithDuplicate( parser, "id", null, parsed ) )
4341            {
4342                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
4343                site.setLocation( "id", _location );
4344                site.setId( interpolatedTrimmed( parser.nextText(), "id" ) );
4345            }
4346            else if ( checkFieldWithDuplicate( parser, "name", null, parsed ) )
4347            {
4348                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
4349                site.setLocation( "name", _location );
4350                site.setName( interpolatedTrimmed( parser.nextText(), "name" ) );
4351            }
4352            else if ( checkFieldWithDuplicate( parser, "url", null, parsed ) )
4353            {
4354                _location = new InputLocation( parser.getLineNumber(), parser.getColumnNumber(), source );
4355                site.setLocation( "url", _location );
4356                site.setUrl( interpolatedTrimmed( parser.nextText(), "url" ) );
4357            }
4358            else
4359            {
4360                checkUnknownElement( parser, strict );
4361            }
4362        }
4363        return site;
4364    } //-- Site parseSite( XmlPullParser, boolean, InputSource )
4365
4366    /**
4367     * Method read.
4368     * 
4369     * @param parser
4370     * @param source
4371     * @param strict
4372     * @throws IOException
4373     * @throws XmlPullParserException
4374     * @return Model
4375     */
4376    private Model read( XmlPullParser parser, boolean strict, InputSource source )
4377        throws IOException, XmlPullParserException
4378    {
4379        int eventType = parser.getEventType();
4380        while ( eventType != XmlPullParser.END_DOCUMENT )
4381        {
4382            if ( eventType == XmlPullParser.START_TAG )
4383            {
4384                if ( strict && ! "project".equals( parser.getName() ) )
4385                {
4386                    throw new XmlPullParserException( "Expected root element 'project' but found '" + parser.getName() + "'", parser, null );
4387                }
4388                Model model = parseModel( parser, strict, source );
4389                model.setModelEncoding( parser.getInputEncoding() );
4390                return model;
4391            }
4392            eventType = parser.next();
4393        }
4394        throw new XmlPullParserException( "Expected root element 'project' but found no element at all: invalid XML document", parser, null );
4395    } //-- Model read( XmlPullParser, boolean, InputSource )
4396
4397    /**
4398     * Sets the state of the "add default entities" flag.
4399     * 
4400     * @param addDefaultEntities
4401     */
4402    public void setAddDefaultEntities( boolean addDefaultEntities )
4403    {
4404        this.addDefaultEntities = addDefaultEntities;
4405    } //-- void setAddDefaultEntities( boolean )
4406
4407    public static interface ContentTransformer
4408{
4409    /**
4410     * Interpolate the value read from the xpp3 document
4411     * @param source The source value
4412     * @param fieldName A description of the field being interpolated. The implementation may use this to
4413     *                           log stuff.
4414     * @return The interpolated value.
4415     */
4416    String transform( String source, String fieldName );
4417}
4418
4419}