[ONOS-7653] ACL app enhancements for including more matching criteria in rules

Change-Id: Ic29bab0c0752d6280a5feff992a69a2e10084414
diff --git a/apps/acl/src/main/java/org/onosproject/acl/AclWebResource.java b/apps/acl/src/main/java/org/onosproject/acl/AclWebResource.java
index 0cda20b..74b572c 100644
--- a/apps/acl/src/main/java/org/onosproject/acl/AclWebResource.java
+++ b/apps/acl/src/main/java/org/onosproject/acl/AclWebResource.java
@@ -26,6 +26,7 @@
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import org.onlab.packet.IPv4;
 import org.onlab.packet.Ip4Prefix;
+import org.onlab.packet.MacAddress;
 import org.onosproject.rest.AbstractWebResource;
 
 import javax.ws.rs.Consumes;
@@ -65,12 +66,21 @@
         for (AclRule rule : rules) {
             ObjectNode node = mapper.createObjectNode();
             node.put("id", rule.id().toString());
+            if (rule.srcMac() != null) {
+                node.put("srcMac", rule.srcMac().toString());
+            }
+            if (rule.dstMac() != null) {
+                node.put("dstMac", rule.dstMac().toString());
+            }
             if (rule.srcIp() != null) {
                 node.put("srcIp", rule.srcIp().toString());
             }
             if (rule.dstIp() != null) {
                 node.put("dstIp", rule.dstIp().toString());
             }
+            if (rule.dscp() != 0) {
+                node.put("dscp", rule.dscp());
+            }
             if (rule.ipProto() != 0) {
                 switch (rule.ipProto()) {
                     case IPv4.PROTOCOL_ICMP:
@@ -89,6 +99,9 @@
             if (rule.dstTpPort() != 0) {
                 node.put("dstTpPort", rule.dstTpPort());
             }
+            if (rule.srcTpPort() != 0) {
+                node.put("srcTpPort", rule.srcTpPort());
+            }
             node.put("action", rule.action().toString());
             arrayNode.add(node);
         }
@@ -160,6 +173,21 @@
             rule.dstIp(Ip4Prefix.valueOf(s));
         }
 
+        s = node.path("srcMac").asText(null);
+        if (s != null) {
+            rule.srcMac(MacAddress.valueOf(s));
+        }
+
+        s = node.path("dstMac").asText(null);
+        if (s != null) {
+            rule.dstMac(MacAddress.valueOf(s));
+        }
+
+        s = node.path("dscp").asText(null);
+        if (s != null) {
+            rule.dscp(Byte.valueOf(s));
+        }
+
         s = node.path("ipProto").asText(null);
         if (s != null) {
             if ("TCP".equalsIgnoreCase(s)) {
@@ -178,6 +206,11 @@
             rule.dstTpPort((short) port);
         }
 
+        port = node.path("srcTpPort").asInt(0);
+        if (port > 0) {
+            rule.srcTpPort((short) port);
+        }
+
         s = node.path("action").asText(null);
         if (s != null) {
             if ("allow".equalsIgnoreCase(s)) {