package org.magenta.generators;
import java.util.List;
import org.magenta.Fixture;
import org.magenta.DataKey;
import org.magenta.DataSpecification;
import org.magenta.GenerationStrategy;
import com.google.common.base.Supplier;
import com.google.common.collect.Iterables;
/**
* This class adapts an existing {@link ImplicitGenerationStrategy} to be used as
* a {@link GenerationStrategy}.
*
* @author normand
*
* @param <D>
* The type of data being generated
* @param <S>
* the data specification
*/
public class IterableSupplierGenerationStrategyAdapter<D, S extends DataSpecification> implements GenerationStrategy<D, S> {
private Supplier<? extends Iterable<D>> generator;
private List<DataKey<?>> affectedDataSet;
/**
* @param generator the generator
* @param affectedDataSet the affected dataset
*/
public IterableSupplierGenerationStrategyAdapter(Supplier<? extends Iterable<D>> generator, List<DataKey<?>> affectedDataSet) {
super();
this.affectedDataSet = affectedDataSet;
this.generator = generator;
}
@Override
public Iterable<D> generate(int numberOfElements, Fixture<? extends S> domain) {
return Iterables.limit(generate(domain), numberOfElements);
}
@Override
public Iterable<D> generate(Fixture<? extends S> domain) {
return generator.get();
}
@Override
public Iterable<DataKey<?>> getModifiedDataSet() {
return affectedDataSet;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("Supplier of Iterable [").append(generator).append("]");
return sb.toString();
}
}