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