AbstractYangModelRegistrator updated to allow apps to attach end-points to the service models

Change-Id: I2f893d0f77730cecae961bb9233aefe3c49cf4b1
diff --git a/apps/yang/src/main/java/org/onosproject/yang/AbstractYangModelRegistrator.java b/apps/yang/src/main/java/org/onosproject/yang/AbstractYangModelRegistrator.java
index 55e2a06..9180e16 100644
--- a/apps/yang/src/main/java/org/onosproject/yang/AbstractYangModelRegistrator.java
+++ b/apps/yang/src/main/java/org/onosproject/yang/AbstractYangModelRegistrator.java
@@ -22,12 +22,17 @@
 import org.apache.felix.scr.annotations.Reference;
 import org.apache.felix.scr.annotations.ReferenceCardinality;
 import org.onosproject.yang.model.YangModel;
+import org.onosproject.yang.model.YangModuleId;
+import org.onosproject.yang.runtime.AppModuleInfo;
 import org.onosproject.yang.runtime.DefaultModelRegistrationParam;
 import org.onosproject.yang.runtime.ModelRegistrationParam;
+import org.onosproject.yang.runtime.ModelRegistrationParam.Builder;
 import org.onosproject.yang.runtime.YangModelRegistry;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.util.Map;
+
 import static org.onosproject.yang.runtime.helperutils.YangApacheUtils.getYangModel;
 
 /**
@@ -38,10 +43,9 @@
 
     private final Logger log = LoggerFactory.getLogger(getClass());
     private final Class<?> loaderClass;
-
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     protected YangModelRegistry modelRegistry;
-
+    private Map<YangModuleId, AppModuleInfo> appInfo;
     private YangModel model;
     private ModelRegistrationParam registrationParam;
 
@@ -49,21 +53,46 @@
      * Creates a model registrator primed with the class-loader of the specified
      * class.
      *
-     * @param loaderClass class whose class loader is to be used for locating schema data
+     * @param loaderClass class whose class loader is to be used for locating
+     *                    schema data
      */
     protected AbstractYangModelRegistrator(Class<?> loaderClass) {
         this.loaderClass = loaderClass;
     }
 
+    /**
+     * Creates a model registrator primed with the class-loader of the specified
+     * class and application info.
+     *
+     * @param loaderClass class whose class loader is to be used for locating
+     *                    schema data
+     * @param appInfo     application information
+     */
+    protected AbstractYangModelRegistrator(Class<?> loaderClass,
+                                           Map<YangModuleId, AppModuleInfo> appInfo) {
+        this.loaderClass = loaderClass;
+        this.appInfo = appInfo;
+    }
+
     @Activate
     protected void activate() {
         model = getYangModel(loaderClass);
-        registrationParam = DefaultModelRegistrationParam.builder()
-                .setYangModel(model).build();
+        ModelRegistrationParam.Builder b =
+                DefaultModelRegistrationParam.builder().setYangModel(model);
+        registrationParam = getAppInfo(b).setYangModel(model).build();
         modelRegistry.registerModel(registrationParam);
         log.info("Started");
     }
 
+    private ModelRegistrationParam.Builder getAppInfo(Builder b) {
+        if (appInfo != null) {
+            appInfo.entrySet().stream().filter(
+                    entry -> model.getYangModule(entry.getKey()) != null).forEach(
+                    entry -> b.addAppModuleInfo(entry.getKey(), entry.getValue()));
+        }
+        return b;
+    }
+
     @Deactivate
     protected void deactivate() {
         modelRegistry.unregisterModel(registrationParam);