2 * Copyright (c) 2013 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.openflow.md.core.sal;
10 import java.util.Collection;
11 import org.opendaylight.controller.sal.common.util.Rpcs;
12 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.AddFlowOutput;
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.AddFlowOutputBuilder;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.RemoveFlowOutput;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.RemoveFlowOutputBuilder;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.UpdateFlowOutput;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.AddGroupOutput;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.AddGroupOutputBuilder;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.RemoveGroupOutput;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.RemoveGroupOutputBuilder;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.UpdateGroupOutput;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.AddMeterOutput;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.AddMeterOutputBuilder;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.RemoveMeterOutput;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.RemoveMeterOutputBuilder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.UpdateMeterOutput;
27 import org.opendaylight.yangtools.yang.common.RpcError;
28 import org.opendaylight.yangtools.yang.common.RpcResult;
29 import org.slf4j.Logger;
30 import org.slf4j.LoggerFactory;
31 import com.google.common.base.Function;
34 * collection of transformation functions dedicated to rpc future results
36 public abstract class OFRpcFutureResultTransformFactory {
38 private static final String MSG_ADD_FLOW_RPC = "Returning the Add Flow RPC result to MD-SAL";
39 protected static Logger LOG = LoggerFactory
40 .getLogger(OFRpcFutureResultTransformFactory.class);
47 protected static <E> RpcResult<E> assembleRpcResult(RpcResult<?> input, E result) {
48 Collection<RpcError> errors = input.getErrors();
49 return Rpcs.getRpcResult(input.isSuccessful(), result, errors);
53 * @return translator from {@link UpdateFlowOutput} to {@link AddFlowOutput}
55 public static Function<RpcResult<UpdateFlowOutput>,RpcResult<AddFlowOutput>> createForAddFlowOutput() {
56 return new Function<RpcResult<UpdateFlowOutput>,RpcResult<AddFlowOutput>>() {
59 public RpcResult<AddFlowOutput> apply(RpcResult<UpdateFlowOutput> input) {
61 UpdateFlowOutput updateFlowOutput = input.getResult();
63 AddFlowOutputBuilder addFlowOutput = new AddFlowOutputBuilder();
64 addFlowOutput.setTransactionId(updateFlowOutput.getTransactionId());
65 AddFlowOutput result = addFlowOutput.build();
67 RpcResult<AddFlowOutput> rpcResult = assembleRpcResult(input, result);
68 LOG.debug(MSG_ADD_FLOW_RPC);
76 * @return translator from {@link UpdateFlowOutput} to {@link RemoveFlowOutput}
78 public static Function<RpcResult<UpdateFlowOutput>,RpcResult<RemoveFlowOutput>> createForRemoveFlowOutput() {
79 return new Function<RpcResult<UpdateFlowOutput>,RpcResult<RemoveFlowOutput>>() {
82 public RpcResult<RemoveFlowOutput> apply(RpcResult<UpdateFlowOutput> input) {
84 UpdateFlowOutput updateFlowOutput = input.getResult();
86 RemoveFlowOutputBuilder removeFlowOutput = new RemoveFlowOutputBuilder();
87 removeFlowOutput.setTransactionId(updateFlowOutput.getTransactionId());
88 RemoveFlowOutput result = removeFlowOutput.build();
90 RpcResult<RemoveFlowOutput> rpcResult = assembleRpcResult(input, result);
91 LOG.debug(MSG_ADD_FLOW_RPC);
99 * @return translator from {@link UpdateGroupOutput} to {@link AddGroupOutput}
101 public static Function<RpcResult<UpdateGroupOutput>, RpcResult<AddGroupOutput>> createForAddGroupOutput() {
102 return new Function<RpcResult<UpdateGroupOutput>,RpcResult<AddGroupOutput>>() {
105 public RpcResult<AddGroupOutput> apply(final RpcResult<UpdateGroupOutput> input) {
106 UpdateGroupOutput updateGroupOutput = input.getResult();
108 AddGroupOutputBuilder addGroupOutput = new AddGroupOutputBuilder();
109 addGroupOutput.setTransactionId(updateGroupOutput.getTransactionId());
110 AddGroupOutput result = addGroupOutput.build();
112 RpcResult<AddGroupOutput> rpcResult = assembleRpcResult(input, result);
113 LOG.debug("Returning the Add Group RPC result to MD-SAL");
122 public static Function<RpcResult<UpdateGroupOutput>,RpcResult<RemoveGroupOutput>> createForRemoveGroupOutput() {
123 return new Function<RpcResult<UpdateGroupOutput>,RpcResult<RemoveGroupOutput>>() {
126 public RpcResult<RemoveGroupOutput> apply(RpcResult<UpdateGroupOutput> input) {
128 UpdateGroupOutput updateGroupOutput = input.getResult();
130 RemoveGroupOutputBuilder removeGroupOutput = new RemoveGroupOutputBuilder();
131 removeGroupOutput.setTransactionId(updateGroupOutput.getTransactionId());
132 RemoveGroupOutput result = removeGroupOutput.build();
134 RpcResult<RemoveGroupOutput> rpcResult = assembleRpcResult(input, result);
135 LOG.debug(MSG_ADD_FLOW_RPC);
143 * @return translator from {@link UpdateMeterOutput} to {@link AddMeterOutput}
145 public static Function<RpcResult<UpdateMeterOutput>, RpcResult<AddMeterOutput>> createForAddMeterOutput() {
146 return new Function<RpcResult<UpdateMeterOutput>,RpcResult<AddMeterOutput>>() {
149 public RpcResult<AddMeterOutput> apply(final RpcResult<UpdateMeterOutput> input) {
150 UpdateMeterOutput updateMeterOutput = input.getResult();
152 AddMeterOutputBuilder addMeterOutput = new AddMeterOutputBuilder();
153 addMeterOutput.setTransactionId(updateMeterOutput.getTransactionId());
154 AddMeterOutput result = addMeterOutput.build();
156 RpcResult<AddMeterOutput> rpcResult = assembleRpcResult(input, result);
157 LOG.debug("Returning the Add Meter RPC result to MD-SAL");
167 public static Function<RpcResult<UpdateMeterOutput>, RpcResult<RemoveMeterOutput>> createForRemoveMeterOutput() {
168 return new Function<RpcResult<UpdateMeterOutput>,RpcResult<RemoveMeterOutput>>() {
171 public RpcResult<RemoveMeterOutput> apply(final RpcResult<UpdateMeterOutput> input) {
172 UpdateMeterOutput updateMeterOutput = input.getResult();
174 RemoveMeterOutputBuilder removeMeterOutput = new RemoveMeterOutputBuilder();
175 removeMeterOutput.setTransactionId(updateMeterOutput.getTransactionId());
176 RemoveMeterOutput result = removeMeterOutput.build();
178 RpcResult<RemoveMeterOutput> rpcResult = assembleRpcResult(input, result);
179 LOG.debug("Returning the Add Meter RPC result to MD-SAL");