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
8 package org.opendaylight.openflowplugin.impl.statistics.services;
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.group.statistics.rev131111.GetAllGroupStatisticsInput;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.GetAllGroupStatisticsOutput;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.GetGroupDescriptionInput;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.GetGroupDescriptionOutput;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.GetGroupFeaturesInput;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.GetGroupFeaturesOutput;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.GetGroupStatisticsInput;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.GetGroupStatisticsOutput;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.OpendaylightGroupStatisticsService;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupId;
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.MultipartRequestGroupCaseBuilder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestGroupDescCaseBuilder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestGroupFeaturesCaseBuilder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.group._case.MultipartRequestGroupBuilder;
38 import org.opendaylight.yangtools.yang.common.RpcResult;
43 public class OpendaylightGroupStatisticsServiceImpl extends CommonService implements OpendaylightGroupStatisticsService {
46 public OpendaylightGroupStatisticsServiceImpl(final RequestContextStack requestContextStack, DeviceContext deviceContext) {
47 super(requestContextStack, deviceContext);
51 public Future<RpcResult<GetAllGroupStatisticsOutput>> getAllGroupStatistics(final GetAllGroupStatisticsInput input) {
54 return handleServiceCall(new Function<RequestContext<GetAllGroupStatisticsOutput>,
55 ListenableFuture<RpcResult<GetAllGroupStatisticsOutput>>>() {
58 public ListenableFuture<RpcResult<GetAllGroupStatisticsOutput>> apply(final RequestContext<GetAllGroupStatisticsOutput> requestContext) {
60 final MultipartRequestGroupCaseBuilder caseBuilder = new MultipartRequestGroupCaseBuilder();
61 final MultipartRequestGroupBuilder mprGroupBuild = new MultipartRequestGroupBuilder();
62 mprGroupBuild.setGroupId(new GroupId(
64 .intToUnsignedLong(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.Group.OFPGALL
66 caseBuilder.setMultipartRequestGroup(mprGroupBuild.build());
68 // Create multipart request header
69 final Xid xid = requestContext.getXid();
70 final MultipartRequestInputBuilder mprInput = RequestInputUtils.createMultipartHeader(
71 MultipartType.OFPMPGROUP, xid.getValue(), getVersion());
73 // Set request body to main multipart request
74 mprInput.setMultipartRequestBody(caseBuilder.build());
76 // Send the request, no cookies associated, use any connection
78 MultipartRequestInput multipartRequestInput = mprInput.build();
80 return StatisticsServiceUtil.getRpcResultListenableFuture(xid, multipartRequestInput, getDeviceContext());
88 public Future<RpcResult<GetGroupDescriptionOutput>> getGroupDescription(final GetGroupDescriptionInput input) {
89 return handleServiceCall(
90 new Function<RequestContext<GetGroupDescriptionOutput>,
91 ListenableFuture<RpcResult<GetGroupDescriptionOutput>>>() {
94 public ListenableFuture<RpcResult<GetGroupDescriptionOutput>> apply(final RequestContext<GetGroupDescriptionOutput> requestContext) {
95 final MultipartRequestGroupDescCaseBuilder mprGroupDescCaseBuild = new MultipartRequestGroupDescCaseBuilder();
97 final Xid xid = requestContext.getXid();
98 final MultipartRequestInputBuilder mprInput = RequestInputUtils.createMultipartHeader(
99 MultipartType.OFPMPGROUPDESC, xid.getValue(), getVersion());
100 mprInput.setMultipartRequestBody(mprGroupDescCaseBuild.build());
101 MultipartRequestInput multipartRequestInput = mprInput.build();
102 return StatisticsServiceUtil.getRpcResultListenableFuture(xid, multipartRequestInput, getDeviceContext());
109 public Future<RpcResult<GetGroupFeaturesOutput>> getGroupFeatures(final GetGroupFeaturesInput input) {
110 return handleServiceCall(
111 new Function<RequestContext<GetGroupFeaturesOutput>,
112 ListenableFuture<RpcResult<GetGroupFeaturesOutput>>>() {
115 public ListenableFuture<RpcResult<GetGroupFeaturesOutput>> apply(final RequestContext<GetGroupFeaturesOutput> requestContext) {
116 final MultipartRequestGroupFeaturesCaseBuilder mprGroupFeaturesBuild = new MultipartRequestGroupFeaturesCaseBuilder();
118 final Xid xid = requestContext.getXid();
119 final MultipartRequestInputBuilder mprInput = RequestInputUtils.createMultipartHeader(
120 MultipartType.OFPMPGROUPFEATURES, xid.getValue(), getVersion());
121 mprInput.setMultipartRequestBody(mprGroupFeaturesBuild.build());
122 MultipartRequestInput multipartRequestInput = mprInput.build();
123 return StatisticsServiceUtil.getRpcResultListenableFuture(xid, multipartRequestInput, getDeviceContext());
130 public Future<RpcResult<GetGroupStatisticsOutput>> getGroupStatistics(final GetGroupStatisticsInput input) {
131 return handleServiceCall(
132 new Function<RequestContext<GetGroupStatisticsOutput>, ListenableFuture<RpcResult<GetGroupStatisticsOutput>>>() {
135 public ListenableFuture<RpcResult<GetGroupStatisticsOutput>> apply(final RequestContext<GetGroupStatisticsOutput> requestContext) {
137 final MultipartRequestGroupCaseBuilder caseBuilder = new MultipartRequestGroupCaseBuilder();
138 final MultipartRequestGroupBuilder mprGroupBuild = new MultipartRequestGroupBuilder();
139 mprGroupBuild.setGroupId(new GroupId(input.getGroupId().getValue()));
140 caseBuilder.setMultipartRequestGroup(mprGroupBuild.build());
142 final Xid xid = requestContext.getXid();
143 final MultipartRequestInputBuilder mprInput = RequestInputUtils.createMultipartHeader(
144 MultipartType.OFPMPGROUP, xid.getValue(), getVersion());
146 mprInput.setMultipartRequestBody(caseBuilder.build());
147 MultipartRequestInput multipartRequestInput = mprInput.build();
148 return StatisticsServiceUtil.getRpcResultListenableFuture(xid, multipartRequestInput, getDeviceContext());