aa8982043e7e8126d90fc402e31ff45177c8ee97
[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
12 import org.opendaylight.controller.sal.common.util.Rpcs;
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.AddFlowOutput;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.AddFlowOutputBuilder;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.RemoveFlowOutput;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.RemoveFlowOutputBuilder;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.UpdateFlowOutput;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.AddGroupOutput;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.AddGroupOutputBuilder;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.RemoveGroupOutput;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.RemoveGroupOutputBuilder;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.UpdateGroupOutput;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.AddMeterOutput;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.AddMeterOutputBuilder;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.RemoveMeterOutput;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.RemoveMeterOutputBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.UpdateMeterOutput;
28 import org.opendaylight.yangtools.yang.common.RpcError;
29 import org.opendaylight.yangtools.yang.common.RpcResult;
30 import org.slf4j.Logger;
31 import org.slf4j.LoggerFactory;
32
33 import com.google.common.base.Function;
34
35 /**
36  * collection of transformation functions dedicated to rpc future results  
37  */
38 public abstract class OFRpcFutureResultTransformFactory {
39     
40     protected static Logger LOG = LoggerFactory
41             .getLogger(OFRpcFutureResultTransformFactory.class);
42
43     /**
44      * @param input
45      * @param result
46      * @return
47      */
48     protected static <E> RpcResult<E> assembleRpcResult(RpcResult<?> input, E result) {
49         Collection<RpcError> errors = input.getErrors();
50         RpcResult<E> rpcResult = Rpcs.getRpcResult(input.isSuccessful(), result, errors);
51         return rpcResult;
52     }
53
54     /**
55      * @return translator from {@link UpdateFlowOutput} to {@link AddFlowOutput}
56      */
57     public static Function<RpcResult<UpdateFlowOutput>,RpcResult<AddFlowOutput>> createForAddFlowOutput() {
58         return new Function<RpcResult<UpdateFlowOutput>,RpcResult<AddFlowOutput>>() {
59
60             @Override
61             public RpcResult<AddFlowOutput> apply(RpcResult<UpdateFlowOutput> input) {
62
63                 UpdateFlowOutput updateFlowOutput = input.getResult();
64
65                 AddFlowOutputBuilder addFlowOutput = new AddFlowOutputBuilder();
66                 addFlowOutput.setTransactionId(updateFlowOutput.getTransactionId());
67                 AddFlowOutput result = addFlowOutput.build();
68
69                 RpcResult<AddFlowOutput> rpcResult = assembleRpcResult(input, result);
70                 LOG.debug("Returning the Add Flow RPC result to MD-SAL");
71                 return rpcResult;
72             }
73
74         };
75     }
76     
77     /**
78      * @return translator from {@link UpdateFlowOutput} to {@link RemoveFlowOutput}
79      */
80     public static Function<RpcResult<UpdateFlowOutput>,RpcResult<RemoveFlowOutput>> createForRemoveFlowOutput() {
81         return new Function<RpcResult<UpdateFlowOutput>,RpcResult<RemoveFlowOutput>>() {
82
83             @Override
84             public RpcResult<RemoveFlowOutput> apply(RpcResult<UpdateFlowOutput> input) {
85
86                 UpdateFlowOutput updateFlowOutput = input.getResult();
87
88                 RemoveFlowOutputBuilder removeFlowOutput = new RemoveFlowOutputBuilder();
89                 removeFlowOutput.setTransactionId(updateFlowOutput.getTransactionId());
90                 RemoveFlowOutput result = removeFlowOutput.build();
91
92                 RpcResult<RemoveFlowOutput> rpcResult = assembleRpcResult(input, result);
93                 LOG.debug("Returning the Add Flow RPC result to MD-SAL");
94                 return rpcResult;
95             }
96
97         };
98     }
99     
100     /**
101      * @return translator from {@link UpdateGroupOutput} to {@link AddGroupOutput}
102      */
103     public static Function<RpcResult<UpdateGroupOutput>, RpcResult<AddGroupOutput>> createForAddGroupOutput() {
104         return new Function<RpcResult<UpdateGroupOutput>,RpcResult<AddGroupOutput>>() {
105
106             @Override
107             public RpcResult<AddGroupOutput> apply(final RpcResult<UpdateGroupOutput> input) {
108                 UpdateGroupOutput updateGroupOutput = input.getResult();
109                 
110                 AddGroupOutputBuilder addGroupOutput = new AddGroupOutputBuilder();
111                 addGroupOutput.setTransactionId(updateGroupOutput.getTransactionId());
112                 AddGroupOutput result = addGroupOutput.build();
113
114                 RpcResult<AddGroupOutput> rpcResult = assembleRpcResult(input, result);
115                 LOG.debug("Returning the Add Group RPC result to MD-SAL");
116                 return rpcResult;
117             }
118         };
119     }
120     
121     /**
122      * @return
123      */
124     public static Function<RpcResult<UpdateGroupOutput>,RpcResult<RemoveGroupOutput>> createForRemoveGroupOutput() {
125         return new Function<RpcResult<UpdateGroupOutput>,RpcResult<RemoveGroupOutput>>() {
126
127             @Override
128             public RpcResult<RemoveGroupOutput> apply(RpcResult<UpdateGroupOutput> input) {
129
130                 UpdateGroupOutput updateGroupOutput = input.getResult();
131
132                 RemoveGroupOutputBuilder removeGroupOutput = new RemoveGroupOutputBuilder();
133                 removeGroupOutput.setTransactionId(updateGroupOutput.getTransactionId());
134                 RemoveGroupOutput result = removeGroupOutput.build();
135
136                 RpcResult<RemoveGroupOutput> rpcResult = assembleRpcResult(input, result);
137                 LOG.debug("Returning the Add Flow RPC result to MD-SAL");
138                 return rpcResult;
139             }
140
141         };
142     }
143     
144     /**
145      * @return translator from {@link UpdateMeterOutput} to {@link AddMeterOutput}
146      */
147     public static Function<RpcResult<UpdateMeterOutput>, RpcResult<AddMeterOutput>> createForAddMeterOutput() {
148         return new Function<RpcResult<UpdateMeterOutput>,RpcResult<AddMeterOutput>>() {
149
150             @Override
151             public RpcResult<AddMeterOutput> apply(final RpcResult<UpdateMeterOutput> input) {
152                 UpdateMeterOutput updateMeterOutput = input.getResult();
153                 
154                 AddMeterOutputBuilder addMeterOutput = new AddMeterOutputBuilder();
155                 addMeterOutput.setTransactionId(updateMeterOutput.getTransactionId());
156                 AddMeterOutput result = addMeterOutput.build();
157
158                 RpcResult<AddMeterOutput> rpcResult = assembleRpcResult(input, result);
159                 LOG.debug("Returning the Add Meter RPC result to MD-SAL");
160                 return rpcResult;
161             }
162         };
163     }
164     
165     
166     /**
167      * @return
168      */
169     public static Function<RpcResult<UpdateMeterOutput>, RpcResult<RemoveMeterOutput>> createForRemoveMeterOutput() {
170         return new Function<RpcResult<UpdateMeterOutput>,RpcResult<RemoveMeterOutput>>() {
171
172             @Override
173             public RpcResult<RemoveMeterOutput> apply(final RpcResult<UpdateMeterOutput> input) {
174                 UpdateMeterOutput updateMeterOutput = input.getResult();
175                 
176                 RemoveMeterOutputBuilder removeMeterOutput = new RemoveMeterOutputBuilder();
177                 removeMeterOutput.setTransactionId(updateMeterOutput.getTransactionId());
178                 RemoveMeterOutput result = removeMeterOutput.build();
179
180                 RpcResult<RemoveMeterOutput> rpcResult = assembleRpcResult(input, result);
181                 LOG.debug("Returning the Add Meter RPC result to MD-SAL");
182                 return rpcResult;
183             }
184         };
185     }
186     
187     
188     
189     
190 }