From 7702c45bbff12f5b6c21c710a1106ee6cf2991a9 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Sun, 1 Oct 2023 15:36:34 +0200 Subject: [PATCH] Clean up XmlElement methods XmlElement has a number of methods which are better hosted in XmlUtil, without the need for encapsulation. Change-Id: I5e47719ce3c31b3e41976f0e1955ac097b4a1485 Signed-off-by: Robert Varga --- .../server/mdsal/operations/RuntimeRpc.java | 2 +- .../netconf/api/xml/XmlElement.java | 32 +++++-------------- .../opendaylight/netconf/api/xml/XmlUtil.java | 16 ++++++++++ .../netconf/api/xml/XmlElementTest.java | 1 - .../operations/AbstractNetconfOperation.java | 2 +- 5 files changed, 26 insertions(+), 27 deletions(-) diff --git a/plugins/netconf-server-mdsal/src/main/java/org/opendaylight/netconf/server/mdsal/operations/RuntimeRpc.java b/plugins/netconf-server-mdsal/src/main/java/org/opendaylight/netconf/server/mdsal/operations/RuntimeRpc.java index 17d359fb6d..71207415b8 100644 --- a/plugins/netconf-server-mdsal/src/main/java/org/opendaylight/netconf/server/mdsal/operations/RuntimeRpc.java +++ b/plugins/netconf-server-mdsal/src/main/java/org/opendaylight/netconf/server/mdsal/operations/RuntimeRpc.java @@ -171,7 +171,7 @@ public class RuntimeRpc extends AbstractSingletonNetconfOperation { final Element response = handle(document, operationElement, subsequentOperation); final Element rpcReply = document.createElementNS(NamespaceURN.BASE, RpcReplyMessage.ELEMENT_NAME); - if (XmlElement.fromDomElement(response).hasNamespace()) { + if (XmlUtil.hasNamespace(response)) { rpcReply.appendChild(response); } else { final NodeList list = response.getChildNodes(); diff --git a/protocol/netconf-api/src/main/java/org/opendaylight/netconf/api/xml/XmlElement.java b/protocol/netconf-api/src/main/java/org/opendaylight/netconf/api/xml/XmlElement.java index a236cc259f..d5d983b2c9 100644 --- a/protocol/netconf-api/src/main/java/org/opendaylight/netconf/api/xml/XmlElement.java +++ b/protocol/netconf-api/src/main/java/org/opendaylight/netconf/api/xml/XmlElement.java @@ -7,6 +7,7 @@ */ package org.opendaylight.netconf.api.xml; +import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Strings; import java.io.IOException; import java.util.AbstractMap.SimpleImmutableEntry; @@ -169,7 +170,7 @@ public final class XmlElement { public List getChildElementsWithinNamespace(final String namespace) { return getChildElementsInternal(e -> { - final var elementNamespace = namespace(e); + final var elementNamespace = XmlUtil.namespace(e); return elementNamespace != null && elementNamespace.equals(namespace); }); } @@ -281,17 +282,9 @@ public final class XmlElement { return Optional.empty(); } - public @Nullable String namespaceAttribute() { - final var attribute = element.getAttribute(XMLConstants.XMLNS_ATTRIBUTE); - return attribute.isEmpty() ? null : attribute; - } - - public Optional findNamespaceAttribute() { - return Optional.ofNullable(namespaceAttribute()); - } - - public @NonNull String getNamespaceAttribute() throws MissingNameSpaceException { - final var attribute = namespaceAttribute(); + @VisibleForTesting + @NonNull String getNamespaceAttribute() throws MissingNameSpaceException { + final var attribute = XmlUtil.namespaceAttribute(element); if (attribute == null) { throw new MissingNameSpaceException("Element " + this + " must specify namespace", ErrorType.APPLICATION, ErrorTag.OPERATION_FAILED, ErrorSeverity.ERROR); @@ -300,16 +293,7 @@ public final class XmlElement { } public @Nullable String namespace() { - return namespace(element); - } - - private static @Nullable String namespace(final Element element) { - final var namespaceURI = element.getNamespaceURI(); - return namespaceURI == null || namespaceURI.isEmpty() ? null : namespaceURI; - } - - public Optional findNamespace() { - return Optional.ofNullable(namespace()); + return XmlUtil.namespace(element); } public @NonNull String getNamespace() throws MissingNameSpaceException { @@ -381,8 +365,8 @@ public final class XmlElement { return namespaces; } - public boolean hasNamespace() { - return namespaceAttribute() != null || namespace() != null; + boolean hasNamespace() { + return XmlUtil.hasNamespace(element); } @Override diff --git a/protocol/netconf-api/src/main/java/org/opendaylight/netconf/api/xml/XmlUtil.java b/protocol/netconf-api/src/main/java/org/opendaylight/netconf/api/xml/XmlUtil.java index 68bfd700d0..aff6421b0e 100644 --- a/protocol/netconf-api/src/main/java/org/opendaylight/netconf/api/xml/XmlUtil.java +++ b/protocol/netconf-api/src/main/java/org/opendaylight/netconf/api/xml/XmlUtil.java @@ -15,6 +15,7 @@ import java.io.IOException; import java.io.InputStream; import java.io.StringWriter; import java.nio.charset.StandardCharsets; +import javax.xml.XMLConstants; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; @@ -27,6 +28,7 @@ import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamSource; +import org.eclipse.jdt.annotation.Nullable; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; @@ -91,6 +93,20 @@ public final class XmlUtil { // Hidden on purpose } + public static boolean hasNamespace(final Element element) { + return namespaceAttribute(element) != null || namespace(element) != null; + } + + public static @Nullable String namespace(final Element element) { + final var namespaceURI = element.getNamespaceURI(); + return namespaceURI == null || namespaceURI.isEmpty() ? null : namespaceURI; + } + + static @Nullable String namespaceAttribute(final Element element) { + final var attribute = element.getAttribute(XMLConstants.XMLNS_ATTRIBUTE); + return attribute.isEmpty() ? null : attribute; + } + public static Element readXmlToElement(final File xmlFile) throws SAXException, IOException { return readXmlToDocument(new FileInputStream(xmlFile)).getDocumentElement(); } diff --git a/protocol/netconf-api/src/test/java/org/opendaylight/netconf/api/xml/XmlElementTest.java b/protocol/netconf-api/src/test/java/org/opendaylight/netconf/api/xml/XmlElementTest.java index 268f13f0bf..ea2dd98e2f 100644 --- a/protocol/netconf-api/src/test/java/org/opendaylight/netconf/api/xml/XmlElementTest.java +++ b/protocol/netconf-api/src/test/java/org/opendaylight/netconf/api/xml/XmlElementTest.java @@ -64,7 +64,6 @@ public class XmlElementTest { assertTrue(xmlElement.hasNamespace()); assertEquals("namespace", xmlElement.getNamespace()); assertEquals("namespace", xmlElement.getNamespaceAttribute()); - assertEquals(Optional.of("namespace"), xmlElement.findNamespace()); assertEquals("value1", xmlElement.getAttribute("attr1", "attrNamespace")); assertEquals("value2", xmlElement.getAttribute("attr2")); diff --git a/protocol/netconf-server/src/main/java/org/opendaylight/netconf/server/api/operations/AbstractNetconfOperation.java b/protocol/netconf-server/src/main/java/org/opendaylight/netconf/server/api/operations/AbstractNetconfOperation.java index 56f102f887..42b6200869 100644 --- a/protocol/netconf-server/src/main/java/org/opendaylight/netconf/server/api/operations/AbstractNetconfOperation.java +++ b/protocol/netconf-server/src/main/java/org/opendaylight/netconf/server/api/operations/AbstractNetconfOperation.java @@ -95,7 +95,7 @@ public abstract class AbstractNetconfOperation implements NetconfOperation { final var response = handle(document, operationElement, subsequentOperation); final var rpcReply = document.createElementNS(NamespaceURN.BASE, RpcReplyMessage.ELEMENT_NAME); - if (XmlElement.fromDomElement(response).hasNamespace()) { + if (XmlUtil.hasNamespace(response)) { rpcReply.appendChild(response); } else { // FIXME: use getLocalName() instead -- 2.36.6