b96ae21ec102bc81bc997823ff2a73253f134ff8
[openflowplugin.git] / openflowplugin-impl / src / main / java / org / opendaylight / openflowplugin / impl / statistics / services / direct / OpendaylightDirectStatisticsServiceImpl.java
1 /*
2  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8
9 package org.opendaylight.openflowplugin.impl.statistics.services.direct;
10
11 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetFlowStatisticsInput;
12 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetFlowStatisticsOutput;
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetGroupStatisticsInput;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetGroupStatisticsOutput;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetMeterStatisticsInput;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetMeterStatisticsOutput;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetNodeConnectorStatisticsInput;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetNodeConnectorStatisticsOutput;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetQueueStatisticsInput;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetQueueStatisticsOutput;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.OpendaylightDirectStatisticsService;
22 import org.opendaylight.yangtools.yang.binding.DataObject;
23 import org.opendaylight.yangtools.yang.common.RpcError;
24 import org.opendaylight.yangtools.yang.common.RpcResult;
25 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
26
27 import java.util.Optional;
28 import java.util.concurrent.Future;
29
30 /**
31  * The Opendaylight direct statistics service.
32  * This service handles RPC requests, sends them to registered handlers and returns their replies.
33  */
34 public class OpendaylightDirectStatisticsServiceImpl implements OpendaylightDirectStatisticsService {
35     private final OpendaylightDirectStatisticsServiceProvider provider;
36
37     /**
38      * Instantiates a new Opendaylight direct statistics service.
39      *
40      * @param provider the openflow direct statistics service provider
41      */
42     public OpendaylightDirectStatisticsServiceImpl(final OpendaylightDirectStatisticsServiceProvider provider) {
43         this.provider = provider;
44     }
45
46     @Override
47     public Future<RpcResult<GetGroupStatisticsOutput>> getGroupStatistics(GetGroupStatisticsInput input) {
48         final Optional<GroupDirectStatisticsService> service = provider.lookup(GroupDirectStatisticsService.class);
49
50         if (!service.isPresent()) {
51             return missingImplementation(GroupDirectStatisticsService.class);
52         }
53
54         return service.get().handleAndReply(input);
55     }
56
57     @Override
58     public Future<RpcResult<GetQueueStatisticsOutput>> getQueueStatistics(GetQueueStatisticsInput input) {
59         final Optional<QueueDirectStatisticsService> service = provider.lookup(QueueDirectStatisticsService.class);
60
61         if (!service.isPresent()) {
62             return missingImplementation(QueueDirectStatisticsService.class);
63         }
64
65         return service.get().handleAndReply(input);
66     }
67
68     @Override
69     public Future<RpcResult<GetFlowStatisticsOutput>> getFlowStatistics(GetFlowStatisticsInput input) {
70         final Optional<FlowDirectStatisticsService> service = provider.lookup(FlowDirectStatisticsService.class);
71
72         if (!service.isPresent()) {
73             return missingImplementation(FlowDirectStatisticsService.class);
74         }
75
76         return service.get().handleAndReply(input);
77     }
78
79     @Override
80     public Future<RpcResult<GetMeterStatisticsOutput>> getMeterStatistics(GetMeterStatisticsInput input) {
81         final Optional<MeterDirectStatisticsService> service = provider.lookup(MeterDirectStatisticsService.class);
82
83         if (!service.isPresent()) {
84             return missingImplementation(MeterDirectStatisticsService.class);
85         }
86
87         return service.get().handleAndReply(input);
88     }
89
90     @Override
91     public Future<RpcResult<GetNodeConnectorStatisticsOutput>> getNodeConnectorStatistics(GetNodeConnectorStatisticsInput input) {
92         final Optional<NodeConnectorDirectStatisticsService> service = provider.lookup(NodeConnectorDirectStatisticsService.class);
93
94         if (!service.isPresent()) {
95             return missingImplementation(NodeConnectorDirectStatisticsService.class);
96         }
97
98         return service.get().handleAndReply(input);
99     }
100
101     private <T extends DataObject> Future<RpcResult<T>> missingImplementation(Class service) {
102         return RpcResultBuilder.<T>failed().withError(
103                 RpcError.ErrorType.APPLICATION,
104                 String.format("No implementation found for direct statistics service %s.", service.getCanonicalName()))
105                 .buildFuture();
106     }
107 }