package com.flextrade.jfixture.builders; import com.flextrade.jfixture.NoSpecimen; import com.flextrade.jfixture.SpecimenBuilder; import com.flextrade.jfixture.SpecimenContext; import com.flextrade.jfixture.requests.RangeRequest; import com.flextrade.jfixture.utility.SpecimenType; import java.util.Calendar; class CalendarRangeRelay implements SpecimenBuilder { @Override public Object create(Object request, SpecimenContext context) { if (!(request instanceof RangeRequest)) { return new NoSpecimen(); } RangeRequest rangeRequest = (RangeRequest) request; if (!requestIsAMatch(rangeRequest)) { return new NoSpecimen(); } return create(rangeRequest, context); } private Object create(RangeRequest request, SpecimenContext context) { NumberInRangeGenerator numberInRangeGenerator = getNumberInRangeGenerator(request); Long value = (Long)numberInRangeGenerator.create(Long.class, context); Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(value); return calendar; } private boolean requestIsAMatch(RangeRequest request) { boolean isType = request.getRequest() instanceof SpecimenType; if (!isType) return false; SpecimenType type = (SpecimenType) request.getRequest(); return type.getRawType().equals(Calendar.class) && request.getMin() instanceof Calendar && request.getMax() instanceof Calendar; } private NumberInRangeGenerator getNumberInRangeGenerator(RangeRequest request) { Long min = ((Calendar) request.getMin()).getTimeInMillis(); Long max = ((Calendar) request.getMax()).getTimeInMillis(); return new NumberInRangeGenerator(min, max); } }