package org.jboss.windup.config.parser.xml;
import java.util.stream.Collectors;
import org.jboss.windup.config.exception.ConfigurationException;
import org.jboss.windup.config.parser.ElementHandler;
import org.jboss.windup.config.parser.NamespaceElementHandler;
import org.jboss.windup.config.parser.ParserContext;
import org.jboss.windup.config.phase.RulePhase;
import org.jboss.windup.config.phase.RulePhaseFinder;
import org.w3c.dom.Element;
/**
* Sets the phase for the current ruleset.
*
* @author <a href="mailto:jesse.sightler@gmail.com">Jesse Sightler</a>
*/
@NamespaceElementHandler(elementName = "phase", namespace = RuleProviderHandler.WINDUP_RULE_NAMESPACE)
public class PhaseHandler implements ElementHandler<Void>
{
private RulePhaseFinder phaseFinder = new RulePhaseFinder();
@Override
public Void processElement(ParserContext context, Element element) throws ConfigurationException
{
String phaseStr = element.getTextContent().trim();
Class<? extends RulePhase> phase = phaseFinder.findPhase(phaseStr);
if (phase == null)
{
String phasesListing = phaseFinder.getAvailablePhases().stream().map(clazz -> clazz.getSimpleName()).collect(Collectors.joining("\n "));
throw new IllegalArgumentException("Unrecognized phase \"" + phaseStr + "\". Available phases: \n " + phasesListing);
}
context.getBuilder().setPhase(phase);
return null;
}
}