/*******************************************************************************
 * Copyright (c) 2016 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.core.model;


import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IAdaptable;

/**
 * TriggerPoint is a breakpoint property which defines a dependency relationship
 * between all the breakpoints of a workspace and trigger points defined in a
 * workspace. TriggerPoint defines the availability of breakpoints to be
 * suspended based on the order of hits of breakpoints. If there are active
 * TriggerPoints, breakpoints can not be suspended.
 *
 * @since 3.11
 */
public interface ITriggerPoint extends IAdaptable {
	/**
	 * Persisted breakpoint marker attribute (value
	 * <code>"org.eclipse.debug.core.triggerpoint"</code>). The attribute is a
	 * <code>boolean</code> corresponding to whether a breakpoint is a trigger
	 * breakpoint for the workspace.
	 *
	 * @see org.eclipse.core.resources.IMarker#getAttribute(String, boolean)
	 *
	 */
	public static final String TRIGGERPOINT = "org.eclipse.debug.core.triggerpoint"; //$NON-NLS-1$

	/**
	 * Returns whether this breakpoint is defined as a trigger point in the
	 * workspace.
	 *
	 * @return whether this breakpoint is a trigger point
	 * @exception CoreException if unable to access the associated attribute on
	 *                this breakpoint's underlying marker
	 */
	public boolean isTriggerPoint() throws CoreException;

	/**
	 * Sets whether this breakpoint is to be treated as a trigger point for the
	 * workspace. If it is a trigger point, then the
	 * {@link org.eclipse.debug.core.model.ITriggerPoint} attribute on this
	 * breakpoint's marker is set to <code>true</code>.
	 *
	 * @param trigger whether this breakpoint is to be treated as trigger point
	 *            for the workspace
	 * @exception CoreException if unable to set the associated attribute on
	 *                this breakpoint's underlying marker.
	 */
	public void setTriggerPoint(boolean trigger) throws CoreException;

}


