testdev/ite/src/com.nokia.testfw.codegen/src/com/nokia/testfw/codegen/templates/TemplateLoader.java
changeset 1 96906a986c3b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/testdev/ite/src/com.nokia.testfw.codegen/src/com/nokia/testfw/codegen/templates/TemplateLoader.java	Tue Mar 30 14:39:29 2010 +0800
@@ -0,0 +1,102 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description: 
+ *
+ */
+package com.nokia.testfw.codegen.templates;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
+
+import com.nokia.testfw.codegen.StringResourceLoader;
+
+public class TemplateLoader {
+
+	public static String TEMPLATES_DIR = "templates/";
+
+	public static Map<String, String> load(String template) throws IOException {
+		Map<String, String> result = new HashMap<String, String>();
+		String templatePath = template.replaceAll("\\\\", "/");
+		String lTemplateRoot = TEMPLATES_DIR + templatePath;
+		if (!lTemplateRoot.endsWith("/")) {
+			lTemplateRoot += "/";
+		}
+
+		URL lSourceRootURL = TemplateLoader.class.getProtectionDomain()
+				.getCodeSource().getLocation();
+
+		File lSourceRoot = new File(lSourceRootURL.getFile());
+
+		if (lSourceRoot.isFile()) {
+			JarFile jf = new JarFile(lSourceRoot);
+			Enumeration<JarEntry> resources = jf.entries();
+			while (resources.hasMoreElements()) {
+				JarEntry je = (JarEntry) resources.nextElement();
+
+				// find a file that matches this string from anywhere in my
+				// jar file
+				if (je.getName().startsWith(lTemplateRoot)) {
+					if (je.isDirectory()) {
+						continue;
+					}
+					String filename = je.getName();
+					InputStream is = jf.getInputStream(jf.getEntry(filename));
+					String pattern = StringResourceLoader.getString(is);
+					String lpath = filename.substring(lTemplateRoot.length());
+					result.put(lpath, pattern);
+					is.close();
+				}
+			}
+		} else {// for test in dev env
+			File templateRootDir = new File(lSourceRoot, lTemplateRoot);
+			lTemplateRoot = templateRootDir.getAbsolutePath() + "/";
+			if (templateRootDir.exists() && templateRootDir.isDirectory()) {
+				result.putAll(searchTemplates(templateRootDir, lTemplateRoot));
+			}
+		}
+		return result;
+	}
+
+	public static Map<String, String> searchTemplates(File root)
+			throws IOException {
+		String lTemplateRoot = root.getPath() + File.separator;
+		return searchTemplates(root, lTemplateRoot);
+	}
+
+	private static Map<String, String> searchTemplates(File root,
+			String filterPath) throws IOException {
+		Map<String, String> lPathPatternMap = new HashMap<String, String>();
+		for (File file : root.listFiles()) {
+			if (file.isDirectory()) {
+				lPathPatternMap.putAll(searchTemplates(file, filterPath));
+			} else {
+				InputStream lInputStream = new FileInputStream(file);
+				String pattern = StringResourceLoader.getString(lInputStream);
+				String lPath = file.getAbsolutePath().substring(
+						filterPath.length());
+				lPath = lPath.replaceAll("\\\\", "/");
+				lPathPatternMap.put(lPath, pattern);
+			}
+		}
+		return lPathPatternMap;
+	}
+}