package org.jboss.windup.rules.apps.java.xml; import org.apache.commons.lang3.StringUtils; 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.parser.xml.RuleProviderHandler; import org.jboss.windup.rules.apps.java.condition.annotation.AnnotationLiteralCondition; import org.jboss.windup.util.exception.WindupException; import org.w3c.dom.Element; /** * Creates an {@link AnnotationLiteralCondition} for matching on literal values inside of annotations. * * Syntax is as follows: * <pre> * <annotation-literal pattern="parameterized-pattern"> * [... list of subconditions that will match against this element ...] * </annotation-literal> * </pre> * * @author <a href="mailto:jesse.sightler@gmail.com">Jesse Sightler</a> */ @NamespaceElementHandler(elementName = AnnotationLiteralConditionHandler.ANNOTATION_LITERAL, namespace = RuleProviderHandler.WINDUP_RULE_NAMESPACE) public class AnnotationLiteralConditionHandler extends AnnotationConditionHandler implements ElementHandler<AnnotationLiteralCondition> { public static final String ANNOTATION_LITERAL = "annotation-literal"; private static final String PATTERN = "pattern"; @Override public AnnotationLiteralCondition processElement(ParserContext handlerManager, Element element) throws ConfigurationException { String pattern = element.getAttribute(PATTERN); if (StringUtils.isBlank(pattern)) throw new WindupException(ANNOTATION_LITERAL + " element requires a " + PATTERN + " attribute!"); return new AnnotationLiteralCondition(pattern); } }