View Javadoc

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