[ONOS-3635] Implement List view for extended application properties

Change-Id: Ie8f985f9c2986857df92bcb47b5bdee876f37230
diff --git a/core/common/src/main/java/org/onosproject/common/app/ApplicationArchive.java b/core/common/src/main/java/org/onosproject/common/app/ApplicationArchive.java
index ba55097..11c8b76 100644
--- a/core/common/src/main/java/org/onosproject/common/app/ApplicationArchive.java
+++ b/core/common/src/main/java/org/onosproject/common/app/ApplicationArchive.java
@@ -39,10 +39,8 @@
 import org.slf4j.LoggerFactory;
 
 import javax.imageio.ImageIO;
-import java.awt.image.BufferedImage;
-import java.awt.image.DataBufferByte;
-import java.awt.image.WritableRaster;
 import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
@@ -97,8 +95,9 @@
     private static final String JAVA_PERMISSIONS = "security.permissions.java-perm";
 
     private static final String OAR = ".oar";
+    private static final String PNG = "png";
     private static final String APP_XML = "app.xml";
-    private static final String ICON_PNG = "icon.png";
+    private static final String APP_PNG = "app.png";
     private static final String M2_PREFIX = "m2";
 
     private static final String ROOT = "../";
@@ -197,7 +196,7 @@
             ApplicationDescription desc = plainXml ?
                     parsePlainAppDescription(bis) : parseZippedAppDescription(bis);
             checkState(!appFile(desc.name(), APP_XML).exists(),
-                       "Application %s already installed", desc.name());
+                    "Application %s already installed", desc.name());
 
             if (plainXml) {
                 expandPlainApplication(cache, desc);
@@ -412,6 +411,11 @@
         return new File(new File(appsDir, appName), fileName);
     }
 
+    // Returns the icon file located under the specified app directory.
+    private File iconFile(String appName, String fileName) {
+        return new File(new File(appsDir, appName), fileName);
+    }
+
     // Returns the set of Permissions specified in the app.xml file
     private ImmutableSet<Permission> getPermissions(XMLConfiguration cfg) {
         List<Permission> permissionList = Lists.newArrayList();
@@ -441,29 +445,25 @@
 
     // Returns the byte stream from icon.png file in oar application archive.
     private byte[] getApplicationIcon(String appName) {
-        // open image
-        File iconFile = appFile(appName, ICON_PNG);
+
+        byte[] icon = new byte[0];
+        File iconFile = iconFile(appName, APP_PNG);
 
         if (!iconFile.exists()) {
-            iconFile = new File(appsDir, ICON_PNG);
+            // assume that we can always fallback to default icon
+            iconFile = new File(appsDir, APP_PNG);
         }
 
-        if (!iconFile.exists()) {
-            return null;
-        }
-
-        BufferedImage bufferedImage = null;
         try {
-            bufferedImage = ImageIO.read(iconFile);
+            ByteArrayOutputStream bos = new ByteArrayOutputStream();
+            ImageIO.write(ImageIO.read(iconFile), PNG, bos);
+            icon = bos.toByteArray();
+            bos.close();
         } catch (IOException e) {
             e.printStackTrace();
         }
 
-        // get DataBufferBytes from Raster
-        WritableRaster raster = bufferedImage .getRaster();
-        DataBufferByte data = (DataBufferByte) raster.getDataBuffer();
-
-        return data.getData();
+        return icon;
     }
 
     // Returns application role type