ONOS-1684 Added support for app dependencies.

Change-Id: Iae318c24c3c9bd43d84318c79ac420fc85d5d599
diff --git a/core/net/src/main/java/org/onosproject/app/impl/ApplicationManager.java b/core/net/src/main/java/org/onosproject/app/impl/ApplicationManager.java
index a9e928e..d09eb1f 100644
--- a/core/net/src/main/java/org/onosproject/app/impl/ApplicationManager.java
+++ b/core/net/src/main/java/org/onosproject/app/impl/ApplicationManager.java
@@ -212,6 +212,7 @@
     // The following methods are fully synchronized to guard against remote vs.
     // locally induced feature service interactions.
 
+    // Installs all feature repositories required by the specified app.
     private synchronized boolean installAppArtifacts(Application app) throws Exception {
         if (app.featuresRepo().isPresent() &&
                 featuresService.getRepository(app.featuresRepo().get()) == null) {
@@ -221,6 +222,7 @@
         return false;
     }
 
+    // Uninstalls all the feature repositories required by the specified app.
     private synchronized boolean uninstallAppArtifacts(Application app) throws Exception {
         if (app.featuresRepo().isPresent() &&
                 featuresService.getRepository(app.featuresRepo().get()) != null) {
@@ -230,6 +232,7 @@
         return false;
     }
 
+    // Installs all features that define the specified app.
     private synchronized boolean installAppFeatures(Application app) throws Exception {
         boolean changed = false;
         for (String name : app.features()) {
@@ -246,6 +249,7 @@
         return changed;
     }
 
+    // Uninstalls all features that define the specified app.
     private synchronized boolean uninstallAppFeatures(Application app) throws Exception {
         boolean changed = false;
         invokeHook(deactivateHooks.get(app.id().name()), app.id());
diff --git a/core/net/src/test/java/org/onosproject/app/impl/ApplicationManagerTest.java b/core/net/src/test/java/org/onosproject/app/impl/ApplicationManagerTest.java
index 5461cf0..a99fd21 100644
--- a/core/net/src/test/java/org/onosproject/app/impl/ApplicationManagerTest.java
+++ b/core/net/src/test/java/org/onosproject/app/impl/ApplicationManagerTest.java
@@ -15,6 +15,7 @@
  */
 package org.onosproject.app.impl;
 
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
 import org.junit.After;
 import org.junit.Before;
@@ -138,7 +139,7 @@
         @Override
         public Application create(InputStream appDescStream) {
             app = new DefaultApplication(APP_ID, VER, DESC, ORIGIN, ROLE, PERMS,
-                                         Optional.of(FURL), FEATURES);
+                                         Optional.of(FURL), FEATURES, ImmutableList.of());
             state = INSTALLED;
             delegate.notify(new ApplicationEvent(APP_INSTALLED, app));
             return app;
@@ -177,6 +178,11 @@
             state = INSTALLED;
             delegate.notify(new ApplicationEvent(APP_DEACTIVATED, app));
         }
+
+        @Override
+        public ApplicationId getId(String name) {
+            return new DefaultApplicationId(0, name);
+        }
     }
 
     private class TestFeaturesService extends FeaturesServiceAdapter {