You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commons-dev@ws.apache.org by th...@apache.org on 2006/10/11 14:43:53 UTC

svn commit: r462788 - in /webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom: NodeImpl.java ParentNode.java

Author: thilina
Date: Wed Oct 11 05:43:52 2006
New Revision: 462788

URL: http://svn.apache.org/viewvc?view=rev&rev=462788
Log:
 llom child adding support DOOM

Modified:
    webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/NodeImpl.java
    webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ParentNode.java

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/NodeImpl.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/NodeImpl.java?view=diff&rev=462788&r1=462787&r2=462788
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/NodeImpl.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/NodeImpl.java Wed Oct 11 05:43:52 2006
@@ -15,17 +15,25 @@
  */
 package org.apache.axiom.om.impl.dom;
 
+import org.apache.axiom.om.OMComment;
 import org.apache.axiom.om.OMContainer;
+import org.apache.axiom.om.OMDocType;
+import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMException;
 import org.apache.axiom.om.OMFactory;
 import org.apache.axiom.om.OMNode;
 import org.apache.axiom.om.OMOutputFormat;
+import org.apache.axiom.om.OMProcessingInstruction;
+import org.apache.axiom.om.OMText;
 import org.apache.axiom.om.OMXMLParserWrapper;
 import org.apache.axiom.om.util.StAXUtils;
 import org.apache.axiom.om.impl.OMNodeEx;
 import org.apache.axiom.om.impl.MTOMXMLStreamWriter;
+import org.apache.axiom.om.impl.builder.StAXOMBuilder;
+import org.apache.axiom.om.impl.dom.factory.OMDOMFactory;
 import org.w3c.dom.DOMException;
 import org.w3c.dom.Document;
+import org.w3c.dom.Element;
 import org.w3c.dom.NamedNodeMap;
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ParentNode.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ParentNode.java?view=diff&rev=462788&r1=462787&r2=462788
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ParentNode.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ParentNode.java Wed Oct 11 05:43:52 2006
@@ -15,16 +15,25 @@
  */
 package org.apache.axiom.om.impl.dom;
 
+import org.apache.axiom.om.OMComment;
+import org.apache.axiom.om.OMDocType;
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMException;
 import org.apache.axiom.om.OMFactory;
 import org.apache.axiom.om.OMNode;
+import org.apache.axiom.om.OMProcessingInstruction;
+import org.apache.axiom.om.OMText;
 import org.apache.axiom.om.impl.OMContainerEx;
 import org.apache.axiom.om.impl.OMNodeEx;
+import org.apache.axiom.om.impl.builder.StAXOMBuilder;
+import org.apache.axiom.om.impl.dom.factory.OMDOMFactory;
+import org.apache.axiom.om.impl.llom.OMNodeImpl;
+import org.apache.axiom.om.impl.llom.factory.OMLinkedListImplFactory;
 import org.apache.axiom.om.impl.traverse.OMChildrenIterator;
 import org.apache.axiom.om.impl.traverse.OMChildrenQNameIterator;
 import org.w3c.dom.DOMException;
 import org.w3c.dom.Document;
+import org.w3c.dom.Element;
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
 
@@ -53,7 +62,12 @@
     // /
 
     public void addChild(OMNode omNode) {
-        this.appendChild((Node) omNode);
+		if (omNode.getOMFactory() instanceof OMDOMFactory) {
+			this.appendChild((Node) omNode);
+		} else {
+			addChild(importNode(omNode));
+		}
+        
     }
 
     public void buildNext() {
@@ -464,8 +478,78 @@
                 newnode.appendChild(child.cloneNode(true));
             }
         }
-
         return newnode;
-
     }
+    
+	/**	
+	 * This method is intended only to be used by Axiom intenals when merging Objects
+	 * from different Axiom implementations to the DOOM implementation.
+	 * 
+	 * @param child
+	 * @return
+	 */
+	protected OMNode importNode(OMNode child) {
+		int type = child.getType();
+		switch (type) {
+		case (OMNode.ELEMENT_NODE): {
+			OMElement childElement = (OMElement) child;
+			OMElement newElement = (new StAXOMBuilder(this.factory,
+					childElement.getXMLStreamReader())).getDocumentElement();
+			newElement.build();
+			return (OMNode) this.ownerNode.importNode((Element) newElement,
+					true);
+		}
+		case (OMNode.TEXT_NODE): {
+			OMText importedText = (OMText) child;
+			OMText newText;
+			if (importedText.isBinary()) {
+				boolean isOptimize = importedText.isOptimized();
+				newText = this.factory.createOMText(importedText
+						.getDataHandler(), isOptimize);
+			} else if (importedText.getNamespace() != null) {
+				newText = this.factory.createOMText(this, importedText
+						.getTextAsQName(), importedText.getType());
+			} else if (importedText.isCharacters()) {
+				newText = new TextImpl((DocumentImpl) this.getOwnerDocument(),
+						importedText.getTextCharacters(), this.factory);
+			} else {
+				newText = new TextImpl((DocumentImpl) this.getOwnerDocument(),
+						importedText.getText(), this.factory);
+			}
+			return newText;
+		}
+
+		case (OMNode.PI_NODE): {
+			OMProcessingInstruction importedPI = (OMProcessingInstruction) child;
+			OMProcessingInstruction newPI = this.factory
+					.createOMProcessingInstruction(this,
+							importedPI.getTarget(), importedPI.getValue());
+			return newPI;
+		}
+		case (OMNode.COMMENT_NODE): {
+			OMComment importedComment = (OMComment) child;
+			OMComment newComment = this.factory.createOMComment(this,
+					importedComment.getValue());
+			DocumentImpl doc;
+			if (this instanceof DocumentImpl) {
+				doc = (DocumentImpl) this;
+			} else {
+				doc = (DocumentImpl) ((ParentNode) this).getOwnerDocument();
+			}
+			newComment = new CommentImpl(doc, importedComment.getValue(),
+					this.factory);
+			return newComment;
+		}
+		case (OMNode.DTD_NODE): {
+			OMDocType importedDocType = (OMDocType) child;
+			OMDocType newDocType = this.factory.createOMDocType(this,
+					importedDocType.getValue());
+			return newDocType;
+		}
+		default: {
+			throw new UnsupportedOperationException(
+					"Not Implemented Yet for the given node type");
+		}
+		}
+	}
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: commons-dev-help@ws.apache.org