package org.jboss.windup.config.metadata; import java.util.List; import org.jboss.windup.config.RuleProvider; import org.jboss.windup.config.phase.RulePhase; import org.ocpsoft.rewrite.config.Rule; /** * Describes {@link RuleProvider} instances. * * @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a> */ public interface RuleProviderMetadata extends RulesetMetadata { /** * Returns the {@link Class} of the corresponding {@link RuleProvider}. */ Class<? extends RuleProvider> getType(); /** * Returns the {@link RulesetMetadata}, if any, for the rule-set from which this {@link RuleProviderMetadata} * originated. */ RulesetMetadata getRulesetMetadata(); /** * Return the {@link RulePhase} in which {@link Rule} instances from this {@link RuleProvider} should be executed. * <p> * The default phase is {@link org.jboss.windup.config.phase.MigrationRulesPhase}. */ Class<? extends RulePhase> getPhase(); /** * Returns a list of {@link RuleProvider} classes that should execute before the {@link Rule} instances in this corresponding {@link RuleProvider} * . * * {@link RuleProvider}s can also be specified based on id ({@link #getExecuteAfterIDs}). */ List<Class<? extends RuleProvider>> getExecuteAfter(); /** * Returns a list of the {@link RuleProvider} classes that should execute before the {@link Rule}s in this * {@link RuleProvider}. * * This is returned as a list of {@link Rule} IDs in order to support extensions that cannot depend on each other * via class names. For example, in the case of the Groovy rules extension, a single class covers many rules with * their own IDs. * * For specifying Java-based rules, {@link #getExecuteAfter()} is preferred. */ List<String> getExecuteAfterIDs(); /** * Returns a list of {@link RuleProvider} classes that should execute after the {@link Rule}s in this {@link RuleProvider}. * * {@link RuleProvider}s can also be specified based on id ({@link #getExecuteBeforeIDs}). */ List<Class<? extends RuleProvider>> getExecuteBefore(); /** * Returns a list of the {@link RuleProvider} classes that should execute after the {@link Rule}s in this * {@link RuleProvider}. * * This is returned as a list of {@link Rule} IDs in order to support extensions that cannot depend on each other * via {@link Class} names. For example, in the case of the Groovy rules extension, a single class covers many rules * with their own IDs. * * For specifying Java-based rules, {@link #getExecuteBefore()} is preferred. */ List<String> getExecuteBeforeIDs(); /** * Whether Windup should stop execution if this provider's rule execution ends with an exception. * * By default, the exceptions are only logged and the failing rule appears in report. * The rule itself is responsible for handling exceptions and storing them into the graph. */ boolean isHaltOnException(); /** * Indicates whether or not the rules in this provider should override other rules. * * If this ruleprovider has the same ID as another rule provider, then any rules in this provider * will override rules from that base rule provider that have the same id. */ boolean isOverrideProvider(); /** * If true, Windup will skip running this RuleProvider. Meant for development purposes. */ boolean isDisabled(); }