package org.jboss.windup.rules.files.condition; import com.google.common.base.Function; import com.google.common.collect.FluentIterable; import org.jboss.windup.config.GraphRewrite; import org.jboss.windup.config.Variables; import org.jboss.windup.config.condition.GraphCondition; import org.jboss.windup.graph.iterables.FramesSetIterable; import org.jboss.windup.graph.model.ToFileModelTransformable; import org.jboss.windup.graph.model.WindupVertexFrame; import org.jboss.windup.graph.model.resource.FileModel; import org.jboss.windup.util.exception.WindupException; import org.ocpsoft.rewrite.context.EvaluationContext; import javax.annotation.Nullable; /** * Condition transforming the input iterable of {@link ToFileModelTransformable} instances into {@link FileModel}s. */ public class ToFileModel extends GraphCondition { private GraphCondition wrappedCondition; public ToFileModel() { } public static ToFileModel withWrappedCondition(GraphCondition condition) { ToFileModel toFileModelCondition = new ToFileModel(); toFileModelCondition.wrappedCondition=condition; return toFileModelCondition; } @Override public boolean evaluate(GraphRewrite event, EvaluationContext context) { wrappedCondition.evaluate(event,context); Iterable<? extends WindupVertexFrame> vertices= Variables.instance(event).findVariable(wrappedCondition.getOutputVariablesName()); Iterable<FileModel> resultIterable = FluentIterable.from(vertices).transformAndConcat(new Function<WindupVertexFrame, Iterable<FileModel>>() { @Nullable @Override public Iterable<FileModel> apply(WindupVertexFrame windupVertexFrame) { if (!(windupVertexFrame instanceof ToFileModelTransformable)) { throw new WindupException("ToFileModel may work only with the objects that implements ToFileModelTransformable interface"); } return ((ToFileModelTransformable) windupVertexFrame).transformToFileModel(); } }); Variables.instance(event).setVariable(getOutputVariablesName(),new FramesSetIterable(resultIterable)); return resultIterable.iterator().hasNext(); } }