package org.jboss.windup.config.metadata;
import java.util.ArrayList;
import java.util.Collections;
import java.util.IdentityHashMap;
import java.util.List;
import org.jboss.windup.config.RuleProvider;
import org.jboss.windup.config.GraphRewrite;
import org.ocpsoft.rewrite.config.Configuration;
import org.ocpsoft.rewrite.config.Rule;
/**
* Maintains a link between all {@link Rule} and {@link RuleProvider} instances that have been loaded by Windup.
*
* @author <a href="mailto:jesse.sightler@gmail.com">Jesse Sightler</a>
*/
public class RuleProviderRegistry
{
private final List<RuleProvider> providers = new ArrayList<>();
private final IdentityHashMap<RuleProvider, List<Rule>> providersToRules = new IdentityHashMap<>();
private Configuration configuration;
/**
* Gets the current instance of {@link RuleProviderRegistry}.
*/
public static RuleProviderRegistry instance(GraphRewrite event)
{
RuleProviderRegistry instance = (RuleProviderRegistry) event.getRewriteContext().get(RuleProviderRegistry.class);
return instance;
}
/**
* Sets the list of loaded {@link RuleProvider}s.
*/
public void setProviders(List<RuleProvider> providers)
{
this.providers.clear();
this.providers.addAll(providers);
}
/**
* Gets the list of loaded {@link RuleProvider}s as an immutable {@link List}.
*/
public List<RuleProvider> getProviders()
{
return Collections.unmodifiableList(providers);
}
/**
* Sets the {@link List} of {@link Rule}s that were loaded from the given {@link RuleProvider}.
*/
public void setRules(RuleProvider provider, List<Rule> rules)
{
providersToRules.put(provider, rules);
}
/**
* Gets all of the {@link Rule}s that were loaded by the given {@link RuleProvider}.
*/
public List<Rule> getRules(RuleProvider provider)
{
List<Rule> rules = providersToRules.get(provider);
if (rules == null)
{
return Collections.emptyList();
}
return Collections.unmodifiableList(rules);
}
/**
* Contains the {@link Configuration} containing all of the loaded {@Rule}s.
*/
public Configuration getConfiguration()
{
return configuration;
}
/**
* Contains the {@link Configuration} containing all of the loaded {@Rule}s.
*/
public void setConfiguration(Configuration configuration)
{
this.configuration = configuration;
}
}