package org.simpleflatmapper.converter.impl.time; import org.simpleflatmapper.converter.AbstractConverterFactory; import org.simpleflatmapper.converter.Converter; import org.simpleflatmapper.converter.ConvertingTypes; import java.time.ZoneId; import java.time.format.DateTimeFormatter; public abstract class AbstractMultiFormatConverterFactory<I, O> extends AbstractConverterFactory<I, O> { public AbstractMultiFormatConverterFactory(Class<I> from, Class<O> to) { super(from, to); } @SuppressWarnings("unchecked") @Override public Converter<? super I, ? extends O> newConverter(ConvertingTypes targetedTypes, Object... params) { DateTimeFormatter[] dateTimeFormatters = JavaTimeHelper.getDateTimeFormatters(params); ZoneId zoneId = JavaTimeHelper.getZoneId(params); Converter<I, O>[] converters = new Converter[dateTimeFormatters.length]; for(int i = 0; i < dateTimeFormatters.length; i++) { DateTimeFormatter dateTimeFormatter = dateTimeFormatters[i]; if (dateTimeFormatter.getZone() == null) { dateTimeFormatter.withZone(zoneId); } converters[i] = newConverter(dateTimeFormatter); } if (converters.length == 1) { return converters[0]; } else { return new MultiDateTimeFormatterConverter<I, O>(converters); } } @SuppressWarnings("unchecked") protected abstract Converter<I, O> newConverter(DateTimeFormatter formatter); }