/*******************************************************************************
 * Copyright (c) 2000, 2010 QNX Software Systems and others.
 *
 * This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License 2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 * Contributors:
 *     QNX Software Systems - Initial API and implementation
 *     Red Hat Inc - Add setTargets method
 *******************************************************************************/
package org.eclipse.cdt.make.core;

import org.eclipse.cdt.make.internal.core.MakeTargetManager;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;

/**
 * Interface for {@link MakeTargetManager} handling make target items in Make Targets View.
 *
 * @noextend This class is not intended to be subclassed by clients.
 * @noimplement This interface is not intended to be implemented by clients.
 */
public interface IMakeTargetManager {
	IMakeTarget createTarget(IProject project, String targetName, String targetBuilderID) throws CoreException;

	/**
	 * Adds target to manager.
	 */
	void addTarget(IMakeTarget target) throws CoreException;

	/**
	 * Adds target to manager on a specific projects folder. It is assumed
	 * that the target and container belong to the same project.
	 */
	void addTarget(IContainer container, IMakeTarget target) throws CoreException;

	void removeTarget(IMakeTarget target) throws CoreException;

	void renameTarget(IMakeTarget target, String name) throws CoreException;

	/**
	 * Set targets on a specific projects folder.  It is assumed
	 * all targets and container belong to the same project which
	 * is determined from the first element of the
	 * targets array.  If no container is specified, the project is used.
	 * All previous targets for the container are replaced upon success and if
	 * failure occurs, an exception is thrown and the previous set of targets
	 * for the container are unchanged.
	 *
	 * @param container to set targets for or null if project should be used
	 * @param targets array
	 *
	 * @since 7.0
	 */
	public void setTargets(IContainer container, IMakeTarget[] targets) throws CoreException;

	boolean targetExists(IMakeTarget target);

	IMakeTarget[] getTargets(IContainer container) throws CoreException;

	IMakeTarget findTarget(IContainer container, String name) throws CoreException;

	IProject[] getTargetBuilderProjects() throws CoreException;

	String getBuilderID(String targetBuilderID);

	boolean hasTargetBuilder(IProject project);

	String[] getTargetBuilders(IProject project);

	void addListener(IMakeTargetListener listener);

	void removeListener(IMakeTargetListener listener);
}
