Merge "RequestContext's are not held by DeviceContext anymore"
[openflowplugin.git] / openflowplugin-impl / src / main / java / org / opendaylight / openflowplugin / impl / statistics / 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.statistics.services;
9
10 import com.google.common.base.Function;
11 import com.google.common.util.concurrent.ListenableFuture;
12 import java.util.concurrent.Future;
13 import org.opendaylight.openflowjava.protocol.api.util.BinContent;
14 import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext;
15 import org.opendaylight.openflowplugin.api.openflow.device.RequestContext;
16 import org.opendaylight.openflowplugin.api.openflow.device.RequestContextStack;
17 import org.opendaylight.openflowplugin.api.openflow.device.Xid;
18 import org.opendaylight.openflowplugin.impl.services.CommonService;
19 import org.opendaylight.openflowplugin.impl.services.RequestInputUtils;
20 import org.opendaylight.openflowplugin.impl.util.StatisticsServiceUtil;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.GetAllMeterConfigStatisticsInput;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.GetAllMeterConfigStatisticsOutput;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.GetAllMeterStatisticsInput;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.GetAllMeterStatisticsOutput;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.GetMeterFeaturesInput;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.GetMeterFeaturesOutput;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.GetMeterStatisticsInput;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.GetMeterStatisticsOutput;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.OpendaylightMeterStatisticsService;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterId;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartType;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartRequestInput;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartRequestInputBuilder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeterCaseBuilder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeterConfigCaseBuilder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeterFeaturesCaseBuilder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.meter._case.MultipartRequestMeterBuilder;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.meter.config._case.MultipartRequestMeterConfigBuilder;
39 import org.opendaylight.yangtools.yang.common.RpcResult;
40
41 /**
42  * @author joe
43  */
44 public class OpendaylightMeterStatisticsServiceImpl extends CommonService implements OpendaylightMeterStatisticsService {
45
46
47     public OpendaylightMeterStatisticsServiceImpl(final RequestContextStack requestContextStack, DeviceContext deviceContext) {
48         super(requestContextStack, deviceContext);
49     }
50
51     @Override
52     public Future<RpcResult<GetAllMeterConfigStatisticsOutput>> getAllMeterConfigStatistics(
53             final GetAllMeterConfigStatisticsInput input) {
54         return this
55                 .<GetAllMeterConfigStatisticsOutput, Void>handleServiceCall(new Function<RequestContext<GetAllMeterConfigStatisticsOutput>, ListenableFuture<RpcResult<Void>>>() {
56
57                     @Override
58                     public ListenableFuture<RpcResult<Void>> apply(final RequestContext<GetAllMeterConfigStatisticsOutput> requestContext) {
59
60                         MultipartRequestMeterConfigCaseBuilder caseBuilder =
61                                 new MultipartRequestMeterConfigCaseBuilder();
62                         MultipartRequestMeterConfigBuilder mprMeterConfigBuild =
63                                 new MultipartRequestMeterConfigBuilder();
64                         mprMeterConfigBuild.setMeterId(new MeterId(BinContent.intToUnsignedLong(
65                                 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common
66                                         .types.rev130731.Meter.OFPMALL.getIntValue())));
67                         caseBuilder.setMultipartRequestMeterConfig(mprMeterConfigBuild.build());
68
69                         final Xid xid = requestContext.getXid();
70                         MultipartRequestInputBuilder mprInput = RequestInputUtils
71                                 .createMultipartHeader(MultipartType.OFPMPMETERCONFIG, xid.getValue(), getVersion());
72                         mprInput.setMultipartRequestBody(caseBuilder.build());
73                         MultipartRequestInput multipartRequestInput = mprInput.build();
74                         return StatisticsServiceUtil.getRpcResultListenableFuture(xid, multipartRequestInput, getDeviceContext());
75                     }
76                 });
77
78     }
79
80     @Override
81     public Future<RpcResult<GetAllMeterStatisticsOutput>> getAllMeterStatistics(final GetAllMeterStatisticsInput input) {
82
83         return this.<GetAllMeterStatisticsOutput, Void>handleServiceCall(
84                 new Function<RequestContext<GetAllMeterStatisticsOutput>, ListenableFuture<RpcResult<Void>>>() {
85                     @Override
86                     public ListenableFuture<RpcResult<Void>> apply(final RequestContext<GetAllMeterStatisticsOutput> requestContext) {
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                         final Xid xid = requestContext.getXid();
98                         MultipartRequestInputBuilder mprInput = RequestInputUtils
99                                 .createMultipartHeader(MultipartType.OFPMPMETER, xid.getValue(), getVersion());
100                         mprInput.setMultipartRequestBody(caseBuilder.build());
101                         MultipartRequestInput multipartRequestInput = mprInput.build();
102                         return StatisticsServiceUtil.getRpcResultListenableFuture(xid, multipartRequestInput, getDeviceContext());
103                     }
104                 }
105         );
106
107     }
108
109     @Override
110     public Future<RpcResult<GetMeterFeaturesOutput>> getMeterFeatures(final GetMeterFeaturesInput input) {
111         return this.<GetMeterFeaturesOutput, Void>handleServiceCall(
112                 new Function<RequestContext<GetMeterFeaturesOutput>, ListenableFuture<RpcResult<Void>>>() {
113                     @Override
114                     public ListenableFuture<RpcResult<Void>> apply(final RequestContext<GetMeterFeaturesOutput> requestContext) {
115
116                         MultipartRequestMeterFeaturesCaseBuilder mprMeterFeaturesBuild =
117                                 new MultipartRequestMeterFeaturesCaseBuilder();
118
119                         final Xid xid = requestContext.getXid();
120                         MultipartRequestInputBuilder mprInput =
121                                 RequestInputUtils.createMultipartHeader(MultipartType.OFPMPMETERFEATURES, xid.getValue(), getVersion());
122                         mprInput.setMultipartRequestBody(mprMeterFeaturesBuild.build());
123                         MultipartRequestInput multipartRequestInput = mprInput.build();
124                         return StatisticsServiceUtil.getRpcResultListenableFuture(xid, multipartRequestInput, getDeviceContext());
125                     }
126                 });
127     }
128
129     @Override
130     public Future<RpcResult<GetMeterStatisticsOutput>> getMeterStatistics(final GetMeterStatisticsInput input) {
131         return this.<GetMeterStatisticsOutput, Void>handleServiceCall(
132                 new Function<RequestContext<GetMeterStatisticsOutput>, ListenableFuture<RpcResult<Void>>>() {
133                     @Override
134                     public ListenableFuture<RpcResult<Void>> apply(final RequestContext<GetMeterStatisticsOutput> requestContext) {
135                         MultipartRequestMeterCaseBuilder caseBuilder =
136                                 new MultipartRequestMeterCaseBuilder();
137                         MultipartRequestMeterBuilder mprMeterBuild =
138                                 new MultipartRequestMeterBuilder();
139                         mprMeterBuild.setMeterId(new MeterId(input.getMeterId().getValue()));
140                         caseBuilder.setMultipartRequestMeter(mprMeterBuild.build());
141
142                         final Xid xid = requestContext.getXid();
143                         MultipartRequestInputBuilder mprInput =
144                                 RequestInputUtils.createMultipartHeader(MultipartType.OFPMPMETER, xid.getValue(), getVersion());
145                         mprInput.setMultipartRequestBody(caseBuilder.build());
146                         MultipartRequestInput multipartRequestInput = mprInput.build();
147                         return StatisticsServiceUtil.getRpcResultListenableFuture(xid, multipartRequestInput, getDeviceContext());
148                     }
149                 });
150
151     }
152
153 }