package org.jboss.windup.rules.files.condition;
import org.jboss.windup.config.condition.GraphCondition;
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.util.exception.WindupException;
import org.joox.JOOX;
import org.w3c.dom.Element;
import java.util.List;
/**
*
* Example:
*
* <pre>
* <toFileModel >
* <classification ...../>
* </toFileModel >
* </pre>
*
*
* @author <a href="mailto:mbriskar@gmail.com">Matej Briskar</a>
*
*/
@NamespaceElementHandler(elementName = ToFileModelHandler.ELEMENT_NAME, namespace = "http://windup.jboss.org/schema/jboss-ruleset")
public class ToFileModelHandler implements ElementHandler<ToFileModel>
{
static final String ELEMENT_NAME = "to-file-model";
@Override
public ToFileModel processElement(ParserContext context, Element element) throws ConfigurationException
{
List<Element> children = JOOX.$(element).children().get();
validateChildren(children);
Element firstChild = children.get(0);
GraphCondition wrappedCondition = (GraphCondition) context.processElement(firstChild);
validateWrappedCondition(wrappedCondition);
return ToFileModel.withWrappedCondition(wrappedCondition);
}
private void validateWrappedCondition(Object wrappedCondition)
{
if(! (wrappedCondition instanceof GraphCondition)) {
throw new WindupException("The <" + ELEMENT_NAME + "> element must wrap GraphConditions only." );
}
}
private void validateChildren(List<Element> children)
{
if(children.size() != 1) {
throw new WindupException("The <" + ELEMENT_NAME + "> element must have exactly 1 child." );
}
}
}