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

org.arquillian.ape.nosql.vault.VaultOptions Maven / Gradle / Ivy

package org.arquillian.ape.nosql.vault;

import com.bettercloud.vault.VaultConfig;
import com.bettercloud.vault.VaultException;
import java.io.File;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class VaultOptions implements Map {

    static final String TOKEN = "token";
    static final String SSL_PEM_UTF_8 = "sslPemUtf8";
    static final String SSL_PEM_FILE = "sslPemFile";
    static final String SSL_PEM_RESOURCE = "sslPemResource";
    static final String SSL_VERIFY = "sslVerify";
    static final String OPEN_TIMEOUT = "openTimeout";
    static final String READ_TIMEOUT = "readTimeout";

    private Map options = new HashMap<>();

    private VaultOptions() {
    }

    VaultOptions(Map options) {
        this.options.putAll(options);
    }

    public static VaultConfigurationOptions options() {
        return new VaultConfigurationOptions();
    }

    @Override
    public int size() {
        return options.size();
    }

    @Override
    public boolean isEmpty() {
        return options.isEmpty();
    }

    @Override
    public boolean containsKey(Object key) {
        return options.containsKey(key);
    }

    @Override
    public boolean containsValue(Object value) {
        return options.containsValue(value);
    }

    @Override
    public Object get(Object key) {
        return options.get(key);
    }

    @Override
    public Object put(String key, Object value) {
        return options.put(key, value);
    }

    @Override
    public Object remove(Object key) {
        return options.remove(key);
    }

    @Override
    public void putAll(Map m) {
        options.putAll(m);
    }

    @Override
    public void clear() {
        options.clear();
    }

    @Override
    public Set keySet() {
        return options.keySet();
    }

    @Override
    public Collection values() {
        return options.values();
    }

    @Override
    public Set> entrySet() {
        return options.entrySet();
    }

    void configure(VaultConfig vaultConfig) {
        if (this.options.containsKey(TOKEN)) {
            vaultConfig.token((String) this.options.get(TOKEN));
        }

        if (this.options.containsKey(SSL_PEM_FILE)) {
            try {
                vaultConfig.sslPemFile((File) this.options.get(SSL_PEM_FILE));
            } catch (VaultException e) {
                throw new IllegalArgumentException(e);
            }
        }

        if (this.options.containsKey(SSL_PEM_RESOURCE)) {
            try {
                vaultConfig.sslPemResource((String) this.options.get(SSL_PEM_RESOURCE));
            } catch (VaultException e) {
                throw new IllegalArgumentException(e);
            }
        }

        if (this.options.containsKey(SSL_PEM_UTF_8)) {
            vaultConfig.sslPemUTF8((String) this.options.get(SSL_PEM_UTF_8));
        }

        if (this.options.containsKey(SSL_VERIFY)) {
            vaultConfig.sslVerify((Boolean) this.options.get(SSL_VERIFY));
        }

        if (this.options.containsKey(OPEN_TIMEOUT)) {
            vaultConfig.openTimeout((Integer) this.options.get(OPEN_TIMEOUT));
        }

        if (this.options.containsKey(READ_TIMEOUT)) {
            vaultConfig.readTimeout((Integer) this.options.get(READ_TIMEOUT));
        }

    }

    public static class VaultConfigurationOptions {
        private VaultOptions vaultOptions = new VaultOptions();

        private VaultConfigurationOptions() {
        }

        public VaultConfigurationOptions token(String token) {
            this.vaultOptions.put(TOKEN, token);
            return this;
        }

        public VaultConfigurationOptions sslPemUtf8(String sslPemUtf8) {
            this.vaultOptions.put(SSL_PEM_UTF_8, sslPemUtf8);
            return this;
        }

        public VaultConfigurationOptions sslPemFile(File sslPemFile) {
            this.vaultOptions.put(SSL_PEM_FILE, sslPemFile);
            return this;
        }

        public VaultConfigurationOptions sslPemResource(String classpathResource) {
            this.vaultOptions.put(SSL_PEM_RESOURCE, classpathResource);
            return this;
        }

        public VaultConfigurationOptions sslVerify(Boolean sslVerify) {
            this.vaultOptions.put(SSL_VERIFY,sslVerify);
            return this;
        }

        public VaultConfigurationOptions openTimeout(Integer openTimeout) {
            this.vaultOptions.put(OPEN_TIMEOUT, openTimeout);
            return this;
        }

        public VaultConfigurationOptions readTimeout(Integer readTimeout) {
            this.vaultOptions.put(READ_TIMEOUT, readTimeout);
            return this;
        }

        public VaultOptions build() {
            return this.vaultOptions;
        }

    }

}