/*******************************************************************************
 * Copyright (c) 2000, 2007 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.debug.jdi.tests;

import com.sun.jdi.event.AccessWatchpointEvent;
import com.sun.jdi.event.BreakpointEvent;
import com.sun.jdi.event.ClassPrepareEvent;
import com.sun.jdi.event.ClassUnloadEvent;
import com.sun.jdi.event.ExceptionEvent;
import com.sun.jdi.event.MethodEntryEvent;
import com.sun.jdi.event.MethodExitEvent;
import com.sun.jdi.event.ModificationWatchpointEvent;
import com.sun.jdi.event.StepEvent;
import com.sun.jdi.event.ThreadDeathEvent;
import com.sun.jdi.event.ThreadStartEvent;
import com.sun.jdi.event.VMDeathEvent;
import com.sun.jdi.event.VMDisconnectEvent;

/**
 * An event listener that handles all kinds of event coming from the VM.
 */

public interface EventListener {
	/**
	 * Handles an access watchpoint event.
	 * Returns whether the VM should be resumed if it was interrupted.
	 * @param event
	 * @return whether the VM should be resumed if it was interrupted.
	 */
	public boolean accessWatchpoint(AccessWatchpointEvent event);
	/**
	 * Handles a breakpoint event.
	 * Returns whether the VM should be resumed if it was interrupted.
	 * @param event
	 * @return whether the VM should be resumed if it was interrupted.
	 */
	public boolean breakpoint(BreakpointEvent event);
	/**
	 * Handles a class prepare event.
	 * Returns whether the VM should be resumed if it was interrupted.
	 * @param event
	 * @return whether the VM should be resumed if it was interrupted.
	 */
	public boolean classPrepare(ClassPrepareEvent event);
	/**
	 * Handles a class unload event.
	 * Returns whether the VM should be resumed if it was interrupted.
	 * @param event
	 * @return whether the VM should be resumed if it was interrupted.
	 */
	public boolean classUnload(ClassUnloadEvent event);
	/**
	 * Handles an exception event.
	 * Returns whether the VM should be resumed if it was interrupted.
	 * @param event
	 * @return whether the VM should be resumed if it was interrupted.
	 */
	public boolean exception(ExceptionEvent event);
	/**
	 * Handles a method entry event
	 * @param event
	 * @return whether the VM should be resumed if it was interrupted.
	 */
	public boolean methodEntry(MethodEntryEvent event);
	/**
	 * Handles a method exit event
	 * @param event
	 * @return whether the VM should be resumed if it was interrupted.
	 */
	public boolean methodExit(MethodExitEvent event);
	/**
	 * Handles a modification watchpoint event.
	 * Returns whether the VM should be resumed if it was interrupted.
	 * @param event
	 * @return whether the VM should be resumed if it was interrupted.
	 */
	public boolean modificationWatchpoint(ModificationWatchpointEvent event);
	/**
	 * Handles a step event.
	 * Returns whether the VM should be resumed if it was interrupted.
	 * @param event
	 * @return whether the VM should be resumed if it was interrupted.
	 */
	public boolean step(StepEvent event);
	/**
	 * Handles a thread death event.
	 * Returns whether the VM should be resumed if it was interrupted.
	 * @param event
	 * @return whether the VM should be resumed if it was interrupted.
	 */
	public boolean threadDeath(ThreadDeathEvent event);
	/**
	 * Handles a thread start event.
	 * Returns whether the VM should be resumed if it was interrupted.
	 * @param event
	 * @return whether the VM should be resumed if it was interrupted.
	 */
	public boolean threadStart(ThreadStartEvent event);
	/**
	 * Handles a vm death event.
	 * Returns whether the VM should be resumed if it was interrupted.
	 * @param event
	 * @return whether the VM should be resumed if it was interrupted.
	 */
	public boolean vmDeath(VMDeathEvent event);
	/**
	 * Handles a vm disconnect event.
	 * Returns whether the VM should be resumed if it was interrupted.
	 * @param event
	 * @return whether the VM should be resumed if it was interrupted.
	 */
	public boolean vmDisconnect(VMDisconnectEvent event);
}
