/*******************************************************************************
 * Copyright (c) 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
 *******************************************************************************/
/*


 */
package org.eclipse.jem.java.util;

import org.eclipse.emf.common.notify.AdapterFactory;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;

import org.eclipse.jem.internal.java.adapters.jdk.JavaJDKAdapterFactory;

/**
 * Static helper class to handle the java context. The java context is a resource set
 * that has the appropriate reflection adapter attached, either for java reflection or
 * for JDT reflection. The default is for java reflection. When running in Eclipse it
 * will be the JDT reflection.
 * <p>
 * <b>Note:</b>This should only be used by customers that are not doing normal Eclipse JDT JEM
 * reflection. Normal JEM should be using the JEM EMF nature access instead.
 * @since 1.2.0
 */
public class JavaContext {

	private static Class ReflectionFactoryClass = JavaJDKAdapterFactory.class;
	
	private JavaContext() {
		
	}
	
	/**
	 * Create the java context. To be used outside of Eclipse.
	 * Within normal Eclipse JEM usage the JEM EMF nature should be used instead.
	 * @return
	 * 
	 * @since 1.2.0
	 */
	public static ResourceSet createJavaContext() {
		org.eclipse.jem.internal.java.init.JavaInit.init();
		ResourceSet set = new ResourceSetImpl();
		set.getAdapterFactories().add(createJavaReflectionAdapterFactory());
		return set;
	}
	
	private static AdapterFactory createJavaReflectionAdapterFactory() {
		AdapterFactory factoryInstance = null;
		try {
			if (getReflectionAdapterFactoryClass() != null)
				factoryInstance = (AdapterFactory) getReflectionAdapterFactoryClass().newInstance();
		} catch (Exception e) {
			// Reflection or instantiation problems.
			// OK, can't do Java Model reflection
		}
		return factoryInstance;
	}

	/**
	 * Return the Class for the Java refection adapter factory.
	 * @return
	 * 
	 * @since 1.2.0
	 */
	public static Class getReflectionAdapterFactoryClass() {
		return ReflectionFactoryClass;
	}

	/**
	 * Set the Class for the Java refection adapter factory. Within Eclipse this should not
	 * be set by customers.
	 * 
	 * @param javaReflectionFactoryClass
	 * 
	 * @since 1.2.0
	 */
	public static void setReflectionAdapterFactoryClass(Class javaReflectionFactoryClass) {
		ReflectionFactoryClass = javaReflectionFactoryClass;
	}
	

}
