/*******************************************************************************
 * Copyright (c) 2003, 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.wst.server.ui.wizard;

import java.lang.reflect.InvocationTargetException;

import org.eclipse.jface.dialogs.IMessageProvider;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.resource.ImageDescriptor;
/**
 * 
 * 
 * @plannedfor 1.0
 */
public interface IWizardHandle extends IMessageProvider {
	/**
	 * Updates the wizard error messages and buttons.
	 */
	public void update();

	/**
	 * Sets the title of this wizard page.
	 *  
	 * @param title the title of the wizard page
	 */
	public void setTitle(String title);

	/**
	 * The page's description.
	 * 
	 * @param desc the page's description
	 */
	public void setDescription(String desc);

	/**
	 * The page's image descriptor.
	 * 
	 * @param image the page's image descriptor
	 */
	public void setImageDescriptor(ImageDescriptor image);

	/**
	 * Set an error or warning message.
	 * 
	 * @param newMessage the new message
	 * @param newType the new type, from IStatus
	 */
	public void setMessage(String newMessage, int newType);

	/**
	 * Execute a runnable within the context of the wizard. This will typically
	 * disable the wizard while the runnable is running, and provide a progress
	 * monitor for the user.  
	 * 
	 * @param fork true if a separate thread should be used
	 * @param cancelable true if it should be cancelable
	 * @param runnable the runnable
	 * @throws InterruptedException thrown if it is interrupted
	 * @throws InvocationTargetException thrown if there is an error
	 */
	public void run(boolean fork, boolean cancelable, IRunnableWithProgress runnable) throws InterruptedException, InvocationTargetException;
}