From b1ba89f06d886b9cbbd70dac6916f6145b012fc2 Mon Sep 17 00:00:00 2001
From: Ryan Izard <rizard@g.clemson.edu>
Date: Mon, 27 Apr 2015 11:37:47 -0400
Subject: [PATCH] Fixed action serializer for actions that do not have values
 e.g. strip_vlan and such. Added in a 'n/a' value for the JSON key's value.
 Perhaps we should rethink how a list of actions is serialized to avoid the
 'n/a' all together.

---
 .../web/serializers/OFActionListSerializer.java    | 14 +++++++-------
 .../net/floodlightcontroller/util/ActionUtils.java |  1 +
 2 files changed, 8 insertions(+), 7 deletions(-)

diff --git a/src/main/java/net/floodlightcontroller/core/web/serializers/OFActionListSerializer.java b/src/main/java/net/floodlightcontroller/core/web/serializers/OFActionListSerializer.java
index 5756d5487..882a625c4 100644
--- a/src/main/java/net/floodlightcontroller/core/web/serializers/OFActionListSerializer.java
+++ b/src/main/java/net/floodlightcontroller/core/web/serializers/OFActionListSerializer.java
@@ -152,7 +152,7 @@ public class OFActionListSerializer extends JsonSerializer<List<OFAction>> {
                 jsonGenerator.writeStringField(ActionUtils.STR_GROUP, ((OFActionGroup)a).getGroup().toString());
                 break;
             case STRIP_VLAN:
-                jsonGenerator.writeString(ActionUtils.STR_VLAN_STRIP);
+                jsonGenerator.writeStringField(ActionUtils.STR_VLAN_STRIP, ActionUtils.STR_NOT_APPLICABLE);
                 break;
             case PUSH_VLAN:
                 jsonGenerator.writeNumberField(ActionUtils.STR_VLAN_PUSH, ((OFActionPushVlan)a).getEthertype().getValue());
@@ -164,25 +164,25 @@ public class OFActionListSerializer extends JsonSerializer<List<OFAction>> {
                 jsonGenerator.writeNumberField(ActionUtils.STR_PBB_PUSH, ((OFActionPushPbb)a).getEthertype().getValue());
                 break;
             case POP_VLAN:
-                jsonGenerator.writeString(ActionUtils.STR_VLAN_POP);
+                jsonGenerator.writeStringField(ActionUtils.STR_VLAN_POP, ActionUtils.STR_NOT_APPLICABLE);
                 break;
             case POP_MPLS:
                 jsonGenerator.writeNumberField(ActionUtils.STR_MPLS_POP, ((OFActionPopMpls)a).getEthertype().getValue());
                 break;
             case POP_PBB:
-                jsonGenerator.writeString(ActionUtils.STR_PBB_POP);
+                jsonGenerator.writeStringField(ActionUtils.STR_PBB_POP, ActionUtils.STR_NOT_APPLICABLE);
                 break;
             case COPY_TTL_IN:
-                jsonGenerator.writeString(ActionUtils.STR_TTL_IN_COPY);
+                jsonGenerator.writeStringField(ActionUtils.STR_TTL_IN_COPY, ActionUtils.STR_NOT_APPLICABLE);
                 break;
             case COPY_TTL_OUT:
-                jsonGenerator.writeString(ActionUtils.STR_TTL_OUT_COPY);
+                jsonGenerator.writeStringField(ActionUtils.STR_TTL_OUT_COPY, ActionUtils.STR_NOT_APPLICABLE);
                 break;
             case DEC_NW_TTL:
-                jsonGenerator.writeString(ActionUtils.STR_NW_TTL_DEC);
+                jsonGenerator.writeStringField(ActionUtils.STR_NW_TTL_DEC, ActionUtils.STR_NOT_APPLICABLE);
                 break;
             case DEC_MPLS_TTL:
-                jsonGenerator.writeString(ActionUtils.STR_MPLS_TTL_DEC);
+                jsonGenerator.writeStringField(ActionUtils.STR_MPLS_TTL_DEC, ActionUtils.STR_NOT_APPLICABLE);
                 break;
             case SET_MPLS_LABEL:
                 jsonGenerator.writeNumberField(ActionUtils.STR_MPLS_LABEL_SET, ((OFActionSetMplsLabel)a).getMplsLabel());
diff --git a/src/main/java/net/floodlightcontroller/util/ActionUtils.java b/src/main/java/net/floodlightcontroller/util/ActionUtils.java
index e4d9305dd..a32cfc103 100644
--- a/src/main/java/net/floodlightcontroller/util/ActionUtils.java
+++ b/src/main/java/net/floodlightcontroller/util/ActionUtils.java
@@ -137,6 +137,7 @@ public class ActionUtils {
 	public static final String STR_GROUP = "group";
 	public static final String STR_FIELD_SET = "set_field";
 	public static final String STR_EXPERIMENTER = "experimenter";
+	public static final String STR_NOT_APPLICABLE = "n/a";
 
 	/* OF1.3 set-field operations are defined as any OF1.3 match.
 	 * We will borrow MatchUtils's String definitions of all OF1.3
-- 
GitLab