ONOS-6245:Intent_mini_summary

Change-Id: I35fe2b5b3f2a24680bbef93ee31e4655b972ff45
diff --git a/web/api/src/main/java/org/onosproject/rest/resources/IntentsWebResource.java b/web/api/src/main/java/org/onosproject/rest/resources/IntentsWebResource.java
index 409dcc3..675581d 100644
--- a/web/api/src/main/java/org/onosproject/rest/resources/IntentsWebResource.java
+++ b/web/api/src/main/java/org/onosproject/rest/resources/IntentsWebResource.java
@@ -31,6 +31,7 @@
 import org.onosproject.net.intent.IntentService;
 import org.onosproject.net.intent.Key;
 import org.onosproject.net.intent.util.IntentFilter;
+import org.onosproject.net.intent.util.IntentMiniSummary;
 import org.onosproject.rest.AbstractWebResource;
 import org.slf4j.Logger;
 
@@ -49,6 +50,7 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.List;
+import java.util.Map;
 import java.util.Objects;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
@@ -97,6 +99,29 @@
         return ok(root).build();
     }
 
+
+    /**
+     * Gets Summary of all intents.
+     * Returns Summary of the intents in the system.
+     *
+     * @return 200 OK with Summary of all the intents in the system
+     * @onos.rsModel Minisummary
+     */
+    @GET
+    @Produces(MediaType.APPLICATION_JSON)
+    @Path("minisummary")
+    public Response getIntentSummary() {
+        final Iterable<Intent> intents = get(IntentService.class).getIntents();
+        ObjectNode root = mapper().createObjectNode();
+        IntentMiniSummary intentminisummary = new IntentMiniSummary();
+        Map<String, IntentMiniSummary> map = intentminisummary.summarize(intents, get(IntentService.class));
+        map.values().stream().forEach(intentsummary -> {
+            root.put(intentsummary.getIntentType(), codec(IntentMiniSummary.class).encode(intentsummary, this));
+        });
+        return ok(root).build();
+    }
+
+
     /**
      * Gets intent intallables by application ID and key.
      * @param appId application identifier
diff --git a/web/api/src/main/resources/definitions/Minisummary.json b/web/api/src/main/resources/definitions/Minisummary.json
new file mode 100644
index 0000000..9bf1c33
--- /dev/null
+++ b/web/api/src/main/resources/definitions/Minisummary.json
@@ -0,0 +1,70 @@
+{
+  "type": "object",
+  "title":"All",
+  "required": [
+    "All"
+  ],
+    "properties": {
+      "All": {
+        "required": [
+          "total",
+          "installed",
+          "failed",
+          "installReq",
+          "installing",
+          "compiling",
+          "recompiling",
+          "withdrawReq",
+          "withdrawing",
+          "withdrawn",
+          "unknownState"
+        ],
+        "properties": {
+          "total": {
+            "type": "integer",
+            "example": 1
+          },
+          "installed": {
+            "type": "integer",
+            "example": 0
+          },
+          "failed": {
+            "type": "integer",
+            "example": 0
+          },
+          "installReq": {
+            "type": "integer",
+            "example": 0
+          },
+          "installing": {
+            "type": "integer",
+            "example": 0
+          },
+          "compiling": {
+            "type": "integer",
+            "example": 0
+          },
+          "recompiling": {
+            "type": "integer",
+            "example": 0
+          },
+          "withdrawReq": {
+            "type": "integer",
+            "example": 0
+          },
+          "withdrawing": {
+            "type": "integer",
+            "example": 0
+          },
+          "withdrawn": {
+            "type": "integer",
+            "example": 0
+          },
+          "unknownState": {
+            "type": "integer",
+            "example": 0
+          }
+        }
+      }
+  }
+}