/*************************************************************************
 * @author Ali Echihabi (ali_echihabi@ieee.org, ali.echihabi@souss.ca)
 *
 * Plugin for PHP unit Testing.
 * www.phpeclipse.de
 * 
 *************************************************************************/

package net.sourceforge.phpeclipse.phpunit;

import java.net.MalformedURLException;
import java.net.URL;

import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.resource.ImageRegistry;
import org.eclipse.swt.graphics.Image;

public class PHPUnitImages {

	protected static final String NAME_PREFIX = "net.sourceforge.phpeclipse.phpunit";

	protected static final int NAME_PREFIX_LENGTH = NAME_PREFIX.length();

	protected static URL iconBaseURL;

	static {
		String pathSuffix = "icons/";
		try {
			iconBaseURL = new URL(PHPUnitPlugin.getDefault().getDescriptor()
					.getInstallURL(), pathSuffix);
		} catch (MalformedURLException e) {
			// PHPUnitPlugin.log(e);
			e.printStackTrace();
		}
	}

	protected static final ImageRegistry IMAGE_REGISTRY = new ImageRegistry();

	/*
	 * Available cached Images in the Java plugin image registry.
	 */

	public static final String IMG_SELECT_TEST_SUITE = NAME_PREFIX
			+ "tsuite.gif";

	public static final String IMG_RUN_TEST_SUITE = NAME_PREFIX + "start.gif";

	public static final String IMG_TEST_ERROR = NAME_PREFIX + "testerr.gif";

	public static final String IMG_TEST_FAILURE = NAME_PREFIX + "testfail.gif";

	public static final String IMG_TEST_PASS = NAME_PREFIX + "testok.gif";

	public static final String IMG_TEST_SUITE_ERROR = NAME_PREFIX
			+ "tsuiteerror.gif";

	public static final String IMG_TEST_SUITE_PASS = NAME_PREFIX
			+ "tsuiteok.gif";

	public static final String IMG_TEST_SUITE_FAILURE = NAME_PREFIX
			+ "tsuitefail.gif";

	public static final String IMG_ERROR = NAME_PREFIX + "error.gif";

	public static final String IMG_FAILURE = NAME_PREFIX + "failure.gif";

	public static final ImageDescriptor DESC_SELECT_TEST_SUITE = createManaged(IMG_SELECT_TEST_SUITE);

	public static final ImageDescriptor DESC_RUN_TEST_SUITE = createManaged(IMG_RUN_TEST_SUITE);

	public static final ImageDescriptor DESC_TEST_ERROR = createManaged(IMG_TEST_ERROR);

	public static final ImageDescriptor DESC_TEST_FAILURE = createManaged(IMG_TEST_FAILURE);

	public static final ImageDescriptor DESC_TEST_PASS = createManaged(IMG_TEST_PASS);

	public static final ImageDescriptor DESC_TEST_SUITE_ERROR = createManaged(IMG_TEST_SUITE_ERROR);

	public static final ImageDescriptor DESC_TEST_SUITE_PASS = createManaged(IMG_TEST_SUITE_PASS);

	public static final ImageDescriptor DESC_TEST_SUITE_FAILURE = createManaged(IMG_TEST_SUITE_FAILURE);

	public static final ImageDescriptor DESC_ERROR = createManaged(IMG_ERROR);

	public static final ImageDescriptor DESC_FAILURE = createManaged(IMG_FAILURE);

	/**
	 * Returns the image managed under the given key in this registry.
	 * 
	 * @param key
	 *            the image's key
	 * @return the image managed under the given key
	 */
	public static Image get(String key) {
		return IMAGE_REGISTRY.get(key);
	}

	public static ImageRegistry getImageRegistry() {
		return IMAGE_REGISTRY;
	}

	protected static ImageDescriptor createManaged(String name) {
		try {
			ImageDescriptor result = ImageDescriptor
					.createFromURL(makeIconFileURL(name
							.substring(NAME_PREFIX_LENGTH)));
			IMAGE_REGISTRY.put(name, result);
			return result;
		} catch (MalformedURLException e) {
			return ImageDescriptor.getMissingImageDescriptor();
		}
	}

	protected static URL makeIconFileURL(String name)
			throws MalformedURLException {
		if (iconBaseURL == null)
			throw new MalformedURLException();

		return new URL(iconBaseURL, name);
	}
}