d66e2522461ca310ffb6b6767ff2210c96b6a163
[openflowplugin.git] / openflowplugin-impl / src / main / java / org / opendaylight / openflowplugin / impl / services / OpendaylightQueueStatisticsServiceImpl.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.openflowplugin.api.OFConstants;
14 import org.opendaylight.openflowplugin.api.openflow.device.RequestContext;
15 import org.opendaylight.openflowplugin.api.openflow.device.Xid;
16 import org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion;
17 import org.opendaylight.openflowplugin.openflow.md.util.InventoryDataServiceUtil;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartType;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartRequestInputBuilder;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestQueueCaseBuilder;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.queue._case.MultipartRequestQueueBuilder;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.GetAllQueuesStatisticsFromAllPortsInput;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.GetAllQueuesStatisticsFromAllPortsOutput;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.GetAllQueuesStatisticsFromGivenPortInput;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.GetAllQueuesStatisticsFromGivenPortOutput;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.GetQueueStatisticsFromGivenPortInput;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.GetQueueStatisticsFromGivenPortOutput;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.OpendaylightQueueStatisticsService;
29 import org.opendaylight.yangtools.yang.common.RpcResult;
30 import java.util.concurrent.Future;
31
32 /**
33  * @author joe
34  */
35 public class OpendaylightQueueStatisticsServiceImpl extends CommonService implements OpendaylightQueueStatisticsService {
36
37
38     @Override
39     public Future<RpcResult<GetAllQueuesStatisticsFromAllPortsOutput>> getAllQueuesStatisticsFromAllPorts(
40             final GetAllQueuesStatisticsFromAllPortsInput input) {
41         final RequestContext<GetAllQueuesStatisticsFromAllPortsOutput> requestContext = rpcContext.createRequestContext();
42         final SettableFuture<RpcResult<GetAllQueuesStatisticsFromAllPortsOutput>> result = rpcContext.storeOrFail(requestContext);
43
44         if (!result.isDone()) {
45             final Xid xid = deviceContext.getNextXid();
46
47             MultipartRequestQueueCaseBuilder caseBuilder = new MultipartRequestQueueCaseBuilder();
48             MultipartRequestQueueBuilder mprQueueBuilder = new MultipartRequestQueueBuilder();
49             // Select all ports
50             mprQueueBuilder.setPortNo(OFConstants.OFPP_ANY);
51             // Select all the ports
52             mprQueueBuilder.setQueueId(OFConstants.OFPQ_ANY);
53             caseBuilder.setMultipartRequestQueue(mprQueueBuilder.build());
54
55             // Set request body to main multipart request
56             MultipartRequestInputBuilder mprInput = RequestInputUtils.createMultipartHeader(MultipartType.OFPMPQUEUE, xid.getValue(), version);
57             mprInput.setMultipartRequestBody(caseBuilder.build());
58             Future<RpcResult<Void>> resultFromOFLib = deviceContext.getPrimaryConnectionContext().getConnectionAdapter().multipartRequest(mprInput.build());
59             ListenableFuture<RpcResult<Void>> futureResultFromOfLib = JdkFutureAdapters.listenInPoolThread(resultFromOFLib);
60
61             final RpcResultConvertor<GetAllQueuesStatisticsFromAllPortsOutput> rpcResultConvertor = new RpcResultConvertor<>(requestContext, deviceContext);
62             rpcResultConvertor.processResultFromOfJava(futureResultFromOfLib);
63         } else {
64             RequestContextUtil.closeRequstContext(requestContext);
65         }
66         return result;
67     }
68
69     @Override
70     public Future<RpcResult<GetAllQueuesStatisticsFromGivenPortOutput>> getAllQueuesStatisticsFromGivenPort(
71             final GetAllQueuesStatisticsFromGivenPortInput input) {
72         final RequestContext<GetAllQueuesStatisticsFromGivenPortOutput> requestContext = rpcContext.createRequestContext();
73         final SettableFuture<RpcResult<GetAllQueuesStatisticsFromGivenPortOutput>> result = rpcContext.storeOrFail(requestContext);
74
75         if (!result.isDone()) {
76             final Xid xid = deviceContext.getNextXid();
77
78
79             MultipartRequestQueueCaseBuilder caseBuilder = new MultipartRequestQueueCaseBuilder();
80             MultipartRequestQueueBuilder mprQueueBuilder = new MultipartRequestQueueBuilder();
81             // Select all queues
82             mprQueueBuilder.setQueueId(OFConstants.OFPQ_ANY);
83             // Select specific port
84             mprQueueBuilder.setPortNo(InventoryDataServiceUtil.portNumberfromNodeConnectorId(
85                     OpenflowVersion.get(version),
86                     input.getNodeConnectorId()));
87             caseBuilder.setMultipartRequestQueue(mprQueueBuilder.build());
88
89             // Set request body to main multipart request
90             MultipartRequestInputBuilder mprInput = RequestInputUtils.createMultipartHeader(MultipartType.OFPMPQUEUE, xid.getValue(), version);
91             mprInput.setMultipartRequestBody(caseBuilder.build());
92             Future<RpcResult<Void>> resultFromOFLib = deviceContext.getPrimaryConnectionContext().getConnectionAdapter().multipartRequest(mprInput.build());
93             ListenableFuture<RpcResult<Void>> futureResultFromOfLib = JdkFutureAdapters.listenInPoolThread(resultFromOFLib);
94
95             final RpcResultConvertor<GetAllQueuesStatisticsFromGivenPortOutput> rpcResultConvertor = new RpcResultConvertor<>(requestContext, deviceContext);
96             rpcResultConvertor.processResultFromOfJava(futureResultFromOfLib);
97         } else {
98             RequestContextUtil.closeRequstContext(requestContext);
99         }
100         return result;
101     }
102
103     @Override
104     public Future<RpcResult<GetQueueStatisticsFromGivenPortOutput>> getQueueStatisticsFromGivenPort(
105             final GetQueueStatisticsFromGivenPortInput input) {
106         final RequestContext<GetQueueStatisticsFromGivenPortOutput> requestContext = rpcContext.createRequestContext();
107         final SettableFuture<RpcResult<GetQueueStatisticsFromGivenPortOutput>> result = rpcContext.storeOrFail(requestContext);
108
109         if (!result.isDone()) {
110             final Xid xid = deviceContext.getNextXid();
111
112             MultipartRequestQueueCaseBuilder caseBuilder = new MultipartRequestQueueCaseBuilder();
113             MultipartRequestQueueBuilder mprQueueBuilder = new MultipartRequestQueueBuilder();
114             // Select specific queue
115             mprQueueBuilder.setQueueId(input.getQueueId().getValue());
116             // Select specific port
117             mprQueueBuilder.setPortNo(InventoryDataServiceUtil.portNumberfromNodeConnectorId(
118                     OpenflowVersion.get(version),
119                     input.getNodeConnectorId()));
120             caseBuilder.setMultipartRequestQueue(mprQueueBuilder.build());
121
122             // Set request body to main multipart request
123             MultipartRequestInputBuilder mprInput = RequestInputUtils
124                     .createMultipartHeader(MultipartType.OFPMPQUEUE, xid.getValue(), version);
125             mprInput.setMultipartRequestBody(caseBuilder.build());
126             Future<RpcResult<Void>> resultFromOFLib = deviceContext.getPrimaryConnectionContext()
127                     .getConnectionAdapter().multipartRequest(mprInput.build());
128             ListenableFuture<RpcResult<Void>> futureResultFromOfLib = JdkFutureAdapters.listenInPoolThread(resultFromOFLib);
129
130             final RpcResultConvertor<GetQueueStatisticsFromGivenPortOutput> rpcResultConvertor = new RpcResultConvertor<>(requestContext, deviceContext);
131             rpcResultConvertor.processResultFromOfJava(futureResultFromOfLib);
132         } else {
133             RequestContextUtil.closeRequstContext(requestContext);
134         }
135         return result;
136     }
137
138 }