Retain protype in DataContainerCodecContext
[mdsal.git] / binding / mdsal-binding-dom-codec / src / main / java / org / opendaylight / mdsal / binding / dom / codec / impl / CachingNormalizedNodeCodec.java
index 6da3a6c8b2974ad8c7ba15b467f52db4fa6cd83f..a1807fd658ea45ca1606960a633e6d4320bc8259 100644 (file)
@@ -7,36 +7,40 @@
  */
 package org.opendaylight.mdsal.binding.dom.codec.impl;
 
-import com.google.common.base.Preconditions;
-import java.util.Set;
+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.api.BindingNormalizedNodeCachingCodec;
+import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeCodec;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 
-class CachingNormalizedNodeCodec<D extends DataObject> extends AbstractBindingNormalizedNodeCacheHolder implements
-        BindingNormalizedNodeCachingCodec<D> {
-
-    private final DataContainerCodecContext<D, ?> context;
+class CachingNormalizedNodeCodec<D extends DataObject,
+        C extends DataContainerCodecContext<D, ?, ?> & BindingNormalizedNodeCodec<D>>
+        extends AbstractBindingNormalizedNodeCacheHolder implements BindingNormalizedNodeCachingCodec<D> {
+    private final @NonNull C context;
 
-    CachingNormalizedNodeCodec(final DataContainerCodecContext<D, ?> subtreeRoot,
-            final Set<Class<? extends DataObject>> cacheSpec) {
+    CachingNormalizedNodeCodec(final C context, final ImmutableSet<Class<?>> cacheSpec) {
         super(cacheSpec);
-        this.context = Preconditions.checkNotNull(subtreeRoot);
+        this.context = requireNonNull(context);
     }
 
     @Override
-    public D deserialize(final NormalizedNode<?, ?> data) {
+    public D deserialize(final NormalizedNode data) {
         return context.deserialize(data);
     }
 
     @Override
-    public NormalizedNode<?, ?> serialize(final D data) {
-        return CachingNormalizedNodeSerializer.serialize(this, context, data);
+    public NormalizedNode serialize(final D data) {
+        // Serialize data using stream writer with child cache enable or using the cache if it is available
+        final var cache = getCachingSerializer(context);
+        return cache == null ? CachingNormalizedNodeSerializer.serializeUsingStreamWriter(this, context, data)
+                : cache.get(data);
     }
 
     @Override
     public void close() {
         // NOOP as of now.
     }
-
 }