1 package org.opendaylight.controller.sample.toaster.provider;
3 import java.util.Collections;
5 import java.util.concurrent.Callable;
6 import java.util.concurrent.ExecutorService;
7 import java.util.concurrent.Executors;
8 import java.util.concurrent.Future;
10 import org.opendaylight.controller.sal.binding.api.NotificationProviderService;
11 import org.opendaylight.controller.sal.common.util.Futures;
12 import org.opendaylight.controller.sal.common.util.Rpcs;
13 import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.DisplayString;
14 import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.MakeToastInput;
15 import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.ToastDone.ToastStatus;
16 import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.ToastDoneBuilder;
17 import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.Toaster;
18 import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.Toaster.ToasterStatus;
19 import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.ToasterBuilder;
20 import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.ToasterData;
21 import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.ToasterService;
22 import org.opendaylight.yangtools.yang.common.RpcError;
23 import org.opendaylight.yangtools.yang.common.RpcResult;
24 import org.slf4j.Logger;
25 import org.slf4j.LoggerFactory;
27 public class OpendaylightToaster implements ToasterData, ToasterService {
29 private static final Logger log = LoggerFactory.getLogger(OpendaylightToaster.class);
31 private static final DisplayString toasterManufacturer = new DisplayString("Opendaylight");
32 private static final DisplayString toasterModelNumber = new DisplayString("Model 1 - Binding Aware");
33 private ToasterStatus toasterStatus;
35 private NotificationProviderService notificationProvider;
36 private final ExecutorService executor;
38 private Future<RpcResult<Void>> currentTask;
40 public OpendaylightToaster() {
41 toasterStatus = ToasterStatus.Down;
42 executor = Executors.newFixedThreadPool(1);
46 public Toaster getToaster() {
47 ToasterBuilder tb = new ToasterBuilder();
49 .setToasterManufacturer(toasterManufacturer) //
50 .setToasterModelNumber(toasterModelNumber) //
51 .setToasterStatus(toasterStatus);
57 public Future<RpcResult<Void>> cancelToast() {
58 if (currentTask != null) {
65 public Future<RpcResult<Void>> makeToast(MakeToastInput input) {
66 // TODO Auto-generated method stub
67 log.info("makeToast - Received input for toast");
69 if (currentTask != null) {
70 return inProgressError();
72 currentTask = executor.submit(new MakeToastTask(input));
76 private Future<RpcResult<Void>> inProgressError() {
77 RpcResult<Void> result = Rpcs.<Void> getRpcResult(false, null, Collections.<RpcError> emptySet());
78 return Futures.immediateFuture(result);
81 private void cancelToastImpl() {
82 currentTask.cancel(true);
83 ToastDoneBuilder toastDone = new ToastDoneBuilder();
84 toastDone.setToastStatus(ToastStatus.Cancelled);
85 notificationProvider.notify(toastDone.build());
88 public void setNotificationProvider(NotificationProviderService salService) {
89 this.notificationProvider = salService;
92 private void logToastInput(MakeToastInput input) {
93 String toastType = input.getToasterToastType().getName();
94 String toastDoneness = input.getToasterDoneness().toString();
95 log.info("Toast: {} doneness: {}", toastType, toastDoneness);
98 private class MakeToastTask implements Callable<RpcResult<Void>> {
100 final MakeToastInput toastRequest;
102 public MakeToastTask(MakeToastInput toast) {
103 toastRequest = toast;
107 public RpcResult<Void> call() throws Exception {
110 ToastDoneBuilder notifyBuilder = new ToastDoneBuilder();
111 notifyBuilder.setToastStatus(ToastStatus.Done);
112 notificationProvider.notify(notifyBuilder.build());
113 log.info("Toast Done");
114 logToastInput(toastRequest);
116 return Rpcs.<Void> getRpcResult(true, null, Collections.<RpcError> emptySet());