package org.jboss.windup.config.ruleprovider; import org.jboss.windup.config.AbstractRuleProvider; import org.jboss.windup.config.GraphRewrite; import org.jboss.windup.config.RuleProvider; import org.jboss.windup.config.loader.RuleLoaderContext; import org.jboss.windup.config.metadata.RuleProviderMetadata; import org.ocpsoft.rewrite.config.Condition; import org.ocpsoft.rewrite.config.Configuration; import org.ocpsoft.rewrite.config.ConfigurationBuilder; import org.ocpsoft.rewrite.config.Operation; import org.ocpsoft.rewrite.config.Rule; import org.ocpsoft.rewrite.context.EvaluationContext; import org.ocpsoft.rewrite.event.Rewrite; /** * A {@link RuleProvider} that provides only a single {@link Rule} (itself). * * @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a> */ public abstract class SingleRuleProvider extends AbstractRuleProvider implements Rule { public SingleRuleProvider() { super(); } public SingleRuleProvider(RuleProviderMetadata metadata) { super(metadata); } public SingleRuleProvider(Class<? extends RuleProvider> implementationType, String id) { super(implementationType, id); } @Override public String getId() { return getMetadata().getID(); } @Override public final Configuration getConfiguration(RuleLoaderContext ruleLoaderContext) { return ConfigurationBuilder.begin() .addRule() .when(this) .perform(this); } /** * Evaluate this {@link Rule} against the given {@link GraphRewrite} event. If this {@link Condition} does not apply * to the given event, it must return <code>false</code>. If the condition applies and is satisfied, return * <code>true</code>. (Default <code>true</code>.) */ public boolean evaluate(GraphRewrite event, EvaluationContext context) { return true; } /** * Perform the {@link Operation}. */ public abstract void perform(GraphRewrite event, EvaluationContext context); @Override public final boolean evaluate(Rewrite event, EvaluationContext context) { if (event instanceof GraphRewrite) return evaluate((GraphRewrite) event, context); return false; } @Override public final void perform(Rewrite event, EvaluationContext context) { if (event instanceof GraphRewrite) perform((GraphRewrite) event, context); } }