[ONOS-6032] Yang regisry optimization

Change-Id: I5f91058f23b0cde95bdc0227bf88b3db5ef18c4b
diff --git a/runtime/src/main/java/org/onosproject/yang/runtime/AppModuleInfo.java b/runtime/src/main/java/org/onosproject/yang/runtime/AppModuleInfo.java
index 4ad75a4..baa1450 100644
--- a/runtime/src/main/java/org/onosproject/yang/runtime/AppModuleInfo.java
+++ b/runtime/src/main/java/org/onosproject/yang/runtime/AppModuleInfo.java
@@ -20,7 +20,8 @@
 
 /**
  * Representation of an entity which defines additional information about the
- * module required for the model registration.
+ * module required for the model registration. App info should only contain
+ * interface/service file generated for module node.
  */
 public interface AppModuleInfo {
 
diff --git a/runtime/src/main/java/org/onosproject/yang/runtime/helperutils/RuntimeHelper.java b/runtime/src/main/java/org/onosproject/yang/runtime/helperutils/RuntimeHelper.java
index 79fe85d..4139fc4 100644
--- a/runtime/src/main/java/org/onosproject/yang/runtime/helperutils/RuntimeHelper.java
+++ b/runtime/src/main/java/org/onosproject/yang/runtime/helperutils/RuntimeHelper.java
@@ -21,11 +21,7 @@
 import org.onosproject.yang.model.YangModel;
 import org.onosproject.yang.model.YangModule;
 
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.ObjectInputStream;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.Set;
 
 import static org.onosproject.yang.runtime.helperutils.YangApacheUtils.getYangModel;
@@ -65,22 +61,9 @@
      */
     public static Set<YangNode> getNodes(YangModel model) {
         Set<YangNode> nodes = new HashSet<>();
-        Iterator<YangModule> it = model.getYangModules().iterator();
-        YangModule module;
-        InputStream is;
-        if (it.hasNext()) {
-            module = it.next();
-            is = module.getMetadata();
-            ObjectInputStream os;
-            try {
-                os = new ObjectInputStream(is);
-                nodes.addAll((Set<YangNode>) os.readObject());
-                os.close();
-                is.close();
-            } catch (IOException | ClassNotFoundException e) {
-                throw new RuntimeException("failed to deserialize model" + e
-                        .getLocalizedMessage());
-            }
+        for (YangModule info : model.getYangModules()) {
+            YangModuleExtendedInfo ex = (YangModuleExtendedInfo) info;
+            nodes.add(ex.getSchema());
         }
         return nodes;
     }
diff --git a/runtime/src/main/java/org/onosproject/yang/runtime/helperutils/YangApacheUtils.java b/runtime/src/main/java/org/onosproject/yang/runtime/helperutils/YangApacheUtils.java
index 3514ab9..439334a 100644
--- a/runtime/src/main/java/org/onosproject/yang/runtime/helperutils/YangApacheUtils.java
+++ b/runtime/src/main/java/org/onosproject/yang/runtime/helperutils/YangApacheUtils.java
@@ -17,12 +17,9 @@
 package org.onosproject.yang.runtime.helperutils;
 
 import org.onosproject.yang.compiler.datamodel.YangNode;
-import org.onosproject.yang.compiler.datamodel.YangSchemaNode;
 import org.onosproject.yang.model.DefaultYangModel;
-import org.onosproject.yang.model.DefaultYangModule;
 import org.onosproject.yang.model.DefaultYangModuleId;
 import org.onosproject.yang.model.YangModel;
-import org.onosproject.yang.model.YangModule;
 import org.onosproject.yang.model.YangModuleId;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
@@ -31,7 +28,6 @@
 import java.io.File;
 import java.io.IOException;
 import java.text.SimpleDateFormat;
-import java.util.Iterator;
 import java.util.List;
 import java.util.regex.Pattern;
 
@@ -97,12 +93,11 @@
                                              List<YangNode> curNodes) {
         YangModel.Builder b = DefaultYangModel.builder();
         YangModuleId id;
-        Iterator<YangNode> it = curNodes.iterator();
-        while (it.hasNext()) {
-            YangSchemaNode node = it.next();
-            id = processModuleId((YangNode) node);
-            YangModule module =
-                    new DefaultYangModule(id, get(node.getFileName()), get(path));
+        for (YangNode node : curNodes) {
+            id = processModuleId(node);
+            YangModuleExtendedInfo module =
+                    new YangModuleExtendedInfo(id, get(node.getFileName()), get(path));
+            module.setSchema(node);
             b.addModule(id, module);
         }
         return b.build();
diff --git a/runtime/src/main/java/org/onosproject/yang/runtime/helperutils/YangModuleExtendedInfo.java b/runtime/src/main/java/org/onosproject/yang/runtime/helperutils/YangModuleExtendedInfo.java
new file mode 100644
index 0000000..cc85080
--- /dev/null
+++ b/runtime/src/main/java/org/onosproject/yang/runtime/helperutils/YangModuleExtendedInfo.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2017-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.yang.runtime.helperutils;
+
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.model.DefaultYangModule;
+import org.onosproject.yang.model.YangModuleId;
+
+import java.nio.file.Path;
+
+/**
+ * Represents extended info for YANG module.
+ */
+public class YangModuleExtendedInfo extends DefaultYangModule {
+
+    private YangNode schema;
+
+    /**
+     * Creates an instance of YANG module extended information.
+     *
+     * @param id       module id
+     * @param yangSrc  YANG resource path
+     * @param metadata meta data resource path
+     */
+    YangModuleExtendedInfo(YangModuleId id, Path yangSrc, Path metadata) {
+        super(id, yangSrc, metadata);
+    }
+
+
+    /**
+     * Returns schema info for module.
+     *
+     * @return schema info for module
+     */
+    public YangNode getSchema() {
+        return schema;
+    }
+
+    /**
+     * Sets  schema info for module.
+     *
+     * @param schema schema info for module
+     */
+    public void setSchema(YangNode schema) {
+        this.schema = schema;
+    }
+}
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 e2d470f..ca3b84e 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
@@ -29,7 +29,6 @@
 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.YangModelRegistry;
 import org.slf4j.Logger;
@@ -46,10 +45,10 @@
 import static java.util.Collections.sort;
 import static java.util.Collections.unmodifiableSet;
 import static org.onosproject.yang.compiler.datamodel.utils.DataModelUtils.getNodeIdFromSchemaId;
+import static org.onosproject.yang.model.DataNode.Type.SINGLE_INSTANCE_NODE;
 import static org.onosproject.yang.runtime.helperutils.RuntimeHelper.getDateInStringFormat;
 import static org.onosproject.yang.runtime.helperutils.RuntimeHelper.getInterfaceClassName;
 import static org.onosproject.yang.runtime.helperutils.RuntimeHelper.getNodes;
-import static org.onosproject.yang.runtime.helperutils.RuntimeHelper.getOpParamClassName;
 import static org.onosproject.yang.runtime.helperutils.RuntimeHelper.getServiceName;
 import static org.slf4j.LoggerFactory.getLogger;
 
@@ -71,26 +70,15 @@
 
     /*
      * Map for storing YANG schema nodes with respect to root's generated
-     * interface file name.
+     * file name by which registration is being done.
      */
-    private final ConcurrentMap<String, YangSchemaNode> interfaceNameKeyStore;
+    private final ConcurrentMap<String, YangSchemaNode> regClassNameKeyStore;
 
     /*
      * Map for storing YANG schema nodes with respect to root's generated
-     * interface file name.
+     * file's qualified name.
      */
-    private final ConcurrentMap<String, YangSchemaNode> pkgKeyStore;
-
-    /*
-     * Map for storing YANG schema nodes root's generated op param file name.
-     */
-    private final ConcurrentMap<String, YangSchemaNode> opParamNameKeyStore;
-
-    /*
-     * Map for storing YANG schema nodes with respect to app name. Key will
-     * be the registered class name.
-     */
-    private final ConcurrentMap<String, YangSchemaNode> appNameKeyStore;
+    private final ConcurrentMap<String, YangSchemaNode> qNameKeyStore;
 
     /*
      * Map for storing registered classes. Will be used by YOB for class
@@ -111,23 +99,15 @@
     private final Set<YangModel> models;
 
     /**
-     * Represents the schema id for model registry.
-     */
-    private SchemaId schemaId;
-
-    /**
      * Creates an instance of default YANG schema registry.
      */
     public DefaultYangModelRegistry() {
         models = new LinkedHashSet<>();
         yangSchemaStore = new ConcurrentHashMap<>();
-        interfaceNameKeyStore = new ConcurrentHashMap<>();
-        opParamNameKeyStore = new ConcurrentHashMap<>();
+        regClassNameKeyStore = new ConcurrentHashMap<>();
         registerClassStore = new ConcurrentHashMap<>();
-        appNameKeyStore = new ConcurrentHashMap<>();
         nameSpaceSchemaStore = new ConcurrentHashMap<>();
-        pkgKeyStore = new ConcurrentHashMap<>();
-        schemaId = new SchemaId("/", null);
+        qNameKeyStore = new ConcurrentHashMap<>();
     }
 
     @Override
@@ -135,53 +115,45 @@
         YangModel model = checkNotNull(param.getYangModel(), "Model must not be null");
         Set<YangNode> curNodes = getNodes(model);
         models.add(model);
+        String name;
+        Class<?> service;
         AppModuleInfo info;
-        //TODO: changing for models-demo app to work.
-        if (checkForAppInfo(param)) {
-            for (YangModuleId id : model.getYangModulesId()) {
-                info = param.getAppModuleInfo(id);
-                if (info != null) {
-                    registerModule(curNodes, info);
+        //adding class info if added by application.
+        for (YangModuleId id : model.getYangModulesId()) {
+            info = param.getAppModuleInfo(id);
+            if (info != null) {
+                service = info.getModuleClass();
+                name = service.getName();
+                if (!registerClassStore.containsKey(name)) {
+                    registerClassStore.put(name, service);
                 }
             }
-        } else {
-            //TODO: check this after demo1:
-            registerWhenAppInfoNull(curNodes);
         }
-        updateChildContext(curNodes);
-    }
 
-    /**
-     * Registerer all the model if app info is null.
-     *
-     * @param curNodes current nodes
-     */
-    private void registerWhenAppInfoNull(Set<YangNode> curNodes) {
-        String name;
-        for (YangNode node : curNodes) {
-            name = getInterfaceClassName(node);
-            if (!interfaceNameKeyStore.containsKey(name)) {
-                processApplicationContext(node, name);
-            }
-        }
+        //Register all the YANG nodes.
+        registerModule(curNodes);
+
+        //update child context
+        updateChildContext(curNodes);
     }
 
     /**
      * Register specific model.
      *
      * @param curNodes current nodes
-     * @param info     application info
      */
-    private void registerModule(Set<YangNode> curNodes, AppModuleInfo info) {
-        Class<?> service;
-        service = info.getModuleClass();
-        String name = service.getName();
-        if (!verifyIfApplicationAlreadyRegistered(service)) {
-            if (!registerClassStore.containsKey(name)) {
-                registerClassStore.put(name, service);
-            }
-            if (curNodes != null && !curNodes.isEmpty()) {
-                processRegistration(service, curNodes);
+    private void registerModule(Set<YangNode> curNodes) {
+        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);
+                }
             }
         }
     }
@@ -189,62 +161,27 @@
     @Override
     public void unregisterModel(ModelRegistrationParam param) {
         synchronized (DefaultYangModelRegistry.class) {
-            YangModel model = checkNotNull(param.getYangModel(), "Model must not be null");
+            YangModel model = checkNotNull(param.getYangModel(),
+                                           "Model must not be null");
             models.remove(model);
-            AppModuleInfo info;
-            //TODO: changing for models-demo app to work
-            if (checkForAppInfo(param)) {
-                for (YangModuleId id : model.getYangModulesId()) {
-                    info = param.getAppModuleInfo(id);
-                    if (info != null) {
-                        unregisterModule(info);
-                    }
-                }
-            } else {
-                Set<YangNode> curNodes = getNodes(model);
-                for (YangNode cur : curNodes) {
-                    processUnReg(getInterfaceClassName(cur));
-                }
+            //Unregister all yang files
+            Set<YangNode> curNodes = getNodes(model);
+            for (YangNode node : curNodes) {
+                processUnReg(getInterfaceClassName(node));
             }
         }
     }
 
-    /**
-     * Checks if current application has any application info.
-     *
-     * @param param model param
-     * @return if current application has any application info
-     */
-    private boolean checkForAppInfo(ModelRegistrationParam param) {
-        return ((DefaultModelRegistrationParam) param).ifAppInfoPresent();
-    }
-
-    private void unregisterModule(AppModuleInfo info) {
-        Class<?> sClass = info.getModuleClass();
-        String serviceName = sClass.getName();
-        //Remove registered class from store.
-        registerClassStore.remove(serviceName);
-        //check if service is in app store.
-        processUnReg(serviceName);
-    }
-
     private void processUnReg(String serviceName) {
-        YangSchemaNode curNode = appNameKeyStore.get(serviceName);
-        if (curNode == null) {
-            curNode = interfaceNameKeyStore.get(serviceName);
-        }
+        YangSchemaNode curNode = regClassNameKeyStore.get(serviceName);
 
         if (curNode != null) {
             removeSchemaNode(curNode);
-            interfaceNameKeyStore.remove(
-                    getInterfaceClassName(curNode));
-            pkgKeyStore.remove(getInterfaceClassName(curNode)
-                                       .toLowerCase());
-            opParamNameKeyStore.remove(
-                    getOpParamClassName(curNode));
-            appNameKeyStore.remove(serviceName);
+            regClassNameKeyStore.remove(serviceName);
+            qNameKeyStore.remove(serviceName.toLowerCase());
             nameSpaceSchemaStore.remove(
                     curNode.getNameSpace().getModuleNamespace());
+            registerClassStore.remove(serviceName);
             log.info(" service class {} of model is " +
                              "unregistered.", serviceName);
         } else {
@@ -266,34 +203,19 @@
      * @param schemaName schema name
      * @return YANG schema node
      */
-    public YangSchemaNode getForSchemaName(String schemaName) {
+    YangSchemaNode getForSchemaName(String schemaName) {
         return getForNameWithRev(schemaName);
     }
 
     /**
      * Returns schema node for the given name. Name should be generated class
-     * name. the name provided here should be for registered service class.
-     *
-     * @param appName application name
-     * @return YANG schema node
-     */
-    public YangSchemaNode getForAppName(String appName) {
-        YangSchemaNode node = appNameKeyStore.get(appName);
-        if (node == null) {
-            log.error("{} not found.", appName);
-        }
-        return node;
-    }
-
-    /**
-     * Returns schema node for the given name. Name should be generated class
-     * name. the name provided here should be for registered interface class.
+     * name. the name provided here should be for registered class.
      *
      * @param name interface class name
      * @return YANG schema node
      */
-    public YangSchemaNode getForInterfaceFileName(String name) {
-        YangSchemaNode node = interfaceNameKeyStore.get(name);
+    YangSchemaNode getForRegClassName(String name) {
+        YangSchemaNode node = regClassNameKeyStore.get(name);
         if (node == null) {
             log.error("{} not found.", name);
         }
@@ -310,8 +232,8 @@
      * @param isFromDnb true when request has come from data tree builder
      * @return YANG schema node
      */
-    public YangSchemaNode getForInterfaceFilePkg(String pkg, boolean isFromDnb) {
-        YangSchemaNode node = pkgKeyStore.get(pkg);
+    YangSchemaNode getForRegClassQualifiedName(String pkg, boolean isFromDnb) {
+        YangSchemaNode node = qNameKeyStore.get(pkg);
         if (node == null && !isFromDnb) {
             log.error("{} not found.", pkg);
         }
@@ -319,22 +241,6 @@
     }
 
     /**
-     * Returns schema node for the given name. Name should be generated class
-     * name. the name provided here should be for registered op param class.
-     *
-     * @param name opparm class name
-     * @return YANG schema node
-     */
-    public YangSchemaNode getForOpPramFileName(
-            String name) {
-        YangSchemaNode node = opParamNameKeyStore.get(name);
-        if (node == null) {
-            log.error("{} not found.", name);
-        }
-        return node;
-    }
-
-    /**
      * Returns schema node for the given name. Name should be nodes namespace
      * defined in YANG file
      *
@@ -358,7 +264,7 @@
      * @param schemaNode schema node
      * @return registered class
      */
-    public Class<?> getRegisteredClass(YangSchemaNode schemaNode) {
+    Class<?> getRegisteredClass(YangSchemaNode schemaNode) {
         Class<?> regClass = null;
         if (schemaNode != null) {
             String interfaceName = getInterfaceClassName(schemaNode);
@@ -375,79 +281,20 @@
     }
 
     /**
-     * Process application registration.
-     *
-     * @param service service class
-     * @param nodes   YANG nodes
-     */
-    private void processRegistration(Class<?> service, Set<YangNode> nodes) {
-
-        // process storing operations.
-        YangNode schemaNode = findNodeWhichShouldBeReg(service.getName(),
-                                                       nodes);
-        if (schemaNode != null) {
-            //Process application context for registrations.
-            processApplicationContext(schemaNode, service.getName());
-        }
-    }
-
-    /**
-     * Returns the node for which corresponding class is generated.
-     *
-     * @param name  generated class name
-     * @param nodes list of yang nodes
-     * @return node for which corresponding class is generated
-     */
-    private YangNode findNodeWhichShouldBeReg(String name,
-                                              Set<YangNode> nodes) {
-        for (YangNode node : nodes) {
-            if (name.equals(getServiceName(node)) ||
-                    name.equals(getInterfaceClassName(node))) {
-                return node;
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Verifies if application is already registered with runtime.
-     *
-     * @param appClass application class
-     * @return true if application already registered
-     */
-    private boolean verifyIfApplicationAlreadyRegistered(Class<?> appClass) {
-        String appName = appClass.getName();
-        return registerClassStore.containsKey(appName) ||
-                interfaceNameKeyStore.containsKey(appName);
-    }
-
-    /**
      * Process an application an updates the maps for YANG model registry.
      *
      * @param appNode application YANG schema nodes
      * @param name    class name
      */
-    public void processApplicationContext(YangSchemaNode appNode,
-                                          String name) {
-
-        //Update map for which registrations is being called.
-        try {
-            if (appNode.isNotificationPresent() || appNode.isRpcPresent()) {
-                appNameKeyStore.put(name, appNode);
-            }
-        } catch (DataModelException e) {
-            log.error("error occurred due to {}", e.getLocalizedMessage());
-        }
+    void processApplicationContext(YangSchemaNode appNode, String name) {
 
         // Updates schema store.
         addToSchemaStore(appNode);
+
         // update interface store.
-        interfaceNameKeyStore.put(getInterfaceClassName(appNode), appNode);
+        regClassNameKeyStore.put(name, appNode);
 
-        pkgKeyStore.put(getInterfaceClassName(appNode).toLowerCase(), appNode);
-
-        //update op param store.
-        opParamNameKeyStore.put(getOpParamClassName(appNode), appNode);
+        qNameKeyStore.put(getInterfaceClassName(appNode).toLowerCase(), appNode);
 
         //update namespaceSchema store.
         nameSpaceSchemaStore.put(appNode.getNameSpace().getModuleNamespace(),
@@ -551,12 +398,12 @@
 
     @Override
     public DataNode.Type getType() {
-        return DataNode.Type.SINGLE_INSTANCE_NODE;
+        return SINGLE_INSTANCE_NODE;
     }
 
     @Override
     public SchemaId getSchemaId() {
-        return schemaId;
+        return new SchemaId("/", null);
     }
 
     /**
diff --git a/runtime/src/main/java/org/onosproject/yang/runtime/impl/ModIdToRscIdConverter.java b/runtime/src/main/java/org/onosproject/yang/runtime/impl/ModIdToRscIdConverter.java
index 70ba78e..270e315 100644
--- a/runtime/src/main/java/org/onosproject/yang/runtime/impl/ModIdToRscIdConverter.java
+++ b/runtime/src/main/java/org/onosproject/yang/runtime/impl/ModIdToRscIdConverter.java
@@ -135,7 +135,7 @@
      */
     YangSchemaNode fetchModNodeFromLeaf(String pkg) {
         String[] array = pkg.split(Pattern.quote("$"));
-        return reg.getForInterfaceFileName(array[0]);
+        return reg.getForRegClassName(array[0]);
     }
 
     /**
@@ -162,8 +162,8 @@
         // because the next string will be rpc name in received from fetch
         // package method.
         modPkg.deleteCharAt(modPkg.lastIndexOf(PERIOD));
-        YangNode node = (YangNode) reg.getForInterfaceFilePkg(modPkg.toString(),
-                                                              true);
+        YangNode node = (YangNode) reg.getForRegClassQualifiedName(modPkg.toString(),
+                                                                   true);
         if (node != null) {
             isInputOrOutput = true;
             modNode = node;
@@ -185,7 +185,7 @@
             modPkg.append(PERIOD);
             //In this case this package will be of module fetchNode.
             modPkg.append(strArray[i]);
-            modNode = reg.getForInterfaceFilePkg(modPkg.toString(), false);
+            modNode = reg.getForRegClassQualifiedName(modPkg.toString(), false);
         }
         return modNode;
     }
diff --git a/runtime/src/test/java/org/onosproject/yang/runtime/impl/DefaultYangModelRegistryTest.java b/runtime/src/test/java/org/onosproject/yang/runtime/impl/DefaultYangModelRegistryTest.java
index 45419a1..f3af240 100644
--- a/runtime/src/test/java/org/onosproject/yang/runtime/impl/DefaultYangModelRegistryTest.java
+++ b/runtime/src/test/java/org/onosproject/yang/runtime/impl/DefaultYangModelRegistryTest.java
@@ -16,9 +16,7 @@
 
 package org.onosproject.yang.runtime.impl;
 
-import org.junit.Rule;
 import org.junit.Test;
-import org.junit.rules.ExpectedException;
 import org.onosproject.yang.compiler.datamodel.YangNode;
 import org.onosproject.yang.compiler.datamodel.YangRevision;
 import org.onosproject.yang.compiler.datamodel.YangSchemaNode;
@@ -36,71 +34,31 @@
  */
 public class DefaultYangModelRegistryTest {
 
-    private static final String SERVICE_NAME_3 =
-            "org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf" +
-                    ".network3.rev20151208.IetfNetwork3Service";
     private static final String SCHEMA_NAME_3 = "ietf-network3";
     private static final String INTERFACE_NAME_3 =
             "org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf" +
                     ".network3.rev20151208.IetfNetwork3";
-    private static final String OP_PARAM_NAME_3 =
-            "org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf" +
-                    ".network3.rev20151208.IetfNetwork3OpParam";
 
     private static final String SCHEMA_NAME_4_14 = "ietf-network4@2014-00-08";
     private static final String SCHEMA_NAME_4_15 = "ietf-network4@2015-00-08";
     private static final String SCHEMA_NAME_4_16 = "ietf-network4@2016-00-08";
     private static final String SCHEMA_NAME_4_17 = "ietf-network4@2017-00-08";
     private static final String SCHEMA_NAME_4 = "ietf-network4";
-    private static final String SERVICE_NAME_REV_14 =
-            "org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf" +
-                    ".network4.rev20141208.IetfNetwork4Service";
     private static final String INTERFACE_NAME_REV_14 =
             "org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf" +
                     ".network4.rev20141208.IetfNetwork4";
-    private static final String OP_PARAM_NAME_REV_14 =
-            "org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf" +
-                    ".network4.rev20141208.IetfNetwork4OpParam";
-
-    private static final String SERVICE_NAME_REV_15 =
-            "org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf" +
-                    ".network4.rev20151208.IetfNetwork4Service";
     private static final String INTERFACE_NAME_REV_15 =
             "org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf" +
                     ".network4.rev20151208.IetfNetwork4";
-    private static final String OP_PARAM_NAME_REV_15 =
-            "org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf" +
-                    ".network4.rev20151208.IetfNetwork4OpParam";
-
-    private static final String SERVICE_NAME_REV_16 =
-            "org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf" +
-                    ".network4.rev20161208.IetfNetwork4Service";
     private static final String INTERFACE_NAME_REV_16 =
             "org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf" +
                     ".network4.rev20161208.IetfNetwork4";
-    private static final String OP_PARAM_NAME_REV_16 =
-            "org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf" +
-                    ".network4.rev20161208.IetfNetwork4OpParam";
-
-    private static final String SERVICE_NAME_REV_17 =
-            "org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf" +
-                    ".network4.rev20171208.IetfNetwork4Service";
     private static final String INTERFACE_NAME_REV_17 =
             "org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf" +
                     ".network4.rev20171208.IetfNetwork4";
-    private static final String OP_PARAM_NAME_REV_17 =
-            "org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf" +
-                    ".network4.rev20171208.IetfNetwork4OpParam";
-
-    private static final String SERVICE_NAME_NO_REV =
-            "org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf" +
-                    ".network4.IetfNetwork4Service";
     private static final String INTERFACE_NAME_NO_REV =
             "org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf" +
                     ".network4.IetfNetwork4";
-    private static final String OP_PARAM_NAME_NO_REV =
-            "org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf" +
-                    ".network4.IetfNetwork4OpParam";
 
     private static final String CHECK = "check";
     private static final String DATE_NAMESPACE = "2015-00-08";
@@ -109,8 +67,6 @@
 
     private final TestYangSchemaNodeProvider provider =
             new TestYangSchemaNodeProvider();
-    @Rule
-    public ExpectedException thrown = ExpectedException.none();
 
     /**
      * Unit test case in which schema node should be present.
@@ -129,10 +85,7 @@
         YangSchemaNode yangNode = registry.getForSchemaName(SCHEMA_NAME_3);
         assertThat(true, is(SCHEMA_NAME_3.equals(yangNode.getName())));
 
-        yangNode = registry.getForInterfaceFileName(INTERFACE_NAME_3);
-        assertThat(true, is(SCHEMA_NAME_3.equals(yangNode.getName())));
-
-        yangNode = registry.getForOpPramFileName(OP_PARAM_NAME_3);
+        yangNode = registry.getForRegClassName(INTERFACE_NAME_3);
         assertThat(true, is(SCHEMA_NAME_3.equals(yangNode.getName())));
 
         Class<?> cls = registry.getRegisteredClass(yangNode);
@@ -142,16 +95,10 @@
         nodes.add((YangNode) yangNode);
         provider.unRegister(nodes);
 
-        yangNode = registry.getForAppName(SERVICE_NAME_3);
-        assertThat(true, is(yangNode == null));
-
         yangNode = registry.getForSchemaName(SCHEMA_NAME_3);
         assertThat(true, is(yangNode == null));
 
-        yangNode = registry.getForInterfaceFileName(INTERFACE_NAME_3);
-        assertThat(true, is(yangNode == null));
-
-        yangNode = registry.getForOpPramFileName(OP_PARAM_NAME_3);
+        yangNode = registry.getForRegClassName(INTERFACE_NAME_3);
         assertThat(true, is(yangNode == null));
 
         cls = registry.getRegisteredClass(yangNode);
@@ -176,10 +123,7 @@
         YangSchemaNode yangNode = registry.getForSchemaName(SCHEMA_NAME_4_15);
         assertThat(true, is(SCHEMA_NAME_4.equals(yangNode.getName())));
 
-        yangNode = registry.getForInterfaceFileName(INTERFACE_NAME_REV_15);
-        assertThat(true, is(SCHEMA_NAME_4.equals(yangNode.getName())));
-
-        yangNode = registry.getForOpPramFileName(OP_PARAM_NAME_REV_15);
+        yangNode = registry.getForRegClassName(INTERFACE_NAME_REV_15);
         assertThat(true, is(SCHEMA_NAME_4.equals(yangNode.getName())));
 
         Class<?> cls = registry.getRegisteredClass(yangNode);
@@ -189,16 +133,10 @@
         nodes.add((YangNode) yangNode);
         provider.unRegister(nodes);
 
-        yangNode = registry.getForAppName(SERVICE_NAME_REV_15);
-        assertThat(true, is(yangNode == null));
-
         yangNode = registry.getForSchemaName(SCHEMA_NAME_4);
         assertThat(true, is(yangNode != null));
 
-        yangNode = registry.getForInterfaceFileName(INTERFACE_NAME_REV_15);
-        assertThat(true, is(yangNode == null));
-
-        yangNode = registry.getForOpPramFileName(OP_PARAM_NAME_REV_15);
+        yangNode = registry.getForRegClassName(INTERFACE_NAME_REV_15);
         assertThat(true, is(yangNode == null));
 
         cls = registry.getRegisteredClass(yangNode);
@@ -214,10 +152,7 @@
         yangNode = registry.getForSchemaName(SCHEMA_NAME_4);
         assertThat(true, is(SCHEMA_NAME_4.equals(yangNode.getName())));
 
-        yangNode = registry.getForInterfaceFileName(INTERFACE_NAME_NO_REV);
-        assertThat(true, is(SCHEMA_NAME_4.equals(yangNode.getName())));
-
-        yangNode = registry.getForOpPramFileName(OP_PARAM_NAME_NO_REV);
+        yangNode = registry.getForRegClassName(INTERFACE_NAME_NO_REV);
         assertThat(true, is(SCHEMA_NAME_4.equals(yangNode.getName())));
 
         cls = registry.getRegisteredClass(yangNode);
@@ -227,18 +162,12 @@
         nodes.add((YangNode) yangNode);
         provider.unRegister(nodes);
 
-        yangNode = registry.getForAppName(SERVICE_NAME_NO_REV);
-        assertThat(true, is(yangNode == null));
-
         //Here the yangNode should be the node which have different revision.
         yangNode = registry.getForSchemaName(SCHEMA_NAME_4);
         assertThat(true, is(yangNode != null));
         assertThat(true, is(((YangNode) yangNode).getRevision() != null));
 
-        yangNode = registry.getForInterfaceFileName(INTERFACE_NAME_NO_REV);
-        assertThat(true, is(yangNode == null));
-
-        yangNode = registry.getForOpPramFileName(OP_PARAM_NAME_NO_REV);
+        yangNode = registry.getForRegClassName(INTERFACE_NAME_NO_REV);
         assertThat(true, is(yangNode == null));
 
         cls = registry.getRegisteredClass(yangNode);
@@ -263,10 +192,7 @@
         YangSchemaNode yangNode = registry.getForSchemaName(SCHEMA_NAME_4_15);
         assertThat(true, is(SCHEMA_NAME_4.equals(yangNode.getName())));
 
-        yangNode = registry.getForInterfaceFileName(INTERFACE_NAME_REV_15);
-        assertThat(true, is(SCHEMA_NAME_4.equals(yangNode.getName())));
-
-        yangNode = registry.getForOpPramFileName(OP_PARAM_NAME_REV_15);
+        yangNode = registry.getForRegClassName(INTERFACE_NAME_REV_15);
         assertThat(true, is(SCHEMA_NAME_4.equals(yangNode.getName())));
 
         Class<?> cls = registry.getRegisteredClass(yangNode);
@@ -276,16 +202,10 @@
         nodes.add((YangNode) yangNode);
         provider.unRegister(nodes);
 
-        yangNode = registry.getForAppName(SERVICE_NAME_REV_15);
-        assertThat(true, is(yangNode == null));
-
         yangNode = registry.getForSchemaName(SCHEMA_NAME_4);
         assertThat(true, is(yangNode != null));
 
-        yangNode = registry.getForInterfaceFileName(INTERFACE_NAME_REV_15);
-        assertThat(true, is(yangNode == null));
-
-        yangNode = registry.getForOpPramFileName(OP_PARAM_NAME_REV_15);
+        yangNode = registry.getForRegClassName(INTERFACE_NAME_REV_15);
         assertThat(true, is(yangNode == null));
 
         //Here the yangNode should be the node which does not have revision.
@@ -303,17 +223,10 @@
         yangNode = registry.getForSchemaName(SCHEMA_NAME_4);
         assertThat(true, is(((YangNode) yangNode).getRevision() == null));
 
-        //Service with different revision.
-        yangNode = registry.getForAppName(SERVICE_NAME_REV_16);
-        assertThat(true, is(yangNode == null));
-
         yangNode = registry.getForSchemaName(SCHEMA_NAME_4_16);
         assertThat(true, is(SCHEMA_NAME_4.equals(yangNode.getName())));
 
-        yangNode = registry.getForInterfaceFileName(INTERFACE_NAME_REV_16);
-        assertThat(true, is(SCHEMA_NAME_4.equals(yangNode.getName())));
-
-        yangNode = registry.getForOpPramFileName(OP_PARAM_NAME_REV_16);
+        yangNode = registry.getForRegClassName(INTERFACE_NAME_REV_16);
         assertThat(true, is(SCHEMA_NAME_4.equals(yangNode.getName())));
 
         cls = registry.getRegisteredClass(yangNode);
@@ -323,13 +236,7 @@
         nodes.add((YangNode) yangNode);
         provider.unRegister(nodes);
 
-        yangNode = registry.getForAppName(SERVICE_NAME_REV_16);
-        assertThat(true, is(yangNode == null));
-
-        yangNode = registry.getForInterfaceFileName(INTERFACE_NAME_REV_16);
-        assertThat(true, is(yangNode == null));
-
-        yangNode = registry.getForOpPramFileName(OP_PARAM_NAME_REV_16);
+        yangNode = registry.getForRegClassName(INTERFACE_NAME_REV_16);
         assertThat(true, is(yangNode == null));
 
         //Here the yangNode should be the node which have different revision.
@@ -342,16 +249,11 @@
         //---------------------------------------------------------------//
 
         //Service with different revision.
-        yangNode = registry.getForAppName(SERVICE_NAME_REV_17);
-        assertThat(true, is(yangNode == null));
 
         yangNode = registry.getForSchemaName(SCHEMA_NAME_4_17);
         assertThat(true, is(SCHEMA_NAME_4.equals(yangNode.getName())));
 
-        yangNode = registry.getForInterfaceFileName(INTERFACE_NAME_REV_17);
-        assertThat(true, is(SCHEMA_NAME_4.equals(yangNode.getName())));
-
-        yangNode = registry.getForOpPramFileName(OP_PARAM_NAME_REV_17);
+        yangNode = registry.getForRegClassName(INTERFACE_NAME_REV_17);
         assertThat(true, is(SCHEMA_NAME_4.equals(yangNode.getName())));
 
         cls = registry.getRegisteredClass(yangNode);
@@ -361,13 +263,7 @@
         nodes.add((YangNode) yangNode);
         provider.unRegister(nodes);
 
-        yangNode = registry.getForAppName(SERVICE_NAME_REV_17);
-        assertThat(true, is(yangNode == null));
-
-        yangNode = registry.getForInterfaceFileName(INTERFACE_NAME_REV_17);
-        assertThat(true, is(yangNode == null));
-
-        yangNode = registry.getForOpPramFileName(OP_PARAM_NAME_REV_17);
+        yangNode = registry.getForRegClassName(INTERFACE_NAME_REV_17);
         assertThat(true, is(yangNode == null));
 
         //Here the yangNode should be the node which have different revision.
@@ -380,16 +276,11 @@
         //---------------------------------------------------------------//
 
         //Service no revision.
-        yangNode = registry.getForAppName(SERVICE_NAME_NO_REV);
-        assertThat(true, is(yangNode == null));
 
         yangNode = registry.getForSchemaName(SCHEMA_NAME_4);
         assertThat(true, is(SCHEMA_NAME_4.equals(yangNode.getName())));
 
-        yangNode = registry.getForInterfaceFileName(INTERFACE_NAME_NO_REV);
-        assertThat(true, is(SCHEMA_NAME_4.equals(yangNode.getName())));
-
-        yangNode = registry.getForOpPramFileName(OP_PARAM_NAME_NO_REV);
+        yangNode = registry.getForRegClassName(INTERFACE_NAME_NO_REV);
         assertThat(true, is(SCHEMA_NAME_4.equals(yangNode.getName())));
 
         cls = registry.getRegisteredClass(yangNode);
@@ -399,13 +290,7 @@
         nodes.add((YangNode) yangNode);
         provider.unRegister(nodes);
 
-        yangNode = registry.getForAppName(SERVICE_NAME_NO_REV);
-        assertThat(true, is(yangNode == null));
-
-        yangNode = registry.getForInterfaceFileName(INTERFACE_NAME_NO_REV);
-        assertThat(true, is(yangNode == null));
-
-        yangNode = registry.getForOpPramFileName(OP_PARAM_NAME_NO_REV);
+        yangNode = registry.getForRegClassName(INTERFACE_NAME_NO_REV);
         assertThat(true, is(yangNode == null));
 
         //Here the yangNode should be the node which have different revision.
@@ -419,16 +304,11 @@
         //---------------------------------------------------------------//
 
         //Service with different revision.
-        yangNode = registry.getForAppName(SERVICE_NAME_REV_14);
-        assertThat(true, is(yangNode == null));
 
         yangNode = registry.getForSchemaName(SCHEMA_NAME_4_14);
         assertThat(true, is(SCHEMA_NAME_4.equals(yangNode.getName())));
 
-        yangNode = registry.getForInterfaceFileName(INTERFACE_NAME_REV_14);
-        assertThat(true, is(SCHEMA_NAME_4.equals(yangNode.getName())));
-
-        yangNode = registry.getForOpPramFileName(OP_PARAM_NAME_REV_14);
+        yangNode = registry.getForRegClassName(INTERFACE_NAME_REV_14);
         assertThat(true, is(SCHEMA_NAME_4.equals(yangNode.getName())));
 
         cls = registry.getRegisteredClass(yangNode);
@@ -438,16 +318,10 @@
         nodes.add((YangNode) yangNode);
         provider.unRegister(nodes);
 
-        yangNode = registry.getForAppName(SERVICE_NAME_REV_14);
-        assertThat(true, is(yangNode == null));
-
         yangNode = registry.getForSchemaName(SCHEMA_NAME_4);
         assertThat(true, is(yangNode == null));
 
-        yangNode = registry.getForInterfaceFileName(INTERFACE_NAME_REV_14);
-        assertThat(true, is(yangNode == null));
-
-        yangNode = registry.getForOpPramFileName(OP_PARAM_NAME_REV_14);
+        yangNode = registry.getForRegClassName(INTERFACE_NAME_REV_14);
         assertThat(true, is(yangNode == null));
 
         cls = registry.getRegisteredClass(yangNode);