Split out CodecContextFactory 63/106463/2
authorRobert Varga <robert.varga@pantheon.tech>
Tue, 13 Jun 2023 11:31:35 +0000 (13:31 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Tue, 13 Jun 2023 11:35:47 +0000 (13:35 +0200)
The coupling of CodecContextFactory to NodeCodecContext prevents proper
splitting the individual concerns. Promote CodecContextFactory to a
top-level class.

JIRA: MDSAL-828
Change-Id: Ic3cc54380e7db76e92c116103b84af209625e97b
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/AugmentationCodecPrototype.java
binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/BindingCodecContext.java
binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/CaseCodecPrototype.java
binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/CodecContextFactory.java [new file with mode: 0644]
binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/CodecDataObjectAnalysis.java
binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataContainerCodecPrototype.java
binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataObjectCodecPrototype.java
binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataObjectStreamerGenerator.java
binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/NodeCodecContext.java

index c91de7f70f2fe2cf123ac7f352e564353977570b..9022c39744036928db0a50aa07f75150f4c32811 100644 (file)
@@ -11,7 +11,6 @@ import static java.util.Objects.requireNonNull;
 
 import com.google.common.collect.ImmutableSet;
 import org.eclipse.jdt.annotation.NonNull;
-import org.opendaylight.mdsal.binding.dom.codec.impl.NodeCodecContext.CodecContextFactory;
 import org.opendaylight.mdsal.binding.runtime.api.AugmentRuntimeType;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.Item;
index dd108c2c818d5d33ac99510d1352706575341df9..56fd93cf4265a0955e79fa3b8de0a3f36384471c 100644 (file)
@@ -46,7 +46,6 @@ import org.opendaylight.mdsal.binding.dom.codec.api.BindingInstanceIdentifierCod
 import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeWriterFactory;
 import org.opendaylight.mdsal.binding.dom.codec.api.BindingStreamEventWriter;
 import org.opendaylight.mdsal.binding.dom.codec.api.CommonDataObjectCodecTreeNode;
-import org.opendaylight.mdsal.binding.dom.codec.impl.NodeCodecContext.CodecContextFactory;
 import org.opendaylight.mdsal.binding.dom.codec.spi.AbstractBindingNormalizedNodeSerializer;
 import org.opendaylight.mdsal.binding.dom.codec.spi.BindingDOMCodecServices;
 import org.opendaylight.mdsal.binding.dom.codec.spi.BindingSchemaMapping;
index 6759c00b5214c2f4f94d19003558eb02028b9caa..da204eb6cbc8c6cb94c94b5e7587790537ea4870 100644 (file)
@@ -7,7 +7,6 @@
  */
 package org.opendaylight.mdsal.binding.dom.codec.impl;
 
-import org.opendaylight.mdsal.binding.dom.codec.impl.NodeCodecContext.CodecContextFactory;
 import org.opendaylight.mdsal.binding.runtime.api.CaseRuntimeType;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
 
diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/CodecContextFactory.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/CodecContextFactory.java
new file mode 100644 (file)
index 0000000..8b1a2ec
--- /dev/null
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.mdsal.binding.dom.codec.impl;
+
+import com.google.common.collect.ImmutableMap;
+import java.lang.reflect.Method;
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.mdsal.binding.loader.BindingClassLoader;
+import org.opendaylight.mdsal.binding.runtime.api.BindingRuntimeContext;
+import org.opendaylight.mdsal.binding.runtime.api.ListRuntimeType;
+import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+
+/**
+ * Immutable factory, which provides access to runtime context, create leaf nodes and provides path argument codecs.
+ *
+ * <p>
+ * During lifetime of factory all calls for same arguments to method must return equal result (not necessary same
+ * instance of result).
+ */
+sealed interface CodecContextFactory permits BindingCodecContext {
+    /**
+     * Returns immutable runtime context associated with this factory.
+     *
+     * @return runtime context
+     */
+    BindingRuntimeContext getRuntimeContext();
+
+    /**
+     * Returns leaf nodes for supplied data container and parent class.
+     *
+     * @param type Binding type for which leaves should be loaded.
+     * @param schema  Instantiated schema of binding type.
+     * @return Map of local name to leaf node context.
+     */
+    ImmutableMap<Method, ValueNodeCodecContext> getLeafNodes(Class<?> type, EffectiveStatement<?, ?> schema);
+
+    /**
+     * Returns Path argument codec for list item.
+     *
+     * @param listClz Type of list item
+     * @param type Schema of list item
+     * @return Path argument codec for supplied list item.
+     */
+    IdentifiableItemCodec getPathArgumentCodec(Class<?> listClz, ListRuntimeType type);
+
+    /**
+     * Return the codec loader associated with this factory.
+     *
+     * @return A codec loader instance
+     */
+    @NonNull BindingClassLoader getLoader();
+
+    @NonNull DataObjectStreamer<?> getDataObjectSerializer(Class<?> type);
+
+    DataObjectSerializer getEventStreamSerializer(Class<?> type);
+}
index ca447d8a65e0e076347424eed434d808c753f923..26ecdd6c8670b6dff6a864770a25225b99a490dd 100644 (file)
@@ -21,7 +21,6 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import org.eclipse.jdt.annotation.NonNull;
-import org.opendaylight.mdsal.binding.dom.codec.impl.NodeCodecContext.CodecContextFactory;
 import org.opendaylight.mdsal.binding.model.api.JavaTypeName;
 import org.opendaylight.mdsal.binding.runtime.api.AugmentRuntimeType;
 import org.opendaylight.mdsal.binding.runtime.api.AugmentableRuntimeType;
index 4fcbf16d5df08d10a8e1cb632b1301937cd9d585..ca5c6534fe5d59e71f5c04ceec816967ef5ed1d8 100644 (file)
@@ -14,7 +14,6 @@ import java.lang.invoke.MethodHandles;
 import java.lang.invoke.VarHandle;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.mdsal.binding.dom.codec.api.CommonDataObjectCodecTreeNode.ChildAddressabilitySummary;
-import org.opendaylight.mdsal.binding.dom.codec.impl.NodeCodecContext.CodecContextFactory;
 import org.opendaylight.mdsal.binding.runtime.api.CompositeRuntimeType;
 import org.opendaylight.mdsal.binding.runtime.api.RuntimeType;
 import org.opendaylight.mdsal.binding.runtime.api.RuntimeTypeContainer;
index 06b4c90b153e6fd5a7fb8ccebfbbb5e33b840810..3f5c6b52c19d729cf14b1c2801dd3c5d7df3cf1c 100644 (file)
@@ -10,7 +10,6 @@ package org.opendaylight.mdsal.binding.dom.codec.impl;
 import static java.util.Objects.requireNonNull;
 
 import org.eclipse.jdt.annotation.NonNull;
-import org.opendaylight.mdsal.binding.dom.codec.impl.NodeCodecContext.CodecContextFactory;
 import org.opendaylight.mdsal.binding.runtime.api.ChoiceRuntimeType;
 import org.opendaylight.mdsal.binding.runtime.api.ContainerLikeRuntimeType;
 import org.opendaylight.mdsal.binding.runtime.api.ContainerRuntimeType;
index 06db0fe20073c247b6080d780c42f166ed5bce2e..5124ce6c80011e33edcb7830016b13f7858a9fbb 100644 (file)
@@ -49,7 +49,6 @@ import net.bytebuddy.matcher.ElementMatcher;
 import net.bytebuddy.matcher.ElementMatchers;
 import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.mdsal.binding.dom.codec.api.BindingStreamEventWriter;
-import org.opendaylight.mdsal.binding.dom.codec.impl.NodeCodecContext.CodecContextFactory;
 import org.opendaylight.mdsal.binding.dom.codec.spi.BindingSchemaMapping;
 import org.opendaylight.mdsal.binding.loader.BindingClassLoader;
 import org.opendaylight.mdsal.binding.loader.BindingClassLoader.ClassGenerator;
index 3fdeee158c8f90c86eb4112fbef0637b476e3e60..8241120205a759cc120d127c4afb7e56087f608a 100644 (file)
@@ -7,17 +7,10 @@
  */
 package org.opendaylight.mdsal.binding.dom.codec.impl;
 
-import com.google.common.collect.ImmutableMap;
-import java.lang.reflect.Method;
-import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTreeNode;
-import org.opendaylight.mdsal.binding.loader.BindingClassLoader;
-import org.opendaylight.mdsal.binding.runtime.api.BindingRuntimeContext;
-import org.opendaylight.mdsal.binding.runtime.api.ListRuntimeType;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
-import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 
 /**
  * Location specific context for schema nodes, which contains codec specific information to properly serialize
@@ -40,51 +33,6 @@ abstract class NodeCodecContext implements BindingCodecTreeNode {
      */
     protected abstract @Nullable NodeIdentifier getDomPathArgument();
 
-    /**
-     * Immutable factory, which provides access to runtime context, create leaf nodes and provides path argument codecs.
-     *
-     * <p>
-     * During lifetime of factory all calls for same arguments to method must return equal result (not necessary same
-     * instance of result).
-     */
-    protected interface CodecContextFactory {
-        /**
-         * Returns immutable runtime context associated with this factory.
-         *
-         * @return runtime context
-         */
-        BindingRuntimeContext getRuntimeContext();
-
-        /**
-         * Returns leaf nodes for supplied data container and parent class.
-         *
-         * @param type Binding type for which leaves should be loaded.
-         * @param schema  Instantiated schema of binding type.
-         * @return Map of local name to leaf node context.
-         */
-        ImmutableMap<Method, ValueNodeCodecContext> getLeafNodes(Class<?> type, EffectiveStatement<?, ?> schema);
-
-        /**
-         * Returns Path argument codec for list item.
-         *
-         * @param listClz Type of list item
-         * @param type Schema of list item
-         * @return Path argument codec for supplied list item.
-         */
-        IdentifiableItemCodec getPathArgumentCodec(Class<?> listClz, ListRuntimeType type);
-
-        /**
-         * Return the codec loader associated with this factory.
-         *
-         * @return A codec loader instance
-         */
-        @NonNull BindingClassLoader getLoader();
-
-        @NonNull DataObjectStreamer<?> getDataObjectSerializer(Class<?> type);
-
-        DataObjectSerializer getEventStreamSerializer(Class<?> type);
-    }
-
     /**
      * Return the default value object. Implementations of this method are explicitly allowed to throw unchecked
      * exceptions, which are propagated as-is upwards the stack.