package org.jboss.windup.config.parser.xml; import static org.joox.JOOX.$; import java.util.List; import org.apache.commons.lang3.StringUtils; import org.jboss.windup.config.metadata.RuleMetadataType; 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.xml.XmlUtil; import org.ocpsoft.rewrite.config.Condition; import org.ocpsoft.rewrite.config.ConfigurationRuleBuilder; import org.ocpsoft.rewrite.config.Operation; import org.w3c.dom.Element; /** * Handles parsing the "rule" element to add rules to the current ruleset. */ @NamespaceElementHandler(elementName = "rule", namespace = RuleProviderHandler.WINDUP_RULE_NAMESPACE) public class RuleHandler implements ElementHandler<Void> { @Override public Void processElement(ParserContext context, Element element) { ConfigurationRuleBuilder rule = (ConfigurationRuleBuilder) context.getBuilder().addRule(); context.setRule(rule); processRuleElement(context, rule, element); rule.getRuleBuilder().put(RuleMetadataType.RULE_XML, XmlUtil.nodeToString(element)); return null; } /** * Processes all of the elements within a rule and attaches this data to the passed in rule. For example, this will process all of the "when", * "perform", and "otherwise" elements. */ public static void processRuleElement(ParserContext context, ConfigurationRuleBuilder rule, Element element) { String id = $(element).attr("id"); List<Element> children = $(element).children().get(); for (Element child : children) { Object result = context.processElement(child); switch ($(child).tag()) { case "when": rule.when(((Condition) result)); break; case "perform": rule.perform(((Operation) result)); break; case "otherwise": rule.otherwise(((Operation) result)); break; case "where": break; } } if (StringUtils.isNotBlank(id)) { rule.withId(id); } } }