/*******************************************************************************
 * Copyright (c) 2009 by SAP AG, Walldorf. 
 * 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:
 *     SAP AG - initial API and implementation
 *******************************************************************************/
package org.eclipse.jst.ws.jaxws.dom.runtime.api;

import java.io.IOException;

import org.eclipse.core.runtime.IProgressMonitor;


/**
 * This interface should be implemented by all runtime which want to have DOM Tree 
 * representation on top of them.
 * 
 * @author Georgi Hristov I036201
 */
public interface IWsDOMRuntimeExtension 
{
	/**
	 * This method should instantiate the DOM instance for the runtime and loads the
	 * data into it. The method locks the workspace root during execution. If you call this
	 * method during loading (i.e. somebody already called it in different thread) the method 
	 * will block until the load finishes instead of triggering DOM reload. 
	 * 
	 * @param monitor progress monitor to be used during loading, cancelling the load via monitor is supported
	 * @throws IOException in case the DOM loading is not able to read required data
	 * @throws WsDOMLoadCanceledException in case the loading was cancelled via provided 
	 * <code>monitor</code>.
	 */
	public void createDOM(IProgressMonitor monitor) throws IOException, WsDOMLoadCanceledException;
	
	/**
	 * Adds a load listener to be notified in load events. In case the loading has already been started 
	 * this listener's methods are called depending on the current state of the load.
	 * {@link IWsDomLoadListener#finished()} method is called in any case regardless of whether loading
	 * has been cancelled or not. 
	 * @param listener
	 */
	public void addLoadListener(IWsDomLoadListener listener);
	
	/**
	 * Removes the listener from DOM loading listeners list
	 * 
	 * @param listener
	 */
	public void removeLoadListener(IWsDomLoadListener listener);
	
	/**
	 * To get a handle to the DOM instance available for this runtime.
	 * 
	 * @return the DOM instance or <code>null</code> in case the loading was not started yet or
	 * is not finished yet.
	 * @throws WsDOMLoadCanceledException in case loading has been called already but the load
	 * has been cancelled
	 */
	public IDOM getDOM() throws WsDOMLoadCanceledException;
}
