Update of /cvsroot/ozone/ozone/modules/xml/dom4j/src/org/dom4j/io In directory sc8-pr-cvs1:/tmp/cvs-serv16827/io Modified Files: DOMReader.java DOMWriter.java DispatchHandler.java DocumentInputSource.java DocumentResult.java DocumentSource.java ElementStack.java HTMLWriter.java JAXPHelper.java OutputFormat.java PruningElementStack.java SAXContentHandler.java SAXHelper.java SAXReader.java SAXValidator.java SAXWriter.java XMLResult.java XMLWriter.java XPPReader.java Log Message: alterations to dom4j made in cooperation with one fo the dom4j developers (marten) This increases the likelyhood that we will be able to use the official dom4j release for our implementation Index: DOMReader.java =================================================================== RCS file: /cvsroot/ozone/ozone/modules/xml/dom4j/src/org/dom4j/io/DOMReader.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- DOMReader.java 18 May 2003 08:36:17 -0000 1.2 +++ DOMReader.java 10 Jun 2003 16:18:34 -0000 1.3 @@ -12,53 +12,84 @@ import java.util.ArrayList; import java.util.List; -import org.dom4j.*; +import org.dom4j.Branch; +import org.dom4j.Document; +import org.dom4j.DocumentFactory; +import org.dom4j.Element; +import org.dom4j.Namespace; +import org.dom4j.NodeFactory; +import org.dom4j.QName; +import org.dom4j.tree.DelegateDocumentFactory; import org.dom4j.tree.NamespaceStack; /** <p><code>DOMReader</code> navigates a W3C DOM tree and creates - * a DOM4J tree from it.</p> - * - * @author <a href="mailto:jst...@ap...">James Strachan</a> - * @version $Revision$ - */ + * a DOM4J tree from it.</p> + * + * @author <a href="mailto:jst...@ap...">James Strachan</a> + * @version $Revision$ + */ public class DOMReader { - /** <code>DocumentFactory</code> implementation used to create new document objects */ - private DocumentFactory factory; + /** <code>DocumentFactory</code> used to create new document objects */ + private NodeFactory factory; /** stack of <code>Namespace</code> and <code>QName</code> objects */ private NamespaceStack namespaceStack; public DOMReader() { - this.factory = DocumentFactoryImpl.getInstance(); + this.factory = DocumentFactory.getInstance(); this.namespaceStack = new NamespaceStack(factory); } + /** + * @deprecated Use DOMReader(NodeFactory) instead. + */ public DOMReader(DocumentFactory factory) { this.factory = factory; + this.namespaceStack = new NamespaceStack(this.factory); + } + + public DOMReader(NodeFactory factory) { + this.factory = factory; this.namespaceStack = new NamespaceStack(factory); } - /** @return the <code>DocumentFactory</code> used to create document objects + /** + * @return the <code>DocumentFactory</code> used to create document objects + * @deprecated Use getNodeFactory() instead */ public DocumentFactory getDocumentFactory() { + if (factory instanceof DocumentFactory) { + return (DocumentFactory) factory; + } else { + return new DelegateDocumentFactory(factory, DocumentFactory.getInstance()); + } + } + + public NodeFactory getNodeFactory() { return factory; } /** <p>This sets the <code>DocumentFactory</code> used to create new documents. * This method allows the building of custom DOM4J tree objects to be implemented - * easily using a custom derivation of {@link DocumentFactoryImpl}</p> + * easily using a custom derivation of {@link DocumentFactory}</p> * * @param factory <code>DocumentFactory</code> used to create DOM4J objects + * @deprecated Use setNodeFactory(NodeFactory) instead. */ public void setDocumentFactory(DocumentFactory factory) { this.factory = factory; this.namespaceStack.setDocumentFactory(factory); } + public void setNodeFactory(NodeFactory factory) { + this.factory = factory; + this.namespaceStack.setNodeFactory(factory); + } + public Document read(org.w3c.dom.Document domDocument) { - if (domDocument instanceof Document) { + if ( domDocument instanceof Document ) { return (Document) domDocument; } Document document = createDocument(); @@ -66,8 +97,8 @@ clearNamespaceStack(); org.w3c.dom.NodeList nodeList = domDocument.getChildNodes(); - for (int i = 0, size = nodeList.getLength(); i < size; i++) { - readTree(nodeList.item(i), document); + for ( int i = 0, size = nodeList.getLength(); i < size; i++ ) { + readTree( nodeList.item(i), document ); } return document; } @@ -77,9 +108,10 @@ protected void readTree(org.w3c.dom.Node node, Branch current) { Element element = null; Document document = null; - if (current instanceof Element) { + if ( current instanceof Element ) { element = (Element) current; - } else { + } + else { document = (Document) current; } switch (node.getNodeType()) { @@ -88,69 +120,71 @@ break; case org.w3c.dom.Node.PROCESSING_INSTRUCTION_NODE: - if (current instanceof Element) { + if ( current instanceof Element ) { ((Element) current).addProcessingInstruction( - node.getNodeName(), node.getNodeValue() + node.getNodeName(), node.getNodeValue() ); - } else { + } + else { ((Document) current).addProcessingInstruction( - node.getNodeName(), node.getNodeValue() + node.getNodeName(), node.getNodeValue() ); } break; case org.w3c.dom.Node.COMMENT_NODE: - if (current instanceof Element) { - ((Element) current).addComment(node.getNodeValue()); - } else { - ((Document) current).addComment(node.getNodeValue()); + if ( current instanceof Element ) { + ((Element) current).addComment( node.getNodeValue() ); + } + else { + ((Document) current).addComment( node.getNodeValue() ); } break; case org.w3c.dom.Node.DOCUMENT_TYPE_NODE: org.w3c.dom.DocumentType domDocType - = (org.w3c.dom.DocumentType) node; + = (org.w3c.dom.DocumentType) node; document.addDocType( - domDocType.getName(), - domDocType.getPublicId(), - domDocType.getSystemId() + domDocType.getName(), + domDocType.getPublicId(), + domDocType.getSystemId() ); break; case org.w3c.dom.Node.TEXT_NODE: - element.addText(node.getNodeValue()); + element.addText( node.getNodeValue() ); break; case org.w3c.dom.Node.CDATA_SECTION_NODE: - element.addCDATA(node.getNodeValue()); + element.addCDATA( node.getNodeValue() ); break; - case org.w3c.dom.Node.ENTITY_REFERENCE_NODE: - { - // is there a better way to get the value of an entity? + case org.w3c.dom.Node.ENTITY_REFERENCE_NODE: { + // is there a better way to get the value of an entity? org.w3c.dom.Node firstChild = node.getFirstChild(); - if (firstChild != null) { + if ( firstChild != null ) { element.addEntity( - node.getNodeName(), - firstChild.getNodeValue() + node.getNodeName(), + firstChild.getNodeValue() ); - } else { - element.addEntity(node.getNodeName(), ""); + } + else { + element.addEntity( node.getNodeName(), "" ); } } break; case org.w3c.dom.Node.ENTITY_NODE: element.addEntity( - node.getNodeName(), - node.getNodeValue() + node.getNodeName(), + node.getNodeValue() ); break; default: - System.out.println("WARNING: Unknown DOM node type: " + node.getNodeType()); + System.out.println( "WARNING: Unknown DOM node type: " + node.getNodeType() ); } } @@ -159,61 +193,63 @@ String namespaceUri = node.getNamespaceURI(); org.w3c.dom.NamedNodeMap attributeList = node.getAttributes(); - if (namespaceUri == null) { + if ( namespaceUri == null ) { // test if we have an "xmlns" attribute - org.w3c.dom.Node attribute = attributeList.getNamedItem("xmlns"); - if (attribute != null) { + org.w3c.dom.Node attribute = attributeList.getNamedItem( "xmlns" ); + if ( attribute != null ) { namespaceUri = attribute.getNodeValue(); } } - QName qName = namespaceStack.getQName(namespaceUri, node.getLocalName(), node.getNodeName()); + QName qName = namespaceStack.getQName( namespaceUri, node.getLocalName(), node.getNodeName() ); Element element = current.addElement(qName); - if (attributeList != null) { + if ( attributeList != null ) { int size = attributeList.getLength(); List attributes = new ArrayList(size); - for (int i = 0; i < size; i++) { + for ( int i = 0; i < size; i++ ) { org.w3c.dom.Node attribute = attributeList.item(i); // Define all namespaces first then process attributes later String name = attribute.getNodeName(); if (name.startsWith("xmlns")) { - int index = name.indexOf(':', 5); + int index = name.indexOf( ':', 5 ); String uri = attribute.getNodeValue(); - if (namespaceUri == null || !namespaceUri.equals(uri)) { + if ( namespaceUri == null || ! namespaceUri.equals( uri ) ) { Namespace namespace = null; - if (index > 0) { + if ( index > 0 ) { String prefix = name.substring(index + 1); - namespace = namespaceStack.addNamespace(prefix, uri); - } else { - namespace = namespaceStack.addNamespace("", uri); + namespace = namespaceStack.addNamespace( prefix, uri ); } - element.add(namespace); + else { + namespace = namespaceStack.addNamespace( "", uri ); + } + element.add( namespace ); } - } else { - attributes.add(attribute); + } + else { + attributes.add( attribute ); } } // now add the attributes, the namespaces should be available size = attributes.size(); - for (int i = 0; i < size; i++) { + for ( int i = 0; i < size; i++ ) { org.w3c.dom.Node attribute = (org.w3c.dom.Node) attributes.get(i); QName attributeQName = namespaceStack.getQName( - attribute.getNamespaceURI(), - attribute.getLocalName(), - attribute.getNodeName() + attribute.getNamespaceURI(), + attribute.getLocalName(), + attribute.getNodeName() ); - element.addAttribute(attributeQName, attribute.getNodeValue()); + element.addAttribute( attributeQName, attribute.getNodeValue() ); } } // Recurse on child nodes org.w3c.dom.NodeList children = node.getChildNodes(); - for (int i = 0, size = children.getLength(); i < size; i++) { + for ( int i = 0, size = children.getLength(); i < size; i++ ) { org.w3c.dom.Node child = children.item(i); - readTree(child, element); + readTree( child, element ); } // pop namespaces from the stack @@ -223,20 +259,22 @@ } protected Namespace getNamespace(String prefix, String uri) { - return getDocumentFactory().createNamespace(prefix, uri); + return getNodeFactory().createNamespace(prefix, uri); } protected Document createDocument() { - return getDocumentFactory().createDocument(); + return getNodeFactory().createDocument(); } protected void clearNamespaceStack() { namespaceStack.clear(); - if (!namespaceStack.contains(Namespace.XML_NAMESPACE)) { - namespaceStack.push(Namespace.XML_NAMESPACE); + if ( ! namespaceStack.contains( Namespace.XML_NAMESPACE ) ) { + namespaceStack.push( Namespace.XML_NAMESPACE ); } } } + + /* Index: DOMWriter.java =================================================================== RCS file: /cvsroot/ozone/ozone/modules/xml/dom4j/src/org/dom4j/io/DOMWriter.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- DOMWriter.java 18 May 2003 08:36:17 -0000 1.2 +++ DOMWriter.java 10 Jun 2003 16:18:34 -0000 1.3 @@ -1,9 +1,9 @@ /* * Copyright 2001 (C) MetaStuff, Ltd. All Rights Reserved. - * - * This software is open source. + * + * This software is open source. * See the bottom of this file for the licence. - * + * * $Id$ */ @@ -11,15 +11,24 @@ import java.util.List; -import org.dom4j.*; +import org.dom4j.Attribute; +import org.dom4j.CDATA; +import org.dom4j.Comment; +import org.dom4j.Document; +import org.dom4j.DocumentException; +import org.dom4j.Element; +import org.dom4j.Entity; +import org.dom4j.Namespace; +import org.dom4j.ProcessingInstruction; +import org.dom4j.Text; import org.dom4j.tree.NamespaceStack; /** <p><code>DOMWriter</code> takes a DOM4J tree and outputs - * it as a W3C DOM object</p> - * - * @author <a href="mailto:jam...@me...">James Strachan</a> - * @version $Revision$ - */ + * it as a W3C DOM object</p> + * + * @author <a href="mailto:jam...@me...">James Strachan</a> + * @version $Revision$ + */ public class DOMWriter { private static boolean loggedWarning = false; @@ -33,34 +42,35 @@ // the Class used to create new DOM Document instances private Class domDocumentClass; - + /** stack of <code>Namespace</code> objects */ private NamespaceStack namespaceStack = new NamespaceStack(); - + public DOMWriter() { } - + public DOMWriter(Class domDocumentClass) { this.domDocumentClass = domDocumentClass; } public Class getDomDocumentClass() throws DocumentException { - if (domDocumentClass == null) { + if ( domDocumentClass == null ) { // lets try and find one in the classpath int size = DEFAULT_DOM_DOCUMENT_CLASSES.length; - for (int i = 0; i < size; i++) { + for ( int i = 0; i < size; i++ ) { try { String name = DEFAULT_DOM_DOCUMENT_CLASSES[i]; - domDocumentClass = Class.forName( - name, - true, - DOMWriter.class.getClassLoader() + domDocumentClass = Class.forName( + name, + true, + DOMWriter.class.getClassLoader() ); - if (domDocumentClass != null) { + if ( domDocumentClass != null ) { break; } - } catch (Exception e) { + } + catch (Exception e) { // could not load class correctly // lets carry on to the next one } @@ -68,41 +78,42 @@ } return domDocumentClass; } - + /** Sets the DOM {@link org.w3c.dom.Document} implementation - * class used by the writer when creating DOM documents. - * - * @param domDocumentClass is the Class implementing - * the {@link org.w3c.dom.Document} interface - */ + * class used by the writer when creating DOM documents. + * + * @param domDocumentClass is the Class implementing + * the {@link org.w3c.dom.Document} interface + */ public void setDomDocumentClass(Class domDocumentClass) { this.domDocumentClass = domDocumentClass; } - + /** Sets the DOM {@link org.w3c.dom.Document} implementation - * class name used by the writer when creating DOM documents. - * - * @param className is the name of the Class implementing - * the {@link org.w3c.dom.Document} interface - * @throws DocumentException if the class could not be loaded - */ + * class name used by the writer when creating DOM documents. + * + * @param className is the name of the Class implementing + * the {@link org.w3c.dom.Document} interface + * @throws DocumentException if the class could not be loaded + */ public void setDomDocumentClassName(String className) throws DocumentException { try { - this.domDocumentClass = Class.forName( - className, - true, - DOMWriter.class.getClassLoader() + this.domDocumentClass = Class.forName( + className, + true, + DOMWriter.class.getClassLoader() ); - } catch (Exception e) { - throw new DocumentException( - "Could not load the DOM Document class: " + className, e + } + catch (Exception e) { + throw new DocumentException( + "Could not load the DOM Document class: " + className, e ); } } - + public org.w3c.dom.Document write(Document document) throws DocumentException { - if (document instanceof org.w3c.dom.Document) { + if ( document instanceof org.w3c.dom.Document ) { return (org.w3c.dom.Document) document; } resetNamespaceStack(); @@ -111,12 +122,12 @@ namespaceStack.clear(); return domDocument; } - + public org.w3c.dom.Document write( - Document document, - org.w3c.dom.DOMImplementation domImplementation - ) throws DocumentException { - if (document instanceof org.w3c.dom.Document) { + Document document, + org.w3c.dom.DOMImplementation domImplementation + ) throws DocumentException { + if ( document instanceof org.w3c.dom.Document ) { return (org.w3c.dom.Document) document; } resetNamespaceStack(); @@ -125,217 +136,227 @@ namespaceStack.clear(); return domDocument; } - - protected void appendDOMTree( - org.w3c.dom.Document domDocument, - org.w3c.dom.Node domCurrent, - List content - ) { + + protected void appendDOMTree( + org.w3c.dom.Document domDocument, + org.w3c.dom.Node domCurrent, + List content + ) { int size = content.size(); - for (int i = 0; i < size; i++) { + for ( int i = 0; i < size; i++ ) { Object object = content.get(i); if (object instanceof Element) { - appendDOMTree(domDocument, domCurrent, (Element) object); - } else if (object instanceof String) { - appendDOMTree(domDocument, domCurrent, (String) object); - } else if (object instanceof Text) { + appendDOMTree( domDocument, domCurrent, (Element) object); + } + else if ( object instanceof String ) { + appendDOMTree( domDocument, domCurrent, (String) object ); + } + else if ( object instanceof Text ) { Text text = (Text) object; - appendDOMTree(domDocument, domCurrent, text.getText()); - } else if (object instanceof CDATA) { - appendDOMTree(domDocument, domCurrent, (CDATA) object); - } else if (object instanceof Comment) { - appendDOMTree(domDocument, domCurrent, (Comment) object); - } else if (object instanceof Entity) { - appendDOMTree(domDocument, domCurrent, (Entity) object); - } else if (object instanceof ProcessingInstruction) { - appendDOMTree(domDocument, domCurrent, (ProcessingInstruction) object); + appendDOMTree( domDocument, domCurrent, text.getText() ); + } + else if ( object instanceof CDATA ) { + appendDOMTree( domDocument, domCurrent, (CDATA) object ); + } + else if ( object instanceof Comment ) { + appendDOMTree( domDocument, domCurrent, (Comment) object ); + } + else if ( object instanceof Entity ) { + appendDOMTree( domDocument, domCurrent, (Entity) object ); + } + else if ( object instanceof ProcessingInstruction ) { + appendDOMTree( domDocument, domCurrent, (ProcessingInstruction) object ); } } } - - protected void appendDOMTree( - org.w3c.dom.Document domDocument, - org.w3c.dom.Node domCurrent, - Element element - ) { + + protected void appendDOMTree( + org.w3c.dom.Document domDocument, + org.w3c.dom.Node domCurrent, + Element element + ) { org.w3c.dom.Element domElement = null; String elementUri = element.getNamespaceURI(); - if (elementUri != null && elementUri.length() > 0) { - domElement = domDocument.createElementNS(elementUri, element.getQualifiedName()); - } else { - domElement = domDocument.createElement(element.getQualifiedName()); + if (elementUri != null && elementUri.length() > 0 ) { + domElement = domDocument.createElementNS( elementUri, element.getQualifiedName() ); } - + else { + domElement = domDocument.createElement( element.getQualifiedName() ); + } + int stackSize = namespaceStack.size(); List declaredNamespaces = element.declaredNamespaces(); - for (int i = 0, size = declaredNamespaces.size(); i < size; i++) { + for ( int i = 0, size = declaredNamespaces.size(); i < size ; i++ ) { Namespace namespace = (Namespace) declaredNamespaces.get(i); - if (isNamespaceDeclaration(namespace)) { - namespaceStack.push(namespace); - writeNamespace(domElement, namespace); + if ( isNamespaceDeclaration( namespace ) ) { + namespaceStack.push( namespace ); + writeNamespace( domElement, namespace ); } } - + // add the attributes - for (int i = 0, size = element.attributeCount(); i < size; i++) { + for ( int i = 0, size = element.attributeCount(); i < size ; i++ ) { Attribute attribute = (Attribute) element.attribute(i); String uri = attribute.getNamespaceURI(); - if (uri != null && uri.length() > 0) { + if ( uri != null && uri.length() > 0 ) { //writeNamespace( domElement, attribute.getNamespace() ); - domElement.setAttributeNS(uri, attribute.getQualifiedName(), attribute.getValue()); - } else { - domElement.setAttribute(attribute.getName(), attribute.getValue()); + domElement.setAttributeNS( uri, attribute.getQualifiedName(), attribute.getValue() ); + } + else { + domElement.setAttribute( attribute.getName(), attribute.getValue() ); } } // add content - appendDOMTree(domDocument, domElement, element.content()); - - domCurrent.appendChild(domElement); - - while (namespaceStack.size() > stackSize) { + appendDOMTree( domDocument, domElement, element.content() ); + + domCurrent.appendChild( domElement ); + + while ( namespaceStack.size() > stackSize ) { namespaceStack.pop(); } } - - protected void appendDOMTree( - org.w3c.dom.Document domDocument, - org.w3c.dom.Node domCurrent, - CDATA cdata - ) { - org.w3c.dom.CDATASection domCDATA = - domDocument.createCDATASection(cdata.getText()); + + protected void appendDOMTree( + org.w3c.dom.Document domDocument, + org.w3c.dom.Node domCurrent, + CDATA cdata + ) { + org.w3c.dom.CDATASection domCDATA = + domDocument.createCDATASection(cdata.getText()); domCurrent.appendChild(domCDATA); } - - protected void appendDOMTree( - org.w3c.dom.Document domDocument, - org.w3c.dom.Node domCurrent, - Comment comment - ) { - org.w3c.dom.Comment domComment = - domDocument.createComment(comment.getText()); + + protected void appendDOMTree( + org.w3c.dom.Document domDocument, + org.w3c.dom.Node domCurrent, + Comment comment + ) { + org.w3c.dom.Comment domComment = + domDocument.createComment(comment.getText()); domCurrent.appendChild(domComment); } - - protected void appendDOMTree( - org.w3c.dom.Document domDocument, - org.w3c.dom.Node domCurrent, - String text - ) { + + protected void appendDOMTree( + org.w3c.dom.Document domDocument, + org.w3c.dom.Node domCurrent, + String text + ) { org.w3c.dom.Text domText = domDocument.createTextNode(text); domCurrent.appendChild(domText); } - - protected void appendDOMTree( - org.w3c.dom.Document domDocument, - org.w3c.dom.Node domCurrent, - Entity entity - ) { - org.w3c.dom.EntityReference domEntity = - domDocument.createEntityReference(entity.getName()); + + protected void appendDOMTree( + org.w3c.dom.Document domDocument, + org.w3c.dom.Node domCurrent, + Entity entity + ) { + org.w3c.dom.EntityReference domEntity = + domDocument.createEntityReference(entity.getName()); domCurrent.appendChild(domEntity); } - - protected void appendDOMTree( - org.w3c.dom.Document domDocument, - org.w3c.dom.Node domCurrent, - ProcessingInstruction pi - ) { + + protected void appendDOMTree( + org.w3c.dom.Document domDocument, + org.w3c.dom.Node domCurrent, + ProcessingInstruction pi + ) { org.w3c.dom.ProcessingInstruction domPI = - domDocument.createProcessingInstruction(pi.getTarget(), pi.getText()); + domDocument.createProcessingInstruction(pi.getTarget(), pi.getText()); domCurrent.appendChild(domPI); } - + /** @return the new local namespace set which may be different from the input - * set if a new namespace is added to the set - */ - protected void writeNamespace( - org.w3c.dom.Element domElement, - Namespace namespace - ) { + * set if a new namespace is added to the set + */ + protected void writeNamespace( + org.w3c.dom.Element domElement, + Namespace namespace + ) { String attributeName = attributeNameForNamespace(namespace); //domElement.setAttributeNS("", attributeName, namespace.getURI()); domElement.setAttribute(attributeName, namespace.getURI()); } - + protected String attributeNameForNamespace(Namespace namespace) { String xmlns = "xmlns"; String prefix = namespace.getPrefix(); - if (prefix.length() > 0) { + if ( prefix.length() > 0 ) { return xmlns + ":" + prefix; } return xmlns; } - + protected org.w3c.dom.Document createDomDocument( - Document document - ) throws DocumentException { + Document document + ) throws DocumentException { // lets try JAXP first org.w3c.dom.Document answer = createDomDocumentViaJAXP(); - if (answer != null) { + if ( answer != null ) { return answer; } Class theClass = getDomDocumentClass(); try { return (org.w3c.dom.Document) theClass.newInstance(); - } catch (Exception e) { - throw new DocumentException( - "Could not instantiate an instance of DOM Document wtih class: " - + theClass.getName(), e + } + catch (Exception e) { + throw new DocumentException( + "Could not instantiate an instance of DOM Document wtih class: " + + theClass.getName(), e ); } } - + protected org.w3c.dom.Document createDomDocumentViaJAXP() throws DocumentException { - if (!SAXHelper.classNameAvailable("javax.xml.parsers.DocumentBuilderFactory")) { + if ( ! SAXHelper.classNameAvailable( "javax.xml.parsers.DocumentBuilderFactory" ) ) { // don't attempt to use JAXP if it is not in the ClassPath return null; } - + // try use JAXP to load the XMLReader... try { - return JAXPHelper.createDocument(false, true); - } catch (Throwable e) { - if (!loggedWarning) { + return JAXPHelper.createDocument( false, true ); + } + catch (Throwable e) { + if ( ! loggedWarning ) { loggedWarning = true; - if (SAXHelper.isVerboseErrorReporting()) { + if ( SAXHelper.isVerboseErrorReporting() ) { // log all exceptions as warnings and carry // on as we have a default SAX parser we can use - System.out.println( - "Warning: Caught exception attempting to use JAXP to " - + "create a W3C DOM document" + System.out.println( + "Warning: Caught exception attempting to use JAXP to " + + "create a W3C DOM document" ); - System.out.println("Warning: Exception was: " + e); + System.out.println( "Warning: Exception was: " + e ); e.printStackTrace(); - } else { - System.out.println( - "Warning: Error occurred using JAXP to create a DOM document." + } + else { + System.out.println( + "Warning: Error occurred using JAXP to create a DOM document." ); } } } return null; } - protected org.w3c.dom.Document createDomDocument( - Document document, - org.w3c.dom.DOMImplementation domImplementation - ) throws DocumentException { - + Document document, + org.w3c.dom.DOMImplementation domImplementation + ) throws DocumentException { + String namespaceURI = null; String qualifiedName = null; org.w3c.dom.DocumentType docType = null; - return domImplementation.createDocument( - namespaceURI, qualifiedName, docType + return domImplementation.createDocument( + namespaceURI, qualifiedName, docType ); } - protected boolean isNamespaceDeclaration(Namespace ns) { + protected boolean isNamespaceDeclaration( Namespace ns ) { if (ns != null && ns != Namespace.NO_NAMESPACE && ns != Namespace.XML_NAMESPACE) { String uri = ns.getURI(); - if (uri != null && uri.length() > 0) { - if (!namespaceStack.contains(ns)) { + if ( uri != null && uri.length() > 0 ) { + if ( ! namespaceStack.contains( ns ) ) { return true; } @@ -343,12 +364,14 @@ } return false; } - + protected void resetNamespaceStack() { namespaceStack.clear(); - namespaceStack.push(Namespace.XML_NAMESPACE); + namespaceStack.push( Namespace.XML_NAMESPACE ); } } + + /* Index: DispatchHandler.java =================================================================== RCS file: /cvsroot/ozone/ozone/modules/xml/dom4j/src/org/dom4j/io/DispatchHandler.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- DispatchHandler.java 25 Apr 2003 08:11:35 -0000 1.1 +++ DispatchHandler.java 10 Jun 2003 16:18:34 -0000 1.2 @@ -1,9 +1,9 @@ /* * Copyright 2001 (C) MetaStuff, Ltd. All Rights Reserved. - * - * This software is open source. + * + * This software is open source. * See the bottom of this file for the licence. - * + * * $Id$ */ @@ -17,129 +17,160 @@ import org.dom4j.ElementPath; /** <p><code>DispatchHandler</code> implements the <code>ElementHandler</code> - * interface and provides a means to register multiple <code>ElementHandler</code> - * instances to be used by an event based processor. This is a special - * <code>ElementHandler</code> in that it's <b>onStart</b> and <b>onEnd</b> - * implementation methods are called for every element encountered during - * the parse. It then delegates to other <code>ElementHandler</code> instances - * registered with it to process the elements encountered. - * - * @author <a href="mailto:dw...@eq...">Dave White</a> - * @version $Revision$ - */ + * interface and provides a means to register multiple <code>ElementHandler</code> + * instances to be used by an event based processor. This is a special + * <code>ElementHandler</code> in that it's <b>onStart</b> and <b>onEnd</b> + * implementation methods are called for every element encountered during + * the parse. It then delegates to other <code>ElementHandler</code> instances + * registered with it to process the elements encountered. + * + * @author <a href="mailto:dw...@eq...">Dave White</a> + * @version $Revision$ + */ -class DispatchHandler implements ElementHandler { +class DispatchHandler implements ElementHandler +{ /** Whether the parser is at the root element or not */ - private boolean atRoot; - + private boolean atRoot; + /** The current path in the XML tree (i.e. /a/b/c) */ - private String path; - + private String path; + /** maintains a stack of previously encountered paths */ - private ArrayList pathStack; - + private ArrayList pathStack; + /** maintains a stack of previously encountered handlers */ - private ArrayList handlerStack; - + private ArrayList handlerStack; + /** <code>HashMap</code> maintains the mapping between element paths and handlers */ - private HashMap handlers; - + private HashMap handlers; + /** <code>ElementHandler</code> to use by default for element paths with no handlers registered */ private ElementHandler defaultHandler; - - public DispatchHandler() { - atRoot = true; - path = "/"; - pathStack = new ArrayList(); - handlerStack = new ArrayList(); - handlers = new HashMap(); + + public DispatchHandler() + { + atRoot = true; + path = "/"; + pathStack = new ArrayList(); + handlerStack = new ArrayList(); + handlers = new HashMap(); } - - /** Adds the <code>ElementHandler</code> to be called when the - * specified path is encounted. - * - * @param path is the path to be handled - * @param handler is the <code>ElementHandler</code> to be called - * by the event based processor. - */ - public void addHandler(String path, ElementHandler handler) { - handlers.put(path, handler); + + /** Adds the <code>ElementHandler</code> to be called when the + * specified path is encounted. + * + * @param path is the path to be handled + * @param handler is the <code>ElementHandler</code> to be called + * by the event based processor. + */ + public void addHandler(String path, ElementHandler handler) + { + handlers.put(path, handler); } - + /** Removes the <code>ElementHandler</code> from the event based - * processor, for the specified path. - * - * @param path is the path to remove the <code>ElementHandler</code> for. - */ - public ElementHandler removeHandler(String path) { - return (ElementHandler) handlers.remove(path); + * processor, for the specified path. + * + * @param path is the path to remove the <code>ElementHandler</code> for. + */ + public ElementHandler removeHandler(String path) + { + return (ElementHandler)handlers.remove(path); } - - /** When multiple <code>ElementHandler</code> instances have been - * registered, this will set a default <code>ElementHandler</code> - * to be called for any path which does <b>NOT</b> have a handler - * registered. - * @param handler is the <code>ElementHandler</code> to be called - * by the event based processor. - */ - public void setDefaultHandler(ElementHandler handler) { + + /** When multiple <code>ElementHandler</code> instances have been + * registered, this will set a default <code>ElementHandler</code> + * to be called for any path which does <b>NOT</b> have a handler + * registered. + * @param handler is the <code>ElementHandler</code> to be called + * by the event based processor. + */ + public void setDefaultHandler(ElementHandler handler) + { defaultHandler = handler; } - - /** @return the current path for the parse */ - public String getPath() { - return path; + + /** + * Used to remove all the Element Handlers and return things back to the way + * they were when object was created. + */ + public void resetHandlers() { + atRoot = true; + path = "/"; + pathStack.clear(); + handlerStack.clear(); + handlers.clear(); + defaultHandler=null; } + /** @return the current path for the parse */ + public String getPath() { return path; } + // The following methods implement the ElementHandler interface - - public void onStart(ElementPath elementPath) { + + public void onStart(ElementPath elementPath) + { Element element = elementPath.getCurrent(); - // Save the location of the last (i.e. parent) path + // Save the location of the last (i.e. parent) path pathStack.add(path); // Calculate the new path - if (atRoot) { - path = path + element.getName(); + if (atRoot) + { + path = path + element.getName(); atRoot = false; - } else { + } + else + { path = path + "/" + element.getName(); } - - if ((handlers != null) && (handlers.containsKey(path))) { + + if ((handlers != null) && (handlers.containsKey(path))) + { // The current node has a handler associated with it. // Find the handler and save it on the handler stack. - ElementHandler handler = (ElementHandler) handlers.get(path); + ElementHandler handler = (ElementHandler)handlers.get(path); handlerStack.add(handler); // Call the handlers onStart method. handler.onStart(elementPath); - } else { + } + else + { // No handler is associated with this node, so use the // defaultHandler it it exists. - if (handlerStack.isEmpty() && (defaultHandler != null)) { + if (handlerStack.isEmpty() && (defaultHandler != null)) + { defaultHandler.onStart(elementPath); } } } - - public void onEnd(ElementPath elementPath) { - if ((handlers != null) && (handlers.containsKey(path))) { + + public void onEnd(ElementPath elementPath) + { + if ((handlers != null) && (handlers.containsKey(path))) + { // This node has a handler associated with it. // Find the handler and pop it from the handler stack. - ElementHandler handler = (ElementHandler) handlers.get(path); - handlerStack.remove(handlerStack.size() - 1); + ElementHandler handler = (ElementHandler)handlers.get(path); + handlerStack.remove( handlerStack.size() - 1 ); // Call the handlers onEnd method handler.onEnd(elementPath); - } else { + } + else + { // No handler is associated with this node, so use the // defaultHandler it it exists. - if (handlerStack.isEmpty() && (defaultHandler != null)) { + if (handlerStack.isEmpty() && (defaultHandler != null)) + { defaultHandler.onEnd(elementPath); } } // Set path back to its parent - path = (String) pathStack.remove(pathStack.size() - 1); - } + path = (String)pathStack.remove( pathStack.size() - 1 ); + } } + + /* Index: DocumentInputSource.java =================================================================== RCS file: /cvsroot/ozone/ozone/modules/xml/dom4j/src/org/dom4j/io/DocumentInputSource.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- DocumentInputSource.java 25 Apr 2003 08:11:35 -0000 1.1 +++ DocumentInputSource.java 10 Jun 2003 16:18:34 -0000 1.2 @@ -1,9 +1,9 @@ /* * Copyright 2001 (C) MetaStuff, Ltd. All Rights Reserved. - * - * This software is open source. + * + * This software is open source. * See the bottom of this file for the licence. - * + * * $Id$ */ @@ -19,83 +19,88 @@ /** <p><code>DocumentInputSource</code> implements a SAX {@link InputSource} - * for a {@link Document}.</p> - * - * @author <a href="mailto:jam...@me...">James Strachan</a> - * @version $Revision$ - */ + * for a {@link Document}.</p> + * + * @author <a href="mailto:jam...@me...">James Strachan</a> + * @version $Revision$ + */ class DocumentInputSource extends InputSource { /** The document source */ private Document document; - + public DocumentInputSource() { } public DocumentInputSource(Document document) { this.document = document; - setSystemId(document.getName()); + setSystemId( document.getName() ); } // Properties - //------------------------------------------------------------------------- + //------------------------------------------------------------------------- /** @return the document which is being used as the SAX {@link InputSource} - */ + */ public Document getDocument() { return document; } /** Sets the document used as the SAX {@link InputSource} - */ + */ public void setDocument(Document document) { this.document = document; - setSystemId(document.getName()); + setSystemId( document.getName() ); } // Overloaded methods - //------------------------------------------------------------------------- + //------------------------------------------------------------------------- - /** This method is not supported as this source is always a - * {@link Document} instance. - * - * @throws UnsupportedOperationException as this method is unsupported - */ - public void setCharacterStream(Reader characterStream) + /** This method is not supported as this source is always a + * {@link Document} instance. + * + * @throws UnsupportedOperationException as this method is unsupported + */ + public void setCharacterStream(Reader characterStream) throws UnsupportedOperationException { throw new UnsupportedOperationException(); } /** Note this method is quite inefficent, it turns the in memory XML tree - * object model into a single block of text which can then be read by - * other XML parsers. Should only be used with care. - */ + * object model into a single block of text which can then be read by + * other XML parsers. Should only be used with care. + */ public Reader getCharacterStream() { try { StringWriter out = new StringWriter(); - XMLWriter writer = new XMLWriter(out); - writer.write(document); + XMLWriter writer = new XMLWriter( out ); + writer.write( document ); writer.flush(); - return new StringReader(out.toString()); - } catch (final IOException e) { - // this should never really happen + return new StringReader( out.toString() ); + } + catch (final IOException e) { + // this should never really happen // but for completeness we'll return a Reader // with the embedded exception inside it return new Reader() { - public int read(char ch[], int offset, int length) - throws IOException { + public int read(char ch[], int offset, int length) + throws IOException { throw e; } - public void close() throws IOException { } }; } } } + + + + + /* Index: DocumentResult.java =================================================================== RCS file: /cvsroot/ozone/ozone/modules/xml/dom4j/src/org/dom4j/io/DocumentResult.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- DocumentResult.java 25 Apr 2003 08:11:35 -0000 1.1 +++ DocumentResult.java 10 Jun 2003 16:18:34 -0000 1.2 @@ -1,9 +1,9 @@ /* * Copyright 2001 (C) MetaStuff, Ltd. All Rights Reserved. - * - * This software is open source. + * + * This software is open source. * See the bottom of this file for the licence. - * + * * $Id$ */ @@ -16,50 +16,55 @@ import org.xml.sax.ext.LexicalHandler; /** <p><code>DocumentResult</code> implements a JAXP {@link Result} - * for a {@link Document}.</p> - * - * @author <a href="mailto:jam...@me...">James Strachan</a> - * @version $Revision$ - */ + * for a {@link Document}.</p> + * + * @author <a href="mailto:jam...@me...">James Strachan</a> + * @version $Revision$ + */ public class DocumentResult extends SAXResult { private SAXContentHandler contentHandler; - + public DocumentResult() { - this(new SAXContentHandler()); + this( new SAXContentHandler() ); } - + public DocumentResult(SAXContentHandler contentHandler) { this.contentHandler = contentHandler; - super.setHandler(this.contentHandler); - super.setLexicalHandler(this.contentHandler); + super.setHandler( this.contentHandler ); + super.setLexicalHandler( this.contentHandler ); } - /** @return the Document created by the transformation - */ + /** @return the Document created by the transformation + */ public Document getDocument() { return contentHandler.getDocument(); } // Overloaded methods - //------------------------------------------------------------------------- - - public void setHandler(ContentHandler handler) { - if (handler instanceof SAXContentHandler) { + //------------------------------------------------------------------------- + + public void setHandler(ContentHandler handler) { + if ( handler instanceof SAXContentHandler ) { this.contentHandler = (SAXContentHandler) handler; - super.setHandler(this.contentHandler); + super.setHandler( this.contentHandler ); } } - public void setLexicalHandler(LexicalHandler handler) { - if (handler instanceof SAXContentHandler) { + public void setLexicalHandler(LexicalHandler handler) { + if ( handler instanceof SAXContentHandler ) { this.contentHandler = (SAXContentHandler) handler; - super.setLexicalHandler(this.contentHandler); + super.setLexicalHandler( this.contentHandler ); } } } + + + + + /* Index: DocumentSource.java =================================================================== RCS file: /cvsroot/ozone/ozone/modules/xml/dom4j/src/org/dom4j/io/DocumentSource.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- DocumentSource.java 25 Apr 2003 08:11:35 -0000 1.1 +++ DocumentSource.java 10 Jun 2003 16:18:34 -0000 1.2 @@ -1,9 +1,9 @@ /* * Copyright 2001 (C) MetaStuff, Ltd. All Rights Reserved. - * - * This software is open source. + * + * This software is open source. * See the bottom of this file for the licence. - * + * * $Id$ */ @@ -18,58 +18,58 @@ import org.xml.sax.XMLReader; /** <p><code>DocumentSource</code> implements a JAXP {@link Source} - * for a {@link Document}.</p> - * - * @author <a href="mailto:jam...@me...">James Strachan</a> - * @version $Revision$ - */ + * for a {@link Document}.</p> + * + * @author <a href="mailto:jam...@me...">James Strachan</a> + * @version $Revision$ + */ public class DocumentSource extends SAXSource { - + /** If {@link javax.xml.transform.TransformerFactory#getFeature} - * returns <code>true</code> when passed this value as an argument - * then the Transformer natively supports <i>dom4j</i>. - */ + * returns <code>true</code> when passed this value as an argument + * then the Transformer natively supports <i>dom4j</i>. + */ public final static String DOM4J_FEATURE = "http://org.dom4j.io.DoucmentSource/feature"; /** The XMLReader to use */ private XMLReader xmlReader = new SAXWriter(); - - /** Creates a JAXP {@link Source} for the given - * {@link Node}. - */ + + /** Creates a JAXP {@link Source} for the given + * {@link Node}. + */ public DocumentSource(Node node) { setDocument(node.getDocument()); } - /** Creates a JAXP {@link Source} for the given - * {@link Document}. - */ + /** Creates a JAXP {@link Source} for the given + * {@link Document}. + */ public DocumentSource(Document document) { setDocument(document); } // Properties - //------------------------------------------------------------------------- + //------------------------------------------------------------------------- /** @return the document which is being used as the JAXP {@link Source} - */ + */ public Document getDocument() { - DocumentInputSource documentInputSource - = (DocumentInputSource) getInputSource(); + DocumentInputSource documentInputSource + = (DocumentInputSource) getInputSource(); return documentInputSource.getDocument(); } /** Sets the document used as the JAXP {@link Source} - */ + */ public void setDocument(Document document) { - super.setInputSource(new DocumentInputSource(document)); + super.setInputSource( new DocumentInputSource(document) ); } // Overloaded methods - //------------------------------------------------------------------------- + //------------------------------------------------------------------------- /** @return the XMLReader to be used for the JAXP {@link Source}. */ @@ -77,45 +77,54 @@ return xmlReader; } - /** This method is not supported as this source is always a - * {@link Document} instance. - * - * @throws UnsupportedOperationException as this method is unsupported - */ - public void setInputSource(InputSource inputSource) + /** This method is not supported as this source is always a + * {@link Document} instance. + * + * @throws UnsupportedOperationException as this method is unsupported + */ + public void setInputSource(InputSource inputSource) throws UnsupportedOperationException { - if (inputSource instanceof DocumentInputSource) { - super.setInputSource((DocumentInputSource) inputSource); - } else { + if ( inputSource instanceof DocumentInputSource ) { + super.setInputSource( (DocumentInputSource) inputSource ); + } + else { throw new UnsupportedOperationException(); } } /** Sets the XMLReader used for the JAXP {@link Source}. - */ + */ public void setXMLReader(XMLReader reader) throws UnsupportedOperationException { if (reader instanceof SAXWriter) { this.xmlReader = (SAXWriter) reader; - } else if (reader instanceof XMLFilter) { + } + else if (reader instanceof XMLFilter) { XMLFilter filter = (XMLFilter) reader; while (true) { XMLReader parent = filter.getParent(); - if (parent instanceof XMLFilter) { + if ( parent instanceof XMLFilter ) { filter = (XMLFilter) parent; - } else { + } + else { break; } } // install filter in SAXWriter.... filter.setParent(xmlReader); xmlReader = filter; - } else { + } + else { throw new UnsupportedOperationException(); } } } + + + + + /* Index: ElementStack.java =================================================================== RCS file: /cvsroot/ozone/ozone/modules/xml/dom4j/src/org/dom4j/io/ElementStack.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- ElementStack.java 25 Apr 2003 08:11:35 -0000 1.1 +++ ElementStack.java 10 Jun 2003 16:18:34 -0000 1.2 @@ -1,9 +1,9 @@ /* * Copyright 2001 (C) MetaStuff, Ltd. All Rights Reserved. - * - * This software is open source. + * + * This software is open source. * See the bottom of this file for the licence. - * + * * $Id$ */ @@ -13,141 +13,152 @@ import org.dom4j.ElementHandler; import org.dom4j.ElementPath; -/** <p><code>ElementStack</code> is used internally inside the - * {@link SAXContentHandler} to maintain a stack of {@link Element} - * instances. - * It opens an integration possibility allowing derivations to prune the tree - * when a node is complete.</p> - * - * @author <a href="mailto:jam...@me...">James Strachan</a> - * @version $Revision$ - */ +/** <p><code>ElementStack</code> is used internally inside the + * {@link SAXContentHandler} to maintain a stack of {@link Element} + * instances. + * It opens an integration possibility allowing derivations to prune the tree + * when a node is complete.</p> + * + * @author <a href="mailto:jam...@me...">James Strachan</a> + * @version $Revision$ + */ class ElementStack implements ElementPath { /** stack of <code>Element</code> objects */ protected Element[] stack; - + /** index of the item at the top of the stack or -1 if the stack is empty */ protected int lastElementIndex = -1; - + private DispatchHandler handler = null; - + public ElementStack() { this(50); } - + public ElementStack(int defaultCapacity) { stack = new Element[defaultCapacity]; } - - public void setDispatchHandler(DispatchHandler handler) { - this.handler = handler; + + public void setDispatchHandler(DispatchHandler handler) + { + this.handler = handler; } - + /** Peeks at the top element on the stack without changing the contents - * of the stack. - * - * @return the current element on the stack - */ + * of the stack. + * + * @return the current element on the stack + */ public void clear() { lastElementIndex = -1; } - + /** Peeks at the top element on the stack without changing the contents - * of the stack. - * - * @return the current element on the stack - */ + * of the stack. + * + * @return the current element on the stack + */ public Element peekElement() { - if (lastElementIndex < 0) { + if ( lastElementIndex < 0 ) { return null; } - return stack[lastElementIndex]; + return stack[ lastElementIndex ]; } - + /** Pops the element off the stack - * - * @return the element that has just been popped off the stack - */ + * + * @return the element that has just been popped off the stack + */ public Element popElement() { - if (lastElementIndex < 0) { + if ( lastElementIndex < 0 ) { return null; } - return stack[lastElementIndex--]; + return stack[ lastElementIndex-- ]; } - + /** Pushes a new element onto the stack - * - * @return pushes the new element onto the stack and add it to its parent - * if there is one. - */ + * + * @return pushes the new element onto the stack and add it to its parent + * if there is one. + */ public void pushElement(Element element) { int length = stack.length; - if (++lastElementIndex >= length) { - reallocate(length * 2); + if ( ++lastElementIndex >= length ) { + reallocate( length * 2 ); } stack[lastElementIndex] = element; } - + /** Reallocates the stack to the given size - */ - protected void reallocate(int size) { + */ + protected void reallocate( int size ) { Element[] oldStack = stack; - stack = new Element[size]; - System.arraycopy(oldStack, 0, stack, 0, oldStack.length); + stack = new Element[ size ]; + System.arraycopy( oldStack, 0, stack, 0, oldStack.length ); } - + // The ElementPath Interface // - public int size() { + public int size() + { return lastElementIndex + 1; } - - public Element getElement(int depth) { + + public Element getElement(int depth) + { Element element; try { - element = (Element) stack[depth]; - } catch (ArrayIndexOutOfBoundsException e) { - element = null; + element = (Element)stack[depth]; + } + catch (ArrayIndexOutOfBou... [truncated message content] |