/*******************************************************************************
* Copyright (c) 2008, 2010 Spring IDE Developers
* 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:
* Spring IDE Developers - initial API and implementation
*******************************************************************************/
package org.springframework.ide.eclipse.core.project;
import java.util.List;
import java.util.Set;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IResourceDelta;
import org.eclipse.core.resources.IncrementalProjectBuilder;
import org.eclipse.core.runtime.IProgressMonitor;
import org.springframework.ide.eclipse.core.internal.model.validation.ValidatorDefinition;
/**
* Listener interface that can be implemented by clients who want to receive callbacks on certain events fired by the
* project contribution infrastructure.
* <p>
* An instance of this interface can be contributed using the listeners extension point:
* <p>
* <pre>
* <extension
* point="org.springframework.ide.eclipse.core.listeners">
* <listener
* class="org.springframework.ide.eclipse.core.java.TypeStructureStateRegisteringEventListener">
* </listener>
* </extension>
* </pre>
* @author Christian Dupuis
* @since 2.2.0
*/
public interface IProjectContributionEventListener {
/**
* Signals that {@link IProjectContributor}s are about to be executed.
* @param kind one of {@link IncrementalProjectBuilder#AUTO_BUILD}, {@link IncrementalProjectBuilder#CLEAN_BUILD},
* {@link IncrementalProjectBuilder#FULL_BUILD} or {@link IncrementalProjectBuilder#INCREMENTAL_BUILD}
* @param delta the changed resources that triggered the build
* @param builderDefinitions the contributed project builder extensions
* @param validatorDefinitions the contributed validator extensions
* @param state the state object
* @param project the current project
* @param monitor the monitor to report progress against
*/
void start(int kind, IResourceDelta delta, List<ProjectBuilderDefinition> builderDefinitions,
List<ValidatorDefinition> validatorDefinitions, IProjectContributorState state, IProject project,
IProgressMonitor monitor);
/**
* Signals that the given {@link IProjectContributor} is about to be executed
* @param contributor the contributor to start
* @param affectedResources the resources that are affected
* @param monitor the monitor to report progress against
* @deprecated use {@link #startProjectBuilder(ProjectBuilderDefinition, Set, IProgressMonitor)} or
* {@link #startValidator(ValidatorDefinition, Set, IProgressMonitor)} instead
*/
void startContributor(IProjectContributor contributor, Set<IResource> affectedResources, IProgressMonitor monitor);
void startProjectBuilder(ProjectBuilderDefinition contributor, Set<IResource> affectedResources,
IProgressMonitor monitor);
void startValidator(ValidatorDefinition contributor, Set<IResource> affectedResources, IProgressMonitor monitor);
/**
* Signals that {@link IProjectContributor}s are done executing.
* @param kind one of {@link IncrementalProjectBuilder#AUTO_BUILD}, {@link IncrementalProjectBuilder#CLEAN_BUILD},
* {@link IncrementalProjectBuilder#FULL_BUILD} or {@link IncrementalProjectBuilder#INCREMENTAL_BUILD}
* @param delta the changed resources that triggered the build
* @param builderDefinitions the contributed project builder extensions
* @param validatorDefinitions the contributed validator extensions
* @param state the state object
* @param project the current project
* @param monitor the monitor to report progress against
*/
void finish(int kind, IResourceDelta delta, List<ProjectBuilderDefinition> builderDefinitions,
List<ValidatorDefinition> validatorDefinitions, IProjectContributorState state, IProject project,
IProgressMonitor monitor);
/**
* Signals that the given {@link IProjectContributor} is done executing
* @param contributor the contributor has is done executing
* @param affectedResources the resources that are affected
* @param monitor the monitor to report progress against
* @deprecated use {@link #finishProjectBuilder(ProjectBuilderDefinition, Set, IProgressMonitor)} or
* {@link #finishValidator(ValidatorDefinition, Set, IProgressMonitor)} instead
*/
void finishContributor(IProjectContributor contributor, Set<IResource> affectedResources, IProgressMonitor monitor);
void finishProjectBuilder(ProjectBuilderDefinition contributor, Set<IResource> affectedResources,
IProgressMonitor monitor);
void finishValidator(ValidatorDefinition contributor, Set<IResource> affectedResources, IProgressMonitor monitor);
}