[ONOS-5763] YSR changes to support decode without module name.

Change-Id: I662e52c2b3971e7a333ec9d887f8747733a0e87e
diff --git a/apps/yms/app/src/main/java/org/onosproject/yms/app/ysr/DefaultYangSchemaRegistry.java b/apps/yms/app/src/main/java/org/onosproject/yms/app/ysr/DefaultYangSchemaRegistry.java
index 58d772c..0c4e22f 100644
--- a/apps/yms/app/src/main/java/org/onosproject/yms/app/ysr/DefaultYangSchemaRegistry.java
+++ b/apps/yms/app/src/main/java/org/onosproject/yms/app/ysr/DefaultYangSchemaRegistry.java
@@ -112,6 +112,11 @@
      */
     private final ConcurrentMap<YangModuleIdentifier, String> yangFileStore;
 
+    /**
+     * Map for storing schema nodes with respect to namespace.
+     */
+    private final ConcurrentMap<String, YangSchemaNode> nameSpaceSchemaStore;
+
     private final ConcurrentMap<Object, Boolean> ynhRegistrationStore;
     private final ConcurrentMap<String, String> jarPathStore;
 
@@ -129,6 +134,7 @@
         appNameKeyStore = new ConcurrentHashMap<>();
         ynhRegistrationStore = new ConcurrentHashMap<>();
         jarPathStore = new ConcurrentHashMap<>();
+        nameSpaceSchemaStore = new ConcurrentHashMap<>();
     }
 
 
@@ -188,6 +194,8 @@
                 opParamNameKeyStore.remove(getOpParamClassName(curNode));
                 yangFileStore.remove(getModuleIdentifier(curNode));
                 appNameKeyStore.remove(serviceName);
+                nameSpaceSchemaStore.remove(curNode.getNameSpace()
+                                                    .getModuleNamespace());
                 removeYsrGeneratedTemporaryResources(jarPathStore.get(serviceName),
                                                      serviceName);
                 log.info(" service {} is unregistered.",
@@ -267,6 +275,16 @@
     }
 
     @Override
+    public YangSchemaNode getSchemaWrtNameSpace(String nameSpace) {
+
+        YangSchemaNode node = nameSpaceSchemaStore.get(nameSpace);
+        if (node == null) {
+            log.error("node with {} namespace not found.", nameSpace);
+        }
+        return node;
+    }
+
+    @Override
     public String getYangFile(YangModuleIdentifier moduleIdentifier) {
         String file = yangFileStore.get(moduleIdentifier);
         if (file == null) {
@@ -312,6 +330,7 @@
         interfaceNameKeyStore.clear();
         registerClassStore.clear();
         yangFileStore.clear();
+        nameSpaceSchemaStore.clear();
     }
 
     @Override
@@ -494,6 +513,10 @@
 
         //update op param store.
         opParamNameKeyStore.put(getOpParamClassName(appNode), appNode);
+
+        //update namespaceSchema store.
+        nameSpaceSchemaStore.put(appNode.getNameSpace().getModuleNamespace(), appNode);
+
         //Checks if notification is present then update notification store map.
         String eventSubject = null;
         try {
diff --git a/apps/yms/app/src/main/java/org/onosproject/yms/app/ysr/YangSchemaRegistry.java b/apps/yms/app/src/main/java/org/onosproject/yms/app/ysr/YangSchemaRegistry.java
index ed5d95a..e283f57 100644
--- a/apps/yms/app/src/main/java/org/onosproject/yms/app/ysr/YangSchemaRegistry.java
+++ b/apps/yms/app/src/main/java/org/onosproject/yms/app/ysr/YangSchemaRegistry.java
@@ -141,4 +141,19 @@
      */
     void processModuleLibrary(String serviceName, YangModuleLibrary library);
 
+    /**
+     * Returns YANG schema node for a given namespace while xml decoding.
+     * <p>
+     * According to rfc 6020 Xml should not have module name in it but when
+     * decoder wants to convert xml to YANG object it will need module schema
+     * which it can get only by using module name from YSR. So if YCH sends
+     * namespace of a module we can given it the schema node of module. In
+     * this case namespace should be unique.
+     * </p>
+     *
+     * @param nameSpace name space of module
+     * @return module schema node
+     */
+    YangSchemaNode getSchemaWrtNameSpace(String nameSpace);
+
 }