X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fsal%2Fyang-prototype%2Fsal%2Fsamples%2Ftoaster-provider%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsample%2Ftoaster%2Fprovider%2FOpendaylightToaster.java;fp=opendaylight%2Fsal%2Fyang-prototype%2Fsal%2Fsamples%2Ftoaster-provider%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsample%2Ftoaster%2Fprovider%2FOpendaylightToaster.java;h=404734b96c263490ef6c13540407ffab651cfb3c;hb=35620f5ccf1ed4d1e4ac78a97fff3c1fede8ad95;hp=0000000000000000000000000000000000000000;hpb=42183ad5bfefff7d6de9df467cdaa600a450af29;p=controller.git diff --git a/opendaylight/sal/yang-prototype/sal/samples/toaster-provider/src/main/java/org/opendaylight/controller/sample/toaster/provider/OpendaylightToaster.java b/opendaylight/sal/yang-prototype/sal/samples/toaster-provider/src/main/java/org/opendaylight/controller/sample/toaster/provider/OpendaylightToaster.java new file mode 100644 index 0000000000..404734b96c --- /dev/null +++ b/opendaylight/sal/yang-prototype/sal/samples/toaster-provider/src/main/java/org/opendaylight/controller/sample/toaster/provider/OpendaylightToaster.java @@ -0,0 +1,118 @@ +package org.opendaylight.controller.sample.toaster.provider; + +import java.util.Collections; + +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; + +import org.opendaylight.controller.sal.binding.api.NotificationProviderService; +import org.opendaylight.controller.sal.common.util.Futures; +import org.opendaylight.controller.sal.common.util.Rpcs; +import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev20091120.DisplayString; +import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev20091120.MakeToastInput; +import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev20091120.ToastDone.ToastStatus; +import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev20091120.ToastDoneBuilder; +import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev20091120.Toaster; +import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev20091120.Toaster.ToasterStatus; +import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev20091120.ToasterBuilder; +import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev20091120.ToasterData; +import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev20091120.ToasterService; +import org.opendaylight.yangtools.yang.common.RpcError; +import org.opendaylight.yangtools.yang.common.RpcResult; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class OpendaylightToaster implements ToasterData, ToasterService { + + private static final Logger log = LoggerFactory.getLogger(OpendaylightToaster.class); + + private static final DisplayString toasterManufacturer = new DisplayString("Opendaylight"); + private static final DisplayString toasterModelNumber = new DisplayString("Model 1 - Binding Aware"); + private ToasterStatus toasterStatus; + + private NotificationProviderService notificationProvider; + private final ExecutorService executor; + + private Future> currentTask; + + public OpendaylightToaster() { + toasterStatus = ToasterStatus.Down; + executor = Executors.newFixedThreadPool(1); + } + + @Override + public Toaster getToaster() { + ToasterBuilder tb = new ToasterBuilder(); + tb // + .setToasterManufacturer(toasterManufacturer) // + .setToasterModelNumber(toasterModelNumber) // + .setToasterStatus(toasterStatus); + + return tb.build(); + } + + @Override + public Future> cancelToast() { + if (currentTask != null) { + cancelToastImpl(); + } + return null; + } + + @Override + public Future> makeToast(MakeToastInput input) { + // TODO Auto-generated method stub + log.info("makeToast - Received input for toast"); + logToastInput(input); + if (currentTask != null) { + return inProgressError(); + } + currentTask = executor.submit(new MakeToastTask(input)); + return currentTask; + } + + private Future> inProgressError() { + RpcResult result = Rpcs. getRpcResult(false, null, Collections. emptySet()); + return Futures.immediateFuture(result); + } + + private void cancelToastImpl() { + currentTask.cancel(true); + ToastDoneBuilder toastDone = new ToastDoneBuilder(); + toastDone.setToastStatus(ToastStatus.Cancelled); + notificationProvider.notify(toastDone.build()); + } + + public void setNotificationProvider(NotificationProviderService salService) { + this.notificationProvider = salService; + } + + private void logToastInput(MakeToastInput input) { + String toastType = input.getToasterToastType().getName(); + String toastDoneness = input.getToasterDoneness().toString(); + log.info("Toast: {} doneness: {}", toastType, toastDoneness); + } + + private class MakeToastTask implements Callable> { + + final MakeToastInput toastRequest; + + public MakeToastTask(MakeToastInput toast) { + toastRequest = toast; + } + + @Override + public RpcResult call() throws Exception { + Thread.sleep(1000); + + ToastDoneBuilder notifyBuilder = new ToastDoneBuilder(); + notifyBuilder.setToastStatus(ToastStatus.Done); + notificationProvider.notify(notifyBuilder.build()); + log.info("Toast Done"); + logToastInput(toastRequest); + return Rpcs. getRpcResult(true, null, Collections. emptySet()); + } + } +}