/*******************************************************************************
 * Copyright (c) 2000, 2011 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.jdt.debug.core;

import org.eclipse.core.runtime.CoreException;

/**
 * A line breakpoint installed in types associated with a specific source file
 * (based on source file name debug attribute) and whose fully qualified name
 * matches a specified pattern per target. The {target, type name pattern} pairs
 * are not persisted with this breakpoint, as targets are transient. Clients
 * that use this type of breakpoint are intended to be breakpoint listeners that
 * set a pattern per target as each breakpoint is added to a target.
 * 
 * @see org.eclipse.jdt.debug.core.IJavaBreakpointListener
 * @since 2.0
 * @noimplement This interface is not intended to be implemented by clients.
 * @noextend This interface is not intended to be extended by clients.
 */
public interface IJavaTargetPatternBreakpoint extends IJavaLineBreakpoint {

	/**
	 * Returns the type name pattern this breakpoint uses to identify types in
	 * which to install itself in the given target
	 * 
	 * @param target
	 *            debug target
	 * @return the type name pattern this breakpoint uses to identify types in
	 *         which to install itself in the given target
	 */
	public String getPattern(IJavaDebugTarget target);

	/**
	 * Sets the type name pattern this breakpoint uses to identify types in
	 * which to install itself in the given target
	 * 
	 * @param target
	 *            debug target
	 * @param pattern
	 *            type name pattern
	 * @exception CoreException
	 *                if changing the pattern for this breakpoint fails
	 */
	public void setPattern(IJavaDebugTarget target, String pattern)
			throws CoreException;

	/**
	 * Returns the source file name in which this breakpoint is set. When this
	 * breakpoint specifies a source file name, this breakpoint is only
	 * installed in types whose source file name debug attribute match this
	 * value.
	 * 
	 * @return the source file name in which this breakpoint is set
	 * @exception CoreException
	 *                if unable to access the property from this breakpoint's
	 *                underlying marker
	 */
	public String getSourceName() throws CoreException;
}
