2 * Copyright (c) 2015 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
9 package org.opendaylight.openflowplugin.impl.statistics.services.direct;
11 import java.util.concurrent.Future;
12 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetFlowStatisticsInput;
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetFlowStatisticsOutput;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetGroupStatisticsInput;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetGroupStatisticsOutput;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetMeterStatisticsInput;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetMeterStatisticsOutput;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetNodeConnectorStatisticsInput;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetNodeConnectorStatisticsOutput;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetQueueStatisticsInput;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetQueueStatisticsOutput;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.OpendaylightDirectStatisticsService;
23 import org.opendaylight.yangtools.yang.binding.DataObject;
24 import org.opendaylight.yangtools.yang.common.RpcError;
25 import org.opendaylight.yangtools.yang.common.RpcResult;
26 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
29 * The Opendaylight direct statistics service.
30 * This service handles RPC requests, sends them to registered handlers and returns their replies.
32 public class OpendaylightDirectStatisticsServiceImpl implements OpendaylightDirectStatisticsService {
33 private final OpendaylightDirectStatisticsServiceProvider provider;
36 * Instantiates a new Opendaylight direct statistics service.
38 * @param provider the openflow direct statistics service provider
40 public OpendaylightDirectStatisticsServiceImpl(final OpendaylightDirectStatisticsServiceProvider provider) {
41 this.provider = provider;
45 @SuppressWarnings("unchecked")
46 public Future<RpcResult<GetGroupStatisticsOutput>> getGroupStatistics(GetGroupStatisticsInput input) {
47 return provider.lookup(AbstractGroupDirectStatisticsService.class)
48 .map(service -> service.handleAndReply(input))
49 .orElse(missingImplementation(AbstractGroupDirectStatisticsService.class));
53 @SuppressWarnings("unchecked")
54 public Future<RpcResult<GetQueueStatisticsOutput>> getQueueStatistics(GetQueueStatisticsInput input) {
55 return provider.lookup(AbstractQueueDirectStatisticsService.class)
56 .map(service -> service.handleAndReply(input))
57 .orElse(missingImplementation(AbstractQueueDirectStatisticsService.class));
61 @SuppressWarnings("unchecked")
62 public Future<RpcResult<GetFlowStatisticsOutput>> getFlowStatistics(GetFlowStatisticsInput input) {
63 return provider.lookup(AbstractFlowDirectStatisticsService.class)
64 .map(service -> service.handleAndReply(input))
65 .orElse(missingImplementation(AbstractFlowDirectStatisticsService.class));
69 @SuppressWarnings("unchecked")
70 public Future<RpcResult<GetMeterStatisticsOutput>> getMeterStatistics(GetMeterStatisticsInput input) {
71 return provider.lookup(AbstractMeterDirectStatisticsService.class)
72 .map(service -> service.handleAndReply(input))
73 .orElse(missingImplementation(AbstractMeterDirectStatisticsService.class));
77 @SuppressWarnings("unchecked")
78 public Future<RpcResult<GetNodeConnectorStatisticsOutput>> getNodeConnectorStatistics(GetNodeConnectorStatisticsInput input) {
79 return provider.lookup(AbstractPortDirectStatisticsService.class)
80 .map(service -> service.handleAndReply(input))
81 .orElse(missingImplementation(AbstractPortDirectStatisticsService.class));
84 private static <T extends DataObject> Future<RpcResult<T>> missingImplementation(Class service) {
85 return RpcResultBuilder.<T>failed().withError(
86 RpcError.ErrorType.APPLICATION,
87 String.format("No implementation found for direct statistics service %s.", service.getCanonicalName()))