BUG 2661 - sonar issues in openflowplugin artifact2
[openflowplugin.git] / openflowplugin / src / main / java / org / opendaylight / openflowplugin / openflow / md / core / sal / OFRpcFutureResultTransformFactory.java
1 /**
2  * Copyright (c) 2013 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.openflow.md.core.sal;
9
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;
32
33 /**
34  * collection of transformation functions dedicated to rpc future results
35  */
36 public abstract class OFRpcFutureResultTransformFactory {
37
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);
41
42     /**
43      * @param input
44      * @param result
45      * @return
46      */
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);
50     }
51
52     /**
53      * @return translator from {@link UpdateFlowOutput} to {@link AddFlowOutput}
54      */
55     public static Function<RpcResult<UpdateFlowOutput>,RpcResult<AddFlowOutput>> createForAddFlowOutput() {
56         return new Function<RpcResult<UpdateFlowOutput>,RpcResult<AddFlowOutput>>() {
57
58             @Override
59             public RpcResult<AddFlowOutput> apply(RpcResult<UpdateFlowOutput> input) {
60
61                 UpdateFlowOutput updateFlowOutput = input.getResult();
62
63                 AddFlowOutputBuilder addFlowOutput = new AddFlowOutputBuilder();
64                 addFlowOutput.setTransactionId(updateFlowOutput.getTransactionId());
65                 AddFlowOutput result = addFlowOutput.build();
66
67                 RpcResult<AddFlowOutput> rpcResult = assembleRpcResult(input, result);
68                 LOG.debug(MSG_ADD_FLOW_RPC);
69                 return rpcResult;
70             }
71
72         };
73     }
74
75     /**
76      * @return translator from {@link UpdateFlowOutput} to {@link RemoveFlowOutput}
77      */
78     public static Function<RpcResult<UpdateFlowOutput>,RpcResult<RemoveFlowOutput>> createForRemoveFlowOutput() {
79         return new Function<RpcResult<UpdateFlowOutput>,RpcResult<RemoveFlowOutput>>() {
80
81             @Override
82             public RpcResult<RemoveFlowOutput> apply(RpcResult<UpdateFlowOutput> input) {
83
84                 UpdateFlowOutput updateFlowOutput = input.getResult();
85
86                 RemoveFlowOutputBuilder removeFlowOutput = new RemoveFlowOutputBuilder();
87                 removeFlowOutput.setTransactionId(updateFlowOutput.getTransactionId());
88                 RemoveFlowOutput result = removeFlowOutput.build();
89
90                 RpcResult<RemoveFlowOutput> rpcResult = assembleRpcResult(input, result);
91                 LOG.debug(MSG_ADD_FLOW_RPC);
92                 return rpcResult;
93             }
94
95         };
96     }
97
98     /**
99      * @return translator from {@link UpdateGroupOutput} to {@link AddGroupOutput}
100      */
101     public static Function<RpcResult<UpdateGroupOutput>, RpcResult<AddGroupOutput>> createForAddGroupOutput() {
102         return new Function<RpcResult<UpdateGroupOutput>,RpcResult<AddGroupOutput>>() {
103
104             @Override
105             public RpcResult<AddGroupOutput> apply(final RpcResult<UpdateGroupOutput> input) {
106                 UpdateGroupOutput updateGroupOutput = input.getResult();
107
108                 AddGroupOutputBuilder addGroupOutput = new AddGroupOutputBuilder();
109                 addGroupOutput.setTransactionId(updateGroupOutput.getTransactionId());
110                 AddGroupOutput result = addGroupOutput.build();
111
112                 RpcResult<AddGroupOutput> rpcResult = assembleRpcResult(input, result);
113                 LOG.debug("Returning the Add Group RPC result to MD-SAL");
114                 return rpcResult;
115             }
116         };
117     }
118
119     /**
120      * @return
121      */
122     public static Function<RpcResult<UpdateGroupOutput>,RpcResult<RemoveGroupOutput>> createForRemoveGroupOutput() {
123         return new Function<RpcResult<UpdateGroupOutput>,RpcResult<RemoveGroupOutput>>() {
124
125             @Override
126             public RpcResult<RemoveGroupOutput> apply(RpcResult<UpdateGroupOutput> input) {
127
128                 UpdateGroupOutput updateGroupOutput = input.getResult();
129
130                 RemoveGroupOutputBuilder removeGroupOutput = new RemoveGroupOutputBuilder();
131                 removeGroupOutput.setTransactionId(updateGroupOutput.getTransactionId());
132                 RemoveGroupOutput result = removeGroupOutput.build();
133
134                 RpcResult<RemoveGroupOutput> rpcResult = assembleRpcResult(input, result);
135                 LOG.debug(MSG_ADD_FLOW_RPC);
136                 return rpcResult;
137             }
138
139         };
140     }
141
142     /**
143      * @return translator from {@link UpdateMeterOutput} to {@link AddMeterOutput}
144      */
145     public static Function<RpcResult<UpdateMeterOutput>, RpcResult<AddMeterOutput>> createForAddMeterOutput() {
146         return new Function<RpcResult<UpdateMeterOutput>,RpcResult<AddMeterOutput>>() {
147
148             @Override
149             public RpcResult<AddMeterOutput> apply(final RpcResult<UpdateMeterOutput> input) {
150                 UpdateMeterOutput updateMeterOutput = input.getResult();
151
152                 AddMeterOutputBuilder addMeterOutput = new AddMeterOutputBuilder();
153                 addMeterOutput.setTransactionId(updateMeterOutput.getTransactionId());
154                 AddMeterOutput result = addMeterOutput.build();
155
156                 RpcResult<AddMeterOutput> rpcResult = assembleRpcResult(input, result);
157                 LOG.debug("Returning the Add Meter RPC result to MD-SAL");
158                 return rpcResult;
159             }
160         };
161     }
162
163
164     /**
165      * @return
166      */
167     public static Function<RpcResult<UpdateMeterOutput>, RpcResult<RemoveMeterOutput>> createForRemoveMeterOutput() {
168         return new Function<RpcResult<UpdateMeterOutput>,RpcResult<RemoveMeterOutput>>() {
169
170             @Override
171             public RpcResult<RemoveMeterOutput> apply(final RpcResult<UpdateMeterOutput> input) {
172                 UpdateMeterOutput updateMeterOutput = input.getResult();
173
174                 RemoveMeterOutputBuilder removeMeterOutput = new RemoveMeterOutputBuilder();
175                 removeMeterOutput.setTransactionId(updateMeterOutput.getTransactionId());
176                 RemoveMeterOutput result = removeMeterOutput.build();
177
178                 RpcResult<RemoveMeterOutput> rpcResult = assembleRpcResult(input, result);
179                 LOG.debug("Returning the Add Meter RPC result to MD-SAL");
180                 return rpcResult;
181             }
182         };
183     }
184
185
186
187
188 }