/*******************************************************************************
 * Copyright (c) 2007 Chase Technology Ltd - http://www.chasetechnology.co.uk
 * 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:
 *     Doug Satchwell (Chase Technology Ltd) - initial API and implementation
 *******************************************************************************/
package org.eclipse.wst.xsl.jaxp.debug.debugger;

import java.io.FileWriter;
import java.io.Writer;
import java.net.URL;

import javax.xml.transform.Result;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;

import org.eclipse.wst.xsl.jaxp.debug.invoker.IProcessorInvoker;

/**
 * An interface to XSL debugger instances.
 * 
 * @author Doug Satchwell
 */
public interface IXSLDebugger extends Runnable
{
	/**
	 * Set the invoker to use.
	 * 
	 * @param invoker the invoker to set
	 */
	void setInvoker(IProcessorInvoker invoker);

	/**
	 * Set the transformer factory to use.
	 * 
	 * @param factory the factory to use
	 */
	void setTransformerFactory(TransformerFactory factory);

	/**
	 * Add a transformer to this.
	 * 
	 * @param transformer
	 */
	void addTransformer(Transformer transformer);

	/**
	 * Set the Writer for this to write events to.
	 * 
	 * @param writer the writer to write events to
	 */
	void setEventWriter(Writer writer);

	/**
	 * Set the ObjectOutputStream for this to write generated events to.
	 * 
	 * @param writer the stream to write generate events to
	 */
	void setGeneratedWriter(Writer writer);

	/**
	 * Set the URL of the transformation source file.
	 * 
	 * @param sourceURL the source URL
	 */
	void setSource(URL sourceURL);

	/**
	 * Set the transformation Result.
	 * 
	 * @param writer the result
	 */
	void setTarget(Writer writer);

	/**
	 * Add a breakpoint to this.
	 * 
	 * @param breakpoint
	 */
	void addBreakpoint(BreakPoint breakpoint);

	/**
	 * Remove a breakpoint from this.
	 * 
	 * @param breakpoint
	 */
	void removeBreakpoint(BreakPoint breakpoint);

	/**
	 * Perform a 'step into' operation.
	 */
	void stepInto();

	/**
	 * Perform a 'step over' operation.
	 */
	void stepOver();

	/**
	 * Perform a 'step return' operation.
	 */
	void stepReturn();

	/**
	 * Perform a 'suspend' operation.
	 */
	void suspend();

	/**
	 * Perform a 'resume' operation.
	 */
	void resume();

	/**
	 * Quit debugging.
	 */
	void quit();

	/**
	 * Generate a string that represents the current call stack of frames and their variables.
	 * <p>
	 * Frames are generated with the following format: <i>file</i>|<i>frameId</i>|<i>lineNumber</i>|<i>name</i>
	 * This is immediately followed with the id's of the frame's variables (each variable id being unique for the whole process).
	 * </p>
	 * <p>
	 * The separator for frames is $$$. Within a frame, the separator for variable id's is |.
	 * </p>
	 * <p>
	 * e.g. file:/tran1.xsl|1|12|xsl:template name="temp1"|1|2|3$$$file:/tran2.xsl|2|34|xsl:template name="temp2"|4|5|6
	 * 
	 * This defines 2 frames with id's 1 and 2, which are occur in files tran1.xsl and tran2.xsl respectively.
	 * Frame 1 is currently at line 12, in a template with name temp1, and it defines 3 variables with id's 1, 2 and 3. 
	 * </p>
	 * 
	 * @return the generated string
	 */
	String stack();

	/**
	 * Get the variable with the given id.
	 * 
	 * @param id the id of the variable
	 * @return the variable
	 */
	Variable getVariable(int id);
}
