package org.jboss.windup.reporting.model;
import java.util.Iterator;
import org.jboss.windup.graph.model.WindupVertexFrame;
import com.tinkerpop.blueprints.Direction;
import com.tinkerpop.blueprints.Vertex;
import com.tinkerpop.frames.Adjacency;
import com.tinkerpop.frames.modules.javahandler.JavaHandler;
import com.tinkerpop.frames.modules.javahandler.JavaHandlerContext;
import com.tinkerpop.frames.modules.typedgraph.TypeValue;
/**
* Contains a list of {@link WindupVertexFrame} objects and (for convenience) implements the {@link Iterable} interface as well.
*
* @author <a href="mailto:jesse.sightler@gmail.com">Jesse Sightler</a>
*
*/
@TypeValue(WindupVertexListModel.TYPE)
public interface WindupVertexListModel<T extends WindupVertexFrame> extends WindupVertexFrame, Iterable<T>
{
String TYPE = "WindupVertexListModel";
/**
* Returns the list as an {@link Iterable<T>}.
*/
@Adjacency(label = "list", direction = Direction.OUT)
Iterable<T> getList();
/**
* Sets the items in the list.
*/
@Adjacency(label = "list", direction = Direction.OUT)
WindupVertexListModel<T> setList(Iterable<T> list);
/**
* Adds the provided item to the list.
*/
@Adjacency(label = "list", direction = Direction.OUT)
WindupVertexListModel<T> addItem(T item);
/**
* Adds all of the items to the list.
*/
@JavaHandler
WindupVertexListModel<T> addAll(Iterable<T> items);
/**
* Returns an {@link Iterator} for this list.
*/
@Override
@JavaHandler
Iterator<T> iterator();
abstract class Impl<T extends WindupVertexFrame> implements WindupVertexListModel<T>, JavaHandlerContext<Vertex>
{
@Override
public WindupVertexListModel<T> addAll(Iterable<T> items)
{
for (T item : items)
addItem(item);
return this;
}
@Override
public Iterator<T> iterator()
{
return getList().iterator();
}
}
}