@Immutable FlowEntity
[genius.git] / mdsalutil / mdsalutil-api / src / main / java / org / opendaylight / genius / mdsalutil / MDSALUtil.java
index 71fb496ab7ea9665b4678e9a4cf040f8418151c5..ebbf828a0d86bb9319279fa5e8523677196b6e04 100644 (file)
@@ -87,8 +87,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.ni
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nx.action.reg.load.grouping.nx.reg.load.DstBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.TransmitPacketInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.TransmitPacketInputBuilder;
-import org.opendaylight.yangtools.concepts.Builder;
-import org.opendaylight.yangtools.yang.binding.ChildOf;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.InstanceIdentifierBuilder;
@@ -116,19 +114,22 @@ public class MDSALUtil {
             String flowName, int idleTimeOut, int hardTimeOut, BigInteger cookie,
             List<? extends MatchInfoBase> listMatchInfoBase, List<InstructionInfo> listInstructionInfo) {
 
-        FlowEntity flowEntity = new FlowEntity(dpnId);
-
-        flowEntity.setTableId(tableId);
-        flowEntity.setFlowId(flowId);
-        flowEntity.setPriority(priority);
-        flowEntity.setFlowName(flowName);
-        flowEntity.setIdleTimeOut(idleTimeOut);
-        flowEntity.setHardTimeOut(hardTimeOut);
-        flowEntity.setCookie(cookie);
-        flowEntity.setMatchInfoList(listMatchInfoBase);
-        flowEntity.setInstructionInfoList(listInstructionInfo);
-
-        return flowEntity;
+        FlowEntityBuilder builder = new FlowEntityBuilder()
+            .setDpnId(dpnId)
+            .setTableId(tableId)
+            .setFlowId(flowId)
+            .setPriority(priority)
+            .setFlowName(flowName)
+            .setIdleTimeOut(idleTimeOut)
+            .setHardTimeOut(hardTimeOut)
+            .setCookie(cookie);
+        if (listMatchInfoBase != null) {
+            builder.addAllMatchInfoList(listMatchInfoBase);
+        }
+        if (listInstructionInfo != null) {
+            builder.addAllInstructionInfoList(listInstructionInfo);
+        }
+        return builder.build();
     }
 
     // TODO: CHECK IF THIS IS USED
@@ -225,6 +226,23 @@ public class MDSALUtil {
                 .setIngress(ingress).setEgress(ingress).build();
     }
 
+    public static TransmitPacketInput getPacketOut(List<ActionInfo> actionInfos, byte[] payload, BigInteger dpnId,
+            NodeConnectorRef nodeConnRef) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public static TransmitPacketInput getPacketOut(List<Action> actions, byte[] payload, BigInteger dpnId) {
+        NodeConnectorRef ncRef = getDefaultNodeConnRef(dpnId);
+        return new TransmitPacketInputBuilder()
+                .setAction(actions)
+                .setPayload(payload)
+                .setNode(
+                        new NodeRef(InstanceIdentifier.builder(Nodes.class)
+                                .child(Node.class, new NodeKey(new NodeId("openflow:" + dpnId))).toInstance()))
+                .setIngress(ncRef).setEgress(ncRef).build();
+    }
+
     public static Action retrieveSetTunnelIdAction(BigInteger tunnelId, int actionKey) {
         return new ActionBuilder().setAction(
                 new SetFieldCaseBuilder().setSetField(new SetFieldBuilder().setTunnel(new TunnelBuilder()
@@ -333,38 +351,23 @@ public class MDSALUtil {
         return getNodeConnRef(NODE_PREFIX + SEPARATOR + dpId, port);
     }
 
-    public static NodeConnectorRef getNodeConnRef(String sNodeId, String port) {
-        String sNodeConnectorKey;
-        StringBuilder sbTmp;
-        NodeId nodeId;
-        NodeKey nodeKey;
-        NodeConnectorId nodeConnectorId;
-        NodeConnectorKey nodeConnectorKey;
-        InstanceIdentifierBuilder<Nodes> nodesInstanceIdentifierBuilder;
-        InstanceIdentifierBuilder<Node> nodeInstanceIdentifierBuilder;
-        InstanceIdentifierBuilder<NodeConnector> nodeConnectorInstanceIdentifierBuilder;
-        InstanceIdentifier<NodeConnector> nodeConnectorInstanceIdentifier;
-        NodeConnectorRef nodeConnectorRef;
-
-        sbTmp = new StringBuilder();
-
-        sbTmp.append(sNodeId);
-        sbTmp.append(SEPARATOR);
-        sbTmp.append(port);
-
-        sNodeConnectorKey = sbTmp.toString();
-        nodeConnectorId = new NodeConnectorId(sNodeConnectorKey);
-        nodeConnectorKey = new NodeConnectorKey(nodeConnectorId);
-
-        nodeId = new NodeId(sNodeId);
-        nodeKey = new NodeKey(nodeId);
-
-        nodesInstanceIdentifierBuilder = InstanceIdentifier.builder(Nodes.class);
-        nodeInstanceIdentifierBuilder = nodesInstanceIdentifierBuilder.child(Node.class, nodeKey);
-        nodeConnectorInstanceIdentifierBuilder = nodeInstanceIdentifierBuilder.child(
-                NodeConnector.class, nodeConnectorKey);
-        nodeConnectorInstanceIdentifier = nodeConnectorInstanceIdentifierBuilder.toInstance();
-        nodeConnectorRef = new NodeConnectorRef(nodeConnectorInstanceIdentifier);
+    public static NodeConnectorRef getNodeConnRef(String nodeId, String port) {
+        StringBuilder sb = new StringBuilder();
+        sb.append(nodeId);
+        sb.append(SEPARATOR);
+        sb.append(port);
+        String nodeConnectorKeyAsString = sb.toString();
+        NodeConnectorId nodeConnectorId = new NodeConnectorId(nodeConnectorKeyAsString);
+        NodeConnectorKey nodeConnectorKey = new NodeConnectorKey(nodeConnectorId);
+
+        NodeKey nodeKey = new NodeKey(new NodeId(nodeId));
+        InstanceIdentifierBuilder<Node> nodeInstanceIdentifierBuilder
+            = InstanceIdentifier.builder(Nodes.class).child(Node.class, nodeKey);
+        InstanceIdentifierBuilder<NodeConnector> nodeConnectorInstanceIdentifierBuilder
+            = nodeInstanceIdentifierBuilder.child(NodeConnector.class, nodeConnectorKey);
+        InstanceIdentifier<NodeConnector> nodeConnectorInstanceIdentifier
+            = nodeConnectorInstanceIdentifierBuilder.toInstance();
+        NodeConnectorRef nodeConnectorRef = new NodeConnectorRef(nodeConnectorInstanceIdentifier);
         return nodeConnectorRef;
     }
 
@@ -381,18 +384,26 @@ public class MDSALUtil {
         return getOfPortNumberFromPortName(nodeConnectorId.getValue());
     }
 
+    public static long getOfPortNumberFromPortName(String mdsalPortName) {
+        String portNumber = mdsalPortName.substring(mdsalPortName.lastIndexOf(":") + 1);
+        return Long.parseLong(portNumber);
+    }
+
     public static long getDpnIdFromPortName(NodeConnectorId nodeConnectorId) {
+        if (nodeConnectorId == null || nodeConnectorId.getValue() == null) {
+            return -1;
+        }
         try {
             String ofPortName = nodeConnectorId.getValue();
             return Long.parseLong(ofPortName.substring(ofPortName.indexOf(":") + 1,
                     ofPortName.lastIndexOf(":")));
-        } catch (Exception e) {
+        } catch (NumberFormatException | IndexOutOfBoundsException e) {
             LOG.error("NodeConnectorId not of expected format openflow:dpnid:portnum");
             return -1;
         }
     }
 
-    public static BigInteger getDpnId(String datapathId){
+    public static BigInteger getDpnId(String datapathId) {
         if (datapathId != null) {
             String dpIdStr = datapathId.replace(":", "");
             BigInteger dpnId =  new BigInteger(dpIdStr, 16);
@@ -401,17 +412,6 @@ public class MDSALUtil {
         return null;
     }
 
-    public static long getOfPortNumberFromPortName(String sMdsalPortName) {
-        String portNumber = sMdsalPortName.substring(sMdsalPortName.lastIndexOf(":") + 1);
-        return Long.parseLong(portNumber);
-    }
-
-    public static TransmitPacketInput getPacketOut(List<ActionInfo> actionInfos, byte[] payload, BigInteger dpnId,
-                    NodeConnectorRef nodeConnRef) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
     public static Instruction buildAndGetPopVlanActionInstruction(int actionKey, int instructionKey) {
         Action popVlanAction = new ActionBuilder().setAction(
                 new PopVlanActionCaseBuilder().setPopVlanAction(new PopVlanActionBuilder().build()).build())
@@ -444,16 +444,6 @@ public class MDSALUtil {
         return buildApplyActionsInstruction(actions, 0);
     }
 
-    public static Instruction buildWriteActionsInstruction(List<Action> actions) {
-        WriteActions writeActions = new WriteActionsBuilder().setAction(actions).build();
-        WriteActionsCase writeActionsCase = new WriteActionsCaseBuilder().setWriteActions(writeActions).build();
-        InstructionBuilder instructionBuilder = new InstructionBuilder();
-
-        instructionBuilder.setInstruction(writeActionsCase);
-        instructionBuilder.setKey(new InstructionKey(0));
-        return instructionBuilder.build();
-    }
-
     public static Instruction buildApplyActionsInstruction(List<Action> listAction, int instructionKey) {
         ApplyActions applyActions = new ApplyActionsBuilder().setAction(listAction).build();
         ApplyActionsCase applyActionsCase = new ApplyActionsCaseBuilder().setApplyActions(applyActions).build();
@@ -464,6 +454,16 @@ public class MDSALUtil {
         return instructionBuilder.build();
     }
 
+    public static Instruction buildWriteActionsInstruction(List<Action> actions) {
+        WriteActions writeActions = new WriteActionsBuilder().setAction(actions).build();
+        WriteActionsCase writeActionsCase = new WriteActionsCaseBuilder().setWriteActions(writeActions).build();
+        InstructionBuilder instructionBuilder = new InstructionBuilder();
+
+        instructionBuilder.setInstruction(writeActionsCase);
+        instructionBuilder.setKey(new InstructionKey(0));
+        return instructionBuilder.build();
+    }
+
     public static List<Instruction> buildInstructionsDrop() {
         return buildInstructionsDrop(0);
     }
@@ -541,7 +541,8 @@ public class MDSALUtil {
      * Deprecated write.
      *
      * @deprecated Use
-     *             {@link SingleTransactionDataBroker#syncWrite(DataBroker, LogicalDatastoreType, InstanceIdentifier, DataObject)}
+     *             {@link SingleTransactionDataBroker#syncWrite(
+     *                     DataBroker, LogicalDatastoreType, InstanceIdentifier, DataObject)}
      */
     @Deprecated
     public static <T extends DataObject> void syncWrite(DataBroker broker,
@@ -559,7 +560,8 @@ public class MDSALUtil {
      * Deprecated update.
      *
      * @deprecated Use
-     *             {@link SingleTransactionDataBroker#syncUpdate(DataBroker, LogicalDatastoreType, InstanceIdentifier, DataObject)}
+     *             {@link SingleTransactionDataBroker#syncUpdate(
+     *                          DataBroker, LogicalDatastoreType, InstanceIdentifier, DataObject)}
      */
     @Deprecated
     public static <T extends DataObject> void syncUpdate(DataBroker broker,
@@ -626,17 +628,6 @@ public class MDSALUtil {
                 NodeConnector::getId).orNull();
     }
 
-    public static TransmitPacketInput getPacketOut(List<Action> actions, byte[] payload, BigInteger dpnId) {
-        NodeConnectorRef ncRef = getDefaultNodeConnRef(dpnId);
-        return new TransmitPacketInputBuilder()
-                .setAction(actions)
-                .setPayload(payload)
-                .setNode(
-                        new NodeRef(InstanceIdentifier.builder(Nodes.class)
-                                .child(Node.class, new NodeKey(new NodeId("openflow:" + dpnId))).toInstance()))
-                .setIngress(ncRef).setEgress(ncRef).build();
-    }
-
     public static Action createNxOfInPortAction(final int actionKey, final int inPortVal) {
         NxRegLoad regLoad = new NxRegLoadBuilder()
                 .setDst(new DstBuilder().setDstChoice(new DstNxOfInPortCaseBuilder().setOfInPort(Boolean.TRUE).build())