FileDocCategorySizeDatePackage
ResourceBundleAccessor.javaAPI DocExample3010Tue Dec 08 01:21:00 GMT 1998oisoft.togetherx.scripts.doc

ResourceBundleAccessor.java

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;
    }
}