Merge "Avoid reading Copyright template multiple times."
diff --git a/compiler/base/tool/src/main/java/org/onosproject/yang/compiler/tool/YangCompilerManager.java b/compiler/base/tool/src/main/java/org/onosproject/yang/compiler/tool/YangCompilerManager.java
index f56e742..7888e66 100644
--- a/compiler/base/tool/src/main/java/org/onosproject/yang/compiler/tool/YangCompilerManager.java
+++ b/compiler/base/tool/src/main/java/org/onosproject/yang/compiler/tool/YangCompilerManager.java
@@ -69,6 +69,7 @@
 import static org.onosproject.yang.compiler.translator.tojava.JavaCodeGeneratorUtil.translatorErrorHandler;
 import static org.onosproject.yang.compiler.utils.UtilConstants.NEW_LINE;
 import static org.onosproject.yang.compiler.utils.UtilConstants.YANG_META_DATA;
+import static org.onosproject.yang.compiler.utils.UtilConstants.YANG_RESOURCES;
 import static org.onosproject.yang.compiler.utils.io.impl.YangFileScanner.getJavaFiles;
 import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.createDirectories;
 import static org.slf4j.LoggerFactory.getLogger;
@@ -120,15 +121,28 @@
             if (!fromUt) {
                 serializeModuleMetaData(serFile, node);
             }
-            YangModule module = new YangModuleExtendedInfo(
-                    id, new File(node.getFileName()), new File(serFile));
-            ((YangModuleExtendedInfo) module).setSchema(node);
+            //take the absolute jar path and make a new path for our yang files.
+            String fileName = getFileName(node.getFileName());
+            YangModuleExtendedInfo module = new YangModuleExtendedInfo(
+                    id, new File(path + fileName), new File(serFile));
+            module.setSchema(node);
             b.addModule(id, module);
         }
         return b.addModelId(modelId).build();
     }
 
     /**
+     * Returns the file name from provided absolute path.
+     *
+     * @param absPath absolute path
+     * @return file name
+     */
+    private static String getFileName(String absPath) {
+        String[] file = absPath.split(SLASH);
+        return file[file.length - 1];
+    }
+
+    /**
      * Serializes YANG Node.
      *
      * @param serFileName path of resource directory
@@ -517,7 +531,7 @@
     }
 
     /**
-     * Returs the set of YANG nodes from a given YANG model.
+     * Returns the set of YANG nodes from a given YANG model.
      *
      * @param model YANG model
      * @return set of YANG nodes
@@ -548,20 +562,18 @@
         JarFile jar = new JarFile(jarFile);
         Enumeration<?> enumEntries = jar.entries();
 
+        File dir = new File(directory + SLASH + YANG_RESOURCES);
+        if (!dir.exists()) {
+            dir.mkdirs();
+        }
+
         while (enumEntries.hasMoreElements()) {
             JarEntry file = (JarEntry) enumEntries.nextElement();
-            if (file.getName().endsWith(YANG_META_DATA)) {
-
-                if (file.getName().contains(SLASH)) {
-                    String[] strArray = file.getName().split(SLASH);
-                    String tempPath = "";
-                    for (int i = 0; i < strArray.length - 1; i++) {
-                        tempPath = SLASH + tempPath + SLASH + strArray[i];
-                    }
-                    File dir = new File(directory + tempPath);
-                    dir.mkdirs();
-                }
-                File serializedFile = new File(directory + SLASH + file.getName());
+            if (file.getName().endsWith(YANG_META_DATA) ||
+                    file.getName().endsWith(".yang")) {
+                String name = getFileName(file.getName());
+                File serializedFile = new File(directory + SLASH +
+                                                       YANG_RESOURCES + SLASH + name);
                 if (file.isDirectory()) {
                     serializedFile.mkdirs();
                     continue;
@@ -574,10 +586,9 @@
                 }
                 fileOutputStream.close();
                 inputStream.close();
-                model = deSerializeDataModel(serializedFile.toString());
-                //As of now only one metadata files will be there so if we
-                // found one then we should break the loop.
-                break;
+                if (serializedFile.getName().endsWith(YANG_META_DATA)) {
+                    model = deSerializeDataModel(serializedFile.toString());
+                }
             }
         }
         jar.close();
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 edefc76..b75ad53 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
@@ -42,7 +42,6 @@
     private static final String SLASH = File.separator;
     private static final String HYPHEN = "-";
     private static final String PERIOD = ".";
-    private static final String YANG_META_DATA = "YangMetaData.ser";
     private static final String YANG_RESOURCES = "yang/resources";
     private static final String SYSTEM = SLASH + "system" + SLASH;
     private static final String MAVEN = "mvn:";
@@ -69,7 +68,7 @@
             String metaPath;
             jarPath = getJarPathFromBundleLocation(
                     bundle.getLocation(), context.getProperty(USER_DIRECTORY));
-            metaPath = jarPath + SLASH + YANG_RESOURCES + SLASH + YANG_META_DATA;
+            metaPath = jarPath + SLASH + YANG_RESOURCES + SLASH;
             YangModel model = processJarParsingOperations(jarPath);
             if (model != null) {
                 curNodes.addAll(getYangNodes(model));