/*******************************************************************************
 * Copyright (c) 2001, 2008 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License 2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 * 
 * 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
	}
}

