package com.flextrade.jfixture.builders;
import com.flextrade.jfixture.NoSpecimen;
import com.flextrade.jfixture.SpecimenBuilder;
import com.flextrade.jfixture.SpecimenContext;
import com.flextrade.jfixture.utility.Clock;
import com.flextrade.jfixture.utility.FixtureMath;
import com.flextrade.jfixture.utility.TimeProvider;
import java.util.Calendar;
import java.util.Date;
class DateGenerator implements SpecimenBuilder {
private final TimeProvider timeProvider;
public DateGenerator() {
this(new Clock());
}
public DateGenerator(TimeProvider timeProvider) {
this.timeProvider = timeProvider;
}
@Override
public Object create(Object request, SpecimenContext context) {
if (!request.equals(Date.class)) {
return new NoSpecimen();
}
Date nowDate = new Date(this.timeProvider.getCurrentTimeInMilliseconds());
long min = getTwoYearsAgoMs(nowDate);
long max = getTwoYearsAheadMs(nowDate);
long date = FixtureMath.randLong(min, max);
return new Date(date);
}
private long getTwoYearsAheadMs(Date now) {
Calendar twoYearsAhead = Calendar.getInstance();
twoYearsAhead.setTime(now);
twoYearsAhead.add(Calendar.YEAR, 2);
return twoYearsAhead.getTimeInMillis();
}
private long getTwoYearsAgoMs(Date now) {
Calendar twoYearsAgo = Calendar.getInstance();
twoYearsAgo.setTime(now);
twoYearsAgo.add(Calendar.YEAR, -2);
return twoYearsAgo.getTimeInMillis();
}
}