Migrate ActionType.output to ActionOutput 82/48782/7
authorStephen Kitt <skitt@redhat.com>
Tue, 29 Nov 2016 12:35:36 +0000 (13:35 +0100)
committerStephen Kitt <skitt@redhat.com>
Mon, 5 Dec 2016 10:04:53 +0000 (11:04 +0100)
Change-Id: Ib4a469c32a5206a3cc06cb4c0895d9e57e8906ac
Signed-off-by: Stephen Kitt <skitt@redhat.com>
alivenessmonitor/alivenessmonitor-impl/src/main/java/org/opendaylight/genius/alivenessmonitor/internal/AlivenessProtocolHandlerLLDP.java
interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/IfmUtil.java
mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/mdsalutil/ActionType.java
mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/mdsalutil/actions/ActionOutput.java [new file with mode: 0644]
mdsalutil/mdsalutil-impl/src/test/java/org/opendaylight/genius/test/MdSalUtilTest.java

index c0387f6590f8d3245ab2270f1343e0699e367060..361efdf657844b9edb8edba028ec98ecdd87a946 100644 (file)
@@ -28,6 +28,7 @@ import org.opendaylight.genius.interfacemanager.globals.IfmConstants;
 import org.opendaylight.genius.mdsalutil.ActionInfo;
 import org.opendaylight.genius.mdsalutil.ActionType;
 import org.opendaylight.genius.mdsalutil.MDSALUtil;
+import org.opendaylight.genius.mdsalutil.actions.ActionOutput;
 import org.opendaylight.genius.mdsalutil.packet.Ethernet;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana._if.type.rev140508.Tunnel;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.InterfaceType;
@@ -200,7 +201,7 @@ public class AlivenessProtocolHandlerLLDP extends AbstractAlivenessProtocolHandl
             actionInfos.add(new ActionInfo(ActionType.set_field_tunnel_id, new BigInteger[] {
                     BigInteger.valueOf(0)}));
         }
-        actionInfos.add(new ActionInfo(ActionType.output, new String[] { Long.toString(portNum) }));
+        actionInfos.add(new ActionOutput(portNum));
         return actionInfos;
     }
 
index 883f280a4724d06525d55b23dad7d241a8368f50..5fee1ccb2fe8bf38074a82bed7ccde7f7b5c31ce 100755 (executable)
@@ -30,6 +30,7 @@ import org.opendaylight.genius.mdsalutil.ActionInfo;
 import org.opendaylight.genius.mdsalutil.MDSALUtil;
 import org.opendaylight.genius.mdsalutil.MetaDataUtil;
 import org.opendaylight.genius.mdsalutil.NwConstants;
+import org.opendaylight.genius.mdsalutil.actions.ActionOutput;
 import org.opendaylight.genius.mdsalutil.actions.ActionRegLoad;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana._if.type.rev140508.L2vlan;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana._if.type.rev140508.Tunnel;
@@ -309,7 +310,7 @@ public class IfmUtil {
                         result.add(new ActionInfo(ActionType.set_field_vlan_vid,
                                 new String[]{Long.toString(vlanVid)}, actionKeyStart++));
                     }
-                    result.add(new ActionInfo(ActionType.output, new String[]{portNo}, actionKeyStart++));
+                    result.add(new ActionOutput(actionKeyStart++, Long.parseLong(portNo)));
                 }else{
                     long regValue = MetaDataUtil.getReg6ValueForLPortDispatcher(ifIndex, NwConstants.DEFAULT_SERVICE_INDEX);
                     result.add(new ActionRegLoad(actionKeyStart++, NxmNxReg6.class, IfmConstants.REG6_START_INDEX,
@@ -340,7 +341,7 @@ public class IfmUtil {
                     result.add(new ActionInfo(ActionType.set_tunnel_src_ip, new BigInteger[]{sourceIp},
                             actionKeyStart++));
                 }
-                result.add(new ActionInfo(ActionType.output, new String[]{portNo}, actionKeyStart++));
+                result.add(new ActionOutput(actionKeyStart++, Long.parseLong(portNo)));
                 break;
 
             default:
index 60fa4bc077542d9f93ae3287a33e84b30d2bc21c..909fa9d93a6f251391e03d928c41230ed16802bf 100644 (file)
@@ -13,6 +13,7 @@ import java.util.ArrayList;
 import java.util.List;
 import org.opendaylight.genius.mdsalutil.NwConstants.LearnFlowModsType;
 import org.opendaylight.genius.mdsalutil.actions.ActionGroup;
+import org.opendaylight.genius.mdsalutil.actions.ActionOutput;
 import org.opendaylight.genius.mdsalutil.actions.ActionRegLoad;
 import org.opendaylight.genius.mdsalutil.actions.ActionRegMove;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix;
@@ -118,22 +119,16 @@ public enum ActionType {
         }
     },
 
+    @Deprecated
     output {
         @Override
         public Action buildAction(int newActionKey, ActionInfo actionInfo) {
-            String[] actionValues = actionInfo.getActionValues();
-            String port = actionValues[0];
-            int maxLength = 0;
-
-            if (actionValues.length == 2) {
-                maxLength = Integer.valueOf(actionValues[1]);
+            if (actionInfo instanceof ActionOutput) {
+                return ((ActionOutput) actionInfo).buildAction(newActionKey);
+            } else {
+                // TODO Migrate all users to ActionOutput
+                return new ActionOutput(actionInfo.getActionValues()).buildAction(newActionKey);
             }
-
-            return new ActionBuilder().setAction(
-                    new OutputActionCaseBuilder().setOutputAction(
-                            new OutputActionBuilder().setMaxLength(maxLength)
-                                            .setOutputNodeConnector(new Uri(port)).build()).build())
-                    .setKey(new ActionKey(newActionKey)).build();
         }
     },
 
diff --git a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/mdsalutil/actions/ActionOutput.java b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/mdsalutil/actions/ActionOutput.java
new file mode 100644 (file)
index 0000000..c450453
--- /dev/null
@@ -0,0 +1,61 @@
+/*
+ * Copyright © 2016 Red Hat, Inc. and others.
+ *
+ * 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.genius.mdsalutil.actions;
+
+import org.opendaylight.genius.mdsalutil.ActionInfo;
+import org.opendaylight.genius.mdsalutil.ActionType;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri;
+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.output.action._case.OutputActionBuilder;
+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.action.types.rev131112.action.list.ActionKey;
+
+/**
+ * Output action.
+ */
+public class ActionOutput extends ActionInfo {
+    private final long portNum;
+    private final int maxLength;
+
+    public ActionOutput(long portNum) {
+        super(ActionType.output, new String[] { Long.toString(portNum) });
+        this.portNum = portNum;
+        this.maxLength = 0;
+    }
+
+    public ActionOutput(long portNum, int maxLength) {
+        super(ActionType.output, new String[] { Long.toString(portNum), Integer.toString(maxLength) });
+        this.portNum = portNum;
+        this.maxLength = maxLength;
+    }
+
+    public ActionOutput(int actionKey, long portNum) {
+        super(ActionType.output, new String[] { Long.toString(portNum) }, actionKey);
+        this.portNum = portNum;
+        this.maxLength = 0;
+    }
+
+    @Deprecated
+    public ActionOutput(String[] actionValues) {
+        this(Long.parseLong(actionValues[0]), actionValues.length == 2 ? Integer.parseInt(actionValues[1]) : 0);
+    }
+
+    @Override
+    public Action buildAction() {
+        return buildAction(getActionKey());
+    }
+
+    public Action buildAction(int newActionKey) {
+        return new ActionBuilder().setAction(
+                new OutputActionCaseBuilder().setOutputAction(
+                        new OutputActionBuilder().setMaxLength(maxLength)
+                                .setOutputNodeConnector(new Uri(Long.toString(portNum))).build()).build())
+                .setKey(new ActionKey(newActionKey)).build();
+    }
+}
index 5458c3e9fb44f1c8d8806247d4ee0ed5082e882a..238a7fac570005dd61dc885793e21a374e474a30 100644 (file)
@@ -18,6 +18,7 @@ import org.junit.runner.RunWith;
 import org.mockito.Mock;
 
 import org.mockito.runners.MockitoJUnitRunner;
+import org.opendaylight.genius.mdsalutil.actions.ActionOutput;
 import org.powermock.api.mockito.PowerMockito;
 import org.powermock.core.classloader.annotations.PrepareForTest;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
@@ -212,7 +213,7 @@ public class MdSalUtilTest extends AbstractDataBrokerTest {
                 listActionInfo.add(new ActionInfo(ActionType.push_vlan, new String[] { null }));
                 listActionInfo.add(new ActionInfo(ActionType.set_field_vlan_vid, new String[] { String.valueOf(vlanid) }));
             }
-            listActionInfo.add(new ActionInfo(ActionType.output, new String[] { inport, "65535" }));
+            listActionInfo.add(new ActionOutput(Long.parseLong(inport), 65535));
             listBucketInfo.add(new BucketInfo(listActionInfo));
 
             String groupName = "Test Group";