- class FunctionImpl implements
- Function<RequestContext<List<MultipartReply>>, ListenableFuture<RpcResult<List<MultipartReply>>>> {
-
- @Override
- public ListenableFuture<RpcResult<List<MultipartReply>>> apply(final RequestContext<List<MultipartReply>> requestContext) {
- getMessageSpy().spyMessage(input.getImplementedInterface(),
- MessageSpy.STATISTIC_GROUP.TO_SWITCH_SUBMIT_SUCCESS);
-
- final SettableFuture<RpcResult<List<MultipartReply>>> result = SettableFuture.create();
-
- final MultipartRequestTableFeaturesCaseBuilder caseBuilder = new MultipartRequestTableFeaturesCaseBuilder();
- final MultipartRequestTableFeaturesBuilder requestBuilder = new MultipartRequestTableFeaturesBuilder();
- final List<TableFeatures> ofTableFeatureList = TableFeaturesConvertor.toTableFeaturesRequest(input
- .getUpdatedTable());
- requestBuilder.setTableFeatures(ofTableFeatureList);
- caseBuilder.setMultipartRequestTableFeatures(requestBuilder.build());
-
- // Set request body to main multipart request
- final Xid xid = requestContext.getXid();
- final MultipartRequestInputBuilder mprInput = createMultipartHeader(MultipartType.OFPMPTABLEFEATURES,
- xid.getValue());
- mprInput.setMultipartRequestBody(caseBuilder.build());
- final OutboundQueue outboundQueue = getDeviceContext().getPrimaryConnectionContext().getOutboundQueueProvider();
-
- final SettableFuture<RpcResult<List<MultipartReply>>> settableFuture = SettableFuture.create();
- final MultiMsgCollector multiMsgCollector = getDeviceContext().getMultiMsgCollector();
- multiMsgCollector.registerMultipartRequestContext(requestContext);
-
- final MultipartRequestInput multipartRequestInput = mprInput.build();
- outboundQueue.commitEntry(xid.getValue(), multipartRequestInput, new FutureCallback<OfHeader>() {
- @Override
- public void onSuccess(final OfHeader ofHeader) {
- if (ofHeader instanceof MultipartReply) {
- MultipartReply multipartReply = (MultipartReply) ofHeader;
- multiMsgCollector.addMultipartMsg(multipartReply);
- } else {
- if (null != ofHeader) {
- LOG.info("Unexpected response type received {}.", ofHeader.getClass());
- } else {
- LOG.info("Response received is null.");
- }
- }
- getMessageSpy().spyMessage(multipartRequestInput.getImplementedInterface(), MessageSpy.STATISTIC_GROUP.TO_SWITCH_SUBMIT_SUCCESS);
- settableFuture.set(RpcResultBuilder.<List<MultipartReply>>success().build());
- }
-
- @Override
- public void onFailure(final Throwable throwable) {
- RpcResultBuilder<List<MultipartReply>> rpcResultBuilder = RpcResultBuilder.<List<MultipartReply>>failed().withError(RpcError.ErrorType.APPLICATION, throwable.getMessage(), throwable);
- RequestContextUtil.closeRequstContext(requestContext);
- multiMsgCollector.registerMultipartRequestContext(requestContext);
- getMessageSpy().spyMessage(multipartRequestInput.getImplementedInterface(), MessageSpy.STATISTIC_GROUP.TO_SWITCH_SUBMIT_FAILURE);
- settableFuture.set(rpcResultBuilder.build());
- }
- });
- return settableFuture;
- }
- }
-
- final ListenableFuture<RpcResult<List<MultipartReply>>> multipartFuture = handleServiceCall(new FunctionImpl());