[ONOS-7095] Registration/Unregistration to exclude dependent jar YANG nodes.

Change-Id: Id2768bcf98211ca58a92102651ec0f2346bfca16
diff --git a/runtime/src/main/java/org/onosproject/yang/runtime/impl/DefaultYangModelRegistry.java b/runtime/src/main/java/org/onosproject/yang/runtime/impl/DefaultYangModelRegistry.java
index b428030..d846bee 100644
--- a/runtime/src/main/java/org/onosproject/yang/runtime/impl/DefaultYangModelRegistry.java
+++ b/runtime/src/main/java/org/onosproject/yang/runtime/impl/DefaultYangModelRegistry.java
@@ -25,6 +25,7 @@
 import org.onosproject.yang.compiler.datamodel.YangSchemaNodeIdentifier;
 import org.onosproject.yang.compiler.datamodel.YangSubModule;
 import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.tool.YangModuleExtendedInfo;
 import org.onosproject.yang.model.DataNode;
 import org.onosproject.yang.model.SchemaContext;
 import org.onosproject.yang.model.SchemaId;
@@ -49,6 +50,7 @@
 import static java.util.Collections.unmodifiableSet;
 import static org.onosproject.yang.compiler.datamodel.utils.DataModelUtils.getDateInStringFormat;
 import static org.onosproject.yang.compiler.datamodel.utils.DataModelUtils.getNodeIdFromSchemaId;
+import static org.onosproject.yang.compiler.tool.YangCompilerManager.processModuleId;
 import static org.onosproject.yang.compiler.utils.UtilConstants.REGEX;
 import static org.onosproject.yang.model.DataNode.Type.SINGLE_INSTANCE_NODE;
 import static org.onosproject.yang.runtime.RuntimeHelper.getInterfaceClassName;
@@ -152,8 +154,17 @@
             throw new IllegalArgumentException(E_MEXIST);
         }
 
-        //Register all the YANG nodes.
-        registerModule(curNodes);
+        //Register all the YANG nodes, excluding nodes from dependent jar.
+        if (curNodes != null && !curNodes.isEmpty()) {
+            for (YangNode node : curNodes) {
+                YangModuleId mid = processModuleId(node);
+                YangModuleExtendedInfo m =
+                        (YangModuleExtendedInfo) model.getYangModule(mid);
+                if (!m.isInterJar()) {
+                    registerModule(node);
+                }
+            }
+        }
 
         //update child context
         updateChildContext(curNodes);
@@ -162,21 +173,17 @@
     /**
      * Register specific model.
      *
-     * @param curNodes current nodes
+     * @param node YANG node
      */
-    private void registerModule(Set<YangNode> curNodes) {
+    private void registerModule(YangNode node) {
         String name;
         //register all the nodes present in YANG model.
-        if (curNodes != null && !curNodes.isEmpty()) {
-            for (YangNode node : curNodes) {
-                name = getInterfaceClassName(node);
-                if (!regClassNameKeyStore.containsKey(name)) {
-                    processApplicationContext(node, name);
-                } else {
-                    log.info("class already registered with model registry " +
-                                     "{}", name);
-                }
-            }
+        name = getInterfaceClassName(node);
+        if (!regClassNameKeyStore.containsKey(name)) {
+            processApplicationContext(node, name);
+        } else {
+            log.info("class already registered with model registry " +
+                             "{}", name);
         }
     }
 
@@ -185,10 +192,17 @@
         synchronized (DefaultYangModelRegistry.class) {
             YangModel model = checkNotNull(param.getYangModel(), E_NULL);
             modelIdStore.remove(model.getYangModelId());
-            //Unregister all yang files
+            //Unregister all yang files, excluding nodes from dependent jar.
             Set<YangNode> curNodes = getNodes(model);
-            for (YangNode node : curNodes) {
-                processUnReg(getInterfaceClassName(node));
+            if (curNodes != null && !curNodes.isEmpty()) {
+                for (YangNode node : curNodes) {
+                    YangModuleId id = processModuleId(node);
+                    YangModuleExtendedInfo m =
+                            (YangModuleExtendedInfo) model.getYangModule(id);
+                    if (!m.isInterJar()) {
+                        processUnReg(getInterfaceClassName(node));
+                    }
+                }
             }
         }
     }
@@ -500,14 +514,18 @@
      *
      * @param param model registrations param
      */
-    public void updateRegClassStore(ModelRegistrationParam param) {
+    void updateRegClassStore(ModelRegistrationParam param) {
         Class<?> service;
         AppModuleInfo info;
         for (YangModuleId id : param.getYangModel().getYangModulesId()) {
-            info = param.getAppModuleInfo(id);
-            if (info != null) {
-                service = info.getModuleClass();
-                addRegClass(service.getName(), service);
+            YangModuleExtendedInfo i = (YangModuleExtendedInfo) param
+                    .getYangModel().getYangModule(id);
+            if (!i.isInterJar()) {
+                info = param.getAppModuleInfo(id);
+                if (info != null) {
+                    service = info.getModuleClass();
+                    addRegClass(service.getName(), service);
+                }
             }
         }
     }
@@ -518,7 +536,7 @@
      * @param name    qualified name of the class
      * @param service generated class
      */
-    public void addRegClass(String name, Class<?> service) {
+    void addRegClass(String name, Class<?> service) {
         if (!registerClassStore.containsKey(name)) {
             registerClassStore.put(name, service);
         }