2 * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.controller.sample.toaster.provider;
10 import java.util.Collections;
12 import java.util.concurrent.Callable;
13 import java.util.concurrent.ExecutorService;
14 import java.util.concurrent.Executors;
15 import java.util.concurrent.Future;
17 import org.opendaylight.controller.sal.binding.api.NotificationProviderService;
18 import org.opendaylight.controller.sal.common.util.Futures;
19 import org.opendaylight.controller.sal.common.util.Rpcs;
20 import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.DisplayString;
21 import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.MakeToastInput;
22 import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.ToastDone.ToastStatus;
23 import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.ToastDoneBuilder;
24 import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.Toaster;
25 import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.Toaster.ToasterStatus;
26 import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.ToasterBuilder;
27 import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.ToasterData;
28 import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.ToasterService;
29 import org.opendaylight.yangtools.yang.common.RpcError;
30 import org.opendaylight.yangtools.yang.common.RpcResult;
31 import org.slf4j.Logger;
32 import org.slf4j.LoggerFactory;
34 public class OpendaylightToaster implements ToasterData, ToasterService {
36 private static final Logger log = LoggerFactory.getLogger(OpendaylightToaster.class);
38 private static final DisplayString toasterManufacturer = new DisplayString("Opendaylight");
39 private static final DisplayString toasterModelNumber = new DisplayString("Model 1 - Binding Aware");
40 private ToasterStatus toasterStatus;
42 private NotificationProviderService notificationProvider;
43 private final ExecutorService executor;
45 private Future<RpcResult<Void>> currentTask;
47 public OpendaylightToaster() {
48 toasterStatus = ToasterStatus.Down;
49 executor = Executors.newFixedThreadPool(1);
53 public Toaster getToaster() {
54 ToasterBuilder tb = new ToasterBuilder();
56 .setToasterManufacturer(toasterManufacturer) //
57 .setToasterModelNumber(toasterModelNumber) //
58 .setToasterStatus(toasterStatus);
64 public Future<RpcResult<Void>> cancelToast() {
65 if (currentTask != null) {
72 public Future<RpcResult<Void>> makeToast(MakeToastInput input) {
73 // TODO Auto-generated method stub
74 log.trace("makeToast - Received input for toast");
76 if (currentTask != null) {
77 return inProgressError();
79 currentTask = executor.submit(new MakeToastTask(input));
83 private Future<RpcResult<Void>> inProgressError() {
84 RpcResult<Void> result = Rpcs.<Void> getRpcResult(false, null, Collections.<RpcError> emptySet());
85 return Futures.immediateFuture(result);
88 private void cancelToastImpl() {
89 currentTask.cancel(true);
90 ToastDoneBuilder toastDone = new ToastDoneBuilder();
91 toastDone.setToastStatus(ToastStatus.Cancelled);
92 notificationProvider.notify(toastDone.build());
95 public void setNotificationProvider(NotificationProviderService salService) {
96 this.notificationProvider = salService;
99 private void logToastInput(MakeToastInput input) {
100 String toastType = input.getToasterToastType().getName();
101 String toastDoneness = input.getToasterDoneness().toString();
102 log.trace("Toast: {} doneness: {}", toastType, toastDoneness);
105 private class MakeToastTask implements Callable<RpcResult<Void>> {
107 final MakeToastInput toastRequest;
109 public MakeToastTask(MakeToastInput toast) {
110 toastRequest = toast;
114 public RpcResult<Void> call() throws Exception {
117 ToastDoneBuilder notifyBuilder = new ToastDoneBuilder();
118 notifyBuilder.setToastStatus(ToastStatus.Done);
119 notificationProvider.notify(notifyBuilder.build());
120 log.trace("Toast Done");
121 logToastInput(toastRequest);
123 return Rpcs.<Void> getRpcResult(true, null, Collections.<RpcError> emptySet());