package org.jboss.windup.config;
import org.ocpsoft.rewrite.config.Rule;
import org.ocpsoft.rewrite.context.EvaluationContext;
/**
* Receives events from {@link RuleSubset} during execution.
*
* @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
* @author <a href="mailto:zizka@seznam.cz">Ondrej Zizka</a>
*/
public interface RuleLifecycleListener
{
/**
* Called immediately before any {@link Rule} instances are executed.
*/
void beforeExecution(GraphRewrite event);
/**
* Called immediately before the given {@link Rule} is executed.
*
* @return true if the execution should be stopped, which is typically indicated by an underlying {@link WindupProgressMonitor}.
*/
boolean beforeRuleEvaluation(GraphRewrite event, Rule rule, EvaluationContext context);
/**
* This is optionally called by long-running rules to indicate their current progress and estimated time-remaining.
*
* @return true if the execution should be stopped, which is typically indicated by an underlying {@link WindupProgressMonitor}.
*/
boolean ruleEvaluationProgress(GraphRewrite event, String name, int currentPosition, int total, int timeRemainingInSeconds);
/**
* Called immediately after execution of the each {@link Rule}.
*/
void afterRuleConditionEvaluation(GraphRewrite event, EvaluationContext context, Rule rule, boolean result);
/**
* Called immediately before {@link Rule} operations are performed (Only called if
* {@link Rule#evaluate(org.ocpsoft.rewrite.event.Rewrite, EvaluationContext)} returned <code>true</code>).
*
* @return true if the execution should be stopped, which is typically indicated by an underlying {@link WindupProgressMonitor}.
*/
boolean beforeRuleOperationsPerformed(GraphRewrite event, EvaluationContext context, Rule rule);
/**
* Called immediately after {@link Rule} operations are performed (Only called if
* {@link Rule#evaluate(org.ocpsoft.rewrite.event.Rewrite, EvaluationContext)} returned <code>true</code>).
*/
void afterRuleOperationsPerformed(GraphRewrite event, EvaluationContext context, Rule rule);
/**
* Called immediately after a a {@link Rule} has thrown an exception, to indicate a failure of some kind
*/
void afterRuleExecutionFailed(GraphRewrite event, EvaluationContext context, Rule rule, Throwable failureCause);
/**
* Called immediately after any {@link Rule} instances are executed.
*/
void afterExecution(GraphRewrite event);
}