Search in sources :

Example 1 with OsgiRegistry

use of org.glassfish.jersey.internal.OsgiRegistry in project jersey by jersey.

the class Localizer method localize.

public String localize(Localizable l) {
    String key = l.getKey();
    if (Localizable.NOT_LOCALIZABLE.equals(key)) {
        // this message is not localizable
        return (String) l.getArguments()[0];
    }
    String bundlename = l.getResourceBundleName();
    try {
        ResourceBundle bundle = _resourceBundles.get(bundlename);
        if (bundle == null) {
            try {
                bundle = ResourceBundle.getBundle(bundlename, _locale);
            } catch (MissingResourceException e) {
                // work around a bug in the com.sun.enterprise.deployment.WebBundleArchivist:
                //   all files with an extension different from .class (hence all the .properties files)
                //   get copied to the top level directory instead of being in the package where they
                //   are defined
                // so, since we can't find the bundle under its proper name, we look for it under
                //   the top-level package
                int i = bundlename.lastIndexOf('.');
                if (i != -1) {
                    String alternateBundleName = bundlename.substring(i + 1);
                    try {
                        bundle = ResourceBundle.getBundle(alternateBundleName, _locale);
                    } catch (MissingResourceException e2) {
                        // try OSGi
                        OsgiRegistry osgiRegistry = ReflectionHelper.getOsgiRegistryInstance();
                        if (osgiRegistry != null) {
                            bundle = osgiRegistry.getResourceBundle(bundlename);
                        } else {
                            final String path = bundlename.replace('.', '/') + ".properties";
                            final URL bundleUrl = ResourceFinder.findEntry(path);
                            if (bundleUrl != null) {
                                try {
                                    bundle = new PropertyResourceBundle(bundleUrl.openStream());
                                } catch (IOException ex) {
                                // ignore
                                }
                            }
                        }
                    }
                }
            }
            if (bundle == null) {
                return getDefaultMessage(l);
            } else {
                _resourceBundles.put(bundlename, bundle);
            }
        }
        if (key == null) {
            key = "undefined";
        }
        String msg;
        try {
            msg = bundle.getString(key);
        } catch (MissingResourceException e) {
            // notice that this may throw a MissingResourceException of its own (caught below)
            msg = bundle.getString("undefined");
        }
        // localize all arguments to the given localizable object
        Object[] args = l.getArguments();
        for (int i = 0; i < args.length; ++i) {
            if (args[i] instanceof Localizable) {
                args[i] = localize((Localizable) args[i]);
            }
        }
        String message = MessageFormat.format(msg, args);
        return message;
    } catch (MissingResourceException e) {
        return getDefaultMessage(l);
    }
}
Also used : OsgiRegistry(org.glassfish.jersey.internal.OsgiRegistry) MissingResourceException(java.util.MissingResourceException) ResourceBundle(java.util.ResourceBundle) PropertyResourceBundle(java.util.PropertyResourceBundle) IOException(java.io.IOException) URL(java.net.URL) PropertyResourceBundle(java.util.PropertyResourceBundle)

Aggregations

IOException (java.io.IOException)1 URL (java.net.URL)1 MissingResourceException (java.util.MissingResourceException)1 PropertyResourceBundle (java.util.PropertyResourceBundle)1 ResourceBundle (java.util.ResourceBundle)1 OsgiRegistry (org.glassfish.jersey.internal.OsgiRegistry)1