package org.jboss.windup.config.metadata;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.jboss.windup.config.RuleProvider;
import org.jboss.windup.config.phase.MigrationRulesPhase;
import org.jboss.windup.config.phase.RulePhase;
import org.ocpsoft.rewrite.config.Rule;
/**
* A descriptor for {@link RuleProvider} metadata. Can be overridden by altering the {@link RuleProviderMetadata} directly.
*
* @author <a href="mailto:ozizka@redhat.com">Ondrej Zizka</a>
* @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface RuleMetadata
{
/**
* Returns a unique identifier for this particular {@link RuleProvider}. The default is based on the {@link Class} name, but this can be
* overridden here - or in subclasses - to provide a more readable name.
*/
String id() default "";
/**
* Returns a human-readable text containing a description of the rules in this {@link RuleProvider}.
*/
String description() default "";
/**
* String used to display the progress of rule execution to the user.
*/
String perform() default "";
/**
* Return the {@link RulePhase} in which the {@link Rule} instances from this {@link RuleProvider} should be executed.
* <p>
* The default phase is {@link MigrationRulesPhase}.
*/
Class<? extends RulePhase> phase() default MigrationRulesPhase.class;
/**
* Returns a list of {@link RuleProvider} after which the {@link Rule} instances supplied by this {@link RuleProvider} should be executed.
*/
Class<? extends RuleProvider>[] after() default {};
/**
* Returns a list of {@link RuleProvider} IDs after which the {@link Rule} instances supplied by this {@link RuleProvider} should be executed.
* <p>
* This is returned as a list of {@link RuleProvider} IDs in order to support extensions that cannot depend on each other via class names.
*/
String[] afterIDs() default {};
/**
* Returns a list of {@link RuleProvider} before which the {@link Rule} instances supplied by this {@link RuleProvider} should be executed.
*/
Class<? extends RuleProvider>[] before() default {};
/**
* Returns a list of {@link RuleProvider} IDs before which the {@link Rule} instances supplied by this {@link RuleProvider} should be executed.
* <p>
* This is returned as a list of {@link RuleProvider} IDs in order to support extensions that cannot depend on each other via class names.
*/
String[] beforeIDs() default {};
/**
* The tags describing this {@link RuleProvider}.
*/
String[] tags() default {};
/**
* A list of source technologies that the annotated rules pertain to.
*/
Technology[] sourceTechnologies() default {};
/**
* A list of target technologies that the annotated rules pertain to.
*/
Technology[] targetTechnologies() default {};
/**
* 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 haltOnException() default false;
/**
* 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 overrideProvider() default false;
/**
* If true, Windup will skip running this RuleProvider. Meant for development purposes.
*/
boolean disabled() default false;
}