From 64c64c5f336439fe8912c64b751b90f131ee49d5 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Tue, 12 Jun 2018 16:50:16 +0200 Subject: [PATCH] Make BindingToNormalizedNodeCodec non-final Most of this functionality is duplicated in the controller, make this class non-final to allow the functionality to be subclassed in the controller. Change-Id: Ia44c2194ee85d06bbe20ac913fa4a99721f66f01 Signed-off-by: Robert Varga --- .../adapter/BindingToNormalizedNodeCodec.java | 58 +++++++++++-------- 1 file changed, 33 insertions(+), 25 deletions(-) diff --git a/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingToNormalizedNodeCodec.java b/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingToNormalizedNodeCodec.java index 1d7d75ad98..ba38c61d32 100644 --- a/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingToNormalizedNodeCodec.java +++ b/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingToNormalizedNodeCodec.java @@ -63,7 +63,14 @@ import org.opendaylight.yangtools.yang.model.api.SchemaPath; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public final class BindingToNormalizedNodeCodec implements BindingCodecTreeFactory, +/** + * A combinations of {@link BindingCodecTreeFactory} and {@link BindingNormalizedNodeSerializer}, with internal + * caching of instance identifiers. + * + *

+ * NOTE: this class is non-final to allow controller adapter migration without duplicated code. + */ +public class BindingToNormalizedNodeCodec implements BindingCodecTreeFactory, BindingNormalizedNodeSerializer, SchemaContextListener, AutoCloseable { private static final long WAIT_DURATION_SEC = 5; @@ -92,7 +99,8 @@ public final class BindingToNormalizedNodeCodec implements BindingCodecTreeFacto this.futureSchema = FutureSchema.create(WAIT_DURATION_SEC, TimeUnit.SECONDS, waitForSchema); } - YangInstanceIdentifier toYangInstanceIdentifierBlocking(final InstanceIdentifier binding) { + protected YangInstanceIdentifier toYangInstanceIdentifierBlocking( + final InstanceIdentifier binding) { try { return codecRegistry.toYangInstanceIdentifier(binding); } catch (final MissingSchemaException e) { @@ -111,22 +119,21 @@ public final class BindingToNormalizedNodeCodec implements BindingCodecTreeFacto * @throws IllegalArgumentException * If supplied Instance Identifier is not valid. */ - public YangInstanceIdentifier toNormalized(final InstanceIdentifier binding) { + public final YangInstanceIdentifier toNormalized(final InstanceIdentifier binding) { return codecRegistry.toYangInstanceIdentifier(binding); } @Override - public YangInstanceIdentifier toYangInstanceIdentifier(@Nonnull final InstanceIdentifier binding) { + public final YangInstanceIdentifier toYangInstanceIdentifier(@Nonnull final InstanceIdentifier binding) { return codecRegistry.toYangInstanceIdentifier(binding); } - - YangInstanceIdentifier toYangInstanceIdentifierCached(final InstanceIdentifier binding) { - return iiCache .getUnchecked(binding); + protected YangInstanceIdentifier toYangInstanceIdentifierCached(final InstanceIdentifier binding) { + return iiCache.getUnchecked(binding); } @Override - public Entry> toNormalizedNode( + public final Entry> toNormalizedNode( final InstanceIdentifier path, final T data) { try { return codecRegistry.toNormalizedNode(path, data); @@ -147,40 +154,41 @@ public final class BindingToNormalizedNodeCodec implements BindingCodecTreeFacto * as value. */ @SuppressWarnings({"unchecked", "rawtypes"}) - public Entry> toNormalizedNode( + public final Entry> toNormalizedNode( final Entry, DataObject> binding) { return toNormalizedNode((InstanceIdentifier) binding.getKey(), binding.getValue()); } @Override - public Entry, DataObject> fromNormalizedNode(@Nonnull final YangInstanceIdentifier path, + public final Entry, DataObject> fromNormalizedNode(@Nonnull final YangInstanceIdentifier path, final NormalizedNode data) { return codecRegistry.fromNormalizedNode(path, data); } @Override - public Notification fromNormalizedNodeNotification(@Nonnull final SchemaPath path, + public final Notification fromNormalizedNodeNotification(@Nonnull final SchemaPath path, @Nonnull final ContainerNode data) { return codecRegistry.fromNormalizedNodeNotification(path, data); } @Override - public DataObject fromNormalizedNodeRpcData(@Nonnull final SchemaPath path, @Nonnull final ContainerNode data) { + public final DataObject fromNormalizedNodeRpcData(@Nonnull final SchemaPath path, + @Nonnull final ContainerNode data) { return codecRegistry.fromNormalizedNodeRpcData(path, data); } @Override - public InstanceIdentifier fromYangInstanceIdentifier(@Nonnull final YangInstanceIdentifier dom) { + public final InstanceIdentifier fromYangInstanceIdentifier(@Nonnull final YangInstanceIdentifier dom) { return codecRegistry.fromYangInstanceIdentifier(dom); } @Override - public ContainerNode toNormalizedNodeNotification(@Nonnull final Notification data) { + public final ContainerNode toNormalizedNodeNotification(@Nonnull final Notification data) { return codecRegistry.toNormalizedNodeNotification(data); } @Override - public ContainerNode toNormalizedNodeRpcData(@Nonnull final DataContainer data) { + public final ContainerNode toNormalizedNodeRpcData(@Nonnull final DataContainer data) { return codecRegistry.toNormalizedNodeRpcData(data); } @@ -192,7 +200,7 @@ public final class BindingToNormalizedNodeCodec implements BindingCodecTreeFacto * Returns Optional.absent for cases where target is mixin node except * augmentation. */ - public Optional> toBinding(final YangInstanceIdentifier normalized) + public final Optional> toBinding(final YangInstanceIdentifier normalized) throws DeserializationException { try { return Optional.fromNullable(codecRegistry.fromYangInstanceIdentifier(normalized)); @@ -201,7 +209,7 @@ public final class BindingToNormalizedNodeCodec implements BindingCodecTreeFacto } } - public Optional, DataObject>> toBinding( + public final Optional, DataObject>> toBinding( @Nonnull final Entry> normalized) throws DeserializationException { try { @@ -235,12 +243,12 @@ public final class BindingToNormalizedNodeCodec implements BindingCodecTreeFacto futureSchema.onRuntimeContextUpdated(runtimeContext); } - public Function>, Optional> - deserializeFunction(final InstanceIdentifier path) { + public final Function>, Optional> deserializeFunction( + final InstanceIdentifier path) { return codecRegistry.deserializeFunction(path); } - public BindingNormalizedNodeCodecRegistry getCodecRegistry() { + public final BindingNormalizedNodeCodecRegistry getCodecRegistry() { return codecRegistry; } @@ -249,12 +257,12 @@ public final class BindingToNormalizedNodeCodec implements BindingCodecTreeFacto // NOOP Intentionally } - public BindingNormalizedNodeCodecRegistry getCodecFactory() { + public final BindingNormalizedNodeCodecRegistry getCodecFactory() { return codecRegistry; } // FIXME: This should be probably part of Binding Runtime context - public ImmutableBiMap getRpcMethodToSchemaPath(final Class key) { + public final ImmutableBiMap getRpcMethodToSchemaPath(final Class key) { final Module module = getModuleBlocking(key); final ImmutableBiMap.Builder ret = ImmutableBiMap.builder(); try { @@ -312,12 +320,12 @@ public final class BindingToNormalizedNodeCodec implements BindingCodecTreeFacto } @Override - public BindingCodecTree create(final BindingRuntimeContext context) { + public final BindingCodecTree create(final BindingRuntimeContext context) { return codecRegistry.create(context); } @Override - public BindingCodecTree create(final SchemaContext context, final Class... bindingClasses) { + public final BindingCodecTree create(final SchemaContext context, final Class... bindingClasses) { return codecRegistry.create(context, bindingClasses); } @@ -337,7 +345,7 @@ public final class BindingToNormalizedNodeCodec implements BindingCodecTreeFacto } @SuppressWarnings("unchecked") - public Set> getNotificationClasses(final Set interested) { + public final Set> getNotificationClasses(final Set interested) { final Set> result = new HashSet<>(); final BindingRuntimeContext runtimeContext = runtimeContext(); for (final NotificationDefinition notification : runtimeContext.getSchemaContext().getNotifications()) { -- 2.36.6