package org.jboss.windup.config.builder;
import javax.enterprise.inject.Vetoed;
import org.jboss.windup.config.AbstractRuleProvider;
import org.jboss.windup.config.loader.RuleLoaderContext;
import org.jboss.windup.config.metadata.MetadataBuilder;
import org.jboss.windup.config.phase.RulePhase;
import org.ocpsoft.rewrite.config.Configuration;
import org.ocpsoft.rewrite.config.ConfigurationBuilder;
import org.ocpsoft.rewrite.config.ConfigurationRuleBuilderCustom;
import org.ocpsoft.rewrite.config.Rule;
/**
* Used to construct new dynamic {@link AbstractRuleProvider} instances.
*
* @author <a href="mailto:jesse.sightler@gmail.com">Jess Sightler</a>
* @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
*/
@Vetoed
public final class RuleProviderBuilder extends AbstractRuleProvider implements
RuleProviderBuilderSetPhase,
RuleProviderBuilderMetadataSetPhase,
RuleProviderBuilderAddDependencies
{
private final ConfigurationBuilder configurationBuilder;
private MetadataBuilder metadata;
/**
* Begin creating a new dynamic {@link AbstractRuleProvider}.
*/
public static RuleProviderBuilder begin(String id)
{
MetadataBuilder builder = MetadataBuilder.forProvider(RuleProviderBuilder.class, id);
return new RuleProviderBuilder(builder).setMetadataBuilder(builder);
}
private RuleProviderBuilder(MetadataBuilder builder)
{
super(builder);
configurationBuilder = ConfigurationBuilder.begin();
}
private RuleProviderBuilder setMetadataBuilder(MetadataBuilder builder)
{
this.metadata = builder;
return this;
}
public void setOrigin(String origin)
{
metadata.setOrigin(origin);
}
@Override
public RuleProviderBuilderAddDependencies setPhase(Class<? extends RulePhase> phase)
{
metadata.setPhase(phase);
return this;
}
@Override
public RuleProviderBuilderAddDependencies addExecuteAfter(String id)
{
metadata.addExecuteAfterId(id);
return this;
}
@Override
public RuleProviderBuilderAddDependencies addExecuteAfter(Class<? extends AbstractRuleProvider> type)
{
metadata.addExecuteAfter(type);
return this;
}
@Override
public RuleProviderBuilderAddDependencies addExecuteBefore(String id)
{
metadata.addExecuteBeforeId(id);
return this;
}
@Override
public RuleProviderBuilderAddDependencies addExecuteBefore(Class<? extends AbstractRuleProvider> type)
{
metadata.addExecuteBefore(type);
return this;
}
@Override
public ConfigurationRuleBuilderCustom addRule()
{
ConfigurationRuleBuilderCustom rule = configurationBuilder.addRule();
return rule;
}
@Override
public ConfigurationRuleBuilderCustom addRule(Rule rule)
{
ConfigurationRuleBuilderCustom wrapped = configurationBuilder.addRule(rule);
return wrapped;
}
@Override
public Configuration getConfiguration(RuleLoaderContext ruleLoaderContext)
{
return configurationBuilder;
}
public MetadataBuilder getMetadataBuilder() {
return metadata;
}
@Override
public String toString()
{
return super.toString();
}
}