66461e433f1cd35146ea49e1940e90b347e859a7
[openflowplugin.git] / openflowplugin-impl / src / main / java / org / opendaylight / openflowplugin / impl / services / OpendaylightMeterStatisticsServiceImpl.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 package org.opendaylight.openflowplugin.impl.services;
9
10 import com.google.common.util.concurrent.JdkFutureAdapters;
11 import com.google.common.util.concurrent.ListenableFuture;
12 import com.google.common.util.concurrent.SettableFuture;
13 import org.opendaylight.openflowjava.protocol.api.util.BinContent;
14 import org.opendaylight.openflowplugin.api.openflow.device.RequestContext;
15 import org.opendaylight.openflowplugin.api.openflow.device.Xid;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.GetAllMeterConfigStatisticsInput;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.GetAllMeterConfigStatisticsOutput;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.GetAllMeterStatisticsInput;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.GetAllMeterStatisticsOutput;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.GetMeterFeaturesInput;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.GetMeterFeaturesOutput;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.GetMeterStatisticsInput;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.GetMeterStatisticsOutput;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.OpendaylightMeterStatisticsService;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterId;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartType;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartRequestInputBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeterCaseBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeterConfigCaseBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeterFeaturesCaseBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.meter._case.MultipartRequestMeterBuilder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.meter.config._case.MultipartRequestMeterConfigBuilder;
33 import org.opendaylight.yangtools.yang.common.RpcResult;
34 import java.util.concurrent.Future;
35
36 /**
37  * @author joe
38  */
39 public class OpendaylightMeterStatisticsServiceImpl extends CommonService implements OpendaylightMeterStatisticsService {
40
41
42     @Override
43     public Future<RpcResult<GetAllMeterConfigStatisticsOutput>> getAllMeterConfigStatistics(
44             final GetAllMeterConfigStatisticsInput input) {
45
46         final RequestContext<GetAllMeterConfigStatisticsOutput> requestContext = rpcContext.createRequestContext();
47         final SettableFuture<RpcResult<GetAllMeterConfigStatisticsOutput>> result = rpcContext.storeOrFail(requestContext);
48
49         if (!result.isDone()) {
50
51             final Xid xid = deviceContext.getNextXid();
52
53             MultipartRequestMeterConfigCaseBuilder caseBuilder =
54                     new MultipartRequestMeterConfigCaseBuilder();
55             MultipartRequestMeterConfigBuilder mprMeterConfigBuild =
56                     new MultipartRequestMeterConfigBuilder();
57             mprMeterConfigBuild.setMeterId(new MeterId(BinContent.intToUnsignedLong(
58                     org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common
59                             .types.rev130731.Meter.OFPMALL.getIntValue())));
60             caseBuilder.setMultipartRequestMeterConfig(mprMeterConfigBuild.build());
61
62             MultipartRequestInputBuilder mprInput = RequestInputUtils
63                     .createMultipartHeader(MultipartType.OFPMPMETERCONFIG, xid.getValue(), version);
64             mprInput.setMultipartRequestBody(caseBuilder.build());
65             Future<RpcResult<Void>> resultFromOFLib = deviceContext
66                     .getPrimaryConnectionContext().getConnectionAdapter().multipartRequest(mprInput.build());
67             ListenableFuture<RpcResult<Void>> futureResultFromOfLib = JdkFutureAdapters
68                     .listenInPoolThread(resultFromOFLib);
69
70             final RpcResultConvertor<GetAllMeterConfigStatisticsOutput> rpcResultConvertor = new RpcResultConvertor<>(requestContext, deviceContext);
71             rpcResultConvertor.processResultFromOfJava(futureResultFromOfLib);
72
73         } else {
74             RequestContextUtil.closeRequstContext(requestContext);
75         }
76         return result;
77     }
78
79     @Override
80     public Future<RpcResult<GetAllMeterStatisticsOutput>> getAllMeterStatistics(final GetAllMeterStatisticsInput input) {
81         final RequestContext<GetAllMeterStatisticsOutput> requestContext = rpcContext.createRequestContext();
82         final SettableFuture<RpcResult<GetAllMeterStatisticsOutput>> result = rpcContext.storeOrFail(requestContext);
83
84         if (!result.isDone()) {
85
86             final Xid xid = deviceContext.getNextXid();
87
88             MultipartRequestMeterCaseBuilder caseBuilder =
89                     new MultipartRequestMeterCaseBuilder();
90             MultipartRequestMeterBuilder mprMeterBuild =
91                     new MultipartRequestMeterBuilder();
92             mprMeterBuild.setMeterId(new MeterId(BinContent.intToUnsignedLong(
93                     org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common
94                             .types.rev130731.Meter.OFPMALL.getIntValue())));
95             caseBuilder.setMultipartRequestMeter(mprMeterBuild.build());
96
97             MultipartRequestInputBuilder mprInput = RequestInputUtils
98                     .createMultipartHeader(MultipartType.OFPMPMETER, xid.getValue(), version);
99             mprInput.setMultipartRequestBody(caseBuilder.build());
100             Future<RpcResult<Void>> resultFromOFLib = deviceContext.getPrimaryConnectionContext()
101                     .getConnectionAdapter().multipartRequest(mprInput.build());
102
103             ListenableFuture<RpcResult<Void>> futureResultFromOfLib = JdkFutureAdapters.listenInPoolThread(resultFromOFLib);
104
105             final RpcResultConvertor<GetAllMeterStatisticsOutput> rpcResultConvertor = new RpcResultConvertor<>(requestContext, deviceContext);
106             rpcResultConvertor.processResultFromOfJava(futureResultFromOfLib);
107         } else {
108             RequestContextUtil.closeRequstContext(requestContext);
109         }
110         return result;
111     }
112
113     @Override
114     public Future<RpcResult<GetMeterFeaturesOutput>> getMeterFeatures(final GetMeterFeaturesInput input) {
115         final RequestContext requestContext = rpcContext.createRequestContext();
116         final SettableFuture<RpcResult<GetMeterFeaturesOutput>> result = rpcContext.storeOrFail(requestContext);
117
118         if (!result.isDone()) {
119
120             final Xid xid = deviceContext.getNextXid();
121
122             MultipartRequestMeterFeaturesCaseBuilder mprMeterFeaturesBuild =
123                     new MultipartRequestMeterFeaturesCaseBuilder();
124
125             MultipartRequestInputBuilder mprInput =
126                     RequestInputUtils.createMultipartHeader(MultipartType.OFPMPMETERFEATURES, xid.getValue(), version);
127             mprInput.setMultipartRequestBody(mprMeterFeaturesBuild.build());
128             Future<RpcResult<Void>> resultFromOFLib = deviceContext.getPrimaryConnectionContext().getConnectionAdapter().multipartRequest(mprInput.build());
129             ListenableFuture<RpcResult<Void>> futureResultFromOfLib = JdkFutureAdapters.listenInPoolThread(resultFromOFLib);
130
131             final RpcResultConvertor<GetMeterFeaturesOutput> rpcResultConvertor = new RpcResultConvertor<>(requestContext, deviceContext);
132             rpcResultConvertor.processResultFromOfJava(futureResultFromOfLib);
133         } else {
134             RequestContextUtil.closeRequstContext(requestContext);
135         }
136         return result;
137     }
138
139     @Override
140     public Future<RpcResult<GetMeterStatisticsOutput>> getMeterStatistics(final GetMeterStatisticsInput input) {
141         final RequestContext requestContext = rpcContext.createRequestContext();
142         final SettableFuture<RpcResult<GetMeterStatisticsOutput>> result = rpcContext.storeOrFail(requestContext);
143
144         if (!result.isDone()) {
145
146             final Xid xid = deviceContext.getNextXid();
147
148             MultipartRequestMeterCaseBuilder caseBuilder =
149                     new MultipartRequestMeterCaseBuilder();
150             MultipartRequestMeterBuilder mprMeterBuild =
151                     new MultipartRequestMeterBuilder();
152             mprMeterBuild.setMeterId(new MeterId(input.getMeterId().getValue()));
153             caseBuilder.setMultipartRequestMeter(mprMeterBuild.build());
154
155             MultipartRequestInputBuilder mprInput =
156                     RequestInputUtils.createMultipartHeader(MultipartType.OFPMPMETER, xid.getValue(), version);
157             mprInput.setMultipartRequestBody(caseBuilder.build());
158             Future<RpcResult<Void>> resultFromOFLib = deviceContext.getPrimaryConnectionContext().getConnectionAdapter().multipartRequest(mprInput.build());
159             ListenableFuture<RpcResult<Void>> futureResultFromOfLib = JdkFutureAdapters.listenInPoolThread(resultFromOFLib);
160
161             final RpcResultConvertor<GetMeterStatisticsOutput> rpcResultConvertor = new RpcResultConvertor<>(requestContext, deviceContext);
162             rpcResultConvertor.processResultFromOfJava(futureResultFromOfLib);
163
164         } else {
165             RequestContextUtil.closeRequstContext(requestContext);
166         }
167         return result;
168     }
169
170 }