[ONOS-3634] Enhance app to have a category, icon, URL and readme

This commmit enhances application to have category, icon, URL and
readme. The web GUI and CLI will be implemented in separate commits

Change-Id: Ib02716d7118cc617b24f196f2213ea1fe99a34be
diff --git a/core/api/src/main/java/org/onosproject/app/ApplicationDescription.java b/core/api/src/main/java/org/onosproject/app/ApplicationDescription.java
index e8ff9ec..1528f35 100644
--- a/core/api/src/main/java/org/onosproject/app/ApplicationDescription.java
+++ b/core/api/src/main/java/org/onosproject/app/ApplicationDescription.java
@@ -44,6 +44,13 @@
     Version version();
 
     /**
+     * Returns the name of the application origin, group or company.
+     *
+     * @return application origin
+     */
+    String origin();
+
+    /**
      * Returns description of the application.
      *
      * @return application description text
@@ -51,11 +58,32 @@
     String description();
 
     /**
-     * Returns the name of the application origin, group or company.
+     * Returns category of the application.
      *
-     * @return application origin
+     * @return application category text
      */
-    String origin();
+    String category();
+
+    /**
+     * Returns url of the application.
+     *
+     * @return application url
+     */
+    String url();
+
+    /**
+     * Returns readme of the application.
+     *
+     * @return application readme
+     */
+    String readme();
+
+    /**
+     * Returns icon of the application.
+     *
+     * @return application icon
+     */
+    byte[] icon();
 
     /**
      * Returns the role of the application.
diff --git a/core/api/src/main/java/org/onosproject/app/DefaultApplicationDescription.java b/core/api/src/main/java/org/onosproject/app/DefaultApplicationDescription.java
index 569183a..3e52001 100644
--- a/core/api/src/main/java/org/onosproject/app/DefaultApplicationDescription.java
+++ b/core/api/src/main/java/org/onosproject/app/DefaultApplicationDescription.java
@@ -37,6 +37,10 @@
     private final Version version;
     private final String description;
     private final String origin;
+    private final String category;
+    private final String url;
+    private final String readme;
+    private final byte[] icon;
     private final ApplicationRole role;
     private final Set<Permission> permissions;
     private final Optional<URI> featuresRepo;
@@ -50,6 +54,10 @@
      * @param version      application version
      * @param description  application description
      * @param origin       origin company
+     * @param category     application category
+     * @param url          application URL
+     * @param readme       application readme
+     * @param icon         application icon
      * @param role         application role
      * @param permissions  requested permissions
      * @param featuresRepo optional features repo URI
@@ -57,7 +65,8 @@
      * @param requiredApps list of required application names
      */
     public DefaultApplicationDescription(String name, Version version,
-                                         String description, String origin,
+                                         String description, String origin, String category,
+                                         String url, String readme, byte[] icon,
                                          ApplicationRole role, Set<Permission> permissions,
                                          URI featuresRepo, List<String> features,
                                          List<String> requiredApps) {
@@ -65,6 +74,10 @@
         this.version = checkNotNull(version, "Version cannot be null");
         this.description = checkNotNull(description, "Description cannot be null");
         this.origin = checkNotNull(origin, "Origin cannot be null");
+        this.category = checkNotNull(category, "Category cannot be null");
+        this.url = checkNotNull(url, "URL cannot be null");
+        this.readme = readme;
+        this.icon = icon;
         this.role = checkNotNull(role, "Role cannot be null");
         this.permissions = checkNotNull(permissions, "Permissions cannot be null");
         this.featuresRepo = Optional.ofNullable(featuresRepo);
@@ -89,6 +102,26 @@
     }
 
     @Override
+    public String category() {
+        return category;
+    }
+
+    @Override
+    public String url() {
+        return url;
+    }
+
+    @Override
+    public String readme() {
+        return readme;
+    }
+
+    @Override
+    public byte[] icon() {
+        return icon;
+    }
+
+    @Override
     public String origin() {
         return origin;
     }
@@ -125,6 +158,9 @@
                 .add("version", version)
                 .add("description", description)
                 .add("origin", origin)
+                .add("category", category)
+                .add("url", url)
+                .add("readme", readme)
                 .add("role", role)
                 .add("permissions", permissions)
                 .add("featuresRepo", featuresRepo)