Bug 714 - Fixed creating DOM Document's element with namespace
[controller.git] / opendaylight / netconf / netconf-util / src / main / java / org / opendaylight / controller / netconf / util / xml / XmlUtil.java
index 238249dbbd8d49086b38c1696cb6d0cb685909fe..d8907424f804f6d93262a38ddf107364a392cca1 100644 (file)
@@ -40,10 +40,12 @@ import org.w3c.dom.Node;
 import org.xml.sax.SAXException;
 
 import com.google.common.base.Charsets;
+import com.google.common.base.Optional;
 
 public final class XmlUtil {
 
     public static final String XMLNS_ATTRIBUTE_KEY = "xmlns";
+    private static final String XMLNS_URI = "http://www.w3.org/2000/xmlns/";
     private static final DocumentBuilderFactory BUILDERFACTORY;
 
     static {
@@ -101,25 +103,30 @@ public final class XmlUtil {
         }
     }
 
-    public static Element createTextElement(Document document, String name, String content) {
-        Element typeElement = document.createElement(name);
-        typeElement.appendChild(document.createTextNode(content));
-        return typeElement;
-    }
-
-    public static void addNamespaceAttr(Element root, String namespace) {
-        root.setAttribute(XMLNS_ATTRIBUTE_KEY, namespace);
+    public static Element createElement(final Document document, String qName, Optional<String> namespaceURI) {
+        if(namespaceURI.isPresent()) {
+            final Element element = document.createElementNS(namespaceURI.get(), qName);
+            String name = XMLNS_ATTRIBUTE_KEY;
+            if(element.getPrefix() != null) {
+                name += ":" + element.getPrefix();
+            }
+            element.setAttributeNS(XMLNS_URI, name, namespaceURI.get());
+            return element;
+        }
+        return document.createElement(qName);
     }
 
-    public static void addPrefixedNamespaceAttr(Element root, String prefix, String namespace) {
-        root.setAttribute(concat(XMLNS_ATTRIBUTE_KEY, prefix), namespace);
+    public static Element createTextElement(Document document, String qName, String content, Optional<String> namespaceURI) {
+        Element typeElement = createElement(document, qName, namespaceURI);
+        typeElement.appendChild(document.createTextNode(content));
+        return typeElement;
     }
 
-    public static Element createPrefixedTextElement(Document document, String key, String prefix, String content) {
-        return createTextElement(document, key, concat(prefix, content));
+    public static Element createPrefixedTextElement(Document document, String qName, String prefix, String content, Optional<String> namespace) {
+        return createTextElement(document, qName, createPrefixedValue(prefix, content), namespace);
     }
 
-    private static String concat(String prefix, String value) {
+    public static String createPrefixedValue(String prefix, String value) {
         return prefix + ":" + value;
     }