package org.jboss.windup.config.metadata;
import java.util.Set;
import org.jboss.forge.furnace.addons.Addon;
import org.jboss.forge.furnace.addons.AddonId;
import org.jboss.windup.config.RuleProvider;
import org.ocpsoft.rewrite.config.Rule;
/**
* Each {@link Addon} that contains {@link RuleProvider} implementations should implement this interface, and by doing
* so provide some basic metadata about its contents.
*
* @author Jess Sightler <jesse.sightler@gmail.com>
* @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
*/
public interface RulesetMetadata
{
/**
* Returns a unique identifier for the corresponding {@link RuleProvider}. The default is based on the originating
* {@link Addon} and {@link Class} name, but this can be overridden in subclasses to provide a more readable name.
*/
String getID();
/**
* Returns a descriptive {@link String}, informing a human where they can find the {@link Rule} instances provided
* by this {@link RuleProvider}.
*/
String getOrigin();
/**
* Returns a human-readable description the rules associated with this {@link RulesetMetadata}.
*/
String getDescription();
/**
* Return the {@link Set} of tags by which this {@link RulesetMetadata} is classified.
*/
Set<String> getTags();
/**
* Return <code>true</code> if this {@link RulesetMetadata} contains all of the given tags.
*/
boolean hasTags(String tag, String... tags);
/**
* Return the {@link Set} of source {@link TechnologyReference} instances to which this {@link RuleProvider} is
* related.
*/
Set<TechnologyReference> getSourceTechnologies();
/**
* Return the {@link Set} of target {@link TechnologyReference} instances to which this {@link RuleProvider} is
* related.
*/
Set<TechnologyReference> getTargetTechnologies();
/**
* Return the {@link Set} of {@link Addon}s required to run this rule-set. (<b>Note:</b> This is typically only used
* in situations where rules are provided externally - such as XML - whereas in Java, the {@link Addon} will already
* define its dependencies on other addons directly.)
*/
Set<AddonId> getRequiredAddons();
}