package com.ldbc.driver.generator;
import com.ldbc.driver.util.NumberHelper;
import java.util.Iterator;
import static java.lang.String.format;
public class NaiveBoundedRangeNumberGenerator<GENERATE_TYPE extends Number> extends Generator<GENERATE_TYPE>
{
private final Integer maxIterations = 1000;
private final MinMaxGenerator<GENERATE_TYPE> lowerBoundGenerator;
private final MinMaxGenerator<GENERATE_TYPE> upperBoundGenerator;
private final Iterator<GENERATE_TYPE> generator;
private final NumberHelper<GENERATE_TYPE> number;
NaiveBoundedRangeNumberGenerator( Iterator<GENERATE_TYPE> generator,
MinMaxGenerator<GENERATE_TYPE> lowerBoundGenerator,
MinMaxGenerator<GENERATE_TYPE> upperBoundGenerator )
{
this.lowerBoundGenerator = lowerBoundGenerator;
this.upperBoundGenerator = upperBoundGenerator;
this.generator = generator;
this.number = NumberHelper.createNumberHelper( lowerBoundGenerator.getMin().getClass() );
}
@Override
protected GENERATE_TYPE doNext() throws GeneratorException
{
GENERATE_TYPE next;
for ( int i = 0; i < maxIterations; i++ )
{
next = generator.next();
if ( number.gte( next, lowerBoundGenerator.getMin() ) && number.lte( next, upperBoundGenerator.getMax() ) )
{
return next;
}
}
throw new GeneratorException(
format( "Random in-range number not found within maxIterations[%s]", maxIterations )
);
}
}