ONOS-3562 Changing the flow instructions port to human readable format

Change-Id: Ia6b1a755bc400295600f4112cb3ebe676e533eb2
diff --git a/core/common/src/main/java/org/onosproject/codec/impl/DecodeInstructionCodecHelper.java b/core/common/src/main/java/org/onosproject/codec/impl/DecodeInstructionCodecHelper.java
index 14555b3..4878c17 100644
--- a/core/common/src/main/java/org/onosproject/codec/impl/DecodeInstructionCodecHelper.java
+++ b/core/common/src/main/java/org/onosproject/codec/impl/DecodeInstructionCodecHelper.java
@@ -240,9 +240,22 @@
         String type = json.get(InstructionCodec.TYPE).asText();
 
         if (type.equals(Instruction.Type.OUTPUT.name())) {
-            PortNumber portNumber =
-                    PortNumber.portNumber(nullIsIllegal(json.get(InstructionCodec.PORT),
-                            InstructionCodec.PORT + InstructionCodec.MISSING_MEMBER_MESSAGE).asLong());
+            PortNumber portNumber;
+            if (json.get(InstructionCodec.PORT).isLong() || json.get(InstructionCodec.PORT).isInt()) {
+                portNumber = PortNumber
+                        .portNumber(nullIsIllegal(json.get(InstructionCodec.PORT)
+                                                          .asLong(), InstructionCodec.PORT
+                                                          + InstructionCodec.MISSING_MEMBER_MESSAGE));
+            } else if (json.get(InstructionCodec.PORT).isTextual()) {
+                portNumber = PortNumber
+                        .fromString(nullIsIllegal(json.get(InstructionCodec.PORT)
+                                                          .textValue(), InstructionCodec.PORT
+                                                          + InstructionCodec.MISSING_MEMBER_MESSAGE));
+            } else {
+                throw new IllegalArgumentException("Port value "
+                                                           + json.get(InstructionCodec.PORT).toString()
+                                                           + " is not supported");
+            }
             return Instructions.createOutput(portNumber);
         } else if (type.equals(Instruction.Type.DROP.name())) {
             return Instructions.createDrop();