package org.jboss.windup.rules.apps.java.scan.operation.packagemapping; import static org.joox.JOOX.$; 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.config.parser.xml.RuleProviderHandler; import org.jboss.windup.util.exception.WindupException; import org.jboss.windup.util.xml.XmlUtil; import org.ocpsoft.rewrite.config.Rule; import org.ocpsoft.rewrite.context.Context; import org.w3c.dom.Element; /** * Handles parsing the "package-mapping" element to add rules to the current ruleset.<br/> * * Example element:<br/> * * <pre> * <package-mapping from="org.apache" to="Apache"/> * </pre> */ @NamespaceElementHandler(elementName = PackageNameMappingHandler.ELEM_NAME, namespace = RuleProviderHandler.WINDUP_RULE_NAMESPACE) public class PackageNameMappingHandler implements ElementHandler<Void> { protected static final String ELEM_NAME = "package-mapping"; private static final String FROM = "from"; private static final String TO = "to"; @Override public Void processElement(ParserContext context, Element element) { String id = $(element).attr("id"); String from = $(element).attr(FROM); String to = $(element).attr(TO); if (StringUtils.isBlank(from)) { throw new WindupException("The '" + ELEM_NAME + "' element must have a non-empty '" + FROM + "' attribute"); } if (StringUtils.isBlank(to)) { throw new WindupException("The '" + ELEM_NAME + "' element must have a non-empty '" + TO + "' attribute"); } PackageNameMappingWithOrganization withOrganization = PackageNameMapping.fromPackage(from).toOrganization(to); Rule rule = StringUtils.isNotBlank(id) ? withOrganization.withId(id) : withOrganization; if (rule instanceof Context) ((Context) rule).put(RuleMetadataType.RULE_XML, XmlUtil.nodeToString(element)); context.getBuilder().addRule(rule); return null; } }