package io.cattle.platform.db.jooq.config;
import io.cattle.platform.archaius.util.ArchaiusUtil;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.sql.DataSource;
import org.jooq.ConnectionProvider;
import org.jooq.ExecuteListener;
import org.jooq.SQLDialect;
import org.jooq.conf.RenderNameStyle;
import org.jooq.conf.Settings;
import org.jooq.impl.DefaultConfiguration;
import org.jooq.impl.DefaultExecuteListenerProvider;
public class Configuration extends DefaultConfiguration {
private static final long serialVersionUID = -726368732372005280L;
String name;
DataSource dataSource;
ConnectionProvider connectionProvider;
List<ExecuteListener> listeners;
Settings settings = new Settings();
@PostConstruct
public void init() {
String prop = "db." + name + ".database";
String database = ArchaiusUtil.getString(prop).get();
if (database == null) {
throw new IllegalStateException("Failed to find config for [" + prop + "]");
}
try {
SQLDialect dialect = SQLDialect.valueOf(database.trim().toUpperCase());
set(dialect);
} catch (IllegalArgumentException e) {
throw new IllegalArgumentException("Invalid SQLDialect [" + database.toUpperCase() + "]", e);
}
if (connectionProvider == null) {
set(new AutoCommitConnectionProvider(dataSource));
} else {
set(connectionProvider);
}
settings.setRenderSchema(false);
String renderNameStyle = ArchaiusUtil.getString("db." + name + "." + database + ".render.name.style").get();
if (renderNameStyle != null) {
settings.setRenderNameStyle(RenderNameStyle.valueOf(renderNameStyle.trim().toUpperCase()));
}
set(settings);
if (listeners != null && listeners.size() > 0) {
settings().setExecuteLogging(false);
set(DefaultExecuteListenerProvider.providers(listeners.toArray(new ExecuteListener[listeners.size()])));
}
}
public DataSource getDataSource() {
return dataSource;
}
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public ConnectionProvider getConnectionProvider() {
return connectionProvider;
}
public void setConnectionProvider(ConnectionProvider connectionProvider) {
this.connectionProvider = connectionProvider;
}
public List<ExecuteListener> getListeners() {
return listeners;
}
public void setListeners(List<ExecuteListener> listeners) {
this.listeners = listeners;
}
public Settings getSettings() {
return settings;
}
public void setSettings(Settings settings) {
this.settings = settings;
}
}