/**
 * Copyright (c) 2003 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Common Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/cpl-v10.html
 *
 * Contributors:
 *    IBM - Initial API and implementation
 */
package net.sourceforge.phpeclipse.webbrowser;

import java.net.URL;
import java.util.List;

import net.sourceforge.phpeclipse.webbrowser.internal.*;

import org.eclipse.swt.widgets.Display;
/**
 * The main interface to the internal Web browser. If allows
 * you to query the file types supported by the Web browser
 * and open a URL.
 */
public class WebBrowser {
	/**
	 * WebBrowser constructor comment.
	 */
	private WebBrowser() {
		super();
	}

	/**
	 * Returns true if the internal Web browser is supported on this
	 * platform and the user has chosen to use it.
	 *
	 * @return boolean
	 */
	public static boolean isUsingInternalBrowser() {
		return (getCurrentWebBrowser() instanceof IInternalWebBrowser);
	}

	/**
	 * Display the given URL in a Web browser. If the user has chosen not
	 * to use the internal browser, an external browser will be used. If
	 * not, a browser in the current page will be reused if forceNewPage
	 * is not true and the user preference is not set. Finally, showToolbar
	 * will decide when the toolbar should be shown in the internal browser.
	 *
	 * @param input
	 */
	public static void openURL(final IWebBrowserEditorInput input) {
		Trace.trace(Trace.FINEST, "openURL() " + input);
		if (input == null)
			return;
	
		Display.getDefault().asyncExec(new Runnable() {
			public void run() {
				if (!isUsingInternalBrowser()){
					IWebBrowser browser = getCurrentWebBrowser();
					browser.openURL(input.getURL());
				} else
					WebBrowserEditor.open(input);
			}
		});
	}

	/**
	 * Return a list of all the installed Web browsers.
	 * 
	 * @return
	 */
	public static List getWebBrowsers() {
		return BrowserManager.getInstance().getWebBrowsers();
	}

	/**
	 * Return the current default web browser.
	 * 
	 * @return
	 */
	public static IWebBrowser getCurrentWebBrowser() {
		return BrowserManager.getInstance().getCurrentWebBrowser();
	}

	/**
	 * Set the current default web browser.
	 * 
	 * @return
	 */
	public static void getCurrentWebBrowser(IWebBrowser browser) {
		BrowserManager.getInstance().setCurrentWebBrowser(browser);
	}

	/**
	 * Create a new external Web browser.
	 * 
	 * @return
	 */
	public static IExternalWebBrowserWorkingCopy createExternalWebBrowser() {
		return new ExternalWebBrowserWorkingCopy();
	}

	/**
	 * Display the given URL in a Web browser.
	 *
	 * @param url java.net.URL
	 */
	public static void openURL(URL url) {
		IWebBrowser browser = getCurrentWebBrowser();
		if (browser != null)
			browser.openURL(url);
		else {
			Display.getDefault().asyncExec(new Runnable() {
				public void run() {
					WebBrowserUtil.openError(WebBrowserUIPlugin.getResource("%errorNoBrowser"));
				}
			});
		}
	}
}