package org.jboss.windup.rules.apps.java.condition.annotation;
import org.jboss.windup.config.GraphRewrite;
import org.jboss.windup.config.condition.EvaluationStrategy;
import org.jboss.windup.rules.apps.java.scan.ast.annotations.JavaAnnotationLiteralTypeValueModel;
import org.jboss.windup.rules.apps.java.scan.ast.annotations.JavaAnnotationTypeValueModel;
import org.ocpsoft.rewrite.context.EvaluationContext;
import org.ocpsoft.rewrite.param.ParameterizedPatternResult;
import org.ocpsoft.rewrite.param.RegexParameterizedPatternParser;
/**
* Matches a literal value on an annotation element. The value itself is a pattern match and the value is always treated as
* a string.
*
* @author <a href="mailto:jesse.sightler@gmail.com">Jesse Sightler</a>
*/
public class AnnotationLiteralCondition extends AnnotationCondition
{
private RegexParameterizedPatternParser pattern;
/**
* Creates a {@link AnnotationLiteralCondition} with the given pattern.
*/
public AnnotationLiteralCondition(String pattern)
{
this.pattern = new RegexParameterizedPatternParser(pattern);
}
@Override
public String toString()
{
return "AnnotationLiteralCondition{" +
"pattern=" + pattern +
'}';
}
@Override
public boolean evaluate(GraphRewrite event, EvaluationContext context, EvaluationStrategy strategy, JavaAnnotationTypeValueModel value)
{
if (!(value instanceof JavaAnnotationLiteralTypeValueModel))
return false;
JavaAnnotationLiteralTypeValueModel literalType = (JavaAnnotationLiteralTypeValueModel) value;
// submit the value to the value pattern
if (pattern != null)
{
String annotationValue = literalType.getLiteralValue();
ParameterizedPatternResult referenceResult = pattern.parse(annotationValue);
if (!referenceResult.matches())
return false;
if (!referenceResult.submit(event, context))
return false;
}
return true;
}
}