/*
* Copyright 2014 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Eclipse Public License version 1.0, available at
* http://www.eclipse.org/legal/epl-v10.html
*/
package org.jboss.windup.config.operation.iteration;
import java.util.Iterator;
import org.jboss.windup.config.GraphRewrite;
import org.jboss.windup.config.Variables;
import org.jboss.windup.config.exception.IllegalTypeArgumentException;
import org.jboss.windup.config.selectors.FramesSelector;
import org.jboss.windup.graph.model.WindupVertexFrame;
import org.ocpsoft.rewrite.context.EvaluationContext;
/**
* @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
*
*/
public class TypedNamedFramesSelector implements FramesSelector
{
private final Class<? extends WindupVertexFrame> framesModel;
private final String varName;
public TypedNamedFramesSelector(Class<? extends WindupVertexFrame> framesModel, String varName)
{
this.framesModel = framesModel;
this.varName = varName;
}
@Override
public Iterable<? extends WindupVertexFrame> getFrames(GraphRewrite event, EvaluationContext context)
{
final Iterable<? extends WindupVertexFrame> frames = Variables.instance(event).findVariable(varName);
final Iterator<? extends WindupVertexFrame> it = frames.iterator();
if (it.hasNext())
{
final Class<? extends WindupVertexFrame> actualType = it.next().getClass();
if (!this.framesModel.isAssignableFrom(actualType))
throw new IllegalTypeArgumentException(varName, this.framesModel, actualType);
}
return frames;
}
}