/*******************************************************************************
 * Copyright (c) 2001, 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.proxy.core;
/*


 */


import org.eclipse.core.runtime.CoreException;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;


/**
 * This interface is used to contribute to the configuration that will be
 * used to start a proxy registry. 
 * 
 * @since 1.0.0
 */
public interface IConfigurationContributor {
	
	/**
	 * Called first before any of the other calls. This can be used to do any internal initializations
	 * required by the other calls. That way the other calls can have the order changed as the implementation
	 * requires.
	 * <p>
	 * NOTE: For those who nest configuration contributors (i.e. within an implementation of a contributor, more
	 * contributors are discovered) then it is imperitive that when those contributors are discovered that this method
	 * be called on them too. This is necessary so the contract with contributors can be followed. It is best if the
	 * discoveries are actually done in the initialize method itself so that it can pass the launch info right there.
	 * 
	 * @param info info contains things like containers visible, etc.
	 * 
	 * @see IConfigurationContributionInfo
	 * @since 1.0.0
	 */
	public void initialize(IConfigurationContributionInfo info);
	
	/**
	 * Contribute to the classpath. The controller is used to do the actual contribution.
	 * 
	 * @param controller
	 * @throws CoreException
	 * 
	 * @since 1.0.0
	 */
	public void contributeClasspaths(IConfigurationContributionController controller) throws CoreException;

	/**
	 * Contribute updates to the configuration. It will be called before the launch has started.
	 * 
	 * @param config
	 * @throws CoreException
	 * 
	 * @since 1.0.0
	 */
	public void contributeToConfiguration(ILaunchConfigurationWorkingCopy config) throws CoreException;
	
	/**
	 * Contribute to the registry (or interact with the remote vm) after the registry has been
	 * created.
	 * 
	 * @param registry
	 * 
	 * @since 1.0.0
	 */
	public void contributeToRegistry(ProxyFactoryRegistry registry);
}
