/*******************************************************************************
 * Copyright (c) 2006, 2010 Soyatec (http://www.soyatec.com) 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:
 *     Soyatec - initial API and implementation
 *     Anyware-tech - add multiple loaders
 *******************************************************************************/
package org.eclipse.xwt;

/**
 * Class allowing to keep the reference on the XWT loader active
 */
public class XWTLoaderManager {
	/** Default XWT loader */
	private static IXWTLoader defaultXWTLoader;

	/** Active XWT loader */
	private static IXWTLoader activeXWTLoader;

	/**
	 * Returns the default instance of the XWT loader
	 * 
	 * @return the default instance of the XWT loader
	 */
	public static IXWTLoader getDefault() {
		if (defaultXWTLoader == null) {
			defaultXWTLoader = new XWTLoader();
			XWT.runInitializers(defaultXWTLoader);			
		}
		return defaultXWTLoader;
	}

	public static boolean isStarted() {
		return defaultXWTLoader != null;
	}

	/**
	 * Returns the instance of the XWT loader active. If no XWT loader are active, returns the default XWT loader
	 * 
	 * @return the instance of the XWT loader active
	 */
	public static IXWTLoader getActive() {
		IXWTLoader xwtLoader = activeXWTLoader;
		if (xwtLoader == null) {
			xwtLoader = getDefault();
		}
		return xwtLoader;
	}

	/**
	 * Sets the active XWT loader
	 * 
	 * @param xwtLoader
	 *            the XWT loader
	 * @param active
	 *            true if the XWT loader is active, otherwise false
	 */
	public static void setActive(IXWTLoader xwtLoader, boolean active) {
		if (active) {
			activeXWTLoader = xwtLoader;
		} else if (xwtLoader != null && xwtLoader.equals(activeXWTLoader)) {
			activeXWTLoader = null;
		}
	}
}
