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.Date; class DateRangeRelay 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); return new Date(value); } private boolean requestIsAMatch(RangeRequest request) { boolean isType = request.getRequest() instanceof SpecimenType; if (!isType) return false; SpecimenType type = (SpecimenType) request.getRequest(); return type.getRawType().equals(Date.class) && (request.getMin() instanceof Date || request.getMin() instanceof Long) && (request.getMax() instanceof Date || request.getMax() instanceof Long); } private NumberInRangeGenerator getNumberInRangeGenerator(RangeRequest request) { Long min = getMinLong(request); Long max = getMaxLong(request); return new NumberInRangeGenerator(min, max); } private Long getMaxLong(RangeRequest request) { Long max; if(request.getMax() instanceof Long) max = (Long)request.getMax(); else max = ((Date)request.getMax()).getTime(); return max; } private Long getMinLong(RangeRequest request) { Long min; if(request.getMin() instanceof Long) min = (Long)request.getMin(); else min = ((Date)request.getMin()).getTime(); return min; } }