package com.airbnb.airpal.presto; import com.facebook.presto.client.ClientSession; import com.google.common.collect.ImmutableMap; import io.airlift.units.Duration; import javax.inject.Provider; import java.net.URI; import java.util.Locale; import java.util.TimeZone; import java.util.concurrent.TimeUnit; import static com.google.common.base.MoreObjects.firstNonNull; import static io.airlift.units.Duration.succinctDuration; import static java.util.concurrent.TimeUnit.MINUTES; public class ClientSessionFactory { private final boolean debug; private final String defaultSchema; private final String catalog; private final String source; private final String user; private final Provider<URI> server; private final String timeZoneId; private final Locale locale; private final Duration clientSessionTimeout; public ClientSessionFactory(Provider<URI> server, String user, String source, String catalog, String defaultSchema, boolean debug, Duration clientSessionTimeout) { this.server = server; this.user = user; this.source = source; this.catalog = catalog; this.defaultSchema = defaultSchema; this.debug = debug; this.timeZoneId = TimeZone.getTimeZone("UTC").getID(); this.locale = Locale.getDefault(); this.clientSessionTimeout = firstNonNull(clientSessionTimeout, succinctDuration(1, MINUTES)); } public ClientSession create(String user, String schema) { return new ClientSession(server.get(), user, source, catalog, schema, timeZoneId, locale, ImmutableMap.<String, String>of(), null, debug, clientSessionTimeout ); } public ClientSession create(String schema) { return new ClientSession(server.get(), user, source, catalog, schema, timeZoneId, locale, ImmutableMap.<String, String>of(), null, debug, clientSessionTimeout ); } public ClientSession create() { return new ClientSession(server.get(), user, source, catalog, defaultSchema, timeZoneId, locale, ImmutableMap.<String, String>of(), null, debug, clientSessionTimeout ); } }