package org.eclipse.wst.validation;

import java.util.List;

import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;

/**
 * This service is used to specify the resources that a particular resource depends on.
 * <p>
 * This is an optional service, validators do not need to use this Interface and can simply supply
 * their dependency information through the ValidationResult return result.
 * 
 * @see ValidationResult
 * @author karasiuk
 *
 */
public interface IDependencyIndex {
	
	/**
	 * Assert that one resource depends on another resource as part of it's validity.
	 * <p>
	 * For example, if an XML file is dependent on an XSD file to be valid, the resource that holds
	 * the XML file would be the dependent, and the resource that holds the XSD would be the dependsOn.
	 *  
	 * @param id the validator id that is asserting that the dependency exists.
	 * @param dependent the resource that is dependent on the other resource.
	 * @param dependsOn the resource that this being depended on.
	 */
	void add(String id, IResource dependent, IResource dependsOn);
	
	/**
	 * Remove all the dependency assertions for this project.
	 * @param project
	 */
	void clear(IProject project);
	
	/** 
	 * Answer all the resources that depends on this resource.
	 * For example, if this resource was an XSD, this could answer all the XML files that
	 * depended on it for their validity.
	 * 
	 * @param resource a resource that other resources may depend on.
	 * 
	 * @return the dependent resources.
	 */
	List<DependentResource> get(IResource resource);
	
	/** 
	 * Answer all the resources that depends on this resource.
	 * For example, if this resource was an XSD, this could answer all the XML files that
	 * depended on it for their validity.
	 * 
	 * @param id the validator id that asserted that the dependency existed.
	 * @param resource a resource that other resources may depend on.
	 * 
	 * @return the dependent resources. This method can also return null, if there are no
	 * dependent resources.
	 */
	IResource[] get(String id, IResource resource);
	
	/**
	 * Answer true if other resources depend on this resource in the context of this workspace.
	 * 
	 * @param resource the resource being tested.
	 * 
	 * @return true if any of the validator's asserted a dependency on this resource.
	 */
	boolean isDependedOn(IResource resource);
	
	/**
	 * Replace all the resources that the dependent dependsOn.
	 * 
	 * @param id the validator id that is asserting that the dependency exists.
	 * @param dependent the resource that is dependent on the other resource.
	 * @param dependsOn all the resources that are depended on. This can be null or a zero length array,
	 * in which case all the dependencies will be removed.
	 */
	void set(String id, IResource dependent, IResource[] dependsOn);

}
