X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsamples%2Ftoaster-provider%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsample%2Ftoaster%2Fprovider%2FOpendaylightToaster.java;h=ef2bfb690454c4c411c6a19f4006e8957fe67e62;hp=e39ac2baff36836df38392ea2d0f4ee659c50bf0;hb=44b5dbe52783a3a558b3eae619b01baf613f82e0;hpb=c49614c73007a6b20b0903dd77a61f5102f82e0b diff --git a/opendaylight/md-sal/samples/toaster-provider/src/main/java/org/opendaylight/controller/sample/toaster/provider/OpendaylightToaster.java b/opendaylight/md-sal/samples/toaster-provider/src/main/java/org/opendaylight/controller/sample/toaster/provider/OpendaylightToaster.java index e39ac2baff..ef2bfb6904 100644 --- a/opendaylight/md-sal/samples/toaster-provider/src/main/java/org/opendaylight/controller/sample/toaster/provider/OpendaylightToaster.java +++ b/opendaylight/md-sal/samples/toaster-provider/src/main/java/org/opendaylight/controller/sample/toaster/provider/OpendaylightToaster.java @@ -26,13 +26,15 @@ import org.opendaylight.controller.config.yang.config.toaster_provider.impl.Toas import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.binding.api.DataObjectModification; import org.opendaylight.controller.md.sal.binding.api.DataTreeChangeListener; +import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier; import org.opendaylight.controller.md.sal.binding.api.DataTreeModification; +import org.opendaylight.controller.md.sal.binding.api.NotificationPublishService; import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction; import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.controller.md.sal.common.api.data.OptimisticLockFailedException; import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException; -import org.opendaylight.controller.sal.binding.api.NotificationProviderService; +import org.opendaylight.controller.md.sal.common.util.jmx.AbstractMXBean; import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.DisplayString; import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.MakeToastInput; import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.RestockToasterInput; @@ -43,6 +45,7 @@ import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120 import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.ToasterRestocked; import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.ToasterRestockedBuilder; import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.ToasterService; +import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.common.RpcError; import org.opendaylight.yangtools.yang.common.RpcError.ErrorType; @@ -51,7 +54,7 @@ import org.opendaylight.yangtools.yang.common.RpcResultBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class OpendaylightToaster implements ToasterService, ToasterProviderRuntimeMXBean, +public class OpendaylightToaster extends AbstractMXBean implements ToasterService, ToasterProviderRuntimeMXBean, DataTreeChangeListener, AutoCloseable { private static final Logger LOG = LoggerFactory.getLogger(OpendaylightToaster.class); @@ -61,8 +64,9 @@ public class OpendaylightToaster implements ToasterService, ToasterProviderRunti private static final DisplayString TOASTER_MANUFACTURER = new DisplayString("Opendaylight"); private static final DisplayString TOASTER_MODEL_NUMBER = new DisplayString("Model 1 - Binding Aware"); - private NotificationProviderService notificationProvider; + private NotificationPublishService notificationProvider; private DataBroker dataProvider; + private ListenerRegistration dataTreeChangeListenerRegistration; private final ExecutorService executor; @@ -78,15 +82,20 @@ public class OpendaylightToaster implements ToasterService, ToasterProviderRunti private final AtomicLong darknessFactor = new AtomicLong( 1000 ); public OpendaylightToaster() { + super("OpendaylightToaster", "toaster-provider", null); executor = Executors.newFixedThreadPool(1); } - public void setNotificationProvider(final NotificationProviderService salService) { - this.notificationProvider = salService; + public void setNotificationProvider(final NotificationPublishService notificationPublishService) { + this.notificationProvider = notificationPublishService; } public void setDataProvider(final DataBroker salDataProvider) { this.dataProvider = salDataProvider; + + dataProvider.registerDataTreeChangeListener(new DataTreeIdentifier( + LogicalDatastoreType.CONFIGURATION, OpendaylightToaster.TOASTER_IID), this); + setToasterStatusUp( null ); } @@ -99,6 +108,8 @@ public class OpendaylightToaster implements ToasterService, ToasterProviderRunti executor.shutdown(); if (dataProvider != null) { + dataTreeChangeListenerRegistration.close(); + WriteTransaction tx = dataProvider.newWriteOnlyTransaction(); tx.delete(LogicalDatastoreType.OPERATIONAL,TOASTER_IID); Futures.addCallback( tx.submit(), new FutureCallback() { @@ -297,7 +308,7 @@ public class OpendaylightToaster implements ToasterService, ToasterProviderRunti if( amountOfBreadInStock.get() > 0 ) { ToasterRestocked reStockedNotification = new ToasterRestockedBuilder() .setAmountOfBread( input.getAmountOfBreadToStock() ).build(); - notificationProvider.publish( reStockedNotification ); + notificationProvider.offerNotification( reStockedNotification ); } return Futures.immediateFuture( RpcResultBuilder. success().build() ); @@ -383,7 +394,7 @@ public class OpendaylightToaster implements ToasterService, ToasterProviderRunti if( outOfBread() ) { LOG.info( "Toaster is out of bread!" ); - notificationProvider.publish( new ToasterOutOfBreadBuilder().build() ); + notificationProvider.offerNotification( new ToasterOutOfBreadBuilder().build() ); } // Set the Toaster status back to up - this essentially releases the toasting lock.