001// =================== DO NOT EDIT THIS FILE ==================== 002// Generated by Modello 1.8.1, 003// any modifications will be overwritten. 004// ============================================================== 005 006package org.apache.maven.doxia.document.io.xpp3; 007 008 //---------------------------------/ 009 //- Imported classes and packages -/ 010//---------------------------------/ 011 012import java.io.IOException; 013import java.io.InputStream; 014import java.io.Reader; 015import java.text.DateFormat; 016import org.apache.maven.doxia.document.DocumentAuthor; 017import org.apache.maven.doxia.document.DocumentCover; 018import org.apache.maven.doxia.document.DocumentHyperlinkBehaviour; 019import org.apache.maven.doxia.document.DocumentMeta; 020import org.apache.maven.doxia.document.DocumentModel; 021import org.apache.maven.doxia.document.DocumentStatistic; 022import org.apache.maven.doxia.document.DocumentTOC; 023import org.apache.maven.doxia.document.DocumentTOCItem; 024import org.apache.maven.doxia.document.DocumentTemplate; 025import org.codehaus.plexus.util.ReaderFactory; 026import org.codehaus.plexus.util.xml.pull.EntityReplacementMap; 027import org.codehaus.plexus.util.xml.pull.MXParser; 028import org.codehaus.plexus.util.xml.pull.XmlPullParser; 029import org.codehaus.plexus.util.xml.pull.XmlPullParserException; 030 031/** 032 * Class DocumentXpp3Reader. 033 * 034 * @version $Revision$ $Date$ 035 */ 036@SuppressWarnings( "all" ) 037public class DocumentXpp3Reader 038{ 039 040 //--------------------------/ 041 //- Class/Member Variables -/ 042 //--------------------------/ 043 044 /** 045 * If set the parser will be loaded with all single characters 046 * from the XHTML specification. 047 * The entities used: 048 * <ul> 049 * <li>http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent</li> 050 * <li>http://www.w3.org/TR/xhtml1/DTD/xhtml-special.ent</li> 051 * <li>http://www.w3.org/TR/xhtml1/DTD/xhtml-symbol.ent</li> 052 * </ul> 053 */ 054 private boolean addDefaultEntities = true; 055 056 057 //-----------/ 058 //- Methods -/ 059 //-----------/ 060 061 /** 062 * Method checkFieldWithDuplicate. 063 * 064 * @param parser 065 * @param parsed 066 * @param alias 067 * @param tagName 068 * @throws XmlPullParserException 069 * @return boolean 070 */ 071 private boolean checkFieldWithDuplicate( XmlPullParser parser, String tagName, String alias, java.util.Set parsed ) 072 throws XmlPullParserException 073 { 074 if ( !( parser.getName().equals( tagName ) || parser.getName().equals( alias ) ) ) 075 { 076 return false; 077 } 078 if ( !parsed.add( tagName ) ) 079 { 080 throw new XmlPullParserException( "Duplicated tag: '" + tagName + "'", parser, null ); 081 } 082 return true; 083 } //-- boolean checkFieldWithDuplicate( XmlPullParser, String, String, java.util.Set ) 084 085 /** 086 * Method checkUnknownAttribute. 087 * 088 * @param parser 089 * @param strict 090 * @param tagName 091 * @param attribute 092 * @throws XmlPullParserException 093 * @throws IOException 094 */ 095 private void checkUnknownAttribute( XmlPullParser parser, String attribute, String tagName, boolean strict ) 096 throws XmlPullParserException, IOException 097 { 098 // strictXmlAttributes = true for model: if strict == true, not only elements are checked but attributes too 099 if ( strict ) 100 { 101 throw new XmlPullParserException( "Unknown attribute '" + attribute + "' for tag '" + tagName + "'", parser, null ); 102 } 103 } //-- void checkUnknownAttribute( XmlPullParser, String, String, boolean ) 104 105 /** 106 * Method checkUnknownElement. 107 * 108 * @param parser 109 * @param strict 110 * @throws XmlPullParserException 111 * @throws IOException 112 */ 113 private void checkUnknownElement( XmlPullParser parser, boolean strict ) 114 throws XmlPullParserException, IOException 115 { 116 if ( strict ) 117 { 118 throw new XmlPullParserException( "Unrecognised tag: '" + parser.getName() + "'", parser, null ); 119 } 120 121 for ( int unrecognizedTagCount = 1; unrecognizedTagCount > 0; ) 122 { 123 int eventType = parser.next(); 124 if ( eventType == XmlPullParser.START_TAG ) 125 { 126 unrecognizedTagCount++; 127 } 128 else if ( eventType == XmlPullParser.END_TAG ) 129 { 130 unrecognizedTagCount--; 131 } 132 } 133 } //-- void checkUnknownElement( XmlPullParser, boolean ) 134 135 /** 136 * Returns the state of the "add default entities" flag. 137 * 138 * @return boolean 139 */ 140 public boolean getAddDefaultEntities() 141 { 142 return addDefaultEntities; 143 } //-- boolean getAddDefaultEntities() 144 145 /** 146 * Method getBooleanValue. 147 * 148 * @param s 149 * @param parser 150 * @param attribute 151 * @throws XmlPullParserException 152 * @return boolean 153 */ 154 private boolean getBooleanValue( String s, String attribute, XmlPullParser parser ) 155 throws XmlPullParserException 156 { 157 return getBooleanValue( s, attribute, parser, null ); 158 } //-- boolean getBooleanValue( String, String, XmlPullParser ) 159 160 /** 161 * Method getBooleanValue. 162 * 163 * @param s 164 * @param defaultValue 165 * @param parser 166 * @param attribute 167 * @throws XmlPullParserException 168 * @return boolean 169 */ 170 private boolean getBooleanValue( String s, String attribute, XmlPullParser parser, String defaultValue ) 171 throws XmlPullParserException 172 { 173 if ( s != null && s.length() != 0 ) 174 { 175 return Boolean.valueOf( s ).booleanValue(); 176 } 177 if ( defaultValue != null ) 178 { 179 return Boolean.valueOf( defaultValue ).booleanValue(); 180 } 181 return false; 182 } //-- boolean getBooleanValue( String, String, XmlPullParser, String ) 183 184 /** 185 * Method getByteValue. 186 * 187 * @param s 188 * @param strict 189 * @param parser 190 * @param attribute 191 * @throws XmlPullParserException 192 * @return byte 193 */ 194 private byte getByteValue( String s, String attribute, XmlPullParser parser, boolean strict ) 195 throws XmlPullParserException 196 { 197 if ( s != null ) 198 { 199 try 200 { 201 return Byte.valueOf( s ).byteValue(); 202 } 203 catch ( NumberFormatException nfe ) 204 { 205 if ( strict ) 206 { 207 throw new XmlPullParserException( "Unable to parse element '" + attribute + "', must be a byte", parser, nfe ); 208 } 209 } 210 } 211 return 0; 212 } //-- byte getByteValue( String, String, XmlPullParser, boolean ) 213 214 /** 215 * Method getCharacterValue. 216 * 217 * @param s 218 * @param parser 219 * @param attribute 220 * @throws XmlPullParserException 221 * @return char 222 */ 223 private char getCharacterValue( String s, String attribute, XmlPullParser parser ) 224 throws XmlPullParserException 225 { 226 if ( s != null ) 227 { 228 return s.charAt( 0 ); 229 } 230 return 0; 231 } //-- char getCharacterValue( String, String, XmlPullParser ) 232 233 /** 234 * Method getDateValue. 235 * 236 * @param s 237 * @param parser 238 * @param attribute 239 * @throws XmlPullParserException 240 * @return Date 241 */ 242 private java.util.Date getDateValue( String s, String attribute, XmlPullParser parser ) 243 throws XmlPullParserException 244 { 245 return getDateValue( s, attribute, null, parser ); 246 } //-- java.util.Date getDateValue( String, String, XmlPullParser ) 247 248 /** 249 * Method getDateValue. 250 * 251 * @param s 252 * @param parser 253 * @param dateFormat 254 * @param attribute 255 * @throws XmlPullParserException 256 * @return Date 257 */ 258 private java.util.Date getDateValue( String s, String attribute, String dateFormat, XmlPullParser parser ) 259 throws XmlPullParserException 260 { 261 if ( s != null ) 262 { 263 String effectiveDateFormat = dateFormat; 264 if ( dateFormat == null ) 265 { 266 effectiveDateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS"; 267 } 268 if ( "long".equals( effectiveDateFormat ) ) 269 { 270 try 271 { 272 return new java.util.Date( Long.parseLong( s ) ); 273 } 274 catch ( NumberFormatException e ) 275 { 276 throw new XmlPullParserException( e.getMessage(), parser, e ); 277 } 278 } 279 else 280 { 281 try 282 { 283 DateFormat dateParser = new java.text.SimpleDateFormat( effectiveDateFormat, java.util.Locale.US ); 284 return dateParser.parse( s ); 285 } 286 catch ( java.text.ParseException e ) 287 { 288 throw new XmlPullParserException( e.getMessage(), parser, e ); 289 } 290 } 291 } 292 return null; 293 } //-- java.util.Date getDateValue( String, String, String, XmlPullParser ) 294 295 /** 296 * Method getDoubleValue. 297 * 298 * @param s 299 * @param strict 300 * @param parser 301 * @param attribute 302 * @throws XmlPullParserException 303 * @return double 304 */ 305 private double getDoubleValue( String s, String attribute, XmlPullParser parser, boolean strict ) 306 throws XmlPullParserException 307 { 308 if ( s != null ) 309 { 310 try 311 { 312 return Double.valueOf( s ).doubleValue(); 313 } 314 catch ( NumberFormatException nfe ) 315 { 316 if ( strict ) 317 { 318 throw new XmlPullParserException( "Unable to parse element '" + attribute + "', must be a floating point number", parser, nfe ); 319 } 320 } 321 } 322 return 0; 323 } //-- double getDoubleValue( String, String, XmlPullParser, boolean ) 324 325 /** 326 * Method getFloatValue. 327 * 328 * @param s 329 * @param strict 330 * @param parser 331 * @param attribute 332 * @throws XmlPullParserException 333 * @return float 334 */ 335 private float getFloatValue( String s, String attribute, XmlPullParser parser, boolean strict ) 336 throws XmlPullParserException 337 { 338 if ( s != null ) 339 { 340 try 341 { 342 return Float.valueOf( s ).floatValue(); 343 } 344 catch ( NumberFormatException nfe ) 345 { 346 if ( strict ) 347 { 348 throw new XmlPullParserException( "Unable to parse element '" + attribute + "', must be a floating point number", parser, nfe ); 349 } 350 } 351 } 352 return 0; 353 } //-- float getFloatValue( String, String, XmlPullParser, boolean ) 354 355 /** 356 * Method getIntegerValue. 357 * 358 * @param s 359 * @param strict 360 * @param parser 361 * @param attribute 362 * @throws XmlPullParserException 363 * @return int 364 */ 365 private int getIntegerValue( String s, String attribute, XmlPullParser parser, boolean strict ) 366 throws XmlPullParserException 367 { 368 if ( s != null ) 369 { 370 try 371 { 372 return Integer.valueOf( s ).intValue(); 373 } 374 catch ( NumberFormatException nfe ) 375 { 376 if ( strict ) 377 { 378 throw new XmlPullParserException( "Unable to parse element '" + attribute + "', must be an integer", parser, nfe ); 379 } 380 } 381 } 382 return 0; 383 } //-- int getIntegerValue( String, String, XmlPullParser, boolean ) 384 385 /** 386 * Method getLongValue. 387 * 388 * @param s 389 * @param strict 390 * @param parser 391 * @param attribute 392 * @throws XmlPullParserException 393 * @return long 394 */ 395 private long getLongValue( String s, String attribute, XmlPullParser parser, boolean strict ) 396 throws XmlPullParserException 397 { 398 if ( s != null ) 399 { 400 try 401 { 402 return Long.valueOf( s ).longValue(); 403 } 404 catch ( NumberFormatException nfe ) 405 { 406 if ( strict ) 407 { 408 throw new XmlPullParserException( "Unable to parse element '" + attribute + "', must be a long integer", parser, nfe ); 409 } 410 } 411 } 412 return 0; 413 } //-- long getLongValue( String, String, XmlPullParser, boolean ) 414 415 /** 416 * Method getRequiredAttributeValue. 417 * 418 * @param s 419 * @param strict 420 * @param parser 421 * @param attribute 422 * @throws XmlPullParserException 423 * @return String 424 */ 425 private String getRequiredAttributeValue( String s, String attribute, XmlPullParser parser, boolean strict ) 426 throws XmlPullParserException 427 { 428 if ( s == null ) 429 { 430 if ( strict ) 431 { 432 throw new XmlPullParserException( "Missing required value for attribute '" + attribute + "'", parser, null ); 433 } 434 } 435 return s; 436 } //-- String getRequiredAttributeValue( String, String, XmlPullParser, boolean ) 437 438 /** 439 * Method getShortValue. 440 * 441 * @param s 442 * @param strict 443 * @param parser 444 * @param attribute 445 * @throws XmlPullParserException 446 * @return short 447 */ 448 private short getShortValue( String s, String attribute, XmlPullParser parser, boolean strict ) 449 throws XmlPullParserException 450 { 451 if ( s != null ) 452 { 453 try 454 { 455 return Short.valueOf( s ).shortValue(); 456 } 457 catch ( NumberFormatException nfe ) 458 { 459 if ( strict ) 460 { 461 throw new XmlPullParserException( "Unable to parse element '" + attribute + "', must be a short integer", parser, nfe ); 462 } 463 } 464 } 465 return 0; 466 } //-- short getShortValue( String, String, XmlPullParser, boolean ) 467 468 /** 469 * Method getTrimmedValue. 470 * 471 * @param s 472 * @return String 473 */ 474 private String getTrimmedValue( String s ) 475 { 476 if ( s != null ) 477 { 478 s = s.trim(); 479 } 480 return s; 481 } //-- String getTrimmedValue( String ) 482 483 /** 484 * Method nextTag. 485 * 486 * @param parser 487 * @throws IOException 488 * @throws XmlPullParserException 489 * @return int 490 */ 491 private int nextTag( XmlPullParser parser ) 492 throws IOException, XmlPullParserException 493 { 494 int eventType = parser.next(); 495 if ( eventType == XmlPullParser.TEXT ) 496 { 497 eventType = parser.next(); 498 } 499 if ( eventType != XmlPullParser.START_TAG && eventType != XmlPullParser.END_TAG ) 500 { 501 throw new XmlPullParserException( "expected START_TAG or END_TAG not " + XmlPullParser.TYPES[eventType], parser, null ); 502 } 503 return eventType; 504 } //-- int nextTag( XmlPullParser ) 505 506 /** 507 * @see ReaderFactory#newXmlReader 508 * 509 * @param reader 510 * @param strict 511 * @throws IOException 512 * @throws XmlPullParserException 513 * @return DocumentModel 514 */ 515 public DocumentModel read( Reader reader, boolean strict ) 516 throws IOException, XmlPullParserException 517 { 518 XmlPullParser parser = addDefaultEntities ? new MXParser(EntityReplacementMap.defaultEntityReplacementMap) : new MXParser( ); 519 520 parser.setInput( reader ); 521 522 523 return read( parser, strict ); 524 } //-- DocumentModel read( Reader, boolean ) 525 526 /** 527 * @see ReaderFactory#newXmlReader 528 * 529 * @param reader 530 * @throws IOException 531 * @throws XmlPullParserException 532 * @return DocumentModel 533 */ 534 public DocumentModel read( Reader reader ) 535 throws IOException, XmlPullParserException 536 { 537 return read( reader, true ); 538 } //-- DocumentModel read( Reader ) 539 540 /** 541 * Method read. 542 * 543 * @param in 544 * @param strict 545 * @throws IOException 546 * @throws XmlPullParserException 547 * @return DocumentModel 548 */ 549 public DocumentModel read( InputStream in, boolean strict ) 550 throws IOException, XmlPullParserException 551 { 552 return read( ReaderFactory.newXmlReader( in ), strict ); 553 } //-- DocumentModel read( InputStream, boolean ) 554 555 /** 556 * Method read. 557 * 558 * @param in 559 * @throws IOException 560 * @throws XmlPullParserException 561 * @return DocumentModel 562 */ 563 public DocumentModel read( InputStream in ) 564 throws IOException, XmlPullParserException 565 { 566 return read( ReaderFactory.newXmlReader( in ) ); 567 } //-- DocumentModel read( InputStream ) 568 569 /** 570 * Method parseDocumentAuthor. 571 * 572 * @param parser 573 * @param strict 574 * @throws IOException 575 * @throws XmlPullParserException 576 * @return DocumentAuthor 577 */ 578 private DocumentAuthor parseDocumentAuthor( XmlPullParser parser, boolean strict ) 579 throws IOException, XmlPullParserException 580 { 581 String tagName = parser.getName(); 582 DocumentAuthor documentAuthor = new DocumentAuthor(); 583 for ( int i = parser.getAttributeCount() - 1; i >= 0; i-- ) 584 { 585 String name = parser.getAttributeName( i ); 586 String value = parser.getAttributeValue( i ); 587 588 if ( name.indexOf( ':' ) >= 0 ) 589 { 590 // just ignore attributes with non-default namespace (for example: xmlns:xsi) 591 } 592 else 593 { 594 checkUnknownAttribute( parser, name, tagName, strict ); 595 } 596 } 597 java.util.Set parsed = new java.util.HashSet(); 598 while ( ( strict ? parser.nextTag() : nextTag( parser ) ) == XmlPullParser.START_TAG ) 599 { 600 if ( checkFieldWithDuplicate( parser, "firstName", null, parsed ) ) 601 { 602 documentAuthor.setFirstName( getTrimmedValue( parser.nextText() ) ); 603 } 604 else if ( checkFieldWithDuplicate( parser, "lastName", null, parsed ) ) 605 { 606 documentAuthor.setLastName( getTrimmedValue( parser.nextText() ) ); 607 } 608 else if ( checkFieldWithDuplicate( parser, "name", null, parsed ) ) 609 { 610 documentAuthor.setName( getTrimmedValue( parser.nextText() ) ); 611 } 612 else if ( checkFieldWithDuplicate( parser, "initials", null, parsed ) ) 613 { 614 documentAuthor.setInitials( getTrimmedValue( parser.nextText() ) ); 615 } 616 else if ( checkFieldWithDuplicate( parser, "title", null, parsed ) ) 617 { 618 documentAuthor.setTitle( getTrimmedValue( parser.nextText() ) ); 619 } 620 else if ( checkFieldWithDuplicate( parser, "position", null, parsed ) ) 621 { 622 documentAuthor.setPosition( getTrimmedValue( parser.nextText() ) ); 623 } 624 else if ( checkFieldWithDuplicate( parser, "email", null, parsed ) ) 625 { 626 documentAuthor.setEmail( getTrimmedValue( parser.nextText() ) ); 627 } 628 else if ( checkFieldWithDuplicate( parser, "phoneNumber", null, parsed ) ) 629 { 630 documentAuthor.setPhoneNumber( getTrimmedValue( parser.nextText() ) ); 631 } 632 else if ( checkFieldWithDuplicate( parser, "faxNumber", null, parsed ) ) 633 { 634 documentAuthor.setFaxNumber( getTrimmedValue( parser.nextText() ) ); 635 } 636 else if ( checkFieldWithDuplicate( parser, "companyName", null, parsed ) ) 637 { 638 documentAuthor.setCompanyName( getTrimmedValue( parser.nextText() ) ); 639 } 640 else if ( checkFieldWithDuplicate( parser, "street", null, parsed ) ) 641 { 642 documentAuthor.setStreet( getTrimmedValue( parser.nextText() ) ); 643 } 644 else if ( checkFieldWithDuplicate( parser, "city", null, parsed ) ) 645 { 646 documentAuthor.setCity( getTrimmedValue( parser.nextText() ) ); 647 } 648 else if ( checkFieldWithDuplicate( parser, "postalCode", null, parsed ) ) 649 { 650 documentAuthor.setPostalCode( getTrimmedValue( parser.nextText() ) ); 651 } 652 else if ( checkFieldWithDuplicate( parser, "country", null, parsed ) ) 653 { 654 documentAuthor.setCountry( getTrimmedValue( parser.nextText() ) ); 655 } 656 else if ( checkFieldWithDuplicate( parser, "state", null, parsed ) ) 657 { 658 documentAuthor.setState( getTrimmedValue( parser.nextText() ) ); 659 } 660 else 661 { 662 checkUnknownElement( parser, strict ); 663 } 664 } 665 return documentAuthor; 666 } //-- DocumentAuthor parseDocumentAuthor( XmlPullParser, boolean ) 667 668 /** 669 * Method parseDocumentCover. 670 * 671 * @param parser 672 * @param strict 673 * @throws IOException 674 * @throws XmlPullParserException 675 * @return DocumentCover 676 */ 677 private DocumentCover parseDocumentCover( XmlPullParser parser, boolean strict ) 678 throws IOException, XmlPullParserException 679 { 680 String tagName = parser.getName(); 681 DocumentCover documentCover = new DocumentCover(); 682 for ( int i = parser.getAttributeCount() - 1; i >= 0; i-- ) 683 { 684 String name = parser.getAttributeName( i ); 685 String value = parser.getAttributeValue( i ); 686 687 if ( name.indexOf( ':' ) >= 0 ) 688 { 689 // just ignore attributes with non-default namespace (for example: xmlns:xsi) 690 } 691 else 692 { 693 checkUnknownAttribute( parser, name, tagName, strict ); 694 } 695 } 696 java.util.Set parsed = new java.util.HashSet(); 697 while ( ( strict ? parser.nextTag() : nextTag( parser ) ) == XmlPullParser.START_TAG ) 698 { 699 if ( checkFieldWithDuplicate( parser, "coverTitle", null, parsed ) ) 700 { 701 documentCover.setCoverTitle( getTrimmedValue( parser.nextText() ) ); 702 } 703 else if ( checkFieldWithDuplicate( parser, "coverSubTitle", null, parsed ) ) 704 { 705 documentCover.setCoverSubTitle( getTrimmedValue( parser.nextText() ) ); 706 } 707 else if ( checkFieldWithDuplicate( parser, "coverVersion", null, parsed ) ) 708 { 709 documentCover.setCoverVersion( getTrimmedValue( parser.nextText() ) ); 710 } 711 else if ( checkFieldWithDuplicate( parser, "coverType", null, parsed ) ) 712 { 713 documentCover.setCoverType( getTrimmedValue( parser.nextText() ) ); 714 } 715 else if ( checkFieldWithDuplicate( parser, "coverDate", null, parsed ) ) 716 { 717 String dateFormat = null; 718 documentCover.setCoverDate( getDateValue( getTrimmedValue( parser.nextText() ), "coverDate", dateFormat, parser ) ); 719 } 720 else if ( checkFieldWithDuplicate( parser, "coverdate", null, parsed ) ) 721 { 722 documentCover.setCoverdate( getTrimmedValue( parser.nextText() ) ); 723 } 724 else if ( checkFieldWithDuplicate( parser, "authors", null, parsed ) ) 725 { 726 java.util.List authors = new java.util.ArrayList/*<DocumentAuthor>*/(); 727 documentCover.setAuthors( authors ); 728 while ( parser.nextTag() == XmlPullParser.START_TAG ) 729 { 730 if ( "author".equals( parser.getName() ) ) 731 { 732 authors.add( parseDocumentAuthor( parser, strict ) ); 733 } 734 else 735 { 736 checkUnknownElement( parser, strict ); 737 } 738 } 739 } 740 else if ( checkFieldWithDuplicate( parser, "author", null, parsed ) ) 741 { 742 documentCover.setAuthor( getTrimmedValue( parser.nextText() ) ); 743 } 744 else if ( checkFieldWithDuplicate( parser, "projectName", null, parsed ) ) 745 { 746 documentCover.setProjectName( getTrimmedValue( parser.nextText() ) ); 747 } 748 else if ( checkFieldWithDuplicate( parser, "projectLogo", null, parsed ) ) 749 { 750 documentCover.setProjectLogo( getTrimmedValue( parser.nextText() ) ); 751 } 752 else if ( checkFieldWithDuplicate( parser, "companyName", null, parsed ) ) 753 { 754 documentCover.setCompanyName( getTrimmedValue( parser.nextText() ) ); 755 } 756 else if ( checkFieldWithDuplicate( parser, "companyLogo", null, parsed ) ) 757 { 758 documentCover.setCompanyLogo( getTrimmedValue( parser.nextText() ) ); 759 } 760 else 761 { 762 checkUnknownElement( parser, strict ); 763 } 764 } 765 return documentCover; 766 } //-- DocumentCover parseDocumentCover( XmlPullParser, boolean ) 767 768 /** 769 * Method parseDocumentHyperlinkBehaviour. 770 * 771 * @param parser 772 * @param strict 773 * @throws IOException 774 * @throws XmlPullParserException 775 * @return DocumentHyperlinkBehaviour 776 */ 777 private DocumentHyperlinkBehaviour parseDocumentHyperlinkBehaviour( XmlPullParser parser, boolean strict ) 778 throws IOException, XmlPullParserException 779 { 780 String tagName = parser.getName(); 781 DocumentHyperlinkBehaviour documentHyperlinkBehaviour = new DocumentHyperlinkBehaviour(); 782 for ( int i = parser.getAttributeCount() - 1; i >= 0; i-- ) 783 { 784 String name = parser.getAttributeName( i ); 785 String value = parser.getAttributeValue( i ); 786 787 if ( name.indexOf( ':' ) >= 0 ) 788 { 789 // just ignore attributes with non-default namespace (for example: xmlns:xsi) 790 } 791 else if ( "targetFrame".equals( name ) ) 792 { 793 documentHyperlinkBehaviour.setTargetFrame( getTrimmedValue( value ) ); 794 } 795 else 796 { 797 checkUnknownAttribute( parser, name, tagName, strict ); 798 } 799 } 800 java.util.Set parsed = new java.util.HashSet(); 801 while ( ( strict ? parser.nextTag() : nextTag( parser ) ) == XmlPullParser.START_TAG ) 802 { 803 checkUnknownElement( parser, strict ); 804 } 805 return documentHyperlinkBehaviour; 806 } //-- DocumentHyperlinkBehaviour parseDocumentHyperlinkBehaviour( XmlPullParser, boolean ) 807 808 /** 809 * Method parseDocumentMeta. 810 * 811 * @param parser 812 * @param strict 813 * @throws IOException 814 * @throws XmlPullParserException 815 * @return DocumentMeta 816 */ 817 private DocumentMeta parseDocumentMeta( XmlPullParser parser, boolean strict ) 818 throws IOException, XmlPullParserException 819 { 820 String tagName = parser.getName(); 821 DocumentMeta documentMeta = new DocumentMeta(); 822 for ( int i = parser.getAttributeCount() - 1; i >= 0; i-- ) 823 { 824 String name = parser.getAttributeName( i ); 825 String value = parser.getAttributeValue( i ); 826 827 if ( name.indexOf( ':' ) >= 0 ) 828 { 829 // just ignore attributes with non-default namespace (for example: xmlns:xsi) 830 } 831 else 832 { 833 checkUnknownAttribute( parser, name, tagName, strict ); 834 } 835 } 836 java.util.Set parsed = new java.util.HashSet(); 837 while ( ( strict ? parser.nextTag() : nextTag( parser ) ) == XmlPullParser.START_TAG ) 838 { 839 if ( checkFieldWithDuplicate( parser, "title", null, parsed ) ) 840 { 841 documentMeta.setTitle( getTrimmedValue( parser.nextText() ) ); 842 } 843 else if ( checkFieldWithDuplicate( parser, "author", null, parsed ) ) 844 { 845 documentMeta.setAuthor( getTrimmedValue( parser.nextText() ) ); 846 } 847 else if ( checkFieldWithDuplicate( parser, "authors", null, parsed ) ) 848 { 849 java.util.List authors = new java.util.ArrayList/*<DocumentAuthor>*/(); 850 documentMeta.setAuthors( authors ); 851 while ( parser.nextTag() == XmlPullParser.START_TAG ) 852 { 853 if ( "author".equals( parser.getName() ) ) 854 { 855 authors.add( parseDocumentAuthor( parser, strict ) ); 856 } 857 else 858 { 859 checkUnknownElement( parser, strict ); 860 } 861 } 862 } 863 else if ( checkFieldWithDuplicate( parser, "subject", null, parsed ) ) 864 { 865 documentMeta.setSubject( getTrimmedValue( parser.nextText() ) ); 866 } 867 else if ( checkFieldWithDuplicate( parser, "keywords", null, parsed ) ) 868 { 869 documentMeta.setKeywords( getTrimmedValue( parser.nextText() ) ); 870 } 871 else if ( checkFieldWithDuplicate( parser, "keyWords", null, parsed ) ) 872 { 873 java.util.List keyWords = new java.util.ArrayList/*<String>*/(); 874 documentMeta.setKeyWords( keyWords ); 875 while ( parser.nextTag() == XmlPullParser.START_TAG ) 876 { 877 if ( "keyWord".equals( parser.getName() ) ) 878 { 879 keyWords.add( getTrimmedValue( parser.nextText() ) ); 880 } 881 else 882 { 883 checkUnknownElement( parser, strict ); 884 } 885 } 886 } 887 else if ( checkFieldWithDuplicate( parser, "pageSize", null, parsed ) ) 888 { 889 documentMeta.setPageSize( getTrimmedValue( parser.nextText() ) ); 890 } 891 else if ( checkFieldWithDuplicate( parser, "generator", null, parsed ) ) 892 { 893 documentMeta.setGenerator( getTrimmedValue( parser.nextText() ) ); 894 } 895 else if ( checkFieldWithDuplicate( parser, "description", null, parsed ) ) 896 { 897 documentMeta.setDescription( getTrimmedValue( parser.nextText() ) ); 898 } 899 else if ( checkFieldWithDuplicate( parser, "initialCreator", null, parsed ) ) 900 { 901 documentMeta.setInitialCreator( getTrimmedValue( parser.nextText() ) ); 902 } 903 else if ( checkFieldWithDuplicate( parser, "creator", null, parsed ) ) 904 { 905 documentMeta.setCreator( getTrimmedValue( parser.nextText() ) ); 906 } 907 else if ( checkFieldWithDuplicate( parser, "printedBy", null, parsed ) ) 908 { 909 documentMeta.setPrintedBy( getTrimmedValue( parser.nextText() ) ); 910 } 911 else if ( checkFieldWithDuplicate( parser, "creationDate", null, parsed ) ) 912 { 913 String dateFormat = null; 914 documentMeta.setCreationDate( getDateValue( getTrimmedValue( parser.nextText() ), "creationDate", dateFormat, parser ) ); 915 } 916 else if ( checkFieldWithDuplicate( parser, "creationdate", null, parsed ) ) 917 { 918 documentMeta.setCreationdate( getTrimmedValue( parser.nextText() ) ); 919 } 920 else if ( checkFieldWithDuplicate( parser, "date", null, parsed ) ) 921 { 922 String dateFormat = null; 923 documentMeta.setDate( getDateValue( getTrimmedValue( parser.nextText() ), "date", dateFormat, parser ) ); 924 } 925 else if ( checkFieldWithDuplicate( parser, "modifydate", null, parsed ) ) 926 { 927 documentMeta.setModifydate( getTrimmedValue( parser.nextText() ) ); 928 } 929 else if ( checkFieldWithDuplicate( parser, "printDate", null, parsed ) ) 930 { 931 String dateFormat = null; 932 documentMeta.setPrintDate( getDateValue( getTrimmedValue( parser.nextText() ), "printDate", dateFormat, parser ) ); 933 } 934 else if ( checkFieldWithDuplicate( parser, "printdate", null, parsed ) ) 935 { 936 documentMeta.setPrintdate( getTrimmedValue( parser.nextText() ) ); 937 } 938 else if ( checkFieldWithDuplicate( parser, "template", null, parsed ) ) 939 { 940 documentMeta.setTemplate( parseDocumentTemplate( parser, strict ) ); 941 } 942 else if ( checkFieldWithDuplicate( parser, "hyperlinkBehaviour", null, parsed ) ) 943 { 944 documentMeta.setHyperlinkBehaviour( parseDocumentHyperlinkBehaviour( parser, strict ) ); 945 } 946 else if ( checkFieldWithDuplicate( parser, "language", null, parsed ) ) 947 { 948 documentMeta.setLanguage( getTrimmedValue( parser.nextText() ) ); 949 } 950 else if ( checkFieldWithDuplicate( parser, "editingCycles", null, parsed ) ) 951 { 952 documentMeta.setEditingCycles( getLongValue( getTrimmedValue( parser.nextText() ), "editingCycles", parser, strict ) ); 953 } 954 else if ( checkFieldWithDuplicate( parser, "editingDuration", null, parsed ) ) 955 { 956 documentMeta.setEditingDuration( getLongValue( getTrimmedValue( parser.nextText() ), "editingDuration", parser, strict ) ); 957 } 958 else if ( checkFieldWithDuplicate( parser, "documentStatistic", null, parsed ) ) 959 { 960 documentMeta.setDocumentStatistic( parseDocumentStatistic( parser, strict ) ); 961 } 962 else if ( checkFieldWithDuplicate( parser, "confidential", null, parsed ) ) 963 { 964 documentMeta.setConfidential( getBooleanValue( getTrimmedValue( parser.nextText() ), "confidential", parser, "false" ) ); 965 } 966 else if ( checkFieldWithDuplicate( parser, "draft", null, parsed ) ) 967 { 968 documentMeta.setDraft( getBooleanValue( getTrimmedValue( parser.nextText() ), "draft", parser, "false" ) ); 969 } 970 else 971 { 972 checkUnknownElement( parser, strict ); 973 } 974 } 975 return documentMeta; 976 } //-- DocumentMeta parseDocumentMeta( XmlPullParser, boolean ) 977 978 /** 979 * Method parseDocumentModel. 980 * 981 * @param parser 982 * @param strict 983 * @throws IOException 984 * @throws XmlPullParserException 985 * @return DocumentModel 986 */ 987 private DocumentModel parseDocumentModel( XmlPullParser parser, boolean strict ) 988 throws IOException, XmlPullParserException 989 { 990 String tagName = parser.getName(); 991 DocumentModel documentModel = new DocumentModel(); 992 for ( int i = parser.getAttributeCount() - 1; i >= 0; i-- ) 993 { 994 String name = parser.getAttributeName( i ); 995 String value = parser.getAttributeValue( i ); 996 997 if ( name.indexOf( ':' ) >= 0 ) 998 { 999 // just ignore attributes with non-default namespace (for example: xmlns:xsi) 1000 } 1001 else if ( "xmlns".equals( name ) ) 1002 { 1003 // ignore xmlns attribute in root class, which is a reserved attribute name 1004 } 1005 else if ( "outputName".equals( name ) ) 1006 { 1007 documentModel.setOutputName( getTrimmedValue( value ) ); 1008 } 1009 else 1010 { 1011 checkUnknownAttribute( parser, name, tagName, strict ); 1012 } 1013 } 1014 java.util.Set parsed = new java.util.HashSet(); 1015 while ( ( strict ? parser.nextTag() : nextTag( parser ) ) == XmlPullParser.START_TAG ) 1016 { 1017 if ( checkFieldWithDuplicate( parser, "meta", null, parsed ) ) 1018 { 1019 documentModel.setMeta( parseDocumentMeta( parser, strict ) ); 1020 } 1021 else if ( checkFieldWithDuplicate( parser, "toc", null, parsed ) ) 1022 { 1023 documentModel.setToc( parseDocumentTOC( parser, strict ) ); 1024 } 1025 else if ( checkFieldWithDuplicate( parser, "cover", null, parsed ) ) 1026 { 1027 documentModel.setCover( parseDocumentCover( parser, strict ) ); 1028 } 1029 else 1030 { 1031 checkUnknownElement( parser, strict ); 1032 } 1033 } 1034 return documentModel; 1035 } //-- DocumentModel parseDocumentModel( XmlPullParser, boolean ) 1036 1037 /** 1038 * Method parseDocumentStatistic. 1039 * 1040 * @param parser 1041 * @param strict 1042 * @throws IOException 1043 * @throws XmlPullParserException 1044 * @return DocumentStatistic 1045 */ 1046 private DocumentStatistic parseDocumentStatistic( XmlPullParser parser, boolean strict ) 1047 throws IOException, XmlPullParserException 1048 { 1049 String tagName = parser.getName(); 1050 DocumentStatistic documentStatistic = new DocumentStatistic(); 1051 for ( int i = parser.getAttributeCount() - 1; i >= 0; i-- ) 1052 { 1053 String name = parser.getAttributeName( i ); 1054 String value = parser.getAttributeValue( i ); 1055 1056 if ( name.indexOf( ':' ) >= 0 ) 1057 { 1058 // just ignore attributes with non-default namespace (for example: xmlns:xsi) 1059 } 1060 else if ( "pageCount".equals( name ) ) 1061 { 1062 documentStatistic.setPageCount( getLongValue( getTrimmedValue( value ), "pageCount", parser, strict ) ); 1063 } 1064 else if ( "tableCount".equals( name ) ) 1065 { 1066 documentStatistic.setTableCount( getLongValue( getTrimmedValue( value ), "tableCount", parser, strict ) ); 1067 } 1068 else if ( "drawCount".equals( name ) ) 1069 { 1070 documentStatistic.setDrawCount( getLongValue( getTrimmedValue( value ), "drawCount", parser, strict ) ); 1071 } 1072 else if ( "imageCount".equals( name ) ) 1073 { 1074 documentStatistic.setImageCount( getLongValue( getTrimmedValue( value ), "imageCount", parser, strict ) ); 1075 } 1076 else if ( "objectCount".equals( name ) ) 1077 { 1078 documentStatistic.setObjectCount( getLongValue( getTrimmedValue( value ), "objectCount", parser, strict ) ); 1079 } 1080 else if ( "oleObjectCount".equals( name ) ) 1081 { 1082 documentStatistic.setOleObjectCount( getLongValue( getTrimmedValue( value ), "oleObjectCount", parser, strict ) ); 1083 } 1084 else if ( "paragraphCount".equals( name ) ) 1085 { 1086 documentStatistic.setParagraphCount( getLongValue( getTrimmedValue( value ), "paragraphCount", parser, strict ) ); 1087 } 1088 else if ( "wordCount".equals( name ) ) 1089 { 1090 documentStatistic.setWordCount( getLongValue( getTrimmedValue( value ), "wordCount", parser, strict ) ); 1091 } 1092 else if ( "characterCount".equals( name ) ) 1093 { 1094 documentStatistic.setCharacterCount( getLongValue( getTrimmedValue( value ), "characterCount", parser, strict ) ); 1095 } 1096 else if ( "rowCount".equals( name ) ) 1097 { 1098 documentStatistic.setRowCount( getLongValue( getTrimmedValue( value ), "rowCount", parser, strict ) ); 1099 } 1100 else if ( "frameCount".equals( name ) ) 1101 { 1102 documentStatistic.setFrameCount( getLongValue( getTrimmedValue( value ), "frameCount", parser, strict ) ); 1103 } 1104 else if ( "sentenceCount".equals( name ) ) 1105 { 1106 documentStatistic.setSentenceCount( getLongValue( getTrimmedValue( value ), "sentenceCount", parser, strict ) ); 1107 } 1108 else if ( "syllableCount".equals( name ) ) 1109 { 1110 documentStatistic.setSyllableCount( getLongValue( getTrimmedValue( value ), "syllableCount", parser, strict ) ); 1111 } 1112 else if ( "nonWhitespaceCharacterCount".equals( name ) ) 1113 { 1114 documentStatistic.setNonWhitespaceCharacterCount( getLongValue( getTrimmedValue( value ), "nonWhitespaceCharacterCount", parser, strict ) ); 1115 } 1116 else 1117 { 1118 checkUnknownAttribute( parser, name, tagName, strict ); 1119 } 1120 } 1121 java.util.Set parsed = new java.util.HashSet(); 1122 while ( ( strict ? parser.nextTag() : nextTag( parser ) ) == XmlPullParser.START_TAG ) 1123 { 1124 checkUnknownElement( parser, strict ); 1125 } 1126 return documentStatistic; 1127 } //-- DocumentStatistic parseDocumentStatistic( XmlPullParser, boolean ) 1128 1129 /** 1130 * Method parseDocumentTOC. 1131 * 1132 * @param parser 1133 * @param strict 1134 * @throws IOException 1135 * @throws XmlPullParserException 1136 * @return DocumentTOC 1137 */ 1138 private DocumentTOC parseDocumentTOC( XmlPullParser parser, boolean strict ) 1139 throws IOException, XmlPullParserException 1140 { 1141 String tagName = parser.getName(); 1142 DocumentTOC documentTOC = new DocumentTOC(); 1143 for ( int i = parser.getAttributeCount() - 1; i >= 0; i-- ) 1144 { 1145 String name = parser.getAttributeName( i ); 1146 String value = parser.getAttributeValue( i ); 1147 1148 if ( name.indexOf( ':' ) >= 0 ) 1149 { 1150 // just ignore attributes with non-default namespace (for example: xmlns:xsi) 1151 } 1152 else if ( "name".equals( name ) ) 1153 { 1154 documentTOC.setName( getTrimmedValue( value ) ); 1155 } 1156 else if ( "depth".equals( name ) ) 1157 { 1158 documentTOC.setDepth( getIntegerValue( getTrimmedValue( value ), "depth", parser, strict ) ); 1159 } 1160 else 1161 { 1162 checkUnknownAttribute( parser, name, tagName, strict ); 1163 } 1164 } 1165 java.util.Set parsed = new java.util.HashSet(); 1166 while ( ( strict ? parser.nextTag() : nextTag( parser ) ) == XmlPullParser.START_TAG ) 1167 { 1168 if ( "item".equals( parser.getName() ) ) 1169 { 1170 java.util.List items = documentTOC.getItems(); 1171 if ( items == null ) 1172 { 1173 items = new java.util.ArrayList/*<DocumentTOCItem>*/(); 1174 documentTOC.setItems( items ); 1175 } 1176 items.add( parseDocumentTOCItem( parser, strict ) ); 1177 } 1178 else 1179 { 1180 checkUnknownElement( parser, strict ); 1181 } 1182 } 1183 return documentTOC; 1184 } //-- DocumentTOC parseDocumentTOC( XmlPullParser, boolean ) 1185 1186 /** 1187 * Method parseDocumentTOCItem. 1188 * 1189 * @param parser 1190 * @param strict 1191 * @throws IOException 1192 * @throws XmlPullParserException 1193 * @return DocumentTOCItem 1194 */ 1195 private DocumentTOCItem parseDocumentTOCItem( XmlPullParser parser, boolean strict ) 1196 throws IOException, XmlPullParserException 1197 { 1198 String tagName = parser.getName(); 1199 DocumentTOCItem documentTOCItem = new DocumentTOCItem(); 1200 for ( int i = parser.getAttributeCount() - 1; i >= 0; i-- ) 1201 { 1202 String name = parser.getAttributeName( i ); 1203 String value = parser.getAttributeValue( i ); 1204 1205 if ( name.indexOf( ':' ) >= 0 ) 1206 { 1207 // just ignore attributes with non-default namespace (for example: xmlns:xsi) 1208 } 1209 else if ( "name".equals( name ) ) 1210 { 1211 documentTOCItem.setName( getTrimmedValue( value ) ); 1212 } 1213 else if ( "ref".equals( name ) ) 1214 { 1215 documentTOCItem.setRef( getTrimmedValue( value ) ); 1216 } 1217 else if ( "collapse".equals( name ) ) 1218 { 1219 documentTOCItem.setCollapse( getBooleanValue( getTrimmedValue( value ), "collapse", parser, "false" ) ); 1220 } 1221 else 1222 { 1223 checkUnknownAttribute( parser, name, tagName, strict ); 1224 } 1225 } 1226 java.util.Set parsed = new java.util.HashSet(); 1227 while ( ( strict ? parser.nextTag() : nextTag( parser ) ) == XmlPullParser.START_TAG ) 1228 { 1229 if ( "item".equals( parser.getName() ) ) 1230 { 1231 java.util.List items = documentTOCItem.getItems(); 1232 if ( items == null ) 1233 { 1234 items = new java.util.ArrayList/*<DocumentTOCItem>*/(); 1235 documentTOCItem.setItems( items ); 1236 } 1237 items.add( parseDocumentTOCItem( parser, strict ) ); 1238 } 1239 else 1240 { 1241 checkUnknownElement( parser, strict ); 1242 } 1243 } 1244 return documentTOCItem; 1245 } //-- DocumentTOCItem parseDocumentTOCItem( XmlPullParser, boolean ) 1246 1247 /** 1248 * Method parseDocumentTemplate. 1249 * 1250 * @param parser 1251 * @param strict 1252 * @throws IOException 1253 * @throws XmlPullParserException 1254 * @return DocumentTemplate 1255 */ 1256 private DocumentTemplate parseDocumentTemplate( XmlPullParser parser, boolean strict ) 1257 throws IOException, XmlPullParserException 1258 { 1259 String tagName = parser.getName(); 1260 DocumentTemplate documentTemplate = new DocumentTemplate(); 1261 for ( int i = parser.getAttributeCount() - 1; i >= 0; i-- ) 1262 { 1263 String name = parser.getAttributeName( i ); 1264 String value = parser.getAttributeValue( i ); 1265 1266 if ( name.indexOf( ':' ) >= 0 ) 1267 { 1268 // just ignore attributes with non-default namespace (for example: xmlns:xsi) 1269 } 1270 else if ( "href".equals( name ) ) 1271 { 1272 documentTemplate.setHref( getTrimmedValue( value ) ); 1273 } 1274 else if ( "title".equals( name ) ) 1275 { 1276 documentTemplate.setTitle( getTrimmedValue( value ) ); 1277 } 1278 else if ( "date".equals( name ) ) 1279 { 1280 String dateFormat = null; 1281 documentTemplate.setDate( getDateValue( getTrimmedValue( value ), "date", dateFormat, parser ) ); 1282 } 1283 else if ( "modifydate".equals( name ) ) 1284 { 1285 documentTemplate.setModifydate( getTrimmedValue( value ) ); 1286 } 1287 else 1288 { 1289 checkUnknownAttribute( parser, name, tagName, strict ); 1290 } 1291 } 1292 java.util.Set parsed = new java.util.HashSet(); 1293 while ( ( strict ? parser.nextTag() : nextTag( parser ) ) == XmlPullParser.START_TAG ) 1294 { 1295 checkUnknownElement( parser, strict ); 1296 } 1297 return documentTemplate; 1298 } //-- DocumentTemplate parseDocumentTemplate( XmlPullParser, boolean ) 1299 1300 /** 1301 * Method read. 1302 * 1303 * @param parser 1304 * @param strict 1305 * @throws IOException 1306 * @throws XmlPullParserException 1307 * @return DocumentModel 1308 */ 1309 private DocumentModel read( XmlPullParser parser, boolean strict ) 1310 throws IOException, XmlPullParserException 1311 { 1312 int eventType = parser.getEventType(); 1313 while ( eventType != XmlPullParser.END_DOCUMENT ) 1314 { 1315 if ( eventType == XmlPullParser.START_TAG ) 1316 { 1317 if ( strict && ! "document".equals( parser.getName() ) ) 1318 { 1319 throw new XmlPullParserException( "Expected root element 'document' but found '" + parser.getName() + "'", parser, null ); 1320 } 1321 DocumentModel documentModel = parseDocumentModel( parser, strict ); 1322 documentModel.setModelEncoding( parser.getInputEncoding() ); 1323 return documentModel; 1324 } 1325 eventType = parser.next(); 1326 } 1327 throw new XmlPullParserException( "Expected root element 'document' but found no element at all: invalid XML document", parser, null ); 1328 } //-- DocumentModel read( XmlPullParser, boolean ) 1329 1330 /** 1331 * Sets the state of the "add default entities" flag. 1332 * 1333 * @param addDefaultEntities 1334 */ 1335 public void setAddDefaultEntities( boolean addDefaultEntities ) 1336 { 1337 this.addDefaultEntities = addDefaultEntities; 1338 } //-- void setAddDefaultEntities( boolean ) 1339 1340}