package oisoft.togetherx.scripts.doc;
import java.util.ResourceBundle;
import java.util.PropertyResourceBundle;
import java.util.MissingResourceException;
import java.io.InputStream;
import java.io.IOException;
public class ResourceBundleAccessor {
/**
* Returns resource bundle associated with class or with property file
* @param className a class which extends ListResourceBundle
* @param propertyName a name for property file (without .properties prefix)
*/
public static ResourceBundle getResourceBundle (String className, String propertyName) throws MissingResourceException {
ResourceBundle myBundle = null;
// Try to open property file first
InputStream in = getResourceAsStream(propertyName + ".properties", ResourceBundleAccessor.class);
if (in != null) {
try {
myBundle = new PropertyResourceBundle (in);
}
catch(IOException ioException) {
myBundle = null;
}
finally{
try {
in.close ();
in = null;
System.gc ();
}
catch(IOException closeException) {
System.out.println ("Could not close resource input stream: " + closeException);
}
}
}
// If property file did not open, use standard way
if (myBundle == null) {
System.err.println ("Property file ["+ propertyName + ".properties] not found , opening class");
// Try to open resources as class/property
myBundle = ResourceBundle.getBundle (className);
}
return myBundle;
}
private static InputStream getResourceAsStream (String fileName, Class cls) {
fileName = resolveName(fileName, cls);
ClassLoader loader = cls.getClassLoader ();
if (loader == null) {
return ClassLoader.getSystemResourceAsStream(fileName);
}
InputStream in = loader.getResourceAsStream(fileName);
if (in == null) {
in = ClassLoader.getSystemResourceAsStream(fileName);
}
return in;
}
private static String resolveName(String name, Class clazz) {
System.err.println("resolveName " + name);
if (name == null) {
return name;
}
if (!name.startsWith("/")) {
Class c = clazz;
while (c.isArray()) {
c = c.getComponentType();
}
String baseName = c.getName();
int index = baseName.lastIndexOf('.');
if (index != -1) {
name = baseName.substring(0, index).replace('.', '/')+"/"+name;
}
}
else {
name = name.substring(1);
}
System.err.println("resolvedName = " + name);
return name;
}
}
|