2 * Copyright (c) 2014 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.controller.sal.compatibility;
10 import com.google.common.net.InetAddresses
11 import java.math.BigInteger
12 import java.net.Inet4Address
13 import java.net.Inet6Address
14 import java.util.ArrayList
15 import org.opendaylight.controller.sal.action.Controller
16 import org.opendaylight.controller.sal.action.Drop
17 import org.opendaylight.controller.sal.action.Flood
18 import org.opendaylight.controller.sal.action.FloodAll
19 import org.opendaylight.controller.sal.action.HwPath
20 import org.opendaylight.controller.sal.action.Loopback
21 import org.opendaylight.controller.sal.action.Output
22 import org.opendaylight.controller.sal.action.PopVlan
23 import org.opendaylight.controller.sal.action.PushVlan
24 import org.opendaylight.controller.sal.action.SetDlDst
25 import org.opendaylight.controller.sal.action.SetDlSrc
26 import org.opendaylight.controller.sal.action.SetDlType
27 import org.opendaylight.controller.sal.action.SetNextHop
28 import org.opendaylight.controller.sal.action.SetNwDst
29 import org.opendaylight.controller.sal.action.SetNwSrc
30 import org.opendaylight.controller.sal.action.SetNwTos
31 import org.opendaylight.controller.sal.action.SetTpDst
32 import org.opendaylight.controller.sal.action.SetTpSrc
33 import org.opendaylight.controller.sal.action.SetVlanCfi
34 import org.opendaylight.controller.sal.action.SetVlanId
35 import org.opendaylight.controller.sal.action.SetVlanPcp
36 import org.opendaylight.controller.sal.action.SwPath
37 import org.opendaylight.controller.sal.core.Node
38 import org.opendaylight.controller.sal.core.NodeConnector
39 import org.opendaylight.controller.sal.flowprogrammer.Flow
40 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix
41 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Prefix
42 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber
43 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri
44 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.AddFlowInputBuilder
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.FlowAddedBuilder
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.RemoveFlowInputBuilder
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.UpdateFlowInputBuilder
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.VlanCfi
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.address.Address
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.address.address.Ipv4Builder
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.address.address.Ipv6Builder
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.EtherType
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanPcp
59 import static extension org.opendaylight.controller.sal.compatibility.FromSalConversionsUtils.*
60 import static extension org.opendaylight.controller.sal.compatibility.NodeMapping.*
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.flow.update.OriginalFlowBuilder
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.flow.update.UpdatedFlowBuilder
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Instructions
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.InstructionsBuilder
65 import java.util.Collections
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.InstructionBuilder
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.controller.action._case.ControllerActionBuilder
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.drop.action._case.DropActionBuilder
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.flood.action._case.FloodActionBuilder
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.flood.all.action._case.FloodAllActionBuilder
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.hw.path.action._case.HwPathActionBuilder
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.loopback.action._case.LoopbackActionBuilder
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.output.action._case.OutputActionBuilder
75 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.push.vlan.action._case.PushVlanActionBuilder
76 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.dl.dst.action._case.SetDlDstActionBuilder
77 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.dl.src.action._case.SetDlSrcActionBuilder
78 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.dl.type.action._case.SetDlTypeActionBuilder
79 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.next.hop.action._case.SetNextHopActionBuilder
80 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.nw.dst.action._case.SetNwDstActionBuilder
81 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.nw.src.action._case.SetNwSrcActionBuilder
82 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.nw.tos.action._case.SetNwTosActionBuilder
83 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.tp.dst.action._case.SetTpDstActionBuilder
84 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.tp.src.action._case.SetTpSrcActionBuilder
85 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.vlan.cfi.action._case.SetVlanCfiActionBuilder
86 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.vlan.id.action._case.SetVlanIdActionBuilder
87 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.vlan.pcp.action._case.SetVlanPcpActionBuilder
88 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.sw.path.action._case.SwPathActionBuilder
89 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetTpSrcActionCaseBuilder
90 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetTpDstActionCaseBuilder
91 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwTosActionCaseBuilder
92 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwSrcActionCaseBuilder
93 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwDstActionCaseBuilder
94 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNextHopActionCaseBuilder
95 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetDlTypeActionCaseBuilder
96 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetDlDstActionCaseBuilder
97 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.ControllerActionCaseBuilder
98 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DropActionCaseBuilder
99 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.FloodActionCaseBuilder
100 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.FloodAllActionCaseBuilder
101 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.HwPathActionCaseBuilder
102 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.LoopbackActionCaseBuilder
103 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopVlanActionCaseBuilder
104 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.OutputActionCaseBuilder
105 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushVlanActionCaseBuilder
106 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetDlSrcActionCaseBuilder
107 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetVlanCfiActionCaseBuilder
108 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetVlanIdActionCaseBuilder
109 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetVlanPcpActionCaseBuilder
110 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SwPathActionCaseBuilder
111 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.apply.actions._case.ApplyActionsBuilder
112 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.ApplyActionsCaseBuilder
113 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId
114 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowBuilder
115 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowId
116 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowCookie
118 public class MDFlowMapping {
121 throw new UnsupportedOperationException()
124 public static def flowAdded(Flow sourceFlow) {
125 if (sourceFlow == null)
126 throw new IllegalArgumentException();
127 val it = new FlowAddedBuilder();
129 hardTimeout = sourceFlow.hardTimeout as int
130 idleTimeout = sourceFlow.idleTimeout as int
131 cookie = new FlowCookie(BigInteger.valueOf(sourceFlow.id))
132 priority = sourceFlow.priority as int
134 val sourceActions = sourceFlow.actions;
135 val targetActions = new ArrayList<Action>();
137 for (sourceAction : sourceActions) {
138 targetActions.add(sourceAction.toAction(action));
141 instructions = targetActions.toApplyInstruction();
142 match = sourceFlow.match.toMatch();
143 tableId = new Integer(0).shortValue
148 public static def toMDFlow(Flow sourceFlow, String flowId) {
149 if (sourceFlow == null)
150 throw new IllegalArgumentException();
151 val it = new FlowBuilder();
152 hardTimeout = sourceFlow.hardTimeout as int
153 idleTimeout = sourceFlow.idleTimeout as int
154 cookie = new FlowCookie(BigInteger.valueOf(sourceFlow.id))
155 priority = sourceFlow.priority as int
156 id = new FlowId(flowId)
158 val sourceActions = sourceFlow.actions;
159 val targetActions = new ArrayList<Action>();
161 for (sourceAction : sourceActions) {
162 targetActions.add(sourceAction.toAction(action));
165 instructions = targetActions.toApplyInstruction();
166 match = sourceFlow.match.toMatch();
167 tableId = new Integer(0).shortValue
171 public static def Instructions toApplyInstruction(ArrayList<Action> actions) {
172 val it = new InstructionsBuilder;
173 val applyActions = new InstructionBuilder;
174 applyActions.instruction = new ApplyActionsCaseBuilder().setApplyActions(new ApplyActionsBuilder().setAction(actions).build()).build()
175 applyActions.setOrder(new Integer(0))
176 instruction = Collections.<Instruction>singletonList(applyActions.build)
180 public static def removeFlowInput(Node sourceNode, Flow sourceFlow) {
181 val source = flowAdded(sourceFlow);
182 val it = new RemoveFlowInputBuilder(source as org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.Flow);
183 node = sourceNode.toNodeRef()
187 public static def addFlowInput(Node sourceNode, Flow sourceFlow) {
188 val source = flowAdded(sourceFlow);
189 val it = new AddFlowInputBuilder(source as org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.Flow);
190 it.setNode(sourceNode.toNodeRef)
194 public static def updateFlowInput(Node sourceNode, Flow oldFlow, Flow newFlow) {
195 val it = new UpdateFlowInputBuilder();
196 val sourceOld = flowAdded(newFlow);
198 val original = new OriginalFlowBuilder(sourceOld as org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.Flow);
199 val sourceNew = flowAdded(newFlow);
200 val updated = new UpdatedFlowBuilder(sourceNew as org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.Flow);
201 originalFlow = original.build()
202 updatedFlow = updated.build();
203 node = sourceNode.toNodeRef()
207 public static dispatch def toAction(Controller sourceAction, int order) {
208 val actionBuilder = new ActionBuilder().setOrder(order);
209 actionBuilder.action = new ControllerActionCaseBuilder().setControllerAction(new ControllerActionBuilder().build()).build();
210 return actionBuilder.build();
213 public static dispatch def toAction(Drop sourceAction, int order) {
214 val actionBuilder = new ActionBuilder().setOrder(order);
215 actionBuilder.action = new DropActionCaseBuilder().setDropAction(new DropActionBuilder().build()).build();
216 return actionBuilder.build();
219 public static dispatch def toAction(Flood sourceAction, int order) {
220 val actionBuilder = new ActionBuilder().setOrder(order);
221 actionBuilder.action = new FloodActionCaseBuilder().setFloodAction(new FloodActionBuilder().build).build();
222 return actionBuilder.build();
225 public static dispatch def toAction(FloodAll sourceAction, int order) {
226 val actionBuilder = new ActionBuilder().setOrder(order);
227 actionBuilder.action = new FloodAllActionCaseBuilder().setFloodAllAction(new FloodAllActionBuilder().build()).build();
228 return actionBuilder.build();
231 public static dispatch def toAction(HwPath sourceAction, int order) {
232 val actionBuilder = new ActionBuilder().setOrder(order);
233 actionBuilder.action = new HwPathActionCaseBuilder().setHwPathAction(new HwPathActionBuilder().build()).build();
234 return actionBuilder.build();
237 public static dispatch def toAction(Loopback sourceAction, int order) {
238 val actionBuilder = new ActionBuilder().setOrder(order);
239 actionBuilder.action = new LoopbackActionCaseBuilder().setLoopbackAction(new LoopbackActionBuilder().build()).build();
240 return actionBuilder.build();
243 public static dispatch def toAction(Output sourceAction, int order) {
244 val actionBuilder = new ActionBuilder().setOrder(order);
245 val it = new OutputActionBuilder();
246 outputNodeConnector = sourceAction.port.toUri;
247 actionBuilder.action = new OutputActionCaseBuilder().setOutputAction(it.build()).build();
248 return actionBuilder.build();
252 public static dispatch def toAction(PopVlan sourceAction, int order) {
253 val actionBuilder = new ActionBuilder().setOrder(order);
254 actionBuilder.action = new PopVlanActionCaseBuilder().build();
255 return actionBuilder.build();
258 public static dispatch def toAction(PushVlan sourceAction, int order) {
259 val actionBuilder = new ActionBuilder().setOrder(order);
260 val it = new PushVlanActionBuilder();
261 cfi = new VlanCfi(sourceAction.cfi);
262 vlanId = new VlanId(sourceAction.vlanId);
263 pcp = sourceAction.pcp;
264 tag = sourceAction.tag;
265 actionBuilder.action = new PushVlanActionCaseBuilder().setPushVlanAction(it.build()).build();
266 return actionBuilder.build();
269 public static dispatch def toAction(SetDlDst sourceAction, int order) {
270 val actionBuilder = new ActionBuilder().setOrder(order);
271 val it = new SetDlDstActionBuilder();
272 address = sourceAction.dlAddress.toMacAddress();
273 actionBuilder.action = new SetDlDstActionCaseBuilder().setSetDlDstAction(it.build()).build;
274 return actionBuilder.build();
277 public static dispatch def toAction(SetDlSrc sourceAction, int order) {
278 val actionBuilder = new ActionBuilder().setOrder(order);
279 val it = new SetDlSrcActionBuilder();
280 address = sourceAction.dlAddress.toMacAddress;
281 actionBuilder.action = new SetDlSrcActionCaseBuilder().setSetDlSrcAction(it.build()).build;
282 return actionBuilder.build();
285 public static dispatch def toAction(SetDlType sourceAction, int order) {
286 val actionBuilder = new ActionBuilder().setOrder(order);
287 val it = new SetDlTypeActionBuilder();
288 dlType = new EtherType(sourceAction.dlType as long);
289 actionBuilder.action = new SetDlTypeActionCaseBuilder().setSetDlTypeAction(it.build()).build();
290 return actionBuilder.build();
293 public static dispatch def toAction(SetNextHop sourceAction, int order) {
294 val actionBuilder = new ActionBuilder().setOrder(order);
295 val it = new SetNextHopActionBuilder();
296 val inetAddress = sourceAction.address;
297 address = inetAddress.toInetAddress;
298 actionBuilder.action = new SetNextHopActionCaseBuilder().setSetNextHopAction(it.build).build();
299 return actionBuilder.build();
302 public static dispatch def toAction(SetNwDst sourceAction, int order) {
303 val actionBuilder = new ActionBuilder().setOrder(order);
304 val it = new SetNwDstActionBuilder();
305 val inetAddress = sourceAction.address;
306 address = inetAddress.toInetAddress;
307 actionBuilder.action = new SetNwDstActionCaseBuilder().setSetNwDstAction(it.build()).build();
308 return actionBuilder.build();
311 public static dispatch def toAction(SetNwSrc sourceAction, int order) {
312 val actionBuilder = new ActionBuilder().setOrder(order);
313 val it = new SetNwSrcActionBuilder();
314 val inetAddress = sourceAction.address;
315 address = inetAddress.toInetAddress;
316 actionBuilder.action = new SetNwSrcActionCaseBuilder().setSetNwSrcAction(it.build()).build();
317 return actionBuilder.build();
320 public static dispatch def toAction(SetNwTos sourceAction, int order) {
321 val actionBuilder = new ActionBuilder().setOrder(order);
322 val it = new SetNwTosActionBuilder();
323 tos = sourceAction.nwTos;
324 actionBuilder.action = new SetNwTosActionCaseBuilder().setSetNwTosAction(it.build).build;
325 return actionBuilder.build();
328 public static dispatch def toAction(SetTpDst sourceAction, int order) {
329 val actionBuilder = new ActionBuilder().setOrder(order);
330 val it = new SetTpDstActionBuilder();
331 port = new PortNumber(sourceAction.port);
332 actionBuilder.action = new SetTpDstActionCaseBuilder().setSetTpDstAction(it.build()).build();
333 return actionBuilder.build();
336 public static dispatch def toAction(SetTpSrc sourceAction, int order) {
337 val actionBuilder = new ActionBuilder().setOrder(order);
338 val it = new SetTpSrcActionBuilder();
339 port = new PortNumber(sourceAction.port);
340 actionBuilder.action = new SetTpSrcActionCaseBuilder().setSetTpSrcAction(it.build()).build();
341 return actionBuilder.build();
344 public static dispatch def toAction(SetVlanCfi sourceAction, int order) {
345 val actionBuilder = new ActionBuilder().setOrder(order);
346 val it = new SetVlanCfiActionBuilder();
347 vlanCfi = new VlanCfi(sourceAction.cfi);
348 actionBuilder.action = new SetVlanCfiActionCaseBuilder().setSetVlanCfiAction(it.build()).build();
349 return actionBuilder.build();
352 public static dispatch def toAction(SetVlanId sourceAction, int order) {
353 val actionBuilder = new ActionBuilder().setOrder(order);
355 val it = new SetVlanIdActionBuilder();
356 vlanId = new VlanId(sourceAction.vlanId);
357 actionBuilder.action = new SetVlanIdActionCaseBuilder().setSetVlanIdAction(it.build()).build();
358 return actionBuilder.build();
361 public static dispatch def toAction(SetVlanPcp sourceAction, int order) {
362 val actionBuilder = new ActionBuilder().setOrder(order);
363 val it = new SetVlanPcpActionBuilder();
364 vlanPcp = new VlanPcp(sourceAction.pcp as short);
365 actionBuilder.action = new SetVlanPcpActionCaseBuilder().setSetVlanPcpAction(it.build).build;
366 return actionBuilder.build();
369 public static dispatch def toAction(SwPath sourceAction, int order) {
370 val actionBuilder = new ActionBuilder().setOrder(order);
371 actionBuilder.action = new SwPathActionCaseBuilder().setSwPathAction(new SwPathActionBuilder().build()).build();
372 return actionBuilder.build();
375 public static def dispatch Address toInetAddress(Inet4Address address) {
376 val it = new Ipv4Builder
377 ipv4Address = new Ipv4Prefix(InetAddresses.toAddrString(address))
381 public static def dispatch Address toInetAddress(Inet6Address address) {
382 val it = new Ipv6Builder
383 ipv6Address = new Ipv6Prefix(InetAddresses.toAddrString(address))
387 public static def Uri toUri(NodeConnector connector) {
388 return new NodeConnectorId(connector.ID as String);
391 public static def MacAddress toMacAddress(byte[] bytes) {
392 val sb = new StringBuilder(18);
393 for (byte b : bytes) {
396 sb.append(String.format("%02x", b));
398 return new MacAddress(sb.toString());
401 public static def toMDSalflow(Flow sourceFlow) {
402 if (sourceFlow == null)
403 throw new IllegalArgumentException();
404 val it = new FlowBuilder();
406 hardTimeout = sourceFlow.hardTimeout as int
407 idleTimeout = sourceFlow.idleTimeout as int
408 cookie = new FlowCookie(BigInteger.valueOf(sourceFlow.id))
409 priority = sourceFlow.priority as int
411 val sourceActions = sourceFlow.actions;
412 val targetActions = new ArrayList<Action>();
414 for (sourceAction : sourceActions) {
415 targetActions.add(sourceAction.toAction(action));
418 instructions = targetActions.toApplyInstruction();
419 match = sourceFlow.match.toMatch();