Integrate netconf-common-mdsal with databind 00/115600/3
authorRobert Varga <robert.varga@pantheon.tech>
Mon, 24 Feb 2025 16:01:13 +0000 (17:01 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Mon, 24 Feb 2025 18:53:02 +0000 (19:53 +0100)
We have a few methods which take an EffectiveModelContext. Allow the
class to be instantiated with a DatabindContext to take the model
context from there.

JIRA: NETCONF-1352
Change-Id: Ifeec32c15ff828c6299eec28a10cb7d7966bc854
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
features/odl-netconf-mdsal-common/pom.xml
plugins/netconf-common-mdsal/pom.xml
plugins/netconf-common-mdsal/src/main/java/module-info.java
plugins/netconf-common-mdsal/src/main/java/org/opendaylight/netconf/common/mdsal/NormalizedDataUtil.java

index 0cfe985b81d24fa5f09c12e43e5cee79e3e79bfd..b73fac8823c204f769389555de179c12ed40daed 100644 (file)
             <type>xml</type>
             <classifier>features</classifier>
         </dependency>
+        <dependency>
+            <groupId>org.opendaylight.netconf</groupId>
+            <artifactId>odl-netconf-databind</artifactId>
+            <type>xml</type>
+            <classifier>features</classifier>
+        </dependency>
 
         <dependency>
             <groupId>org.opendaylight.netconf</groupId>
index 59613ae445b75dde533fa7007b8a5d882f225818..ed54f0aed3338e6fa450b2e28108e054d5a7a7f2 100644 (file)
             <groupId>org.opendaylight.mdsal.binding.model.ietf</groupId>
             <artifactId>rfc6241</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.opendaylight.netconf</groupId>
+            <artifactId>databind</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.opendaylight.netconf</groupId>
             <artifactId>netconf-api</artifactId>
index 5ff95824819c9d951f15ba0f2e8a1a664054858b..1a06dc7b550115b3187f3f8d7871d254e28f66a7 100644 (file)
@@ -13,6 +13,7 @@ module org.opendaylight.netconf.common.mdsal {
 
     requires transitive java.xml;
     requires transitive org.opendaylight.mdsal.dom.api;
+    requires transitive org.opendaylight.netconf.databind;
     requires transitive org.opendaylight.yangtools.yang.data.api;
     requires transitive org.opendaylight.yangtools.yang.data.impl;
     requires com.google.common;
index 739c6a5367c43b9238093545289a9a31309892d6..26312a27c4cd713695485923dc942764e795b1c5 100644 (file)
@@ -7,6 +7,8 @@
  */
 package org.opendaylight.netconf.common.mdsal;
 
+import static java.util.Objects.requireNonNull;
+
 import java.io.IOException;
 import java.net.URISyntaxException;
 import java.util.List;
@@ -17,10 +19,12 @@ import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamWriter;
 import javax.xml.transform.dom.DOMResult;
 import javax.xml.transform.dom.DOMSource;
+import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.netconf.api.NamespaceURN;
 import org.opendaylight.netconf.api.xml.XmlUtil;
+import org.opendaylight.netconf.databind.DatabindContext;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
 import org.opendaylight.yangtools.yang.data.api.schema.MountPointContext;
@@ -94,8 +98,34 @@ public final class NormalizedDataUtil {
     // FIXME: this needs to be called when and why?
     private static final NamespaceSetter XML_NAMESPACE_SETTER = NamespaceSetter.forFactory(XML_FACTORY);
 
-    private NormalizedDataUtil() {
-        // No-op
+    private final @NonNull DatabindContext databind;
+
+    public NormalizedDataUtil(final DatabindContext databind) {
+        this.databind = requireNonNull(databind);
+    }
+
+    public @NonNull DatabindContext databind() {
+        return databind;
+    }
+
+    /**
+     * Write {@code normalized} data along with corresponding {@code metadata} into {@link DOMResult}.
+     *
+     * @param data data to be written
+     * @param metadata  optional metadata to be written
+     * @param result DOM result holder
+     * @param parent optional schema node identifier of the parent node
+     * @throws IOException when failed to write data into {@link NormalizedNodeStreamWriter}
+     * @throws XMLStreamException when failed to serialize data into XML document
+     */
+    @NonNullByDefault
+    public void writeNode(final NormalizedNode data, final @Nullable NormalizedMetadata metadata,
+            final DOMResult result, final @Nullable Absolute parent) throws IOException, XMLStreamException {
+        if (metadata != null) {
+            writeNode(databind.modelContext(), data, metadata, result, parent);
+        } else {
+            writeNode(databind.modelContext(), data, result, parent);
+        }
     }
 
     @NonNullByDefault
@@ -126,6 +156,27 @@ public final class NormalizedDataUtil {
         }
     }
 
+    /**
+     * Write elements equivalent to specified by {@link YangInstanceIdentifier} along with corresponding
+     * {@code metadata} into {@link DOMResult}.
+     *
+     * @param path path to write
+     * @param metadata optional metadata to be written
+     * @param result DOM result holder
+     * @param parent optional schema node identifier of the parent node
+     * @throws IOException when failed to write data into {@link NormalizedNodeStreamWriter}
+     * @throws XMLStreamException when failed to serialize data into XML document
+     */
+    @NonNullByDefault
+    public void writePath(final YangInstanceIdentifier path, final @Nullable NormalizedMetadata metadata,
+            final DOMResult result, final @Nullable Absolute parent) throws IOException, XMLStreamException {
+        if (metadata != null) {
+            writePath(databind.modelContext(), path, metadata, result, parent);
+        } else {
+            writePath(databind.modelContext(), path, result, parent);
+        }
+    }
+
     @NonNullByDefault
     private static void writePath(final EffectiveModelContext modelContext, final YangInstanceIdentifier path,
             final DOMResult result, final @Nullable Absolute parent) throws IOException, XMLStreamException {
@@ -170,6 +221,7 @@ public final class NormalizedDataUtil {
      * @throws IOException        when failed to write data into {@link NormalizedNodeStreamWriter}
      * @throws XMLStreamException when failed to serialize data into XML document
      */
+    @Deprecated
     public static void writeNormalizedNode(final NormalizedNode normalized, final DOMResult result,
             final EffectiveModelContext context, final @Nullable Absolute path) throws IOException, XMLStreamException {
         writeNode(context, normalized, result, path);
@@ -186,6 +238,7 @@ public final class NormalizedDataUtil {
      * @throws IOException        when failed to write data into {@link NormalizedNodeStreamWriter}
      * @throws XMLStreamException when failed to serialize data into XML document
      */
+    @Deprecated
     public static void writeNormalizedNode(final NormalizedNode normalized, final @Nullable NormalizedMetadata metadata,
             final DOMResult result, final EffectiveModelContext context, final @Nullable Absolute path)
                 throws IOException, XMLStreamException {
@@ -206,6 +259,7 @@ public final class NormalizedDataUtil {
      * @throws IOException        when failed to write data into {@link NormalizedNodeStreamWriter}
      * @throws XMLStreamException when failed to serialize data into XML document
      */
+    @Deprecated
     public static void writeNormalizedNode(final YangInstanceIdentifier query, final DOMResult result,
             final EffectiveModelContext context, final @Nullable Absolute path) throws IOException, XMLStreamException {
         writePath(context, query, result, path);
@@ -223,6 +277,7 @@ public final class NormalizedDataUtil {
      * @throws IOException        when failed to write data into {@link NormalizedNodeStreamWriter}
      * @throws XMLStreamException when failed to serialize data into XML document
      */
+    @Deprecated
     public static void writeNormalizedNode(final YangInstanceIdentifier query,
             final @Nullable NormalizedMetadata metadata, final DOMResult result, final EffectiveModelContext context,
             final @Nullable Absolute path) throws IOException, XMLStreamException {