1 20 21 25 26 package org.ozoneDB.xml; 27 28 import java.lang.reflect.*; 29 import java.io.*; 30 import java.util.*; 31 import org.w3c.dom.Document ; 32 import org.w3c.dom.DocumentType ; 33 import org.w3c.dom.html.HTMLDocument; 34 import org.ozoneDB.xml.dom.html.HTMLDocumentImpl; 35 import org.ozoneDB.util.LogWriter; 36 import org.ozoneDB.util.SimpleLogWriter; 37 43 44 83 public class DOMFactory extends java.lang.Object { 84 85 86 static LogWriter log = SimpleLogWriter.getInstance(); 87 94 public static Document createXMLDocument() { 95 return createDocument( DOCUMENT_XML ); 96 } 97 98 99 106 public static HTMLDocument createHTMLDocument() { 107 return (HTMLDocument)createDocument( DOCUMENT_HTML ); 108 } 109 110 111 118 public static DTDDocument createDTDDocument() { 119 return (DTDDocument)createDocument( DOCUMENT_DTD ); 120 } 121 122 123 137 public static Document createDocument( Class docClass ) { 138 docClass = getDocClass( docClass ); 141 if (docClass != null && docClass != Document .class && docClass != XMLDocument.class) { 144 try { 145 return (Document )docClass.newInstance(); 146 } catch (Exception except) { 147 log.newEntry(DOMFactory.class, "DOMFactory.createDocument: Could not create new instance of document class [" 148 + docClass.getName() + "] -- defaulting to Document", except, LogWriter.ERROR); 149 } 150 } 151 return new XMLDocument(); 152 } 153 154 155 180 244 245 252 255 256 257 282 285 286 287 294 298 299 316 377 378 379 392 395 396 397 414 417 418 419 432 435 436 437 443 public static String getProperty( String name ) { 444 return getProperties().getProperty( name ); 445 } 446 447 448 455 public static Properties getProperties() { 456 String className; 457 Class docClass; 458 459 if (_xmlProps == null) { 460 _xmlProps = new Properties(); 461 try { 462 _xmlProps.load( DOMFactory.class.getResourceAsStream( RESOURCE_PROPS ) ); 463 } catch (Exception except) { 464 log.newEntry(DOMFactory.class, "DOMFactory.getProperties: Failed to load properties from resource [" + RESOURCE_PROPS 465 + "]", except, LogWriter.ERROR ); 466 } 467 } 468 return _xmlProps; 469 } 470 471 472 483 public static Class getDocClass( Class docClass ) { 484 String prop; 485 486 if (docClass != null) { 489 if (docClass == DocumentType .class || docClass == DTDDocument.class) { 490 return DTDDocument.class; 491 } 492 if (!Document .class.isAssignableFrom( docClass )) { 493 throw new IllegalArgumentException ( "Requested document class is not a valid class." ); 494 } 495 } 496 prop = getProperty( "openxml.document.class" ); 500 if (prop != null) { 501 try { 502 docClass = Class.forName( prop ); 503 if (!Document .class.isAssignableFrom( docClass )) { 504 docClass = null; 505 log.newEntry(DOMFactory.class, "DOMFactory.getDocClass: Document class [" + prop 506 + "] is not a supported document class -- defaulting to Document", LogWriter.ERROR); 507 } 508 } catch (ClassNotFoundException except) { 509 log.newEntry(DOMFactory.class, "DOMFactory.getDocClass: Could not locate document class [" + prop 510 + "] -- defaulting to Document", LogWriter.ERROR ); 511 } 512 } 513 if (docClass == null) { 515 docClass = DOCUMENT_XML; 516 } 517 return docClass; 518 } 519 520 521 525 526 527 536 582 583 584 589 public final static Class DOCUMENT_XML = Document .class; 590 591 592 597 public final static Class DOCUMENT_HTML = HTMLDocumentImpl.class; 598 599 600 605 public final static Class DOCUMENT_DTD = DocumentType .class; 606 607 608 612 private static Properties _xmlProps; 613 614 615 618 620 621 626 private final static Class [] _parserSignature = new Class [] {Reader.class, String .class}; 627 628 629 633 private final static Class [] _printerSignature = new Class [] {Writer.class, int.class}; 634 635 636 642 private final static String RESOURCE_PROPS = "openxml.properties"; 643 644 645 private final static String MAIN_CATALOG = "res:/org/openxml/source/dtd-catalog/catalog.xml"; 646 647 648 } 649 | Popular Tags |