package org.jboss.windup.exec.configuration.options;

import java.util.Collection;

import javax.inject.Inject;

import org.jboss.windup.config.AbstractConfigurationOption;
import org.jboss.windup.config.InputType;
import org.jboss.windup.config.ValidationResult;
import org.jboss.windup.config.metadata.RuleProviderRegistryCache;

/**
 * Specifies the tags to be excluded during Windup execution. The default behavior is not to exclude any tags.
 *
 * @author <a href="mailto:jesse.sightler@gmail.com">Jesse Sightler</a>
 */
public class ExcludeTagsOption extends AbstractConfigurationOption
{
    public static final String NAME = "excludeTags";

    @Inject
    private RuleProviderRegistryCache cache;

    @Override
    public Collection<?> getAvailableValues()
    {
        return cache.getAvailableTags();
    }

    @Override
    public String getName()
    {
        return NAME;
    }

    @Override
    public String getLabel()
    {
        return "Indicates the tags to explicitly exclude from processing (by default all tags are processed). Multiple tags can be specified separated by a space (eg, --"
                    + NAME + " TAG_1 TAG_@";
    }

    @Override
    public String getDescription()
    {
        return "Indicates the tags to exclude from processing. If this is unset, then all tags will be processed. If this is set, then Rules with the specified tags will be skipped.";
    }

    @Override
    public InputType getUIType()
    {
        return InputType.SELECT_MANY;
    }

    @Override
    public Class<String> getType()
    {
        return String.class;
    }

    @Override
    public boolean isRequired()
    {
        return false;
    }

    @Override
    public ValidationResult validate(Object value)
    {
        return ValidationResult.SUCCESS;
    }

}
