ONOS-3607 Add Criteria model for Flows REST Api with field description.
Change Model parsing in Swagger mojo for whitspaces stripping.

Also, readding onos-maven-plugin to root pom build temporarily.

Change-Id: I8995c74d762a3e59acebe15cc600a0f1bfa41411
diff --git a/pom.xml b/pom.xml
index 8bae57b..8fdcacb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -54,6 +54,7 @@
 
         <module>tools/package/archetypes</module>
         <module>tools/package/branding</module>
+        <module>tools/package/maven-plugin</module>
     </modules>
 
     <url>http://onosproject.org/</url>
@@ -78,7 +79,7 @@
         <netty4.version>4.0.23.Final</netty4.version>
         <copycat.version>0.5.1.onos</copycat.version>
         <openflowj.version>0.9.1.onos</openflowj.version>
-        <onos-maven-plugin.version>1.7</onos-maven-plugin.version>
+        <onos-maven-plugin.version>1.8-SNAPSHOT</onos-maven-plugin.version>
         <karaf.version>3.0.3</karaf.version>
         <jersey.version>1.19</jersey.version>
         <!-- TODO argLine was originally added maven-surfire-plugin configuration
diff --git a/tools/package/maven-plugin/pom.xml b/tools/package/maven-plugin/pom.xml
index e8f1b9e..e704c5f 100644
--- a/tools/package/maven-plugin/pom.xml
+++ b/tools/package/maven-plugin/pom.xml
@@ -91,6 +91,11 @@
             <artifactId>commons-io</artifactId>
             <version>2.4</version>
         </dependency>
+        <dependency>
+            <groupId>com.google.code.gson</groupId>
+            <artifactId>gson</artifactId>
+            <version>2.5</version>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/tools/package/maven-plugin/src/main/java/org/onosproject/maven/OnosSwaggerMojo.java b/tools/package/maven-plugin/src/main/java/org/onosproject/maven/OnosSwaggerMojo.java
index 314d61c..4618cd0 100644
--- a/tools/package/maven-plugin/src/main/java/org/onosproject/maven/OnosSwaggerMojo.java
+++ b/tools/package/maven-plugin/src/main/java/org/onosproject/maven/OnosSwaggerMojo.java
@@ -18,9 +18,9 @@
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ArrayNode;
 import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.google.common.base.Charsets;
 import com.google.common.io.ByteStreams;
 import com.google.common.io.Files;
+import com.google.gson.JsonParser;
 import com.thoughtworks.qdox.JavaProjectBuilder;
 import com.thoughtworks.qdox.model.DocletTag;
 import com.thoughtworks.qdox.model.JavaAnnotation;
@@ -36,6 +36,7 @@
 import org.apache.maven.project.MavenProject;
 
 import java.io.File;
+import java.io.FileReader;
 import java.io.FileWriter;
 import java.io.IOException;
 import java.io.PrintWriter;
@@ -51,6 +52,7 @@
 @Mojo(name = "swagger", defaultPhase = LifecyclePhase.GENERATE_SOURCES)
 public class OnosSwaggerMojo extends AbstractMojo {
     private final ObjectMapper mapper = new ObjectMapper();
+    private final JsonParser jsonParser = new JsonParser();
 
     private static final String JSON_FILE = "swagger.json";
     private static final String GEN_SRC = "generated-sources";
@@ -291,10 +293,7 @@
                 try {
                     File config = new File(definitionsDirectory.getAbsolutePath() + "/"
                                                    + param + ".json");
-                    String lines = Files.readLines(config, Charsets.UTF_8).stream().reduce((t, u) -> t + u).
-                            get();
-                    lines = lines.replaceAll("\\s+", "");
-                    definitions.putPOJO(param, lines);
+                    definitions.putPOJO(param, jsonParser.parse(new FileReader(config)));
                 } catch (IOException e) {
                     e.printStackTrace();
                 }
diff --git a/web/api/src/main/resources/definitions/Flows.json b/web/api/src/main/resources/definitions/Flows.json
index c803fdb..e3fa3f0 100644
--- a/web/api/src/main/resources/definitions/Flows.json
+++ b/web/api/src/main/resources/definitions/Flows.json
@@ -155,19 +155,214 @@
           "items": {
             "type": "object",
             "title": "criteria",
-            "required": [
-              "type",
-              "ethType"
-            ],
             "properties": {
               "type": {
                 "type": "string",
+                "description":"Ethernet field name",
                 "example": "ETH_TYPE"
               },
               "ethType": {
+                "type": "int64",
+                "format": "int64",
+                "example": "0x88cc",
+                "description":"Ethernet frame type"
+              },
+              "mac": {
+                "type": "string",
+                "example": "00:00:11:00:00:01"
+              },
+              "port": {
+                "type": "int64",
+                "format": "int64",
+                "example": 1,
+                "description":"Match port"
+              },
+              "metadata": {
+                "type": "Hex16",
+                "format": "Hex16",
+                "example": "0xabcdL",
+                "description":"Metadata passed between tables"
+              },
+              "vlanId": {
+                "type": "uint16",
+                "format": "uint16",
+                "example": "0x1000"
+              },
+              "priority": {
+                "type": "int64",
+                "format": "int64",
+                "example": 1,
+                "description":"VLAN priority."
+              },
+              "ipDscp": {
+                "type": "byte",
+                "format": "byte",
+                "description":"IP DSCP (6 bits in ToS field)"
+              },
+              "ipEcn": {
+                "type": "byte",
+                "format": "byte",
+                "description":"IP ECN (2 bits in ToS field)."
+              },
+              "protocol": {
+                "type": "uint16",
+                "format": "uint16",
+                "example": 1,
+                "description":"IP protocol"
+              },
+              "ip": {
+                "type": "string",
+                "example": "10.1.1.0/24",
+                "description":"IP source address"
+              },
+              "tcpPort": {
+                "type": "integer",
+                "format": "uint16",
+                "example": 1,
+                "description":"TCP source address"
+              },
+              "udpPort": {
+                "type": "uint16",
+                "format": "uint16",
+                "example": 1,
+                "description":"UDP source address"
+              },
+              "sctpPort": {
+                "type": "uint16",
+                "format": "uint16",
+                "example": 1,
+                "description":"SCTP source address"
+              },
+              "icmpType": {
+                "type": "uint16",
+                "format": "uint16",
+                "example": 1,
+                "description":"Internet Control Message Protocol for IPV4 code (RFC0792)"
+              },
+              "icmpCode": {
+                "type": "uint16",
+                "format": "uint16",
+                "example": 1,
+                "description":"Internet Control Message Protocol for IPV4 code (RFC0792)"
+              },
+              "flowLabel": {
+                "type": "Hex16",
+                "format": "Hex16",
+                "example": "0xffffe",
+                "description":"IPv6 Flow Label (RFC 6437)"
+              },
+              "icmpv6Type": {
+                "type": "uint16",
+                "format": "uint16",
+                "example": 1,
+                "description":"Internet Control Message Protocol for IPV6 type (RFC2463)"
+              },
+              "icmpv6Code": {
+                "type": "uint16",
+                "format": "uint16",
+                "example": 1,
+                "description":"Internet Control Message Protocol for IPV6 code (RFC2463)"
+              },
+              "targetAddress": {
+                "type": "String",
+                "example": "10.1.1.0/24",
+                "description":"IPv6 Neighbor discovery target address"
+              },
+              "label": {
+                "type": "int32",
+                "format": "int32",
+                "example": 1,
+                "description":"MPLS label"
+              },
+              "exthdrFlags": {
+                "type": "int64",
+                "format": "int64",
+                "example": 1,
+                "description":"IPv6 extension header pseudo-field"
+              },
+              "lambda": {
+                "type": "int64",
+                "format": "int64",
+                "example": 1,
+                "description":"wavelength abstraction"
+              },
+              "gridType": {
+                "type": "String",
+                "example": "DWDM",
+                "description":"Type of wavelength grid"
+              },
+              "channelSpacing": {
+                "type": "int64",
+                "format": "int64",
+                "example": 100,
+                "description":"Optical channel spacing"
+              },
+              "spacingMultiplier": {
                 "type": "integer",
                 "format": "int64",
-                "example": "0x88cc"
+                "example": 4,
+                "description":"Optical channel spacing multiplier"
+              },
+              "slotGranularity": {
+                "type": "int64",
+                "format": "int64",
+                "example": 8
+              },
+              "ochSignalId": {
+                "type": "integer",
+                "format": "int64",
+                "example": 1,
+                "description":"Optical channel signal ID"
+              },
+              "tunnelId": {
+                "type": "int64",
+                "format": "int64",
+                "example": 5,
+                "description":"Tunnel ID"
+              },
+              "ochSignalType": {
+                "type": "int64",
+                "format": "int64",
+                "example": 1,
+                "description":"Optical channel signal type"
+              },
+              "oduSignalId": {
+                "type": "int64",
+                "format": "int64",
+                "example": 1,
+                "description":"ODU (Optical channel Data Unit) signal ID."
+              },
+              "tributaryPortNumber": {
+                "type": "int64",
+                "format": "int64",
+                "example": 11,
+                "description":"OPU (Optical channel Payload Unit) port number."
+              },
+              "tributarySlotLen": {
+                "type": "int64",
+                "format": "int64",
+                "example": 80,
+                "description":"OPU (Optical channel Payload Unit) slot length."
+              },
+              "tributarySlotBitmap": {
+                "type": "array",
+                "title": "tributarySlotBitmap",
+                "description":"OPU (Optical channel Payload Unit) slot bitmap.",
+                "required": [
+                  "byte",
+                  "port"
+                ],
+                "items": {
+                  "type": "byte",
+                  "title": "byte",
+                  "example": 1
+                }
+              },
+              "oduSignalType": {
+                "type": "int64",
+                "format": "int64",
+                "example": 4,
+                "description":"ODU (Optical channel Data Unit) signal type."
               }
             }
           }
diff --git a/web/api/src/main/resources/definitions/FlowsPost.json b/web/api/src/main/resources/definitions/FlowsPost.json
index 54df923..f265070 100644
--- a/web/api/src/main/resources/definitions/FlowsPost.json
+++ b/web/api/src/main/resources/definitions/FlowsPost.json
@@ -78,19 +78,214 @@
           "items": {
             "type": "object",
             "title": "criteria",
-            "required": [
-              "type",
-              "ethType"
-            ],
             "properties": {
               "type": {
                 "type": "string",
+                "description":"Ethernet field name",
                 "example": "ETH_TYPE"
               },
               "ethType": {
+                "type": "int64",
+                "format": "int64",
+                "example": "0x88cc",
+                "description":"Ethernet frame type"
+              },
+              "mac": {
+                "type": "string",
+                "example": "00:00:11:00:00:01"
+              },
+              "port": {
+                "type": "int64",
+                "format": "int64",
+                "example": 1,
+                "description":"Match port"
+              },
+              "metadata": {
+                "type": "Hex16",
+                "format": "Hex16",
+                "example": "0xabcdL",
+                "description":"Metadata passed between tables"
+              },
+              "vlanId": {
+                "type": "uint16",
+                "format": "uint16",
+                "example": "0x1000"
+              },
+              "priority": {
+                "type": "int64",
+                "format": "int64",
+                "example": 1,
+                "description":"VLAN priority."
+              },
+              "ipDscp": {
+                "type": "byte",
+                "format": "byte",
+                "description":"IP DSCP (6 bits in ToS field)"
+              },
+              "ipEcn": {
+                "type": "byte",
+                "format": "byte",
+                "description":"IP ECN (2 bits in ToS field)."
+              },
+              "protocol": {
+                "type": "uint16",
+                "format": "uint16",
+                "example": 1,
+                "description":"IP protocol"
+              },
+              "ip": {
+                "type": "string",
+                "example": "10.1.1.0/24",
+                "description":"IP source address"
+              },
+              "tcpPort": {
+                "type": "integer",
+                "format": "uint16",
+                "example": 1,
+                "description":"TCP source address"
+              },
+              "udpPort": {
+                "type": "uint16",
+                "format": "uint16",
+                "example": 1,
+                "description":"UDP source address"
+              },
+              "sctpPort": {
+                "type": "uint16",
+                "format": "uint16",
+                "example": 1,
+                "description":"SCTP source address"
+              },
+              "icmpType": {
+                "type": "uint16",
+                "format": "uint16",
+                "example": 1,
+                "description":"Internet Control Message Protocol for IPV4 code (RFC0792)"
+              },
+              "icmpCode": {
+                "type": "uint16",
+                "format": "uint16",
+                "example": 1,
+                "description":"Internet Control Message Protocol for IPV4 code (RFC0792)"
+              },
+              "flowLabel": {
+                "type": "Hex16",
+                "format": "Hex16",
+                "example": "0xffffe",
+                "description":"IPv6 Flow Label (RFC 6437)"
+              },
+              "icmpv6Type": {
+                "type": "uint16",
+                "format": "uint16",
+                "example": 1,
+                "description":"Internet Control Message Protocol for IPV6 type (RFC2463)"
+              },
+              "icmpv6Code": {
+                "type": "uint16",
+                "format": "uint16",
+                "example": 1,
+                "description":"Internet Control Message Protocol for IPV6 code (RFC2463)"
+              },
+              "targetAddress": {
+                "type": "String",
+                "example": "10.1.1.0/24",
+                "description":"IPv6 Neighbor discovery target address"
+              },
+              "label": {
+                "type": "int32",
+                "format": "int32",
+                "example": 1,
+                "description":"MPLS label"
+              },
+              "exthdrFlags": {
+                "type": "int64",
+                "format": "int64",
+                "example": 1,
+                "description":"IPv6 extension header pseudo-field"
+              },
+              "lambda": {
+                "type": "int64",
+                "format": "int64",
+                "example": 1,
+                "description":"wavelength abstraction"
+              },
+              "gridType": {
+                "type": "String",
+                "example": "DWDM",
+                "description":"Type of wavelength grid"
+              },
+              "channelSpacing": {
+                "type": "int64",
+                "format": "int64",
+                "example": 100,
+                "description":"Optical channel spacing"
+              },
+              "spacingMultiplier": {
                 "type": "integer",
                 "format": "int64",
-                "example": "0x88cc"
+                "example": 4,
+                "description":"Optical channel spacing multiplier"
+              },
+              "slotGranularity": {
+                "type": "int64",
+                "format": "int64",
+                "example": 8
+              },
+              "ochSignalId": {
+                "type": "integer",
+                "format": "int64",
+                "example": 1,
+                "description":"Optical channel signal ID"
+              },
+              "tunnelId": {
+                "type": "int64",
+                "format": "int64",
+                "example": 5,
+                "description":"Tunnel ID"
+              },
+              "ochSignalType": {
+                "type": "int64",
+                "format": "int64",
+                "example": 1,
+                "description":"Optical channel signal type"
+              },
+              "oduSignalId": {
+                "type": "int64",
+                "format": "int64",
+                "example": 1,
+                "description":"ODU (Optical channel Data Unit) signal ID."
+              },
+              "tributaryPortNumber": {
+                "type": "int64",
+                "format": "int64",
+                "example": 11,
+                "description":"OPU (Optical channel Payload Unit) port number."
+              },
+              "tributarySlotLen": {
+                "type": "int64",
+                "format": "int64",
+                "example": 80,
+                "description":"OPU (Optical channel Payload Unit) slot length."
+              },
+              "tributarySlotBitmap": {
+                "type": "array",
+                "title": "tributarySlotBitmap",
+                "description":"OPU (Optical channel Payload Unit) slot bitmap.",
+                "required": [
+                  "byte",
+                  "port"
+                ],
+                "items": {
+                  "type": "byte",
+                  "title": "byte",
+                  "example": 1
+                }
+              },
+              "oduSignalType": {
+                "type": "int64",
+                "format": "int64",
+                "example": 4,
+                "description":"ODU (Optical channel Data Unit) signal type."
               }
             }
           }