1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
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.InvalidDataException;
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<String, String> txtCache = new Hashtable<String, String>();
static private URL baseURL;
static private HashMap<String, URL> moduleBaseURLs = new HashMap<String, URL>();
static private HashMap<String, URL> allBaseURLs = new HashMap<String, URL>();
public static void initKernelBaseURL() throws InvalidDataException {
baseURL = getURLorResURL("com/c2kernel/utils/resources/");
allBaseURLs.put(null, baseURL);
}
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);
allBaseURLs.put(ns, newBaseURL);
Logger.msg("Adding resource URL for "+ns+": "+newBaseURL.toString());
}
public static void addModuleBaseURL(String ns, String newBaseURL) throws InvalidDataException {
addModuleBaseURL(ns, getURLorResURL(newBaseURL));
}
public static URL getModuleBaseURL(String ns) {
return moduleBaseURLs.get(ns);
}
public static HashMap<String, URL> getModuleBaseURLs() {
return moduleBaseURLs;
}
public static HashMap<String, URL> getAllBaseURLs() {
return allBaseURLs;
}
static public URL getModuleResourceURL(String ns, String resName) throws MalformedURLException {
return new URL(moduleBaseURLs.get(ns), resName);
}
private static URL getURLorResURL(String newURL) throws InvalidDataException {
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);
}
if (result == null) {
Logger.error("URL "+newURL+" could not be found");
throw new InvalidDataException();
}
return result;
}
/**************************************************************************
* Gets any text resource files
**************************************************************************/
static public String findTextResource(String resName) {
for (String ns : getAllBaseURLs().keySet()) {
try {
return getTextResource(ns, resName);
} catch (ObjectNotFoundException ex) { }
}
Logger.warning("Text resource '"+resName+"' not found.");
return null;
}
static public HashMap<String, String> getAllTextResources(String resName) {
HashMap<String, String> results = new HashMap<String, String>();
for (String ns : getAllBaseURLs().keySet()) {
try {
results.put(ns, getTextResource(ns, resName));
} catch (ObjectNotFoundException ex) { }
}
return results;
}
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";
}
}
}
|