package org.jboss.windup.rules.general; import com.google.common.collect.Iterables; import org.jboss.windup.config.GraphRewrite; import org.jboss.windup.config.Variables; import org.jboss.windup.config.condition.GraphCondition; import org.jboss.windup.graph.model.WindupVertexFrame; import org.ocpsoft.rewrite.context.EvaluationContext; /** * A {@link GraphCondition} that returns true/false based on the iterable returned from the wrapped condition. It is useful to check if the result * contains the specified number of elements etc. * * @author <a href="mailto:mbriskar@gmail.com">Matej Briskar</a> */ public class IterableFilter extends GraphCondition { private GraphCondition wrappedCondition; private Integer size; public static IterableFilter withSize(int size) { return new IterableFilter(size); } public IterableFilter(int size) { this.size=size; } public IterableFilter withWrappedCondition(GraphCondition condition) { this.wrappedCondition=condition; return this; } @Override public boolean evaluate(GraphRewrite event, EvaluationContext context) { wrappedCondition.evaluate(event,context); Iterable<? extends WindupVertexFrame> vertices= Variables.instance(event).findVariable(wrappedCondition.getOutputVariablesName()); if(Iterables.size(vertices) == size) { return true; } else { return false; } } }