hillion 01/07/31 06:00:49 Modified: resources/org/apache/batik/dom/resources Messages.properties sources/org/apache/batik/dom AbstractDocument.java Log: AbstractDocument.importNode() should now be able to import nodes from any DOMImplementation. Revision Changes Path 1.3 +3 -0 xml-batik/resources/org/apache/batik/dom/resources/Messages.properties Index: Messages.properties =================================================================== RCS file: /home/cvs/xml-batik/resources/org/apache/batik/dom/resources/Messages.properties,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- Messages.properties 2000/11/22 16:26:44 1.2 +++ Messages.properties 2001/07/31 13:00:49 1.3 @@ -38,6 +38,9 @@ detached.iterator = \ The iterator was detached from the document. +import.node = \ +Cannot import node. + import.document = \ A Document node cannot be imported. 1.8 +73 -5 xml-batik/sources/org/apache/batik/dom/AbstractDocument.java Index: AbstractDocument.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/dom/AbstractDocument.java,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- AbstractDocument.java 2001/07/05 16:59:01 1.7 +++ AbstractDocument.java 2001/07/31 13:00:49 1.8 @@ -22,11 +22,13 @@ import org.apache.batik.i18n.Localizable; import org.apache.batik.i18n.LocalizableSupport; +import org.w3c.dom.Attr; import org.w3c.dom.Document; import org.w3c.dom.DocumentType; import org.w3c.dom.DOMException; import org.w3c.dom.DOMImplementation; import org.w3c.dom.Element; +import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.w3c.dom.events.DocumentEvent; @@ -40,7 +42,7 @@ * This class implements the {@link org.w3c.dom.Document} interface. * * @author <a href="mailto:[EMAIL PROTECTED]">Stephane Hillion</a> - * @version $Id: AbstractDocument.java,v 1.7 2001/07/05 16:59:01 hillion Exp $ + * @version $Id: AbstractDocument.java,v 1.8 2001/07/31 13:00:49 hillion Exp $ */ public abstract class AbstractDocument extends AbstractParentNode @@ -210,10 +212,76 @@ */ public Node importNode(Node importedNode, boolean deep) throws DOMException { - AbstractNode an = (AbstractNode)importedNode; - return (deep) - ? an.deepExport(an.cloneNode(false), this) - : an.export(an.cloneNode(false), this); + if (importedNode instanceof AbstractNode) { + AbstractNode an = (AbstractNode)importedNode; + return (deep) + ? an.deepExport(an.cloneNode(false), this) + : an.export(an.cloneNode(false), this); + } else { + Node result; + switch (importedNode.getNodeType()) { + case ELEMENT_NODE: + Element e = createElementNS(importedNode.getNamespaceURI(), + importedNode.getNodeName()); + result = e; + if (e.hasAttributes()) { + NamedNodeMap attr = importedNode.getAttributes(); + int len = attr.getLength(); + for (int i = 0; i < len; i++) { + Attr a = (Attr)attr.item(i); + if (a.getSpecified()) { + e.setAttributeNodeNS((Attr)importNode(a, true)); + } + } + } + break; + + case ATTRIBUTE_NODE: + result = createAttributeNS(importedNode.getNamespaceURI(), + importedNode.getNodeName()); + break; + + case TEXT_NODE: + result = createTextNode(importedNode.getNodeValue()); + deep = false; + break; + + case CDATA_SECTION_NODE: + result = createCDATASection(importedNode.getNodeValue()); + deep = false; + break; + + case ENTITY_REFERENCE_NODE: + result = createEntityReference(importedNode.getNodeName()); + break; + + case PROCESSING_INSTRUCTION_NODE: + result = createProcessingInstruction(importedNode.getNodeName(), + importedNode.getNodeValue()); + deep = false; + break; + + case COMMENT_NODE: + result = createComment(importedNode.getNodeValue()); + deep = false; + break; + + default: + throw createDOMException(DOMException.NOT_SUPPORTED_ERR, + "import.node", + new Object[] {}); + } + + if (deep) { + for (Node n = importedNode.getFirstChild(); + n != null; + n = n.getNextSibling()) { + result.appendChild(importNode(n, true)); + } + } + + return result; + } } /** --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]