All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.arangodb.internal.config.ArangoConfigPropertiesImpl Maven / Gradle / Ivy

The newest version!
package com.arangodb.internal.config;

import com.arangodb.ArangoDBException;
import com.arangodb.Compression;
import com.arangodb.Protocol;
import com.arangodb.config.ArangoConfigProperties;
import com.arangodb.config.HostDescription;
import com.arangodb.entity.LoadBalancingStrategy;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.Properties;

/**
 * ArangoConfigProperties implementation that reads configuration entries from local file. Properties path prefix can be
 * configured, so that it is possible to distinguish configurations for multiple driver instances in the same file.
 */
public final class ArangoConfigPropertiesImpl implements ArangoConfigProperties {
    private static final String DEFAULT_PREFIX = "arangodb";
    private static final String DEFAULT_PROPERTY_FILE = "arangodb.properties";
    private final Properties properties;
    private final String prefix;

    public ArangoConfigPropertiesImpl() {
        this(DEFAULT_PROPERTY_FILE, DEFAULT_PREFIX);
    }

    public ArangoConfigPropertiesImpl(final String fileName) {
        this(fileName, DEFAULT_PREFIX);
    }

    public ArangoConfigPropertiesImpl(final String fileName, final String prefix) {
        this(initProperties(fileName), prefix);
    }

    public ArangoConfigPropertiesImpl(final Properties properties) {
        this(properties, DEFAULT_PREFIX);
    }

    public ArangoConfigPropertiesImpl(final Properties properties, final String prefix) {
        this.properties = properties;
        this.prefix = initPrefix(prefix);
    }

    private static Properties initProperties(String fileName) {
        Properties p = new Properties();
        try (InputStream is = ArangoConfigPropertiesImpl.class.getClassLoader().getResourceAsStream(fileName)) {
            p.load(is);
        } catch (Exception e) {
            throw ArangoDBException.of("Got exception while reading properties file " + fileName, e);
        }
        return p;
    }

    private String initPrefix(String p) {
        if (p == null) {
            return "";
        } else {
            return p + ".";
        }
    }

    private String getProperty(String key) {
        return properties.getProperty(prefix + key);
    }

    @Override
    public Optional> getHosts() {
        return Optional.ofNullable(getProperty(KEY_HOSTS))
                .map(s -> {
                    List hostDescriptions = new ArrayList<>();
                    String[] hosts = s.split(",");
                    for (String host : hosts) {
                        hostDescriptions.add(HostDescription.parse(host));
                    }
                    return hostDescriptions;
                });
    }

    @Override
    public Optional getProtocol() {
        return Optional.ofNullable(getProperty(KEY_PROTOCOL)).map(Protocol::valueOf);
    }

    @Override
    public Optional getUser() {
        return Optional.ofNullable(getProperty(KEY_USER));
    }

    @Override
    public Optional getPassword() {
        return Optional.ofNullable(getProperty(KEY_PASSWORD));
    }

    @Override
    public Optional getJwt() {
        return Optional.ofNullable(getProperty(KEY_JWT));
    }

    @Override
    public Optional getTimeout() {
        return Optional.ofNullable(getProperty(KEY_TIMEOUT)).map(Integer::valueOf);
    }

    @Override
    public Optional getUseSsl() {
        return Optional.ofNullable(getProperty(KEY_USE_SSL)).map(Boolean::valueOf);
    }

    @Override
    public Optional getVerifyHost() {
        return Optional.ofNullable(getProperty(KEY_VERIFY_HOST)).map(Boolean::valueOf);
    }

    @Override
    public Optional getChunkSize() {
        return Optional.ofNullable(getProperty(KEY_CHUNK_SIZE)).map(Integer::valueOf);
    }

    @Override
    public Optional getPipelining() {
        return Optional.ofNullable(getProperty(KEY_PIPELINING)).map(Boolean::valueOf);
    }

    @Override
    public Optional getMaxConnections() {
        return Optional.ofNullable(getProperty(KEY_MAX_CONNECTIONS)).map(Integer::valueOf);
    }

    @Override
    public Optional getConnectionTtl() {
        return Optional.ofNullable(getProperty(KEY_CONNECTION_TTL)).map(Long::valueOf);
    }

    @Override
    public Optional getKeepAliveInterval() {
        return Optional.ofNullable(getProperty(KEY_KEEP_ALIVE_INTERVAL)).map(Integer::valueOf);
    }

    @Override
    public Optional getAcquireHostList() {
        return Optional.ofNullable(getProperty(KEY_ACQUIRE_HOST_LIST)).map(Boolean::valueOf);
    }

    @Override
    public Optional getAcquireHostListInterval() {
        return Optional.ofNullable(getProperty(KEY_ACQUIRE_HOST_LIST_INTERVAL)).map(Integer::valueOf);
    }

    @Override
    public Optional getLoadBalancingStrategy() {
        return Optional.ofNullable(getProperty(KEY_LOAD_BALANCING_STRATEGY)).map(LoadBalancingStrategy::valueOf);
    }

    @Override
    public Optional getResponseQueueTimeSamples() {
        return Optional.ofNullable(getProperty(KEY_RESPONSE_QUEUE_TIME_SAMPLES)).map(Integer::valueOf);
    }

    @Override
    public Optional getCompression() {
        return Optional.ofNullable(getProperty(KEY_COMPRESSION)).map(Compression::valueOf);
    }

    @Override
    public Optional getCompressionThreshold() {
        return Optional.ofNullable(getProperty(KEY_COMPRESSION_THRESHOLD)).map(Integer::valueOf);
    }

    @Override
    public Optional getCompressionLevel() {
        return Optional.ofNullable(getProperty(KEY_COMPRESSION_LEVEL)).map(Integer::valueOf);
    }

    @Override
    public Optional getSerdeProviderClass() {
        return Optional.ofNullable(getProperty(KEY_SERDE_PROVIDER_CLASS));
    }

    @Override
    public String toString() {
        return "ArangoConfigPropertiesImpl{" +
                "prefix='" + prefix + '\'' +
                ", properties=" + properties +
                '}';
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy