X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsamples%2Ftoaster-consumer%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsample%2Fkitchen%2Fimpl%2FKitchenServiceImpl.java;h=306efc5e63dd613b335f935ca168f4bd8a1fd0fa;hb=HEAD;hp=4f245685aa6318f9a477b2ea576222b655142117;hpb=ded31428cae8b8907dcf06aba0dcd2fdd8cbe01b;p=controller.git diff --git a/opendaylight/md-sal/samples/toaster-consumer/src/main/java/org/opendaylight/controller/sample/kitchen/impl/KitchenServiceImpl.java b/opendaylight/md-sal/samples/toaster-consumer/src/main/java/org/opendaylight/controller/sample/kitchen/impl/KitchenServiceImpl.java index 4f245685aa..b67de11367 100644 --- a/opendaylight/md-sal/samples/toaster-consumer/src/main/java/org/opendaylight/controller/sample/kitchen/impl/KitchenServiceImpl.java +++ b/opendaylight/md-sal/samples/toaster-consumer/src/main/java/org/opendaylight/controller/sample/kitchen/impl/KitchenServiceImpl.java @@ -11,49 +11,79 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList.Builder; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; -import com.google.common.util.concurrent.ListeningExecutorService; import com.google.common.util.concurrent.MoreExecutors; import java.util.List; +import java.util.Set; import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import javax.annotation.PreDestroy; +import javax.inject.Inject; +import javax.inject.Singleton; import org.opendaylight.controller.md.sal.common.util.jmx.AbstractMXBean; import org.opendaylight.controller.sample.kitchen.api.EggsType; import org.opendaylight.controller.sample.kitchen.api.KitchenService; import org.opendaylight.controller.sample.kitchen.api.KitchenServiceRuntimeMXBean; -import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.MakeToastInput; +import org.opendaylight.mdsal.binding.api.NotificationService; +import org.opendaylight.mdsal.binding.api.NotificationService.CompositeListener; +import org.opendaylight.mdsal.binding.api.RpcService; +import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.MakeToast; import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.MakeToastInputBuilder; import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.MakeToastOutput; import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.MakeToastOutputBuilder; import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.ToastType; -import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.ToasterListener; import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.ToasterOutOfBread; 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.ToasterService; import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.WheatBread; +import org.opendaylight.yangtools.concepts.Registration; import org.opendaylight.yangtools.yang.common.ErrorTag; import org.opendaylight.yangtools.yang.common.ErrorType; import org.opendaylight.yangtools.yang.common.RpcError; import org.opendaylight.yangtools.yang.common.RpcResult; import org.opendaylight.yangtools.yang.common.RpcResultBuilder; import org.opendaylight.yangtools.yang.common.Uint32; +import org.osgi.service.component.annotations.Activate; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Deactivate; +import org.osgi.service.component.annotations.Reference; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class KitchenServiceImpl extends AbstractMXBean - implements KitchenService, KitchenServiceRuntimeMXBean, ToasterListener { - +@Singleton +@Component(service = KitchenService.class, immediate = true) +public final class KitchenServiceImpl extends AbstractMXBean implements KitchenService, KitchenServiceRuntimeMXBean { private static final Logger LOG = LoggerFactory.getLogger(KitchenServiceImpl.class); private static final MakeToastOutput EMPTY_MAKE_OUTPUT = new MakeToastOutputBuilder().build(); - private final ToasterService toaster; - - private final ListeningExecutorService executor = MoreExecutors.listeningDecorator(Executors.newCachedThreadPool()); + private final ExecutorService executor = Executors.newCachedThreadPool(); + private final MakeToast makeToast; + private final Registration reg; private volatile boolean toasterOutOfBread; - public KitchenServiceImpl(final ToasterService toaster) { + @Inject + @Activate + public KitchenServiceImpl(@Reference final RpcService rpcService, + @Reference final NotificationService notifService) { super("KitchenService", "toaster-consumer", null); - this.toaster = toaster; + makeToast = rpcService.getRpc(MakeToast.class); + reg = notifService.registerCompositeListener(new CompositeListener(Set.of( + new CompositeListener.Component<>(ToasterOutOfBread.class, notification -> { + LOG.info("ToasterOutOfBread notification"); + toasterOutOfBread = true; + }), + new CompositeListener.Component<>(ToasterRestocked.class, notification -> { + LOG.info("ToasterRestocked notification - amountOfBread: {}", notification.getAmountOfBread()); + toasterOutOfBread = false; + })))); + register(); + } + + @PreDestroy + @Deactivate + public void close() { + unregister(); + reg.close(); } @Override @@ -91,7 +121,7 @@ public class KitchenServiceImpl extends AbstractMXBean } private ListenableFuture> makeEggs(final EggsType eggsType) { - return executor.submit(() -> RpcResultBuilder.success().build()); + return Futures.submit(() -> RpcResultBuilder.success().build(), executor); } private ListenableFuture> makeToast(final ToastType toastType, final int toastDoneness) { @@ -104,11 +134,10 @@ public class KitchenServiceImpl extends AbstractMXBean } // Access the ToasterService to make the toast. - - MakeToastInput toastInput = new MakeToastInputBuilder().setToasterDoneness(Uint32.valueOf(toastDoneness)) - .setToasterToastType(toastType).build(); - - return toaster.makeToast(toastInput); + return makeToast.invoke(new MakeToastInputBuilder() + .setToasterDoneness(Uint32.valueOf(toastDoneness)) + .setToasterToastType(toastType) + .build()); } @Override @@ -129,22 +158,4 @@ public class KitchenServiceImpl extends AbstractMXBean return Boolean.FALSE; } - - /** - * Implemented from the ToasterListener interface. - */ - @Override - public void onToasterOutOfBread(final ToasterOutOfBread notification) { - LOG.info("ToasterOutOfBread notification"); - toasterOutOfBread = true; - } - - /** - * Implemented from the ToasterListener interface. - */ - @Override - public void onToasterRestocked(final ToasterRestocked notification) { - LOG.info("ToasterRestocked notification - amountOfBread: {}", notification.getAmountOfBread()); - toasterOutOfBread = false; - } }