Allows to specify matches, action parameters as strings in PI

Some PI elements can encode in their value a string (e.g., when
a P4Runtime translation is used), for this reason we allow users
to specify matches and action parameters as strings.
From southbound, during decode, we interpret the elements as
string if the P4 model suggests that.

Change-Id: I5884de1500437ab647abc200d65de442e23bd1a8
diff --git a/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/ActionCodec.java b/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/ActionCodec.java
index 69b31a8..d0a285e 100644
--- a/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/ActionCodec.java
+++ b/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/ActionCodec.java
@@ -74,10 +74,14 @@
         final PiAction.Builder builder = PiAction.builder()
                 .withId(PiActionId.of(actionName));
         for (P4RuntimeOuterClass.Action.Param p : message.getParamsList()) {
-            final String paramName = paramInfo.getById(p.getParamId()).getName();
-            final ImmutableByteSequence value = ImmutableByteSequence.copyFrom(
-                    p.getValue().toByteArray());
-            builder.withParameter(new PiActionParam(PiActionParamId.of(paramName), value));
+            final P4InfoOuterClass.Action.Param actionParam = paramInfo.getById(p.getParamId());
+            final ImmutableByteSequence value;
+            if (browser.isTypeString(actionParam.getTypeName())) {
+                value = ImmutableByteSequence.copyFrom(new String(p.getValue().toByteArray()));
+            } else {
+                value = ImmutableByteSequence.copyFrom(p.getValue().toByteArray());
+            }
+            builder.withParameter(new PiActionParam(PiActionParamId.of(actionParam.getName()), value));
         }
         return builder.build();
     }