| /******************************************************************************* |
| * Copyright (c) 2001, 2006 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| * Jens Lukowski/Innoopract - initial renaming/restructuring |
| * Gerry Kessler/Oracle - copied from org.eclipse.wst.sse.core.internal.encoding.util and modified heavily |
| *******************************************************************************/ |
| package org.eclipse.jst.jsf.common.metadata.internal; |
| |
| import java.io.IOException; |
| import java.net.MalformedURLException; |
| import java.net.URL; |
| import java.net.URLClassLoader; |
| import java.util.Locale; |
| import java.util.ResourceBundle; |
| |
| import org.eclipse.core.runtime.FileLocator; |
| import org.eclipse.core.runtime.IPath; |
| import org.eclipse.core.runtime.Path; |
| |
| /** |
| * ResourceBundleHelper |
| * |
| */ |
| public final class ResourceBundleHelper { |
| |
| /** |
| * @param resourceURL |
| * @return ResourceBundle |
| * @throws MalformedURLException - may return null |
| * @throws IOException |
| */ |
| public static ResourceBundle getResourceBundle(final URL resourceURL) throws MalformedURLException, IOException { |
| return getResourceBundle(resourceURL, Locale.getDefault()); |
| } |
| |
| /** |
| * @param resourceURL |
| * @param targetLocale |
| * @return ResourceBundle - may return null |
| * @throws MalformedURLException |
| * @throws IOException |
| */ |
| public static ResourceBundle getResourceBundle(final URL resourceURL, final Locale targetLocale) throws MalformedURLException, IOException { |
| // try to load bundle from the location specified in the resourceURL |
| // |
| final String protocol = resourceURL.getProtocol(); |
| final String host = resourceURL.getHost(); |
| final String file = resourceURL.getFile(); |
| final IPath path = new Path(file); |
| |
| String dir = "./"; //$NON-NLS-1$ |
| final String bundleName = path.removeFileExtension().segment(path.segmentCount() - 1); |
| if (path.segmentCount() > 1) |
| { |
| dir = path.removeLastSegments(1).toString(); |
| } |
| |
| // create a class loader with a class path that points to the resource |
| // bundle's location |
| // |
| final URL[] classpath = new URL[1]; |
| classpath[0] = FileLocator.resolve(new URL(protocol, host, dir)); |
| // TODO: does this need to be in a doPrivileged block? |
| final ClassLoader resourceLoader = new URLClassLoader(classpath, null); |
| |
| return ResourceBundle.getBundle(bundleName, targetLocale, resourceLoader); |
| } |
| |
| private ResourceBundleHelper() |
| { |
| // no instantiation |
| } |
| } |
| |