Apps-- added onos.app.title property to applications.

Change-Id: Id845390ee0bee5b871c0ce9f47b2ce98fbcf26b9
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 1e3f49c..3699b5d 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
@@ -88,6 +88,7 @@
 
     private static final String CATEGORY = "[@category]";
     private static final String URL = "[@url]";
+    private static final String TITLE = "[@title]";
 
     private static final String ROLE = "security.role";
     private static final String APP_PERMISSIONS = "security.permissions.app-perm";
@@ -294,6 +295,11 @@
         String name = cfg.getString(NAME);
         Version version = Version.version(cfg.getString(VERSION));
         String origin = cfg.getString(ORIGIN);
+
+        String title = cfg.getString(TITLE);
+        // FIXME: title should be set as attribute to APP, but fallback for now...
+        title = title == null ? name : title;
+
         String category = cfg.getString(CATEGORY, UTILITY);
         String url = cfg.getString(URL);
         byte[] icon = getApplicationIcon(name);
@@ -313,7 +319,7 @@
         // put short description to description field
         String desc = compactDescription(readme);
 
-        return new DefaultApplicationDescription(name, version, desc, origin,
+        return new DefaultApplicationDescription(name, version, title, desc, origin,
                                                  category, url, readme, icon,
                                                  role, perms, featuresRepo,
                                                  features, requiredApps);
diff --git a/core/common/src/test/java/org/onosproject/common/app/ApplicationArchiveTest.java b/core/common/src/test/java/org/onosproject/common/app/ApplicationArchiveTest.java
index 87c6363..f7258c3 100644
--- a/core/common/src/test/java/org/onosproject/common/app/ApplicationArchiveTest.java
+++ b/core/common/src/test/java/org/onosproject/common/app/ApplicationArchiveTest.java
@@ -65,6 +65,7 @@
         assertEquals("incorrect url", URL, app.url());
         assertEquals("incorrect readme", README, app.readme());
 
+        assertEquals("incorrect title", TITLE, app.title());
         assertEquals("incorrect description", DESC, app.description());
         assertEquals("incorrect features URI", FURL, app.featuresRepo().get());
         assertEquals("incorrect permissions", PERMS, app.permissions());
diff --git a/core/common/src/test/java/org/onosproject/store/trivial/SimpleApplicationStore.java b/core/common/src/test/java/org/onosproject/store/trivial/SimpleApplicationStore.java
index 98c18b4..5047987 100644
--- a/core/common/src/test/java/org/onosproject/store/trivial/SimpleApplicationStore.java
+++ b/core/common/src/test/java/org/onosproject/store/trivial/SimpleApplicationStore.java
@@ -49,14 +49,18 @@
  */
 @Component(immediate = true)
 @Service
-public class SimpleApplicationStore extends ApplicationArchive implements ApplicationStore {
+public class SimpleApplicationStore extends ApplicationArchive
+        implements ApplicationStore {
 
     private final Logger log = getLogger(getClass());
 
     // App inventory & states
-    private final ConcurrentMap<ApplicationId, DefaultApplication> apps = new ConcurrentHashMap<>();
-    private final ConcurrentMap<ApplicationId, ApplicationState> states = new ConcurrentHashMap<>();
-    private final ConcurrentMap<ApplicationId, Set<Permission>> permissions = new ConcurrentHashMap<>();
+    private final ConcurrentMap<ApplicationId, DefaultApplication> apps =
+            new ConcurrentHashMap<>();
+    private final ConcurrentMap<ApplicationId, ApplicationState> states =
+            new ConcurrentHashMap<>();
+    private final ConcurrentMap<ApplicationId, Set<Permission>> permissions =
+            new ConcurrentHashMap<>();
 
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     protected ApplicationIdStore idStore;
@@ -72,13 +76,20 @@
             ApplicationId appId = idStore.registerApplication(name);
             ApplicationDescription appDesc = getApplicationDescription(name);
             DefaultApplication app =
-                    new DefaultApplication(appId, appDesc.version(),
-                                           appDesc.description(), appDesc.origin(),
-                                           appDesc.category(), appDesc.url(),
-                                           appDesc.readme(), appDesc.icon(),
-                                           appDesc.role(), appDesc.permissions(),
-                                           appDesc.featuresRepo(), appDesc.features(),
-                                           appDesc.requiredApps());
+                    new DefaultApplication(appId,
+                            appDesc.version(),
+                            appDesc.title(),
+                            appDesc.description(),
+                            appDesc.origin(),
+                            appDesc.category(),
+                            appDesc.url(),
+                            appDesc.readme(),
+                            appDesc.icon(),
+                            appDesc.role(),
+                            appDesc.permissions(),
+                            appDesc.featuresRepo(),
+                            appDesc.features(),
+                            appDesc.requiredApps());
             apps.put(appId, app);
             states.put(appId, isActive(name) ? INSTALLED : ACTIVE);
             // load app permissions
@@ -118,12 +129,20 @@
         ApplicationDescription appDesc = saveApplication(appDescStream);
         ApplicationId appId = idStore.registerApplication(appDesc.name());
         DefaultApplication app =
-                new DefaultApplication(appId, appDesc.version(), appDesc.description(),
-                                       appDesc.origin(), appDesc.category(), appDesc.url(),
-                                       appDesc.readme(), appDesc.icon(),
-                                       appDesc.role(), appDesc.permissions(),
-                                       appDesc.featuresRepo(), appDesc.features(),
-                                       appDesc.requiredApps());
+                new DefaultApplication(appId,
+                        appDesc.version(),
+                        appDesc.title(),
+                        appDesc.description(),
+                        appDesc.origin(),
+                        appDesc.category(),
+                        appDesc.url(),
+                        appDesc.readme(),
+                        appDesc.icon(),
+                        appDesc.role(),
+                        appDesc.permissions(),
+                        appDesc.featuresRepo(),
+                        appDesc.features(),
+                        appDesc.requiredApps());
         apps.put(appId, app);
         states.put(appId, INSTALLED);
         delegate.notify(new ApplicationEvent(APP_INSTALLED, app));
diff --git a/core/common/src/test/resources/org/onosproject/common/app/app.xml b/core/common/src/test/resources/org/onosproject/common/app/app.xml
index f623722..0f84e61 100644
--- a/core/common/src/test/resources/org/onosproject/common/app/app.xml
+++ b/core/common/src/test/resources/org/onosproject/common/app/app.xml
@@ -13,8 +13,10 @@
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-<app name="org.foo.app" origin="Circus" version="1.2.a" category="other"
-     url="http://www.onosproject.org" featuresRepo="mvn:org.foo-features/1.2a/xml/features"
+<app name="org.foo.app" origin="Circus" version="1.2.a"
+     title="Awesome App" category="other"
+     url="http://www.onosproject.org"
+     featuresRepo="mvn:org.foo-features/1.2a/xml/features"
      features="foo,bar">
     <description>Awesome application from Circus, Inc.</description>
     <security>
diff --git a/core/common/src/test/resources/org/onosproject/common/app/app.zip b/core/common/src/test/resources/org/onosproject/common/app/app.zip
index 6ee64c0..137f9df 100644
--- a/core/common/src/test/resources/org/onosproject/common/app/app.zip
+++ b/core/common/src/test/resources/org/onosproject/common/app/app.zip
Binary files differ