package io.dropwizard.java8.jdbi; import io.dropwizard.db.ManagedDataSource; import io.dropwizard.db.PooledDataSourceFactory; import io.dropwizard.java8.jdbi.args.InstantArgumentFactory; import io.dropwizard.java8.jdbi.args.InstantMapper; import io.dropwizard.java8.jdbi.args.LocalDateArgumentFactory; import io.dropwizard.java8.jdbi.args.LocalDateMapper; import io.dropwizard.java8.jdbi.args.LocalDateTimeArgumentFactory; import io.dropwizard.java8.jdbi.args.LocalDateTimeMapper; import io.dropwizard.java8.jdbi.args.OptionalArgumentFactory; import io.dropwizard.java8.jdbi.args.OptionalInstantArgumentFactory; import io.dropwizard.java8.jdbi.args.OptionalLocalDateArgumentFactory; import io.dropwizard.java8.jdbi.args.OptionalLocalDateTimeArgumentFactory; import io.dropwizard.setup.Environment; import org.skife.jdbi.v2.DBI; import java.util.Optional; import java.util.TimeZone; public class DBIFactory extends io.dropwizard.jdbi.DBIFactory { @Override public DBI build(Environment environment, PooledDataSourceFactory configuration, ManagedDataSource dataSource, String name) { final DBI dbi = super.build(environment, configuration, dataSource, name); dbi.registerArgumentFactory(new OptionalArgumentFactory(configuration.getDriverClass())); dbi.registerContainerFactory(new OptionalContainerFactory()); dbi.registerArgumentFactory(new LocalDateArgumentFactory()); dbi.registerArgumentFactory(new OptionalLocalDateArgumentFactory()); dbi.registerArgumentFactory(new LocalDateTimeArgumentFactory()); dbi.registerArgumentFactory(new OptionalLocalDateTimeArgumentFactory()); dbi.registerMapper(new LocalDateMapper()); dbi.registerMapper(new LocalDateTimeMapper()); final Optional<TimeZone> tz = Optional.ofNullable(databaseTimeZone().orNull()); dbi.registerArgumentFactory(new InstantArgumentFactory(tz)); dbi.registerArgumentFactory(new OptionalInstantArgumentFactory(tz)); dbi.registerMapper(new InstantMapper(tz)); return dbi; } }