package com.ldbc.driver.generator;
import com.ldbc.driver.temporal.SystemTimeSource;
import com.ldbc.driver.temporal.TimeSource;
import org.apache.commons.math3.random.RandomDataGenerator;
import org.apache.commons.math3.random.RandomGenerator;
import org.apache.commons.math3.random.Well19937c;
public class RandomDataGeneratorFactory {
private final TimeSource timeSource = new SystemTimeSource();
private final RandomGenerator random;
/**
* Will use current time to seed a RandomGenerator, which will generate seeds for all returned RandomDataGenerator instances
*/
public RandomDataGeneratorFactory() {
this.random = getRandomGenerator(timeSource.nowAsMilli());
}
/**
* Will use provided long seed to seeds all returned RandomDataGenerator instances
*
* @param seed
*/
public RandomDataGeneratorFactory(Long seed) {
this.random = getRandomGenerator(seed);
}
public RandomDataGenerator newRandom(long seed) {
return new RandomDataGenerator(getRandomGenerator(seed));
}
public RandomDataGenerator newRandom() {
return new RandomDataGenerator(getRandomGenerator(getSeed()));
}
private RandomGenerator getRandomGenerator(long seed) {
/*
* From Docs: http://commons.apache.org/proper/commons-math/javadocs/api-3.2/index.html
* If no RandomGenerator is provided in the constructor, the default is to use a Well19937c generator
*/
return new Well19937c(seed);
}
private Long getSeed() {
return random.nextLong();
}
}