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.Preconditions; import com.google.common.base.Supplier; /** * This class adapts an existing {@link SimpleGenerationStrategy} to be used as * a {@link GenerationStrategy}. If no number Of elements to generate is passed * in to the constructor, then the specified * {@link SimpleGenerationStrategy#getPreferredNumberOfItems(DataSpecification)} * will be used instead. * * @author normand * * @param <D> * The type of data being generated * @param <S> * the data specification */ public class SupplierGenerationStrategyAdapter<D, S extends DataSpecification> extends AbstractGenerationStrategyAdapter<D, S> implements GenerationStrategy<D, S> { private Supplier<? extends D> strategy; /** * Default constructor. * * @param generator * the simple generation strategy implementation * @param numberOfElements * the number of elements to generate. * @param affectedDataSet * the affected data set */ public SupplierGenerationStrategyAdapter(DataKey<?> key, Supplier<? extends D> generator, List<DataKey<?>> affectedDataSet) { super(key, affectedDataSet); Preconditions.checkNotNull(generator); this.strategy = generator; } @Override protected D doGenerate(int index, Fixture<? extends S> datasets) { return strategy.get(); } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("Supplier [").append(strategy).append("]"); return sb.toString(); } }