package org.jboss.windup.config.operation.iteration;
import org.jboss.windup.config.GraphRewrite;
import org.jboss.windup.config.Variables;
import org.jboss.windup.config.condition.GraphCondition;
import org.jboss.windup.config.operation.Iteration;
import org.jboss.windup.graph.model.WindupVertexFrame;
import org.ocpsoft.rewrite.context.EvaluationContext;
public abstract class AbstractIterationFilter<T extends WindupVertexFrame> extends GraphCondition
{
Class<T> clazz;
public AbstractIterationFilter(String variableName)
{
this.setInputVariablesName(variableName);
}
/**
* If the variable name is not specified, the iteration will set it.
*/
public AbstractIterationFilter()
{
}
public boolean hasVariableNameSet()
{
return getInputVariablesName() != null;
}
@Override
public boolean evaluate(GraphRewrite event, EvaluationContext context)
{
checkVariableName(event, context);
Variables varStack = Variables.instance(event);
T payload = Iteration.getCurrentPayload(varStack, clazz, getInputVariablesName());
return evaluate(event, context, payload);
}
/**
* Check the variable name and if not set, set it with the singleton variable being on the top of the stack.
*/
protected void checkVariableName(GraphRewrite event, EvaluationContext context)
{
if (getInputVariablesName() == null)
{
setInputVariablesName(Iteration.getPayloadVariableName(event, context));
}
}
public abstract boolean evaluate(GraphRewrite event, EvaluationContext context, T payload);
}