/*******************************************************************************
 * Copyright (c) 2004, 2005 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.internal.beaninfo.core;

import org.eclipse.core.runtime.IPath;
import org.eclipse.emf.ecore.resource.ResourceSet;

import org.eclipse.jem.internal.proxy.core.IConfigurationContributionInfo;
import org.eclipse.jem.java.JavaClass;
 
/**
 * Interface for BeanInfo contributors. Supplied either as additional interface on a IClasspathContainer, or as
 * an explicit contributor for BeanInfos from the manifest files.
 * <p>
 * Implementations of this interface allows a dynamic supply of BeanInfo contributions (beaninfo jars and search paths)
 * and override files. This is used when the default plugin extension mechanism is too static for the requirements. 
 * <p>
 * There is a very useful default implementation (<code>BeanInfoContributorAdapter</code>) that can be subclassed. The
 * default doesn't do anything on its own. But it does have a very useful utility method for loading resources.
 * 
 * @see org.eclipse.jem.internal.beaninfo.core.BeanInfoContributorAdapter
 * @since 1.0.0
 */
public interface IBeanInfoContributor {
	
	/**
	 * Return the BeanInfoEntry contributions that are needed.
	 * <p>
	 * This will be called by BeanInfo when it determines that this contributor is applicable 
	 * for the current project being processed. BeaninfoEntry's define the BeanInfo jars and search paths to use.
	 * 
	 * @param info
	 * @return BeanInfo contributions or <code>null</code> if none to contribute.
	 * 
	 * @since 1.0.0
	 */
	public BeaninfoEntry[] getBeanInfoEntryContributions(IConfigurationContributionInfo info);
	
	/**
	 * For the given package path run the override contributions through the runnable.
	 * <p>
	 * This will be called by BeanInfo when it determines that this
	 * contributor is applicable for the current project being processed.
	 * <p>
	 * Implementations must call the runnable (the argument <code>runnable</code>) for each override file that is to be applied to the incoming class.
	 * You can either call the run method that passes in a string pointing to a directory where your override file is
	 * located (i.e. <code>overrideFileName.override</code> where "overrideFileName" is the name passed. Or you can call the run method that 
	 * takes a Resource that is already loaded (and maybe modified or created locally).
	 * 
	 * @param packagePath
	 * @param overrideFileName the overrideFileName that the overrides is for. This can be used in very special cases to provide 
	 * exact override files instead of letting the path be searched. An example would be for providing a file that isn't the same name as the class.
	 * A very special case is <code>ROOT</code>. This is used when asking to apply root overrides to classes that have no 
	 * super type. 
	 * @param javaClass the java class that the overrides will be applied to. Note: Do not call any property, features, events, or operations calls
	 * or any property, events, or operations Utilities against this class. That is because this class is being introspected at this time
	 * and those calls will return invalid values if called at this point since introspection is not yet complete. 
	 * @param resource set that contributors can use to temporarily load dynamic override files.
	 * @param runnable the runnable that you call to actually apply the override files.
	 * 
	 * @see BeaninfoPlugin#ROOT
	 * @see BeaninfoPlugin#OVERRIDE_EXTENSION
	 * @since 1.0.0
	 */
	public void runOverrides(IPath packagePath, String overrideFileName, JavaClass javaClass, ResourceSet rset, BeaninfoPlugin.IContributorOverrideRunnable runnable);
}
