package com.c2kernel.utils; //Java import java.net.MalformedURLException; import java.net.URL; import java.util.HashMap; import java.util.Hashtable; import com.c2kernel.common.ObjectNotFoundException; /************************************************************************** * * @author $Author: abranson $ $Date: 2005/10/05 07:39:36 $ * @version $Revision: 1.71 $ **************************************************************************/ public class Resource { static private Hashtable txtCache = new Hashtable(); static private URL baseURL = getURLorResURL("com/c2kernel/utils/resources/"); static private HashMap moduleBaseURLs = new HashMap(); public static URL getKernelBaseURL() { return baseURL; } public static URL getKernelResourceURL(String resName) throws MalformedURLException { return new URL(baseURL, resName); } public static void addModuleBaseURL(String ns, URL newBaseURL) { moduleBaseURLs.put(ns, newBaseURL); Logger.msg("Adding resource URL for "+ns+": "+newBaseURL.toString()); } public static void addModuleBaseURL(String ns, String newBaseURL) { addModuleBaseURL(ns, getURLorResURL(newBaseURL)); } public static URL getModuleBaseURL(String ns) { return moduleBaseURLs.get(ns); } public static HashMap getModuleBaseURLs() { return moduleBaseURLs; } static public URL getModuleResourceURL(String ns, String resName) throws MalformedURLException { return new URL(moduleBaseURLs.get(ns), resName); } private static URL getURLorResURL(String newURL) { URL result; try { result = new URL(newURL); } catch (java.net.MalformedURLException ex) { //it is assumed that a 'wrong' URL denotes a directory //of files resolvable from the CLASSPATH result = Resource.class.getClassLoader().getResource(newURL); } return result; } /************************************************************************** * Gets any text resource files **************************************************************************/ static public String findTextResource(String resName) { try { for (String ns : getModuleBaseURLs().keySet()) { try { return getTextResource(ns, resName); } catch (ObjectNotFoundException ex) { } } return getTextResource(null, resName); } catch (ObjectNotFoundException ex) { Logger.warning("Text resource '"+resName+"' not found."); return null; } } static public String getTextResource(String ns, String resName) throws ObjectNotFoundException // throws IOException { Logger.msg(8, "Resource::getTextResource() - Getting resource: " + resName); if (txtCache.containsKey(ns+'/'+resName)) { return txtCache.get(ns+'/'+resName); } try { String newRes = null; URL loc; if (ns == null) // kernel loc = getKernelResourceURL(resName); else loc = getModuleResourceURL(ns, resName); newRes = FileStringUtility.url2String(loc); txtCache.put(ns+'/'+resName, newRes); return newRes; } catch (Exception e) { throw new ObjectNotFoundException(e.getMessage(),null); } } static public String getKernelVersion() { try { return FileStringUtility.url2String(getKernelResourceURL("textFiles/version.txt")); } catch (Exception ex) { return "No version info found"; } } }