View Javadoc

1   /*
2    =================== DO NOT EDIT THIS FILE ====================
3    Generated by Modello 1.0.1 on 2009-09-09 03:30:24,
4    any modifications will be overwritten.
5    ==============================================================
6    */
7   
8   package org.apache.maven.profiles.io.xpp3;
9   
10    //---------------------------------/
11   //- Imported classes and packages -/
12  //---------------------------------/
13  
14  import java.io.IOException;
15  import java.io.InputStream;
16  import java.io.Reader;
17  import java.text.DateFormat;
18  import java.util.Locale;
19  import org.apache.maven.profiles.Activation;
20  import org.apache.maven.profiles.ActivationFile;
21  import org.apache.maven.profiles.ActivationOS;
22  import org.apache.maven.profiles.ActivationProperty;
23  import org.apache.maven.profiles.Profile;
24  import org.apache.maven.profiles.ProfilesRoot;
25  import org.apache.maven.profiles.Repository;
26  import org.apache.maven.profiles.RepositoryBase;
27  import org.apache.maven.profiles.RepositoryPolicy;
28  import org.codehaus.plexus.util.ReaderFactory;
29  import org.codehaus.plexus.util.xml.pull.MXParser;
30  import org.codehaus.plexus.util.xml.pull.XmlPullParser;
31  import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
32  
33  /**
34   * Class ProfilesXpp3Reader.
35   * 
36   * @version $Revision$ $Date$
37   */
38  public class ProfilesXpp3Reader
39  {
40  
41        //--------------------------/
42       //- Class/Member Variables -/
43      //--------------------------/
44  
45      /**
46       * If set the parser will be loaded with all single characters
47       * from the XHTML specification.
48       * The entities used:
49       * <ul>
50       * <li>http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent</li>
51       * <li>http://www.w3.org/TR/xhtml1/DTD/xhtml-special.ent</li>
52       * <li>http://www.w3.org/TR/xhtml1/DTD/xhtml-symbol.ent</li>
53       * </ul>
54       */
55      private boolean addDefaultEntities = true;
56  
57  
58        //-----------/
59       //- Methods -/
60      //-----------/
61  
62      /**
63       * Method checkFieldWithDuplicate.
64       * 
65       * @param parser
66       * @param parsed
67       * @param alias
68       * @param tagName
69       * @throws XmlPullParserException
70       * @return boolean
71       */
72      private boolean checkFieldWithDuplicate( XmlPullParser parser, String tagName, String alias, java.util.Set parsed )
73          throws XmlPullParserException
74      {
75          if ( !( parser.getName().equals( tagName ) || parser.getName().equals( alias ) ) )
76          {
77              return false;
78          }
79          if ( parsed.contains( tagName ) )
80          {
81              throw new XmlPullParserException( "Duplicated tag: '" + tagName + "'", parser, null );
82          }
83          parsed.add( tagName );
84          return true;
85      } //-- boolean checkFieldWithDuplicate( XmlPullParser, String, String, java.util.Set )
86  
87      /**
88       * Returns the state of the "add default entities" flag.
89       * 
90       * @return boolean
91       */
92      public boolean getAddDefaultEntities()
93      {
94          return addDefaultEntities;
95      } //-- boolean getAddDefaultEntities()
96  
97      /**
98       * Method getBooleanValue.
99       * 
100      * @param s
101      * @param parser
102      * @param attribute
103      * @throws XmlPullParserException
104      * @return boolean
105      */
106     private boolean getBooleanValue( String s, String attribute, XmlPullParser parser )
107         throws XmlPullParserException
108     {
109         return getBooleanValue( s, attribute, parser, null );
110     } //-- boolean getBooleanValue( String, String, XmlPullParser )
111 
112     /**
113      * Method getBooleanValue.
114      * 
115      * @param s
116      * @param defaultValue
117      * @param parser
118      * @param attribute
119      * @throws XmlPullParserException
120      * @return boolean
121      */
122     private boolean getBooleanValue( String s, String attribute, XmlPullParser parser, String defaultValue )
123         throws XmlPullParserException
124     {
125         if ( s != null && s.length() != 0 )
126         {
127             return Boolean.valueOf( s ).booleanValue();
128         }
129         if ( defaultValue != null )
130         {
131             return Boolean.valueOf( defaultValue ).booleanValue();
132         }
133         return false;
134     } //-- boolean getBooleanValue( String, String, XmlPullParser, String )
135 
136     /**
137      * Method getByteValue.
138      * 
139      * @param s
140      * @param strict
141      * @param parser
142      * @param attribute
143      * @throws XmlPullParserException
144      * @return byte
145      */
146     private byte getByteValue( String s, String attribute, XmlPullParser parser, boolean strict )
147         throws XmlPullParserException
148     {
149         if ( s != null )
150         {
151             try
152             {
153                 return Byte.valueOf( s ).byteValue();
154             }
155             catch ( NumberFormatException e )
156             {
157                 if ( strict )
158                 {
159                     throw new XmlPullParserException( "Unable to parse element '" + attribute + "', must be a byte", parser, null );
160                 }
161             }
162         }
163         return 0;
164     } //-- byte getByteValue( String, String, XmlPullParser, boolean )
165 
166     /**
167      * Method getCharacterValue.
168      * 
169      * @param s
170      * @param parser
171      * @param attribute
172      * @throws XmlPullParserException
173      * @return char
174      */
175     private char getCharacterValue( String s, String attribute, XmlPullParser parser )
176         throws XmlPullParserException
177     {
178         if ( s != null )
179         {
180             return s.charAt( 0 );
181         }
182         return 0;
183     } //-- char getCharacterValue( String, String, XmlPullParser )
184 
185     /**
186      * Method getDateValue.
187      * 
188      * @param s
189      * @param parser
190      * @param attribute
191      * @throws XmlPullParserException
192      * @return Date
193      */
194     private java.util.Date getDateValue( String s, String attribute, XmlPullParser parser )
195         throws XmlPullParserException
196     {
197         return getDateValue( s, attribute, null, parser );
198     } //-- java.util.Date getDateValue( String, String, XmlPullParser )
199 
200     /**
201      * Method getDateValue.
202      * 
203      * @param s
204      * @param parser
205      * @param dateFormat
206      * @param attribute
207      * @throws XmlPullParserException
208      * @return Date
209      */
210     private java.util.Date getDateValue( String s, String attribute, String dateFormat, XmlPullParser parser )
211         throws XmlPullParserException
212     {
213         if ( s != null )
214         {
215             String effectiveDateFormat = dateFormat;
216             if ( dateFormat == null )
217             {
218                 effectiveDateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS";
219             }
220             if ( "long".equals( effectiveDateFormat ) )
221             {
222                 try
223                 {
224                     return new java.util.Date( Long.parseLong( s ) );
225                 }
226                 catch ( NumberFormatException e )
227                 {
228                     throw new XmlPullParserException( e.getMessage() );
229                 }
230             }
231             else
232             {
233                 try
234                 {
235                     DateFormat dateParser = new java.text.SimpleDateFormat( effectiveDateFormat, Locale.US );
236                     return dateParser.parse( s );
237                 }
238                 catch ( java.text.ParseException e )
239                 {
240                     throw new XmlPullParserException( e.getMessage() );
241                 }
242             }
243         }
244         return null;
245     } //-- java.util.Date getDateValue( String, String, String, XmlPullParser )
246 
247     /**
248      * Method getDoubleValue.
249      * 
250      * @param s
251      * @param strict
252      * @param parser
253      * @param attribute
254      * @throws XmlPullParserException
255      * @return double
256      */
257     private double getDoubleValue( String s, String attribute, XmlPullParser parser, boolean strict )
258         throws XmlPullParserException
259     {
260         if ( s != null )
261         {
262             try
263             {
264                 return Double.valueOf( s ).doubleValue();
265             }
266             catch ( NumberFormatException e )
267             {
268                 if ( strict )
269                 {
270                     throw new XmlPullParserException( "Unable to parse element '" + attribute + "', must be a floating point number", parser, null );
271                 }
272             }
273         }
274         return 0;
275     } //-- double getDoubleValue( String, String, XmlPullParser, boolean )
276 
277     /**
278      * Method getFloatValue.
279      * 
280      * @param s
281      * @param strict
282      * @param parser
283      * @param attribute
284      * @throws XmlPullParserException
285      * @return float
286      */
287     private float getFloatValue( String s, String attribute, XmlPullParser parser, boolean strict )
288         throws XmlPullParserException
289     {
290         if ( s != null )
291         {
292             try
293             {
294                 return Float.valueOf( s ).floatValue();
295             }
296             catch ( NumberFormatException e )
297             {
298                 if ( strict )
299                 {
300                     throw new XmlPullParserException( "Unable to parse element '" + attribute + "', must be a floating point number", parser, null );
301                 }
302             }
303         }
304         return 0;
305     } //-- float getFloatValue( String, String, XmlPullParser, boolean )
306 
307     /**
308      * Method getIntegerValue.
309      * 
310      * @param s
311      * @param strict
312      * @param parser
313      * @param attribute
314      * @throws XmlPullParserException
315      * @return int
316      */
317     private int getIntegerValue( String s, String attribute, XmlPullParser parser, boolean strict )
318         throws XmlPullParserException
319     {
320         if ( s != null )
321         {
322             try
323             {
324                 return Integer.valueOf( s ).intValue();
325             }
326             catch ( NumberFormatException e )
327             {
328                 if ( strict )
329                 {
330                     throw new XmlPullParserException( "Unable to parse element '" + attribute + "', must be an integer", parser, null );
331                 }
332             }
333         }
334         return 0;
335     } //-- int getIntegerValue( String, String, XmlPullParser, boolean )
336 
337     /**
338      * Method getLongValue.
339      * 
340      * @param s
341      * @param strict
342      * @param parser
343      * @param attribute
344      * @throws XmlPullParserException
345      * @return long
346      */
347     private long getLongValue( String s, String attribute, XmlPullParser parser, boolean strict )
348         throws XmlPullParserException
349     {
350         if ( s != null )
351         {
352             try
353             {
354                 return Long.valueOf( s ).longValue();
355             }
356             catch ( NumberFormatException e )
357             {
358                 if ( strict )
359                 {
360                     throw new XmlPullParserException( "Unable to parse element '" + attribute + "', must be a long integer", parser, null );
361                 }
362             }
363         }
364         return 0;
365     } //-- long getLongValue( String, String, XmlPullParser, boolean )
366 
367     /**
368      * Method getRequiredAttributeValue.
369      * 
370      * @param s
371      * @param strict
372      * @param parser
373      * @param attribute
374      * @throws XmlPullParserException
375      * @return String
376      */
377     private String getRequiredAttributeValue( String s, String attribute, XmlPullParser parser, boolean strict )
378         throws XmlPullParserException
379     {
380         if ( s == null )
381         {
382             if ( strict )
383             {
384                 throw new XmlPullParserException( "Missing required value for attribute '" + attribute + "'", parser, null );
385             }
386         }
387         return s;
388     } //-- String getRequiredAttributeValue( String, String, XmlPullParser, boolean )
389 
390     /**
391      * Method getShortValue.
392      * 
393      * @param s
394      * @param strict
395      * @param parser
396      * @param attribute
397      * @throws XmlPullParserException
398      * @return short
399      */
400     private short getShortValue( String s, String attribute, XmlPullParser parser, boolean strict )
401         throws XmlPullParserException
402     {
403         if ( s != null )
404         {
405             try
406             {
407                 return Short.valueOf( s ).shortValue();
408             }
409             catch ( NumberFormatException e )
410             {
411                 if ( strict )
412                 {
413                     throw new XmlPullParserException( "Unable to parse element '" + attribute + "', must be a short integer", parser, null );
414                 }
415             }
416         }
417         return 0;
418     } //-- short getShortValue( String, String, XmlPullParser, boolean )
419 
420     /**
421      * Method getTrimmedValue.
422      * 
423      * @param s
424      * @return String
425      */
426     private String getTrimmedValue( String s )
427     {
428         if ( s != null )
429         {
430             s = s.trim();
431         }
432         return s;
433     } //-- String getTrimmedValue( String )
434 
435     /**
436      * Method parseActivation.
437      * 
438      * @param tagName
439      * @param strict
440      * @param parser
441      * @throws IOException
442      * @throws XmlPullParserException
443      * @return Activation
444      */
445     private Activation parseActivation( String tagName, XmlPullParser parser, boolean strict )
446         throws IOException, XmlPullParserException
447     {
448         Activation activation = new Activation();
449         java.util.Set parsed = new java.util.HashSet();
450         while ( parser.nextTag() == XmlPullParser.START_TAG )
451         {
452             if ( checkFieldWithDuplicate( parser, "activeByDefault", null, parsed ) )
453             {
454                 activation.setActiveByDefault( getBooleanValue( getTrimmedValue( parser.nextText() ), "activeByDefault", parser, "false" ) );
455             }
456             else if ( checkFieldWithDuplicate( parser, "jdk", null, parsed ) )
457             {
458                 activation.setJdk( getTrimmedValue( parser.nextText() ) );
459             }
460             else if ( checkFieldWithDuplicate( parser, "os", null, parsed ) )
461             {
462                 activation.setOs( parseActivationOS( "os", parser, strict ) );
463             }
464             else if ( checkFieldWithDuplicate( parser, "property", null, parsed ) )
465             {
466                 activation.setProperty( parseActivationProperty( "property", parser, strict ) );
467             }
468             else if ( checkFieldWithDuplicate( parser, "file", null, parsed ) )
469             {
470                 activation.setFile( parseActivationFile( "file", parser, strict ) );
471             }
472             else
473             {
474                 if ( strict )
475                 {
476                     throw new XmlPullParserException( "Unrecognised tag: '" + parser.getName() + "'", parser, null );
477                 }
478                 else
479                 {
480                     // swallow up to end tag since this is not valid
481                     while ( parser.next() != XmlPullParser.END_TAG ) {}
482                 }
483             }
484         }
485         return activation;
486     } //-- Activation parseActivation( String, XmlPullParser, boolean )
487 
488     /**
489      * Method parseActivationFile.
490      * 
491      * @param tagName
492      * @param strict
493      * @param parser
494      * @throws IOException
495      * @throws XmlPullParserException
496      * @return ActivationFile
497      */
498     private ActivationFile parseActivationFile( String tagName, XmlPullParser parser, boolean strict )
499         throws IOException, XmlPullParserException
500     {
501         ActivationFile activationFile = new ActivationFile();
502         java.util.Set parsed = new java.util.HashSet();
503         while ( parser.nextTag() == XmlPullParser.START_TAG )
504         {
505             if ( checkFieldWithDuplicate( parser, "missing", null, parsed ) )
506             {
507                 activationFile.setMissing( getTrimmedValue( parser.nextText() ) );
508             }
509             else if ( checkFieldWithDuplicate( parser, "exists", null, parsed ) )
510             {
511                 activationFile.setExists( getTrimmedValue( parser.nextText() ) );
512             }
513             else
514             {
515                 if ( strict )
516                 {
517                     throw new XmlPullParserException( "Unrecognised tag: '" + parser.getName() + "'", parser, null );
518                 }
519                 else
520                 {
521                     // swallow up to end tag since this is not valid
522                     while ( parser.next() != XmlPullParser.END_TAG ) {}
523                 }
524             }
525         }
526         return activationFile;
527     } //-- ActivationFile parseActivationFile( String, XmlPullParser, boolean )
528 
529     /**
530      * Method parseActivationOS.
531      * 
532      * @param tagName
533      * @param strict
534      * @param parser
535      * @throws IOException
536      * @throws XmlPullParserException
537      * @return ActivationOS
538      */
539     private ActivationOS parseActivationOS( String tagName, XmlPullParser parser, boolean strict )
540         throws IOException, XmlPullParserException
541     {
542         ActivationOS activationOS = new ActivationOS();
543         java.util.Set parsed = new java.util.HashSet();
544         while ( parser.nextTag() == XmlPullParser.START_TAG )
545         {
546             if ( checkFieldWithDuplicate( parser, "name", null, parsed ) )
547             {
548                 activationOS.setName( getTrimmedValue( parser.nextText() ) );
549             }
550             else if ( checkFieldWithDuplicate( parser, "family", null, parsed ) )
551             {
552                 activationOS.setFamily( getTrimmedValue( parser.nextText() ) );
553             }
554             else if ( checkFieldWithDuplicate( parser, "arch", null, parsed ) )
555             {
556                 activationOS.setArch( getTrimmedValue( parser.nextText() ) );
557             }
558             else if ( checkFieldWithDuplicate( parser, "version", null, parsed ) )
559             {
560                 activationOS.setVersion( getTrimmedValue( parser.nextText() ) );
561             }
562             else
563             {
564                 if ( strict )
565                 {
566                     throw new XmlPullParserException( "Unrecognised tag: '" + parser.getName() + "'", parser, null );
567                 }
568                 else
569                 {
570                     // swallow up to end tag since this is not valid
571                     while ( parser.next() != XmlPullParser.END_TAG ) {}
572                 }
573             }
574         }
575         return activationOS;
576     } //-- ActivationOS parseActivationOS( String, XmlPullParser, boolean )
577 
578     /**
579      * Method parseActivationProperty.
580      * 
581      * @param tagName
582      * @param strict
583      * @param parser
584      * @throws IOException
585      * @throws XmlPullParserException
586      * @return ActivationProperty
587      */
588     private ActivationProperty parseActivationProperty( String tagName, XmlPullParser parser, boolean strict )
589         throws IOException, XmlPullParserException
590     {
591         ActivationProperty activationProperty = new ActivationProperty();
592         java.util.Set parsed = new java.util.HashSet();
593         while ( parser.nextTag() == XmlPullParser.START_TAG )
594         {
595             if ( checkFieldWithDuplicate( parser, "name", null, parsed ) )
596             {
597                 activationProperty.setName( getTrimmedValue( parser.nextText() ) );
598             }
599             else if ( checkFieldWithDuplicate( parser, "value", null, parsed ) )
600             {
601                 activationProperty.setValue( getTrimmedValue( parser.nextText() ) );
602             }
603             else
604             {
605                 if ( strict )
606                 {
607                     throw new XmlPullParserException( "Unrecognised tag: '" + parser.getName() + "'", parser, null );
608                 }
609                 else
610                 {
611                     // swallow up to end tag since this is not valid
612                     while ( parser.next() != XmlPullParser.END_TAG ) {}
613                 }
614             }
615         }
616         return activationProperty;
617     } //-- ActivationProperty parseActivationProperty( String, XmlPullParser, boolean )
618 
619     /**
620      * Method parseProfile.
621      * 
622      * @param tagName
623      * @param strict
624      * @param parser
625      * @throws IOException
626      * @throws XmlPullParserException
627      * @return Profile
628      */
629     private Profile parseProfile( String tagName, XmlPullParser parser, boolean strict )
630         throws IOException, XmlPullParserException
631     {
632         Profile profile = new Profile();
633         java.util.Set parsed = new java.util.HashSet();
634         while ( parser.nextTag() == XmlPullParser.START_TAG )
635         {
636             if ( checkFieldWithDuplicate( parser, "id", null, parsed ) )
637             {
638                 profile.setId( getTrimmedValue( parser.nextText() ) );
639             }
640             else if ( checkFieldWithDuplicate( parser, "activation", null, parsed ) )
641             {
642                 profile.setActivation( parseActivation( "activation", parser, strict ) );
643             }
644             else if ( checkFieldWithDuplicate( parser, "properties", null, parsed ) )
645             {
646                 while ( parser.nextTag() == XmlPullParser.START_TAG )
647                 {
648                     String key = parser.getName();
649                     String value = parser.nextText().trim();
650                     profile.addProperty( key, value );
651                 }
652             }
653             else if ( checkFieldWithDuplicate( parser, "repositories", null, parsed ) )
654             {
655                 java.util.List repositories = new java.util.ArrayList/*<Repository>*/();
656                 profile.setRepositories( repositories );
657                 while ( parser.nextTag() == XmlPullParser.START_TAG )
658                 {
659                     if ( parser.getName().equals( "repository" ) )
660                     {
661                         repositories.add( parseRepository( "repository", parser, strict ) );
662                     }
663                     else if ( strict )
664                     {
665                         throw new XmlPullParserException( "Unrecognised association: '" + parser.getName() + "'", parser, null );
666                     }
667                     else
668                     {
669                         // swallow up to end tag since this is not valid
670                         while ( parser.next() != XmlPullParser.END_TAG ) {}
671                     }
672                 }
673             }
674             else if ( checkFieldWithDuplicate( parser, "pluginRepositories", null, parsed ) )
675             {
676                 java.util.List pluginRepositories = new java.util.ArrayList/*<Repository>*/();
677                 profile.setPluginRepositories( pluginRepositories );
678                 while ( parser.nextTag() == XmlPullParser.START_TAG )
679                 {
680                     if ( parser.getName().equals( "pluginRepository" ) )
681                     {
682                         pluginRepositories.add( parseRepository( "pluginRepository", parser, strict ) );
683                     }
684                     else if ( strict )
685                     {
686                         throw new XmlPullParserException( "Unrecognised association: '" + parser.getName() + "'", parser, null );
687                     }
688                     else
689                     {
690                         // swallow up to end tag since this is not valid
691                         while ( parser.next() != XmlPullParser.END_TAG ) {}
692                     }
693                 }
694             }
695             else
696             {
697                 if ( strict )
698                 {
699                     throw new XmlPullParserException( "Unrecognised tag: '" + parser.getName() + "'", parser, null );
700                 }
701                 else
702                 {
703                     // swallow up to end tag since this is not valid
704                     while ( parser.next() != XmlPullParser.END_TAG ) {}
705                 }
706             }
707         }
708         return profile;
709     } //-- Profile parseProfile( String, XmlPullParser, boolean )
710 
711     /**
712      * Method parseProfilesRoot.
713      * 
714      * @param tagName
715      * @param strict
716      * @param parser
717      * @throws IOException
718      * @throws XmlPullParserException
719      * @return ProfilesRoot
720      */
721     private ProfilesRoot parseProfilesRoot( String tagName, XmlPullParser parser, boolean strict )
722         throws IOException, XmlPullParserException
723     {
724         ProfilesRoot profilesRoot = new ProfilesRoot();
725         java.util.Set parsed = new java.util.HashSet();
726         int eventType = parser.getEventType();
727         boolean foundRoot = false;
728         while ( eventType != XmlPullParser.END_DOCUMENT )
729         {
730             if ( eventType == XmlPullParser.START_TAG )
731             {
732                 if ( parser.getName().equals( tagName ) )
733                 {
734                     foundRoot = true;
735                 }
736                 else if ( strict && ! foundRoot )
737                 {
738                     throw new XmlPullParserException( "Expected root element '" + tagName + "' but found '" + parser.getName() + "'", parser, null );
739                 }
740                 else if ( checkFieldWithDuplicate( parser, "profiles", null, parsed ) )
741                 {
742                     java.util.List profiles = new java.util.ArrayList/*<Profile>*/();
743                     profilesRoot.setProfiles( profiles );
744                     while ( parser.nextTag() == XmlPullParser.START_TAG )
745                     {
746                         if ( parser.getName().equals( "profile" ) )
747                         {
748                             profiles.add( parseProfile( "profile", parser, strict ) );
749                         }
750                         else if ( strict )
751                         {
752                             throw new XmlPullParserException( "Unrecognised association: '" + parser.getName() + "'", parser, null );
753                         }
754                         else
755                         {
756                             // swallow up to end tag since this is not valid
757                             while ( parser.next() != XmlPullParser.END_TAG ) {}
758                         }
759                     }
760                 }
761                 else if ( checkFieldWithDuplicate( parser, "activeProfiles", null, parsed ) )
762                 {
763                     java.util.List activeProfiles = new java.util.ArrayList/*<String>*/();
764                     profilesRoot.setActiveProfiles( activeProfiles );
765                     while ( parser.nextTag() == XmlPullParser.START_TAG )
766                     {
767                         if ( parser.getName().equals( "activeProfile" ) )
768                         {
769                             activeProfiles.add( getTrimmedValue( parser.nextText() ) );
770                         }
771                         else if ( strict )
772                         {
773                             throw new XmlPullParserException( "Unrecognised association: '" + parser.getName() + "'", parser, null );
774                         }
775                         else
776                         {
777                             // swallow up to end tag since this is not valid
778                             while ( parser.next() != XmlPullParser.END_TAG ) {}
779                         }
780                     }
781                 }
782                 else if ( strict )
783                 {
784                     throw new XmlPullParserException( "Unrecognised tag: '" + parser.getName() + "'", parser, null );
785                 }
786             }
787             eventType = parser.next();
788         }
789         return profilesRoot;
790     } //-- ProfilesRoot parseProfilesRoot( String, XmlPullParser, boolean )
791 
792     /**
793      * Method parseRepository.
794      * 
795      * @param tagName
796      * @param strict
797      * @param parser
798      * @throws IOException
799      * @throws XmlPullParserException
800      * @return Repository
801      */
802     private Repository parseRepository( String tagName, XmlPullParser parser, boolean strict )
803         throws IOException, XmlPullParserException
804     {
805         Repository repository = new Repository();
806         java.util.Set parsed = new java.util.HashSet();
807         while ( parser.nextTag() == XmlPullParser.START_TAG )
808         {
809             if ( checkFieldWithDuplicate( parser, "releases", null, parsed ) )
810             {
811                 repository.setReleases( parseRepositoryPolicy( "releases", parser, strict ) );
812             }
813             else if ( checkFieldWithDuplicate( parser, "snapshots", null, parsed ) )
814             {
815                 repository.setSnapshots( parseRepositoryPolicy( "snapshots", parser, strict ) );
816             }
817             else if ( checkFieldWithDuplicate( parser, "id", null, parsed ) )
818             {
819                 repository.setId( getTrimmedValue( parser.nextText() ) );
820             }
821             else if ( checkFieldWithDuplicate( parser, "name", null, parsed ) )
822             {
823                 repository.setName( getTrimmedValue( parser.nextText() ) );
824             }
825             else if ( checkFieldWithDuplicate( parser, "url", null, parsed ) )
826             {
827                 repository.setUrl( getTrimmedValue( parser.nextText() ) );
828             }
829             else if ( checkFieldWithDuplicate( parser, "layout", null, parsed ) )
830             {
831                 repository.setLayout( getTrimmedValue( parser.nextText() ) );
832             }
833             else
834             {
835                 if ( strict )
836                 {
837                     throw new XmlPullParserException( "Unrecognised tag: '" + parser.getName() + "'", parser, null );
838                 }
839                 else
840                 {
841                     // swallow up to end tag since this is not valid
842                     while ( parser.next() != XmlPullParser.END_TAG ) {}
843                 }
844             }
845         }
846         return repository;
847     } //-- Repository parseRepository( String, XmlPullParser, boolean )
848 
849     /**
850      * Method parseRepositoryBase.
851      * 
852      * @param tagName
853      * @param strict
854      * @param parser
855      * @throws IOException
856      * @throws XmlPullParserException
857      * @return RepositoryBase
858      */
859     private RepositoryBase parseRepositoryBase( String tagName, XmlPullParser parser, boolean strict )
860         throws IOException, XmlPullParserException
861     {
862         RepositoryBase repositoryBase = new RepositoryBase();
863         java.util.Set parsed = new java.util.HashSet();
864         while ( parser.nextTag() == XmlPullParser.START_TAG )
865         {
866             if ( checkFieldWithDuplicate( parser, "id", null, parsed ) )
867             {
868                 repositoryBase.setId( getTrimmedValue( parser.nextText() ) );
869             }
870             else if ( checkFieldWithDuplicate( parser, "name", null, parsed ) )
871             {
872                 repositoryBase.setName( getTrimmedValue( parser.nextText() ) );
873             }
874             else if ( checkFieldWithDuplicate( parser, "url", null, parsed ) )
875             {
876                 repositoryBase.setUrl( getTrimmedValue( parser.nextText() ) );
877             }
878             else if ( checkFieldWithDuplicate( parser, "layout", null, parsed ) )
879             {
880                 repositoryBase.setLayout( getTrimmedValue( parser.nextText() ) );
881             }
882             else
883             {
884                 if ( strict )
885                 {
886                     throw new XmlPullParserException( "Unrecognised tag: '" + parser.getName() + "'", parser, null );
887                 }
888                 else
889                 {
890                     // swallow up to end tag since this is not valid
891                     while ( parser.next() != XmlPullParser.END_TAG ) {}
892                 }
893             }
894         }
895         return repositoryBase;
896     } //-- RepositoryBase parseRepositoryBase( String, XmlPullParser, boolean )
897 
898     /**
899      * Method parseRepositoryPolicy.
900      * 
901      * @param tagName
902      * @param strict
903      * @param parser
904      * @throws IOException
905      * @throws XmlPullParserException
906      * @return RepositoryPolicy
907      */
908     private RepositoryPolicy parseRepositoryPolicy( String tagName, XmlPullParser parser, boolean strict )
909         throws IOException, XmlPullParserException
910     {
911         RepositoryPolicy repositoryPolicy = new RepositoryPolicy();
912         java.util.Set parsed = new java.util.HashSet();
913         while ( parser.nextTag() == XmlPullParser.START_TAG )
914         {
915             if ( checkFieldWithDuplicate( parser, "enabled", null, parsed ) )
916             {
917                 repositoryPolicy.setEnabled( getBooleanValue( getTrimmedValue( parser.nextText() ), "enabled", parser, "true" ) );
918             }
919             else if ( checkFieldWithDuplicate( parser, "updatePolicy", null, parsed ) )
920             {
921                 repositoryPolicy.setUpdatePolicy( getTrimmedValue( parser.nextText() ) );
922             }
923             else if ( checkFieldWithDuplicate( parser, "checksumPolicy", null, parsed ) )
924             {
925                 repositoryPolicy.setChecksumPolicy( getTrimmedValue( parser.nextText() ) );
926             }
927             else
928             {
929                 if ( strict )
930                 {
931                     throw new XmlPullParserException( "Unrecognised tag: '" + parser.getName() + "'", parser, null );
932                 }
933                 else
934                 {
935                     // swallow up to end tag since this is not valid
936                     while ( parser.next() != XmlPullParser.END_TAG ) {}
937                 }
938             }
939         }
940         return repositoryPolicy;
941     } //-- RepositoryPolicy parseRepositoryPolicy( String, XmlPullParser, boolean )
942 
943     /**
944      * @see ReaderFactory#newXmlReader
945      * 
946      * @param reader
947      * @param strict
948      * @throws IOException
949      * @throws XmlPullParserException
950      * @return ProfilesRoot
951      */
952     public ProfilesRoot read( Reader reader, boolean strict )
953         throws IOException, XmlPullParserException
954     {
955         XmlPullParser parser = new MXParser();
956 
957         parser.setInput( reader );
958 
959         if ( addDefaultEntities )
960         {
961             // ----------------------------------------------------------------------
962             // Latin 1 entities
963             // ----------------------------------------------------------------------
964 
965             parser.defineEntityReplacementText( "nbsp", "\u00a0" );
966             parser.defineEntityReplacementText( "iexcl", "\u00a1" );
967             parser.defineEntityReplacementText( "cent", "\u00a2" );
968             parser.defineEntityReplacementText( "pound", "\u00a3" );
969             parser.defineEntityReplacementText( "curren", "\u00a4" );
970             parser.defineEntityReplacementText( "yen", "\u00a5" );
971             parser.defineEntityReplacementText( "brvbar", "\u00a6" );
972             parser.defineEntityReplacementText( "sect", "\u00a7" );
973             parser.defineEntityReplacementText( "uml", "\u00a8" );
974             parser.defineEntityReplacementText( "copy", "\u00a9" );
975             parser.defineEntityReplacementText( "ordf", "\u00aa" );
976             parser.defineEntityReplacementText( "laquo", "\u00ab" );
977             parser.defineEntityReplacementText( "not", "\u00ac" );
978             parser.defineEntityReplacementText( "shy", "\u00ad" );
979             parser.defineEntityReplacementText( "reg", "\u00ae" );
980             parser.defineEntityReplacementText( "macr", "\u00af" );
981             parser.defineEntityReplacementText( "deg", "\u00b0" );
982             parser.defineEntityReplacementText( "plusmn", "\u00b1" );
983             parser.defineEntityReplacementText( "sup2", "\u00b2" );
984             parser.defineEntityReplacementText( "sup3", "\u00b3" );
985             parser.defineEntityReplacementText( "acute", "\u00b4" );
986             parser.defineEntityReplacementText( "micro", "\u00b5" );
987             parser.defineEntityReplacementText( "para", "\u00b6" );
988             parser.defineEntityReplacementText( "middot", "\u00b7" );
989             parser.defineEntityReplacementText( "cedil", "\u00b8" );
990             parser.defineEntityReplacementText( "sup1", "\u00b9" );
991             parser.defineEntityReplacementText( "ordm", "\u00ba" );
992             parser.defineEntityReplacementText( "raquo", "\u00bb" );
993             parser.defineEntityReplacementText( "frac14", "\u00bc" );
994             parser.defineEntityReplacementText( "frac12", "\u00bd" );
995             parser.defineEntityReplacementText( "frac34", "\u00be" );
996             parser.defineEntityReplacementText( "iquest", "\u00bf" );
997             parser.defineEntityReplacementText( "Agrave", "\u00c0" );
998             parser.defineEntityReplacementText( "Aacute", "\u00c1" );
999             parser.defineEntityReplacementText( "Acirc", "\u00c2" );
1000             parser.defineEntityReplacementText( "Atilde", "\u00c3" );
1001             parser.defineEntityReplacementText( "Auml", "\u00c4" );
1002             parser.defineEntityReplacementText( "Aring", "\u00c5" );
1003             parser.defineEntityReplacementText( "AElig", "\u00c6" );
1004             parser.defineEntityReplacementText( "Ccedil", "\u00c7" );
1005             parser.defineEntityReplacementText( "Egrave", "\u00c8" );
1006             parser.defineEntityReplacementText( "Eacute", "\u00c9" );
1007             parser.defineEntityReplacementText( "Ecirc", "\u00ca" );
1008             parser.defineEntityReplacementText( "Euml", "\u00cb" );
1009             parser.defineEntityReplacementText( "Igrave", "\u00cc" );
1010             parser.defineEntityReplacementText( "Iacute", "\u00cd" );
1011             parser.defineEntityReplacementText( "Icirc", "\u00ce" );
1012             parser.defineEntityReplacementText( "Iuml", "\u00cf" );
1013             parser.defineEntityReplacementText( "ETH", "\u00d0" );
1014             parser.defineEntityReplacementText( "Ntilde", "\u00d1" );
1015             parser.defineEntityReplacementText( "Ograve", "\u00d2" );
1016             parser.defineEntityReplacementText( "Oacute", "\u00d3" );
1017             parser.defineEntityReplacementText( "Ocirc", "\u00d4" );
1018             parser.defineEntityReplacementText( "Otilde", "\u00d5" );
1019             parser.defineEntityReplacementText( "Ouml", "\u00d6" );
1020             parser.defineEntityReplacementText( "times", "\u00d7" );
1021             parser.defineEntityReplacementText( "Oslash", "\u00d8" );
1022             parser.defineEntityReplacementText( "Ugrave", "\u00d9" );
1023             parser.defineEntityReplacementText( "Uacute", "\u00da" );
1024             parser.defineEntityReplacementText( "Ucirc", "\u00db" );
1025             parser.defineEntityReplacementText( "Uuml", "\u00dc" );
1026             parser.defineEntityReplacementText( "Yacute", "\u00dd" );
1027             parser.defineEntityReplacementText( "THORN", "\u00de" );
1028             parser.defineEntityReplacementText( "szlig", "\u00df" );
1029             parser.defineEntityReplacementText( "agrave", "\u00e0" );
1030             parser.defineEntityReplacementText( "aacute", "\u00e1" );
1031             parser.defineEntityReplacementText( "acirc", "\u00e2" );
1032             parser.defineEntityReplacementText( "atilde", "\u00e3" );
1033             parser.defineEntityReplacementText( "auml", "\u00e4" );
1034             parser.defineEntityReplacementText( "aring", "\u00e5" );
1035             parser.defineEntityReplacementText( "aelig", "\u00e6" );
1036             parser.defineEntityReplacementText( "ccedil", "\u00e7" );
1037             parser.defineEntityReplacementText( "egrave", "\u00e8" );
1038             parser.defineEntityReplacementText( "eacute", "\u00e9" );
1039             parser.defineEntityReplacementText( "ecirc", "\u00ea" );
1040             parser.defineEntityReplacementText( "euml", "\u00eb" );
1041             parser.defineEntityReplacementText( "igrave", "\u00ec" );
1042             parser.defineEntityReplacementText( "iacute", "\u00ed" );
1043             parser.defineEntityReplacementText( "icirc", "\u00ee" );
1044             parser.defineEntityReplacementText( "iuml", "\u00ef" );
1045             parser.defineEntityReplacementText( "eth", "\u00f0" );
1046             parser.defineEntityReplacementText( "ntilde", "\u00f1" );
1047             parser.defineEntityReplacementText( "ograve", "\u00f2" );
1048             parser.defineEntityReplacementText( "oacute", "\u00f3" );
1049             parser.defineEntityReplacementText( "ocirc", "\u00f4" );
1050             parser.defineEntityReplacementText( "otilde", "\u00f5" );
1051             parser.defineEntityReplacementText( "ouml", "\u00f6" );
1052             parser.defineEntityReplacementText( "divide", "\u00f7" );
1053             parser.defineEntityReplacementText( "oslash", "\u00f8" );
1054             parser.defineEntityReplacementText( "ugrave", "\u00f9" );
1055             parser.defineEntityReplacementText( "uacute", "\u00fa" );
1056             parser.defineEntityReplacementText( "ucirc", "\u00fb" );
1057             parser.defineEntityReplacementText( "uuml", "\u00fc" );
1058             parser.defineEntityReplacementText( "yacute", "\u00fd" );
1059             parser.defineEntityReplacementText( "thorn", "\u00fe" );
1060             parser.defineEntityReplacementText( "yuml", "\u00ff" );
1061 
1062             // ----------------------------------------------------------------------
1063             // Special entities
1064             // ----------------------------------------------------------------------
1065 
1066             parser.defineEntityReplacementText( "OElig", "\u0152" );
1067             parser.defineEntityReplacementText( "oelig", "\u0153" );
1068             parser.defineEntityReplacementText( "Scaron", "\u0160" );
1069             parser.defineEntityReplacementText( "scaron", "\u0161" );
1070             parser.defineEntityReplacementText( "Yuml", "\u0178" );
1071             parser.defineEntityReplacementText( "circ", "\u02c6" );
1072             parser.defineEntityReplacementText( "tilde", "\u02dc" );
1073             parser.defineEntityReplacementText( "ensp", "\u2002" );
1074             parser.defineEntityReplacementText( "emsp", "\u2003" );
1075             parser.defineEntityReplacementText( "thinsp", "\u2009" );
1076             parser.defineEntityReplacementText( "zwnj", "\u200c" );
1077             parser.defineEntityReplacementText( "zwj", "\u200d" );
1078             parser.defineEntityReplacementText( "lrm", "\u200e" );
1079             parser.defineEntityReplacementText( "rlm", "\u200f" );
1080             parser.defineEntityReplacementText( "ndash", "\u2013" );
1081             parser.defineEntityReplacementText( "mdash", "\u2014" );
1082             parser.defineEntityReplacementText( "lsquo", "\u2018" );
1083             parser.defineEntityReplacementText( "rsquo", "\u2019" );
1084             parser.defineEntityReplacementText( "sbquo", "\u201a" );
1085             parser.defineEntityReplacementText( "ldquo", "\u201c" );
1086             parser.defineEntityReplacementText( "rdquo", "\u201d" );
1087             parser.defineEntityReplacementText( "bdquo", "\u201e" );
1088             parser.defineEntityReplacementText( "dagger", "\u2020" );
1089             parser.defineEntityReplacementText( "Dagger", "\u2021" );
1090             parser.defineEntityReplacementText( "permil", "\u2030" );
1091             parser.defineEntityReplacementText( "lsaquo", "\u2039" );
1092             parser.defineEntityReplacementText( "rsaquo", "\u203a" );
1093             parser.defineEntityReplacementText( "euro", "\u20ac" );
1094 
1095             // ----------------------------------------------------------------------
1096             // Symbol entities
1097             // ----------------------------------------------------------------------
1098 
1099             parser.defineEntityReplacementText( "fnof", "\u0192" );
1100             parser.defineEntityReplacementText( "Alpha", "\u0391" );
1101             parser.defineEntityReplacementText( "Beta", "\u0392" );
1102             parser.defineEntityReplacementText( "Gamma", "\u0393" );
1103             parser.defineEntityReplacementText( "Delta", "\u0394" );
1104             parser.defineEntityReplacementText( "Epsilon", "\u0395" );
1105             parser.defineEntityReplacementText( "Zeta", "\u0396" );
1106             parser.defineEntityReplacementText( "Eta", "\u0397" );
1107             parser.defineEntityReplacementText( "Theta", "\u0398" );
1108             parser.defineEntityReplacementText( "Iota", "\u0399" );
1109             parser.defineEntityReplacementText( "Kappa", "\u039a" );
1110             parser.defineEntityReplacementText( "Lambda", "\u039b" );
1111             parser.defineEntityReplacementText( "Mu", "\u039c" );
1112             parser.defineEntityReplacementText( "Nu", "\u039d" );
1113             parser.defineEntityReplacementText( "Xi", "\u039e" );
1114             parser.defineEntityReplacementText( "Omicron", "\u039f" );
1115             parser.defineEntityReplacementText( "Pi", "\u03a0" );
1116             parser.defineEntityReplacementText( "Rho", "\u03a1" );
1117             parser.defineEntityReplacementText( "Sigma", "\u03a3" );
1118             parser.defineEntityReplacementText( "Tau", "\u03a4" );
1119             parser.defineEntityReplacementText( "Upsilon", "\u03a5" );
1120             parser.defineEntityReplacementText( "Phi", "\u03a6" );
1121             parser.defineEntityReplacementText( "Chi", "\u03a7" );
1122             parser.defineEntityReplacementText( "Psi", "\u03a8" );
1123             parser.defineEntityReplacementText( "Omega", "\u03a9" );
1124             parser.defineEntityReplacementText( "alpha", "\u03b1" );
1125             parser.defineEntityReplacementText( "beta", "\u03b2" );
1126             parser.defineEntityReplacementText( "gamma", "\u03b3" );
1127             parser.defineEntityReplacementText( "delta", "\u03b4" );
1128             parser.defineEntityReplacementText( "epsilon", "\u03b5" );
1129             parser.defineEntityReplacementText( "zeta", "\u03b6" );
1130             parser.defineEntityReplacementText( "eta", "\u03b7" );
1131             parser.defineEntityReplacementText( "theta", "\u03b8" );
1132             parser.defineEntityReplacementText( "iota", "\u03b9" );
1133             parser.defineEntityReplacementText( "kappa", "\u03ba" );
1134             parser.defineEntityReplacementText( "lambda", "\u03bb" );
1135             parser.defineEntityReplacementText( "mu", "\u03bc" );
1136             parser.defineEntityReplacementText( "nu", "\u03bd" );
1137             parser.defineEntityReplacementText( "xi", "\u03be" );
1138             parser.defineEntityReplacementText( "omicron", "\u03bf" );
1139             parser.defineEntityReplacementText( "pi", "\u03c0" );
1140             parser.defineEntityReplacementText( "rho", "\u03c1" );
1141             parser.defineEntityReplacementText( "sigmaf", "\u03c2" );
1142             parser.defineEntityReplacementText( "sigma", "\u03c3" );
1143             parser.defineEntityReplacementText( "tau", "\u03c4" );
1144             parser.defineEntityReplacementText( "upsilon", "\u03c5" );
1145             parser.defineEntityReplacementText( "phi", "\u03c6" );
1146             parser.defineEntityReplacementText( "chi", "\u03c7" );
1147             parser.defineEntityReplacementText( "psi", "\u03c8" );
1148             parser.defineEntityReplacementText( "omega", "\u03c9" );
1149             parser.defineEntityReplacementText( "thetasym", "\u03d1" );
1150             parser.defineEntityReplacementText( "upsih", "\u03d2" );
1151             parser.defineEntityReplacementText( "piv", "\u03d6" );
1152             parser.defineEntityReplacementText( "bull", "\u2022" );
1153             parser.defineEntityReplacementText( "hellip", "\u2026" );
1154             parser.defineEntityReplacementText( "prime", "\u2032" );
1155             parser.defineEntityReplacementText( "Prime", "\u2033" );
1156             parser.defineEntityReplacementText( "oline", "\u203e" );
1157             parser.defineEntityReplacementText( "frasl", "\u2044" );
1158             parser.defineEntityReplacementText( "weierp", "\u2118" );
1159             parser.defineEntityReplacementText( "image", "\u2111" );
1160             parser.defineEntityReplacementText( "real", "\u211c" );
1161             parser.defineEntityReplacementText( "trade", "\u2122" );
1162             parser.defineEntityReplacementText( "alefsym", "\u2135" );
1163             parser.defineEntityReplacementText( "larr", "\u2190" );
1164             parser.defineEntityReplacementText( "uarr", "\u2191" );
1165             parser.defineEntityReplacementText( "rarr", "\u2192" );
1166             parser.defineEntityReplacementText( "darr", "\u2193" );
1167             parser.defineEntityReplacementText( "harr", "\u2194" );
1168             parser.defineEntityReplacementText( "crarr", "\u21b5" );
1169             parser.defineEntityReplacementText( "lArr", "\u21d0" );
1170             parser.defineEntityReplacementText( "uArr", "\u21d1" );
1171             parser.defineEntityReplacementText( "rArr", "\u21d2" );
1172             parser.defineEntityReplacementText( "dArr", "\u21d3" );
1173             parser.defineEntityReplacementText( "hArr", "\u21d4" );
1174             parser.defineEntityReplacementText( "forall", "\u2200" );
1175             parser.defineEntityReplacementText( "part", "\u2202" );
1176             parser.defineEntityReplacementText( "exist", "\u2203" );
1177             parser.defineEntityReplacementText( "empty", "\u2205" );
1178             parser.defineEntityReplacementText( "nabla", "\u2207" );
1179             parser.defineEntityReplacementText( "isin", "\u2208" );
1180             parser.defineEntityReplacementText( "notin", "\u2209" );
1181             parser.defineEntityReplacementText( "ni", "\u220b" );
1182             parser.defineEntityReplacementText( "prod", "\u220f" );
1183             parser.defineEntityReplacementText( "sum", "\u2211" );
1184             parser.defineEntityReplacementText( "minus", "\u2212" );
1185             parser.defineEntityReplacementText( "lowast", "\u2217" );
1186             parser.defineEntityReplacementText( "radic", "\u221a" );
1187             parser.defineEntityReplacementText( "prop", "\u221d" );
1188             parser.defineEntityReplacementText( "infin", "\u221e" );
1189             parser.defineEntityReplacementText( "ang", "\u2220" );
1190             parser.defineEntityReplacementText( "and", "\u2227" );
1191             parser.defineEntityReplacementText( "or", "\u2228" );
1192             parser.defineEntityReplacementText( "cap", "\u2229" );
1193             parser.defineEntityReplacementText( "cup", "\u222a" );
1194             parser.defineEntityReplacementText( "int", "\u222b" );
1195             parser.defineEntityReplacementText( "there4", "\u2234" );
1196             parser.defineEntityReplacementText( "sim", "\u223c" );
1197             parser.defineEntityReplacementText( "cong", "\u2245" );
1198             parser.defineEntityReplacementText( "asymp", "\u2248" );
1199             parser.defineEntityReplacementText( "ne", "\u2260" );
1200             parser.defineEntityReplacementText( "equiv", "\u2261" );
1201             parser.defineEntityReplacementText( "le", "\u2264" );
1202             parser.defineEntityReplacementText( "ge", "\u2265" );
1203             parser.defineEntityReplacementText( "sub", "\u2282" );
1204             parser.defineEntityReplacementText( "sup", "\u2283" );
1205             parser.defineEntityReplacementText( "nsub", "\u2284" );
1206             parser.defineEntityReplacementText( "sube", "\u2286" );
1207             parser.defineEntityReplacementText( "supe", "\u2287" );
1208             parser.defineEntityReplacementText( "oplus", "\u2295" );
1209             parser.defineEntityReplacementText( "otimes", "\u2297" );
1210             parser.defineEntityReplacementText( "perp", "\u22a5" );
1211             parser.defineEntityReplacementText( "sdot", "\u22c5" );
1212             parser.defineEntityReplacementText( "lceil", "\u2308" );
1213             parser.defineEntityReplacementText( "rceil", "\u2309" );
1214             parser.defineEntityReplacementText( "lfloor", "\u230a" );
1215             parser.defineEntityReplacementText( "rfloor", "\u230b" );
1216             parser.defineEntityReplacementText( "lang", "\u2329" );
1217             parser.defineEntityReplacementText( "rang", "\u232a" );
1218             parser.defineEntityReplacementText( "loz", "\u25ca" );
1219             parser.defineEntityReplacementText( "spades", "\u2660" );
1220             parser.defineEntityReplacementText( "clubs", "\u2663" );
1221             parser.defineEntityReplacementText( "hearts", "\u2665" );
1222             parser.defineEntityReplacementText( "diams", "\u2666" );
1223 
1224         }
1225 
1226         parser.next();
1227         return parseProfilesRoot( "profilesXml", parser, strict );
1228     } //-- ProfilesRoot read( Reader, boolean )
1229 
1230     /**
1231      * @see ReaderFactory#newXmlReader
1232      * 
1233      * @param reader
1234      * @throws IOException
1235      * @throws XmlPullParserException
1236      * @return ProfilesRoot
1237      */
1238     public ProfilesRoot read( Reader reader )
1239         throws IOException, XmlPullParserException
1240     {
1241         return read( reader, true );
1242     } //-- ProfilesRoot read( Reader )
1243 
1244     /**
1245      * Method read.
1246      * 
1247      * @param in
1248      * @param strict
1249      * @throws IOException
1250      * @throws XmlPullParserException
1251      * @return ProfilesRoot
1252      */
1253     public ProfilesRoot read( InputStream in, boolean strict )
1254         throws IOException, XmlPullParserException
1255     {
1256         Reader reader = ReaderFactory.newXmlReader( in );
1257 
1258         return read( reader, strict );
1259     } //-- ProfilesRoot read( InputStream, boolean )
1260 
1261     /**
1262      * Method read.
1263      * 
1264      * @param in
1265      * @throws IOException
1266      * @throws XmlPullParserException
1267      * @return ProfilesRoot
1268      */
1269     public ProfilesRoot read( InputStream in )
1270         throws IOException, XmlPullParserException
1271     {
1272         Reader reader = ReaderFactory.newXmlReader( in );
1273 
1274         return read( reader );
1275     } //-- ProfilesRoot read( InputStream )
1276 
1277     /**
1278      * Sets the state of the "add default entities" flag.
1279      * 
1280      * @param addDefaultEntities
1281      */
1282     public void setAddDefaultEntities( boolean addDefaultEntities )
1283     {
1284         this.addDefaultEntities = addDefaultEntities;
1285     } //-- void setAddDefaultEntities( boolean )
1286 
1287 
1288 }