From bd8bff811e5f2af4622e1543106c240db8e4b2f2 Mon Sep 17 00:00:00 2001 From: Tomas Cere Date: Mon, 11 Jan 2016 17:08:11 +0100 Subject: [PATCH] BUG 4017: Notification publish service is not available from provider context Change-Id: I2cb2dd4e6e3c22b8db1d368bde2c914d53100661 Signed-off-by: Tomas Cere --- .../src/main/resources/initial/01-md-sal.xml | 4 ++++ .../binding/impl/RootBindingAwareBroker.java | 23 ++++++++++++++++--- .../binding/impl/BindingBrokerImplModule.java | 4 ++++ .../opendaylight-binding-broker-impl.yang | 12 ++++++++++ 4 files changed, 40 insertions(+), 3 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 0aab59ef40..4e2a4fb4d7 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 @@ -84,6 +84,10 @@ binding:binding-async-data-broker binding-data-broker + + binding-impl:binding-new-notification-publish-service + binding-notification-publish-adapter + diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/RootBindingAwareBroker.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/RootBindingAwareBroker.java index 3fccb1d326..640bc658f6 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/RootBindingAwareBroker.java +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/RootBindingAwareBroker.java @@ -12,6 +12,7 @@ import static com.google.common.base.Preconditions.checkState; import com.google.common.collect.ImmutableClassToInstanceMap; import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.binding.api.MountPointService; +import org.opendaylight.controller.md.sal.binding.api.NotificationPublishService; import org.opendaylight.controller.md.sal.binding.util.AbstractBindingSalProviderInstance; import org.opendaylight.controller.md.sal.binding.util.BindingContextUtils; import org.opendaylight.controller.md.sal.common.api.routing.RouteChangeListener; @@ -50,6 +51,8 @@ public class RootBindingAwareBroker implements Mutable, Identifiable, Bi private NotificationProviderService notificationBroker; + private NotificationPublishService notificationPublishService; + @SuppressWarnings("deprecation") private DataProviderService legacyDataBroker; @@ -88,6 +91,9 @@ public class RootBindingAwareBroker implements Mutable, Identifiable, Bi return this.notificationBroker; } + public NotificationPublishService getNotificationPublishService() { + return this.notificationPublishService; + } public RpcProviderRegistry getRpcProviderRegistry() { return this.rpcBroker; } @@ -120,6 +126,10 @@ public class RootBindingAwareBroker implements Mutable, Identifiable, Bi this.notificationBroker = notificationBroker; } + public void setNotificationPublishService(final NotificationPublishService notificationPublishService) { + this.notificationPublishService = notificationPublishService; + } + public void setLegacyDataBroker(final DataProviderService dataBroker) { this.legacyDataBroker = dataBroker; } @@ -141,11 +151,18 @@ public class RootBindingAwareBroker implements Mutable, Identifiable, Bi } consBuilder.put(MountPointService.class, mountService); consBuilder.put(MountService.class, legacyMount).build(); + supportedConsumerServices = consBuilder.build(); - supportedProviderServices = ImmutableClassToInstanceMap. builder() - .putAll(supportedConsumerServices).put(NotificationProviderService.class, getRoot()) + final ImmutableClassToInstanceMap.Builder provBuilder = ImmutableClassToInstanceMap + .builder(); + provBuilder.putAll(supportedConsumerServices).put(NotificationProviderService.class, getRoot()) .put(DataProviderService.class, getRoot()).put(RpcProviderRegistry.class, getRoot()) - .put(MountProviderService.class, legacyMount).build(); + .put(MountProviderService.class, legacyMount); + if (notificationPublishService != null) { + provBuilder.put(NotificationPublishService.class, notificationPublishService); + } + supportedConsumerServices = consBuilder.build(); + supportedProviderServices = provBuilder.build(); } @Override diff --git a/opendaylight/md-sal/sal-binding-config/src/main/java/org/opendaylight/controller/config/yang/md/sal/binding/impl/BindingBrokerImplModule.java b/opendaylight/md-sal/sal-binding-config/src/main/java/org/opendaylight/controller/config/yang/md/sal/binding/impl/BindingBrokerImplModule.java index f74faa3d22..bae95ffb7c 100644 --- a/opendaylight/md-sal/sal-binding-config/src/main/java/org/opendaylight/controller/config/yang/md/sal/binding/impl/BindingBrokerImplModule.java +++ b/opendaylight/md-sal/sal-binding-config/src/main/java/org/opendaylight/controller/config/yang/md/sal/binding/impl/BindingBrokerImplModule.java @@ -67,8 +67,12 @@ public final class BindingBrokerImplModule extends final RpcProviderRegistry heliumRpcBroker = new HeliumRpcProviderRegistry(rpcConsumer, rpcProvider); final MountProviderService legacyMount = createLegacyMountPointService(mount); + broker.setLegacyDataBroker(getDataBrokerDependency()); broker.setNotificationBroker(getNotificationServiceDependency()); + if (getNotificationPublishServiceDependency() != null) { + broker.setNotificationPublishService(getNotificationPublishServiceDependency()); + } broker.setRpcBroker(heliumRpcBroker); broker.setDataBroker(getRootDataBrokerDependency()); broker.setMountService(mount); diff --git a/opendaylight/md-sal/sal-binding-config/src/main/yang/opendaylight-binding-broker-impl.yang b/opendaylight/md-sal/sal-binding-config/src/main/yang/opendaylight-binding-broker-impl.yang index 84cc5c7b99..3244b5a4ee 100644 --- a/opendaylight/md-sal/sal-binding-config/src/main/yang/opendaylight-binding-broker-impl.yang +++ b/opendaylight/md-sal/sal-binding-config/src/main/yang/opendaylight-binding-broker-impl.yang @@ -148,6 +148,18 @@ module opendaylight-sal-binding-broker-impl { } } } + + container notification-publish-service { + uses config:service-ref { + refine type { + mandatory false; + config:required-identity binding-new-notification-publish-service; + } + refine name { + mandatory false; + } + } + } } } } -- 2.36.6