Corrections to getRegisteredApplications and CLI implementation

Change-Id: Ia24997b9fcb5d658592f11f710c0b4e8eb40309a
diff --git a/core/api/src/main/java/org/onosproject/core/Application.java b/core/api/src/main/java/org/onosproject/core/Application.java
index b898cb6..84279dc 100644
--- a/core/api/src/main/java/org/onosproject/core/Application.java
+++ b/core/api/src/main/java/org/onosproject/core/Application.java
@@ -21,6 +21,7 @@
 import java.util.List;
 import java.util.Optional;
 import java.util.Set;
+import java.net.URL;
 
 /**
  * Abstraction of a network control/management application.
@@ -132,4 +133,11 @@
      * @return list of application names
      */
     List<String> requiredApps();
-}
+
+    /**
+     * Returns binary image URL.
+     *
+     * @return URL of binary image
+     */
+    URL imageUrl();
+}
\ No newline at end of file
diff --git a/core/api/src/main/java/org/onosproject/core/DefaultApplication.java b/core/api/src/main/java/org/onosproject/core/DefaultApplication.java
index 2df2f8f..793ab70 100644
--- a/core/api/src/main/java/org/onosproject/core/DefaultApplication.java
+++ b/core/api/src/main/java/org/onosproject/core/DefaultApplication.java
@@ -26,6 +26,7 @@
 import java.util.Optional;
 import java.util.List;
 import java.util.Objects;
+import java.net.URL;
 
 import static com.google.common.base.MoreObjects.toStringHelper;
 import static com.google.common.base.Preconditions.checkArgument;
@@ -50,7 +51,7 @@
     private final Optional<URI> featuresRepo;
     private final List<String> features;
     private final List<String> requiredApps;
-
+    private final URL imageUrl;
     /**
      * Default constructor is hidden to prevent calls to new.
      */
@@ -69,6 +70,7 @@
         featuresRepo = Optional.empty();
         features = ImmutableList.of();
         requiredApps = ImmutableList.of();
+        imageUrl = null;
     }
 
     /**
@@ -88,13 +90,14 @@
      * @param featuresRepo optional features repo URI
      * @param features     application features
      * @param requiredApps list of required application names
+     * @param imageUrl     url of oar file
      */
-    private DefaultApplication(ApplicationId appId, Version version, String title,
+    public DefaultApplication(ApplicationId appId, Version version, String title,
                               String description, String origin, String category,
                               String url, String readme, byte[] icon,
                               ApplicationRole role, Set<Permission> permissions,
                               Optional<URI> featuresRepo, List<String> features,
-                              List<String> requiredApps) {
+                              List<String> requiredApps, URL imageUrl) {
         this.appId = appId;
         this.version = version;
         this.title = title;
@@ -109,8 +112,8 @@
         this.featuresRepo = featuresRepo;
         this.features = ImmutableList.copyOf(features);
         this.requiredApps = ImmutableList.copyOf(requiredApps);
+        this.imageUrl = imageUrl;
     }
-
     @Override
     public ApplicationId id() {
         return appId;
@@ -182,6 +185,11 @@
     }
 
     @Override
+    public URL imageUrl() {
+        return imageUrl;
+    }
+
+    @Override
     public int hashCode() {
         return Objects.hash(appId, version, title, description, origin, category, url,
                             readme, role, permissions, featuresRepo, features, requiredApps);
@@ -230,6 +238,7 @@
                 .add("featuresRepo", featuresRepo)
                 .add("features", features)
                 .add("requiredApps", requiredApps)
+                .add("imageURL", imageUrl)
                 .toString();
     }
 
@@ -277,7 +286,6 @@
      * Default application builder.
      */
     public static final class Builder {
-
         private ApplicationId appId;
         private Version version;
         private String title;
@@ -285,13 +293,14 @@
         private String category;
         private String url;
         private String readme;
-        private byte[] icon;
+        private byte[] icon = new byte[0];
         private String origin;
-        private ApplicationRole role;
-        private Set<Permission> permissions;
-        private Optional<URI> featuresRepo;
-        private List<String> features;
-        private List<String> requiredApps;
+        private ApplicationRole role = ApplicationRole.ADMIN;
+        private Set<Permission> permissions = ImmutableSet.of();
+        private Optional<URI> featuresRepo = Optional.empty();
+        private List<String> features = ImmutableList.of();
+        private List<String> requiredApps = ImmutableList.of();
+        private URL imageUrl;
 
         /**
          * Default constructor for the builder.
@@ -518,6 +527,17 @@
         }
 
         /**
+         * Adds a Binary Image URL.
+         *
+         * @param imageUrl url of oar file
+         * @return builder
+         */
+        public Builder withImageUrl(URL imageUrl) {
+            this.imageUrl = imageUrl;
+            return this;
+        }
+
+        /**
          * Builds a default application object from the gathered parameters.
          *
          * @return new default application
@@ -542,7 +562,7 @@
                                           url, readme, icon,
                                           role, permissions,
                                           featuresRepo, features,
-                                          requiredApps);
+                                          requiredApps, imageUrl);
         }
     }
-}
+}
\ No newline at end of file
diff --git a/core/api/src/test/java/org/onosproject/core/DefaultApplicationTest.java b/core/api/src/test/java/org/onosproject/core/DefaultApplicationTest.java
index b523126..98dccec 100644
--- a/core/api/src/test/java/org/onosproject/core/DefaultApplicationTest.java
+++ b/core/api/src/test/java/org/onosproject/core/DefaultApplicationTest.java
@@ -49,20 +49,20 @@
 
     public static final ApplicationId APP_ID = new DefaultApplicationId(2, APP_NAME);
     private Builder baseBuilder = DefaultApplication.builder()
-                .withAppId(APP_ID)
-                .withVersion(VER)
-                .withTitle(TITLE)
-                .withDescription(DESC)
-                .withOrigin(ORIGIN)
-                .withCategory(CATEGORY)
-                .withUrl(URL)
-                .withReadme(README)
-                .withIcon(ICON)
-                .withRole(ROLE)
-                .withPermissions(PERMS)
-                .withFeaturesRepo(Optional.of(FURL))
-                .withFeatures(FEATURES)
-                .withRequiredApps(APPS);
+            .withAppId(APP_ID)
+            .withVersion(VER)
+            .withTitle(TITLE)
+            .withDescription(DESC)
+            .withOrigin(ORIGIN)
+            .withCategory(CATEGORY)
+            .withUrl(URL)
+            .withReadme(README)
+            .withIcon(ICON)
+            .withRole(ROLE)
+            .withPermissions(PERMS)
+            .withFeaturesRepo(Optional.of(FURL))
+            .withFeatures(FEATURES)
+            .withRequiredApps(APPS);
 
     @Test
     public void basics() {
@@ -77,8 +77,8 @@
         assertEquals("incorrect URL", URL, app.url());
         assertEquals("incorrect readme", README, app.readme());
         assertArrayEquals("incorrect icon", ICON, app.icon());
-        assertEquals("incorrect role", ROLE, app.role());
         assertEquals("incorrect permissions", PERMS, app.permissions());
+        assertEquals("incorrect role", ROLE, app.role());
         assertEquals("incorrect features repo", FURL, app.featuresRepo().get());
         assertEquals("incorrect features", FEATURES, app.features());
         assertEquals("incorrect apps", APPS, app.requiredApps());
@@ -88,7 +88,7 @@
     @Test
     public void testEquality() {
         Application a1 = baseBuilder.build();
-        Application a2 = DefaultApplication.builder(a1)
+         Application a2 = DefaultApplication.builder(a1)
                 .build();
         Application a3 = DefaultApplication.builder(baseBuilder)
                 .withFeaturesRepo(Optional.empty())
@@ -227,4 +227,4 @@
         assertNotNull("null icon", icon);
         assertEquals("unexpected size", 0, icon.length);
     }
-}
+}
\ No newline at end of file