From 7d9f0a4667c803c7155c8964b41bdf1e6196728a Mon Sep 17 00:00:00 2001 From: Tony Tkacik Date: Wed, 18 Mar 2015 15:21:09 +0100 Subject: [PATCH] Bug 868: Binding MD-SAL exports new codec factory. Migrated MD-SAL to export BindingCodecTreeFactory, which provides access to new codecs, which allows us to migrate users without need to change initial configuration. Change-Id: Icb741dd73e3b22f64f5f538236d36a99e9c05b4e Signed-off-by: Tony Tkacik --- .../src/main/resources/initial/01-md-sal.xml | 7 +++++++ .../BindingDOMRpcProviderServiceAdapter.java | 2 +- .../impl/BindingDOMRpcServiceAdapter.java | 4 ++-- .../impl/BindingToNormalizedNodeCodec.java | 20 ++++++++++++++++--- .../impl/ForwardedNotificationService.java | 2 +- .../opendaylight-binding-broker-impl.yang | 1 + .../md-sal/sal-binding-config/pom.xml | 4 ++++ .../yang/opendaylight-md-sal-binding.yang | 5 +++++ 8 files changed, 38 insertions(+), 7 deletions(-) diff --git a/opendaylight/md-sal/md-sal-config/src/main/resources/initial/01-md-sal.xml b/opendaylight/md-sal/md-sal-config/src/main/resources/initial/01-md-sal.xml index 8d5d5255f8..5ef6a245ec 100644 --- a/opendaylight/md-sal/md-sal-config/src/main/resources/initial/01-md-sal.xml +++ b/opendaylight/md-sal/md-sal-config/src/main/resources/initial/01-md-sal.xml @@ -219,6 +219,13 @@ /modules/module[type='runtime-generated-mapping'][name='runtime-mapping-singleton'] + + binding:binding-codec-tree-factory + + runtime-mapping-singleton + /modules/module[type='runtime-generated-mapping'][name='runtime-mapping-singleton'] + + binding-impl:binding-new-notification-service diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingDOMRpcProviderServiceAdapter.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingDOMRpcProviderServiceAdapter.java index 46bd2f84d0..ba822989d8 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingDOMRpcProviderServiceAdapter.java +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingDOMRpcProviderServiceAdapter.java @@ -41,7 +41,7 @@ public class BindingDOMRpcProviderServiceAdapter { } private ObjectRegistration register(final Class type, final T implementation, final Set domRpcs) { - final BindingRpcImplementationAdapter adapter = new BindingRpcImplementationAdapter(codec.getCodecFactory(), type, implementation); + final BindingRpcImplementationAdapter adapter = new BindingRpcImplementationAdapter(codec.getCodecRegistry(), type, implementation); final DOMRpcImplementationRegistration domReg = domRpcRegistry.registerRpcImplementation(adapter, domRpcs); diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingDOMRpcServiceAdapter.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingDOMRpcServiceAdapter.java index 9694bc99a6..6b64b7ea55 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingDOMRpcServiceAdapter.java +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingDOMRpcServiceAdapter.java @@ -81,7 +81,7 @@ public class BindingDOMRpcServiceAdapter implements RpcConsumerRegistry, Invocat @Override public ListenableFuture> invoke(final SchemaPath rpc, final DataObject input) { final CheckedFuture domFuture = domService.invokeRpc(rpc, serialize(rpc,input)); - return transformFuture(rpc,domFuture,codec.getCodecFactory()); + return transformFuture(rpc,domFuture,codec.getCodecRegistry()); } private RpcServiceAdapter createProxy(final Class key) { @@ -96,7 +96,7 @@ public class BindingDOMRpcServiceAdapter implements RpcConsumerRegistry, Invocat return null; } final QName rpcInputIdentifier = QName.create(rpc.getLastComponent(),"input"); - return new LazySerializedContainerNode(rpcInputIdentifier, input, codec.getCodecFactory()); + return new LazySerializedContainerNode(rpcInputIdentifier, input, codec.getCodecRegistry()); } private static ListenableFuture> transformFuture(final SchemaPath rpc,final ListenableFuture domFuture, final BindingNormalizedNodeCodecRegistry codec) { diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingToNormalizedNodeCodec.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingToNormalizedNodeCodec.java index d5b7d051b8..bf3ac3d50d 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingToNormalizedNodeCodec.java +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingToNormalizedNodeCodec.java @@ -17,6 +17,8 @@ import javax.annotation.Nonnull; import org.opendaylight.controller.md.sal.common.impl.util.compat.DataNormalizationException; import org.opendaylight.controller.md.sal.common.impl.util.compat.DataNormalizationOperation; import org.opendaylight.controller.md.sal.common.impl.util.compat.DataNormalizer; +import org.opendaylight.yangtools.binding.data.codec.api.BindingCodecTree; +import org.opendaylight.yangtools.binding.data.codec.api.BindingCodecTreeFactory; import org.opendaylight.yangtools.binding.data.codec.impl.BindingNormalizedNodeCodecRegistry; import org.opendaylight.yangtools.sal.binding.generator.impl.GeneratedClassLoadingStrategy; import org.opendaylight.yangtools.sal.binding.generator.util.BindingRuntimeContext; @@ -37,7 +39,7 @@ import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.api.SchemaContextListener; import org.opendaylight.yangtools.yang.model.api.SchemaPath; -public class BindingToNormalizedNodeCodec implements SchemaContextListener,AutoCloseable { +public class BindingToNormalizedNodeCodec implements BindingCodecTreeFactory, SchemaContextListener, AutoCloseable { private final BindingIndependentMappingService bindingToLegacy; private final BindingNormalizedNodeCodecRegistry codecRegistry; @@ -45,8 +47,9 @@ public class BindingToNormalizedNodeCodec implements SchemaContextListener,AutoC private final GeneratedClassLoadingStrategy classLoadingStrategy; private BindingRuntimeContext runtimeContext; - public BindingToNormalizedNodeCodec(final GeneratedClassLoadingStrategy classLoadingStrategy, final BindingIndependentMappingService mappingService, final BindingNormalizedNodeCodecRegistry codecRegistry) { - super(); + public BindingToNormalizedNodeCodec(final GeneratedClassLoadingStrategy classLoadingStrategy, + final BindingIndependentMappingService mappingService, + final BindingNormalizedNodeCodecRegistry codecRegistry) { this.bindingToLegacy = mappingService; this.classLoadingStrategy = classLoadingStrategy; this.codecRegistry = codecRegistry; @@ -188,4 +191,15 @@ public class BindingToNormalizedNodeCodec implements SchemaContextListener,AutoC } return key.getMethod(methodName); } + + @Override + public BindingCodecTree create(BindingRuntimeContext context) { + return codecRegistry.create(context); + } + + @Override + public BindingCodecTree create(SchemaContext context, Class... bindingClasses) { + return codecRegistry.create(context, bindingClasses); + } + } diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/ForwardedNotificationService.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/ForwardedNotificationService.java index 8ce8da8203..f0545ca22d 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/ForwardedNotificationService.java +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/ForwardedNotificationService.java @@ -113,7 +113,7 @@ public class ForwardedNotificationService implements NotificationService, AutoCl ClassToInstanceMap delegates) { DOMNotificationService domNotification = delegates.getInstance(DOMNotificationService.class); NotificationInvokerFactory invokerFactory = SingletonHolder.INVOKER_FACTORY; - return new ForwardedNotificationService(codec.getCodecFactory(), domNotification, invokerFactory); + return new ForwardedNotificationService(codec.getCodecRegistry(), domNotification, invokerFactory); } @Override diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/yang/opendaylight-binding-broker-impl.yang b/opendaylight/md-sal/sal-binding-broker/src/main/yang/opendaylight-binding-broker-impl.yang index b62f59699c..e15cb83385 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/main/yang/opendaylight-binding-broker-impl.yang +++ b/opendaylight/md-sal/sal-binding-broker/src/main/yang/opendaylight-binding-broker-impl.yang @@ -69,6 +69,7 @@ module opendaylight-sal-binding-broker-impl { identity runtime-generated-mapping { base config:module-type; config:provided-service binding-dom-mapping-service; + config:provided-service sal:binding-codec-tree-factory; config:java-name-prefix RuntimeMapping; } diff --git a/opendaylight/md-sal/sal-binding-config/pom.xml b/opendaylight/md-sal/sal-binding-config/pom.xml index 68af914f57..39aece4233 100644 --- a/opendaylight/md-sal/sal-binding-config/pom.xml +++ b/opendaylight/md-sal/sal-binding-config/pom.xml @@ -18,6 +18,10 @@ org.opendaylight.controller sal-binding-api + + org.opendaylight.yangtools + binding-data-codec + diff --git a/opendaylight/md-sal/sal-binding-config/src/main/yang/opendaylight-md-sal-binding.yang b/opendaylight/md-sal/sal-binding-config/src/main/yang/opendaylight-md-sal-binding.yang index fcfd6fa3cf..81508d1b8f 100644 --- a/opendaylight/md-sal/sal-binding-config/src/main/yang/opendaylight-md-sal-binding.yang +++ b/opendaylight/md-sal/sal-binding-config/src/main/yang/opendaylight-md-sal-binding.yang @@ -43,6 +43,11 @@ module opendaylight-md-sal-binding { config:java-class "org.opendaylight.controller.sal.binding.api.NotificationProviderService"; } + identity binding-codec-tree-factory { + base "config:service-type"; + config:java-class "org.opendaylight.yangtools.binding.data.codec.api.BindingCodecTreeFactory"; + } + identity binding-notification-subscription-service { base "config:service-type"; config:java-class "org.opendaylight.controller.sal.binding.api.NotificationService"; -- 2.36.6