+++ /dev/null
-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.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.ToastDone.ToastStatus;
-import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.ToastDoneBuilder;
-import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.Toaster;
-import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.Toaster.ToasterStatus;
-import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.ToasterBuilder;
-import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.ToasterData;
-import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.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<RpcResult<Void>> 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<RpcResult<Void>> cancelToast() {
- if (currentTask != null) {
- cancelToastImpl();
- }
- return null;
- }
-
- @Override
- public Future<RpcResult<Void>> 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<RpcResult<Void>> inProgressError() {
- RpcResult<Void> result = Rpcs.<Void> getRpcResult(false, null, Collections.<RpcError> 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<RpcResult<Void>> {
-
- final MakeToastInput toastRequest;
-
- public MakeToastTask(MakeToastInput toast) {
- toastRequest = toast;
- }
-
- @Override
- public RpcResult<Void> call() throws Exception {
- Thread.sleep(1000);
-
- ToastDoneBuilder notifyBuilder = new ToastDoneBuilder();
- notifyBuilder.setToastStatus(ToastStatus.Done);
- notificationProvider.notify(notifyBuilder.build());
- log.info("Toast Done");
- logToastInput(toastRequest);
- currentTask = null;
- return Rpcs.<Void> getRpcResult(true, null, Collections.<RpcError> emptySet());
- }
- }
-}