X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fcompatibility%2Fsal-compatibility%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Fcompatibility%2FMDFlowMapping.xtend;h=75cbf49ee50fa2b529714ae4807f6426ac4f029d;hp=b43e8af6612c97d516373e49f5565ab51fc61b84;hb=ec82a960337ba51c2e896863a668dcf8fbcfcb6b;hpb=4f76ea30ad49331ca38ce63925b3fabf8e769731 diff --git a/opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/MDFlowMapping.xtend b/opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/MDFlowMapping.xtend index b43e8af661..75cbf49ee5 100644 --- a/opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/MDFlowMapping.xtend +++ b/opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/MDFlowMapping.xtend @@ -1,3 +1,10 @@ +/* + * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ package org.opendaylight.controller.sal.compatibility; import com.google.common.net.InetAddresses @@ -5,7 +12,6 @@ import java.math.BigInteger import java.net.Inet4Address import java.net.Inet6Address import java.util.ArrayList -import java.util.List import org.opendaylight.controller.sal.action.Controller import org.opendaylight.controller.sal.action.Drop import org.opendaylight.controller.sal.action.Flood @@ -40,35 +46,12 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.AddF import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.FlowAddedBuilder import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.RemoveFlowInputBuilder import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.UpdateFlowInputBuilder -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.GetFlowStatisticsInputBuilder -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.VlanCfi -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.action.action.ControllerActionBuilder -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.action.action.DropActionBuilder -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.action.action.FloodActionBuilder -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.action.action.FloodAllActionBuilder -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.action.action.HwPathActionBuilder -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.action.action.LoopbackActionBuilder -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.action.action.OutputActionBuilder -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.action.action.PopVlanActionBuilder -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.action.action.PushVlanActionBuilder -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.action.action.SetDlDstActionBuilder -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.action.action.SetDlSrcActionBuilder -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.action.action.SetDlTypeActionBuilder -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.action.action.SetNextHopActionBuilder -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.action.action.SetNwDstActionBuilder -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.action.action.SetNwSrcActionBuilder -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.action.action.SetNwTosActionBuilder -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.action.action.SetTpDstActionBuilder -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.action.action.SetTpSrcActionBuilder -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.action.action.SetVlanCfiActionBuilder -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.action.action.SetVlanIdActionBuilder -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.action.action.SetVlanPcpActionBuilder -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.action.action.SwPathActionBuilder -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.address.Address -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.address.address.Ipv4Builder -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.address.address.Ipv6Builder -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.action.list.Action -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.action.list.ActionBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.VlanCfi +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.address.Address +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.address.address.Ipv4Builder +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.address.address.Ipv6Builder +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action; +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.EtherType import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanPcp @@ -80,9 +63,57 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.flow import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Instructions import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.InstructionsBuilder import java.util.Collections -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.ApplyActionsBuilder import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.InstructionBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.controller.action._case.ControllerActionBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.drop.action._case.DropActionBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.flood.action._case.FloodActionBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.flood.all.action._case.FloodAllActionBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.hw.path.action._case.HwPathActionBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.loopback.action._case.LoopbackActionBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.output.action._case.OutputActionBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.push.vlan.action._case.PushVlanActionBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.dl.dst.action._case.SetDlDstActionBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.dl.src.action._case.SetDlSrcActionBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.dl.type.action._case.SetDlTypeActionBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.next.hop.action._case.SetNextHopActionBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.nw.dst.action._case.SetNwDstActionBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.nw.src.action._case.SetNwSrcActionBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.nw.tos.action._case.SetNwTosActionBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.tp.dst.action._case.SetTpDstActionBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.tp.src.action._case.SetTpSrcActionBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.vlan.cfi.action._case.SetVlanCfiActionBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.vlan.id.action._case.SetVlanIdActionBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.vlan.pcp.action._case.SetVlanPcpActionBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.sw.path.action._case.SwPathActionBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetTpSrcActionCaseBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetTpDstActionCaseBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwTosActionCaseBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwSrcActionCaseBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwDstActionCaseBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNextHopActionCaseBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetDlTypeActionCaseBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetDlDstActionCaseBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.ControllerActionCaseBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DropActionCaseBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.FloodActionCaseBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.FloodAllActionCaseBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.HwPathActionCaseBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.LoopbackActionCaseBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopVlanActionCaseBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.OutputActionCaseBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushVlanActionCaseBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetDlSrcActionCaseBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetVlanCfiActionCaseBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetVlanIdActionCaseBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetVlanPcpActionCaseBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SwPathActionCaseBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.apply.actions._case.ApplyActionsBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.ApplyActionsCaseBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowId +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowCookie public class MDFlowMapping { @@ -97,44 +128,66 @@ public class MDFlowMapping { hardTimeout = sourceFlow.hardTimeout as int idleTimeout = sourceFlow.idleTimeout as int - cookie = BigInteger.valueOf(sourceFlow.id) + cookie = new FlowCookie(BigInteger.valueOf(sourceFlow.id)) priority = sourceFlow.priority as int val sourceActions = sourceFlow.actions; val targetActions = new ArrayList(); + var int action = 0; for (sourceAction : sourceActions) { - targetActions.add(sourceAction.toAction()); + targetActions.add(sourceAction.toAction(action)); + action = action + 1; } instructions = targetActions.toApplyInstruction(); match = sourceFlow.match.toMatch(); + tableId = new Integer(0).shortValue return it.build(); } + public static def toMDFlow(Flow sourceFlow, String flowId) { + if (sourceFlow == null) + throw new IllegalArgumentException(); + val it = new FlowBuilder(); + hardTimeout = sourceFlow.hardTimeout as int + idleTimeout = sourceFlow.idleTimeout as int + cookie = new FlowCookie(BigInteger.valueOf(sourceFlow.id)) + priority = sourceFlow.priority as int + id = new FlowId(flowId) + + val sourceActions = sourceFlow.actions; + val targetActions = new ArrayList(); + var int action = 0; + for (sourceAction : sourceActions) { + targetActions.add(sourceAction.toAction(action)); + action = action+ 1; + } + instructions = targetActions.toApplyInstruction(); + match = sourceFlow.match.toMatch(); + tableId = new Integer(0).shortValue + return it.build(); + } + public static def Instructions toApplyInstruction(ArrayList actions) { val it = new InstructionsBuilder; val applyActions = new InstructionBuilder; - applyActions.instruction = new ApplyActionsBuilder().setAction(actions).build() + applyActions.instruction = new ApplyActionsCaseBuilder().setApplyActions(new ApplyActionsBuilder().setAction(actions).build()).build() + applyActions.setOrder(new Integer(0)) instruction = Collections.singletonList(applyActions.build) return it.build; } - public static def flowStatisticsInput(Node sourceNode, Flow sourceFlow) { - val source = flowAdded(sourceFlow); - val it = new GetFlowStatisticsInputBuilder(source as org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.Flow); - node = sourceNode.toNodeRef(); - return it.build(); - } - public static def removeFlowInput(Node sourceNode, Flow sourceFlow) { val source = flowAdded(sourceFlow); val it = new RemoveFlowInputBuilder(source as org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.Flow); + node = sourceNode.toNodeRef() return it.build(); } public static def addFlowInput(Node sourceNode, Flow sourceFlow) { val source = flowAdded(sourceFlow); val it = new AddFlowInputBuilder(source as org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.Flow); + it.setNode(sourceNode.toNodeRef) return it.build(); } @@ -151,171 +204,171 @@ public class MDFlowMapping { return it.build(); } - public static dispatch def toAction(Controller sourceAction) { - val actionBuilder = new ActionBuilder(); - actionBuilder.action = new ControllerActionBuilder().build(); + public static dispatch def toAction(Controller sourceAction, int order) { + val actionBuilder = new ActionBuilder().setOrder(order); + actionBuilder.action = new ControllerActionCaseBuilder().setControllerAction(new ControllerActionBuilder().build()).build(); return actionBuilder.build(); } - public static dispatch def toAction(Drop sourceAction) { - val actionBuilder = new ActionBuilder(); - actionBuilder.action = new DropActionBuilder().build(); + public static dispatch def toAction(Drop sourceAction, int order) { + val actionBuilder = new ActionBuilder().setOrder(order); + actionBuilder.action = new DropActionCaseBuilder().setDropAction(new DropActionBuilder().build()).build(); return actionBuilder.build(); } - public static dispatch def toAction(Flood sourceAction) { - val actionBuilder = new ActionBuilder(); - actionBuilder.action = new FloodActionBuilder().build(); + public static dispatch def toAction(Flood sourceAction, int order) { + val actionBuilder = new ActionBuilder().setOrder(order); + actionBuilder.action = new FloodActionCaseBuilder().setFloodAction(new FloodActionBuilder().build).build(); return actionBuilder.build(); } - public static dispatch def toAction(FloodAll sourceAction) { - val actionBuilder = new ActionBuilder(); - actionBuilder.action = new FloodAllActionBuilder().build(); + public static dispatch def toAction(FloodAll sourceAction, int order) { + val actionBuilder = new ActionBuilder().setOrder(order); + actionBuilder.action = new FloodAllActionCaseBuilder().setFloodAllAction(new FloodAllActionBuilder().build()).build(); return actionBuilder.build(); } - public static dispatch def toAction(HwPath sourceAction) { - val actionBuilder = new ActionBuilder(); - actionBuilder.action = new HwPathActionBuilder().build(); + public static dispatch def toAction(HwPath sourceAction, int order) { + val actionBuilder = new ActionBuilder().setOrder(order); + actionBuilder.action = new HwPathActionCaseBuilder().setHwPathAction(new HwPathActionBuilder().build()).build(); return actionBuilder.build(); } - public static dispatch def toAction(Loopback sourceAction) { - val actionBuilder = new ActionBuilder(); - actionBuilder.action = new LoopbackActionBuilder().build(); + public static dispatch def toAction(Loopback sourceAction, int order) { + val actionBuilder = new ActionBuilder().setOrder(order); + actionBuilder.action = new LoopbackActionCaseBuilder().setLoopbackAction(new LoopbackActionBuilder().build()).build(); return actionBuilder.build(); } - public static dispatch def toAction(Output sourceAction) { - val actionBuilder = new ActionBuilder(); + public static dispatch def toAction(Output sourceAction, int order) { + val actionBuilder = new ActionBuilder().setOrder(order); val it = new OutputActionBuilder(); - outputNodeConnector = sourceAction.port.toUriList; - actionBuilder.action = it.build(); + outputNodeConnector = sourceAction.port.toUri; + actionBuilder.action = new OutputActionCaseBuilder().setOutputAction(it.build()).build(); return actionBuilder.build(); } - public static dispatch def toAction(PopVlan sourceAction) { - val actionBuilder = new ActionBuilder(); - actionBuilder.action = new PopVlanActionBuilder().build(); + public static dispatch def toAction(PopVlan sourceAction, int order) { + val actionBuilder = new ActionBuilder().setOrder(order); + actionBuilder.action = new PopVlanActionCaseBuilder().build(); return actionBuilder.build(); } - public static dispatch def toAction(PushVlan sourceAction) { - val actionBuilder = new ActionBuilder(); + public static dispatch def toAction(PushVlan sourceAction, int order) { + val actionBuilder = new ActionBuilder().setOrder(order); val it = new PushVlanActionBuilder(); cfi = new VlanCfi(sourceAction.cfi); vlanId = new VlanId(sourceAction.vlanId); pcp = sourceAction.pcp; tag = sourceAction.tag; - actionBuilder.action = it.build(); + actionBuilder.action = new PushVlanActionCaseBuilder().setPushVlanAction(it.build()).build(); return actionBuilder.build(); } - public static dispatch def toAction(SetDlDst sourceAction) { - val actionBuilder = new ActionBuilder(); + public static dispatch def toAction(SetDlDst sourceAction, int order) { + val actionBuilder = new ActionBuilder().setOrder(order); val it = new SetDlDstActionBuilder(); address = sourceAction.dlAddress.toMacAddress(); - actionBuilder.action = it.build(); + actionBuilder.action = new SetDlDstActionCaseBuilder().setSetDlDstAction(it.build()).build; return actionBuilder.build(); } - public static dispatch def toAction(SetDlSrc sourceAction) { - val actionBuilder = new ActionBuilder(); + public static dispatch def toAction(SetDlSrc sourceAction, int order) { + val actionBuilder = new ActionBuilder().setOrder(order); val it = new SetDlSrcActionBuilder(); address = sourceAction.dlAddress.toMacAddress; - actionBuilder.action = it.build(); + actionBuilder.action = new SetDlSrcActionCaseBuilder().setSetDlSrcAction(it.build()).build; return actionBuilder.build(); } - public static dispatch def toAction(SetDlType sourceAction) { - val actionBuilder = new ActionBuilder(); + public static dispatch def toAction(SetDlType sourceAction, int order) { + val actionBuilder = new ActionBuilder().setOrder(order); val it = new SetDlTypeActionBuilder(); dlType = new EtherType(sourceAction.dlType as long); - actionBuilder.action = it.build(); + actionBuilder.action = new SetDlTypeActionCaseBuilder().setSetDlTypeAction(it.build()).build(); return actionBuilder.build(); } - public static dispatch def toAction(SetNextHop sourceAction) { - val actionBuilder = new ActionBuilder(); + public static dispatch def toAction(SetNextHop sourceAction, int order) { + val actionBuilder = new ActionBuilder().setOrder(order); val it = new SetNextHopActionBuilder(); val inetAddress = sourceAction.address; address = inetAddress.toInetAddress; - actionBuilder.action = it.build(); + actionBuilder.action = new SetNextHopActionCaseBuilder().setSetNextHopAction(it.build).build(); return actionBuilder.build(); } - public static dispatch def toAction(SetNwDst sourceAction) { - val actionBuilder = new ActionBuilder(); + public static dispatch def toAction(SetNwDst sourceAction, int order) { + val actionBuilder = new ActionBuilder().setOrder(order); val it = new SetNwDstActionBuilder(); val inetAddress = sourceAction.address; address = inetAddress.toInetAddress; - actionBuilder.action = it.build(); + actionBuilder.action = new SetNwDstActionCaseBuilder().setSetNwDstAction(it.build()).build(); return actionBuilder.build(); } - public static dispatch def toAction(SetNwSrc sourceAction) { - val actionBuilder = new ActionBuilder(); + public static dispatch def toAction(SetNwSrc sourceAction, int order) { + val actionBuilder = new ActionBuilder().setOrder(order); val it = new SetNwSrcActionBuilder(); val inetAddress = sourceAction.address; address = inetAddress.toInetAddress; - actionBuilder.action = it.build(); + actionBuilder.action = new SetNwSrcActionCaseBuilder().setSetNwSrcAction(it.build()).build(); return actionBuilder.build(); } - public static dispatch def toAction(SetNwTos sourceAction) { - val actionBuilder = new ActionBuilder(); + public static dispatch def toAction(SetNwTos sourceAction, int order) { + val actionBuilder = new ActionBuilder().setOrder(order); val it = new SetNwTosActionBuilder(); tos = sourceAction.nwTos; - actionBuilder.action = it.build(); + actionBuilder.action = new SetNwTosActionCaseBuilder().setSetNwTosAction(it.build).build; return actionBuilder.build(); } - public static dispatch def toAction(SetTpDst sourceAction) { - val actionBuilder = new ActionBuilder(); + public static dispatch def toAction(SetTpDst sourceAction, int order) { + val actionBuilder = new ActionBuilder().setOrder(order); val it = new SetTpDstActionBuilder(); port = new PortNumber(sourceAction.port); - actionBuilder.action = it.build(); + actionBuilder.action = new SetTpDstActionCaseBuilder().setSetTpDstAction(it.build()).build(); return actionBuilder.build(); } - public static dispatch def toAction(SetTpSrc sourceAction) { - val actionBuilder = new ActionBuilder(); + public static dispatch def toAction(SetTpSrc sourceAction, int order) { + val actionBuilder = new ActionBuilder().setOrder(order); val it = new SetTpSrcActionBuilder(); port = new PortNumber(sourceAction.port); - actionBuilder.action = it.build(); + actionBuilder.action = new SetTpSrcActionCaseBuilder().setSetTpSrcAction(it.build()).build(); return actionBuilder.build(); } - public static dispatch def toAction(SetVlanCfi sourceAction) { - val actionBuilder = new ActionBuilder(); + public static dispatch def toAction(SetVlanCfi sourceAction, int order) { + val actionBuilder = new ActionBuilder().setOrder(order); val it = new SetVlanCfiActionBuilder(); vlanCfi = new VlanCfi(sourceAction.cfi); - actionBuilder.action = it.build(); + actionBuilder.action = new SetVlanCfiActionCaseBuilder().setSetVlanCfiAction(it.build()).build(); return actionBuilder.build(); } - public static dispatch def toAction(SetVlanId sourceAction) { - val actionBuilder = new ActionBuilder(); + public static dispatch def toAction(SetVlanId sourceAction, int order) { + val actionBuilder = new ActionBuilder().setOrder(order); val it = new SetVlanIdActionBuilder(); vlanId = new VlanId(sourceAction.vlanId); - actionBuilder.action = it.build(); + actionBuilder.action = new SetVlanIdActionCaseBuilder().setSetVlanIdAction(it.build()).build(); return actionBuilder.build(); } - public static dispatch def toAction(SetVlanPcp sourceAction) { - val actionBuilder = new ActionBuilder(); + public static dispatch def toAction(SetVlanPcp sourceAction, int order) { + val actionBuilder = new ActionBuilder().setOrder(order); val it = new SetVlanPcpActionBuilder(); vlanPcp = new VlanPcp(sourceAction.pcp as short); - actionBuilder.action = it.build(); + actionBuilder.action = new SetVlanPcpActionCaseBuilder().setSetVlanPcpAction(it.build).build; return actionBuilder.build(); } - public static dispatch def toAction(SwPath sourceAction) { - val actionBuilder = new ActionBuilder(); - actionBuilder.action = new SwPathActionBuilder().build(); + public static dispatch def toAction(SwPath sourceAction, int order) { + val actionBuilder = new ActionBuilder().setOrder(order); + actionBuilder.action = new SwPathActionCaseBuilder().setSwPathAction(new SwPathActionBuilder().build()).build(); return actionBuilder.build(); } @@ -331,8 +384,8 @@ public class MDFlowMapping { return it.build() } - public static def List toUriList(NodeConnector connector) { - throw new UnsupportedOperationException("TODO: auto-generated method stub") + public static def Uri toUri(NodeConnector connector) { + return new NodeConnectorId(connector.ID as String); } public static def MacAddress toMacAddress(byte[] bytes) { @@ -344,4 +397,27 @@ public class MDFlowMapping { } return new MacAddress(sb.toString()); } + + public static def toMDSalflow(Flow sourceFlow) { + if (sourceFlow == null) + throw new IllegalArgumentException(); + val it = new FlowBuilder(); + + hardTimeout = sourceFlow.hardTimeout as int + idleTimeout = sourceFlow.idleTimeout as int + cookie = new FlowCookie(BigInteger.valueOf(sourceFlow.id)) + priority = sourceFlow.priority as int + + val sourceActions = sourceFlow.actions; + val targetActions = new ArrayList(); + var int action = 0; + for (sourceAction : sourceActions) { + targetActions.add(sourceAction.toAction(action)); + action = action + 1; + } + instructions = targetActions.toApplyInstruction(); + match = sourceFlow.match.toMatch(); + return it.build(); + } + }