@Override
public <T> T setConfigOnce(String project, String configName, T value) {
try (Handle handle = dbi.open()) {
T config = getConfig(project, configName, (Class<T>) value.getClass());
if (config == null) {
try {
handle.createStatement("INSERT INTO config (project, name, value) VALUES (:project, :name, :value)")
.bind("project", project)
.bind("name", configName.toUpperCase(Locale.ENGLISH))
.bind("value", JsonHelper.encode(value)).execute();
return value;
} catch (Exception e) {
T lastValue = getConfig(project, configName, (Class<T>) value.getClass());
if (lastValue == null) {
throw Throwables.propagate(e);
}
return lastValue;
}
} else {
return config;
}
}
}