package br.com.six2six.fixturefactory.transformer;
import static br.com.six2six.fixturefactory.util.DateTimeUtils.toZonedDateTime;
import java.util.Calendar;
import org.apache.commons.lang.ClassUtils;
public class DateTimeTransformer implements Transformer {
@Override
public <T> T transform(Object value, Class<T> type) {
Object returnValue = null;
if (value == null) {
return null;
}
if (ClassUtils.isAssignable(type, java.time.LocalDateTime.class)) {
returnValue = toZonedDateTime((Calendar) value).toLocalDateTime();
} else if (ClassUtils.isAssignable(type, java.time.LocalDate.class)) {
returnValue = toZonedDateTime((Calendar) value).toLocalDate();
} else if (ClassUtils.isAssignable(type, java.time.LocalTime.class)) {
returnValue = toZonedDateTime((Calendar) value).toLocalTime();
} else if (ClassUtils.isAssignable(type, java.time.OffsetDateTime.class)) {
returnValue = toZonedDateTime((Calendar) value).toOffsetDateTime();
} else if (ClassUtils.isAssignable(type, java.time.ZonedDateTime.class)) {
returnValue = toZonedDateTime((Calendar) value);
} else if (ClassUtils.isAssignable(type, java.time.OffsetTime.class)) {
returnValue = toZonedDateTime((Calendar) value).toOffsetDateTime().toOffsetTime();
} else if (ClassUtils.isAssignable(type, java.time.Instant.class)) {
returnValue = ((Calendar) value).toInstant();
} else {
throw new IllegalArgumentException("Incorrect type for transformer: " + type.getCanonicalName());
}
return type.cast(returnValue);
}
@Override
public boolean accepts(Object value, Class<?> type) {
return value instanceof Calendar && java.time.temporal.Temporal.class.isAssignableFrom(type);
}
}