
ru.yandex.qatools.embed.postgresql.config.AbstractPostgresConfig Maven / Gradle / Ivy
The newest version!
package ru.yandex.qatools.embed.postgresql.config;
import de.flapdoodle.embed.process.config.ExecutableProcessConfig;
import de.flapdoodle.embed.process.distribution.IVersion;
import de.flapdoodle.embed.process.io.file.Files;
import ru.yandex.qatools.embed.postgresql.Command;
import ru.yandex.qatools.embed.postgresql.ext.SubdirTempDir;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import static de.flapdoodle.embed.process.runtime.Network.getFreeServerPort;
import static de.flapdoodle.embed.process.runtime.Network.getLocalHost;
import static java.util.Arrays.asList;
import static org.apache.commons.lang3.StringUtils.isEmpty;
/**
* Common postgres config
*/
public abstract class AbstractPostgresConfig extends ExecutableProcessConfig {
private final Storage storage;
protected final Net network;
protected final Timeout timeout;
protected final Credentials credentials;
protected List args = new ArrayList<>();
protected List additionalInitDbParams = new ArrayList<>();
protected List additionalPostgresParams = new ArrayList<>();
protected AbstractPostgresConfig(AbstractPostgresConfig config, Command postgres) {
this(config.version, config.net(), config.storage, config.timeout(), config.credentials, new SupportConfig(postgres));
}
protected AbstractPostgresConfig(AbstractPostgresConfig config) {
this(config, Command.Postgres);
}
public AbstractPostgresConfig(IVersion version, Net network, Storage storage, Timeout timeout, Credentials cred, SupportConfig supportConfig) {
super(version, supportConfig);
this.network = network;
this.timeout = timeout;
this.storage = storage;
this.credentials = cred;
}
public AbstractPostgresConfig(IVersion version, Net network, Storage storage, Timeout timeout) {
this(version, network, storage, timeout, null, new SupportConfig(Command.Postgres));
}
public Net net() {
return network;
}
public Timeout timeout() {
return timeout;
}
public Storage storage() {
return storage;
}
public Credentials credentials() {
return credentials;
}
public List args() {
return args;
}
public C withArgs(String... args) {
args().addAll(asList(args));
return (C) this;
}
public C withAdditionalInitDbParams(List additionalInitDbParams) {
this.additionalInitDbParams.addAll(additionalInitDbParams);
return (C) this;
}
/**
* You may add here additional arguments for the {@code initdb} executable.
*
* Example.
* to support german umlauts you would add here this additional arguments.
*
* getAdditionalInitDbParams().addAll(
* java.util.Arrays.asList(
* "-E", "'UTF-8'",
* "--lc-collate='de_DE.UTF-8'",
* "--lc-ctype=locale='de_DE.UTF-8'")
* )
*
*
* @return The list of additional parameters for the {@code initdb} executable.
* Not {@code null}.
*/
public List getAdditionalInitDbParams() {
return additionalInitDbParams;
}
/**
* You may add here additional arguments for the {@code postgres} executable.
*
* Example.
* to use custom number of maximum connection.
*
* getAdditionalPostgresParams().addAll(
* java.util.Arrays.asList(
* "-c", "max_connections=11"
* )
*
* @return The list of additional parameters for the {@code postgres} executable.
* Not {@code null}.
* @see Parameter Interaction via the Shell
*/
public List getAdditionalPostgresParams() {
return additionalPostgresParams;
}
public static class Storage {
private final File dbDir;
private final String dbName;
private final boolean isTmpDir;
public Storage(String dbName) throws IOException {
this(dbName, null);
}
public Storage(String dbName, String databaseDir) throws IOException {
this.dbName = dbName;
if (isEmpty(databaseDir)) {
isTmpDir = true;
dbDir = Files.createTempDir(SubdirTempDir.defaultInstance(), "db-content");
} else {
dbDir = Files.createOrCheckDir(databaseDir);
isTmpDir = false;
}
}
public File dbDir() {
return dbDir;
}
public boolean isTmpDir() {
return isTmpDir;
}
public String dbName() {
return dbName;
}
@Override
public String toString() {
return "Storage{" +
"dbDir=" + dbDir +
", dbName='" + dbName + '\'' +
", isTmpDir=" + isTmpDir +
'}';
}
}
public static class Credentials {
private final String username;
private final String password;
public Credentials(String username, String password) {
this.username = username;
this.password = password;
}
public String username() {
return username;
}
public String password() {
return password;
}
@Override
public String toString() {
return "Credentials{" +
"username='" + username + '\'' +
", password='" + password + '\'' + //NOSONAR
'}';
}
}
public static class Net {
private final String host;
private final int port;
public Net() throws IOException {
this(getLocalHost().getHostAddress(), getFreeServerPort());
}
public Net(String host, int port) {
this.host = host;
this.port = port;
}
public int port() {
return port;
}
public String host() {
return host;
}
@Override
public String toString() {
return "Net{" +
"host='" + host + '\'' +
", port=" + port +
'}';
}
}
public static class Timeout {
private final long startupTimeout;
public Timeout() {
this(15000);
}
public Timeout(long startupTimeout) {
this.startupTimeout = startupTimeout;
}
public long startupTimeout() {
return startupTimeout;
}
@Override
public String toString() {
return "Timeout{" +
"startupTimeout=" + startupTimeout +
'}';
}
}
@Override
public String toString() {
return "AbstractPostgresConfig{" +
"storage=" + storage +
", network=" + network +
", timeout=" + timeout +
", credentials=" + credentials +
", args=" + args +
", additionalInitDbParams=" + additionalInitDbParams +
'}';
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy