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

net.wouterdanes.docker.provider.DockerProviderSupplier Maven / Gradle / Ivy

package net.wouterdanes.docker.provider;

import java.util.HashMap;
import java.util.Map;

import com.google.common.base.Supplier;

/**
 * This class creates a docker provider based on the passed name when the get() method is called. Used in for example
 * {@link com.google.common.base.Optional#or(com.google.common.base.Supplier)}
 */
public class DockerProviderSupplier implements Supplier {

    private final String providerName;
    private static volatile Map> providers = new HashMap<>();

    static {
        providers.put("remote", RemoteDockerProvider.class);
        providers.put("local", LocalDockerProvider.class);
    }

    public DockerProviderSupplier(final String providerName) {
        this.providerName = providerName;
    }

    public static void registerProvider(String name, Class providerClass) {
        assert providerClass != null;
        providers.put(name, providerClass);
    }

    public static void removeProvider(String name) {
        assert name != null;
        providers.remove(name);
    }

    @Override
    public DockerProvider get() {
        if (providers.containsKey(providerName)) {
            Class providerClass = providers.get(providerName);
            try {
                return providerClass.newInstance();
            } catch (InstantiationException | IllegalAccessException e) {
                throw new IllegalStateException("Can't instantiate provider", e);
            }
        }
        throw new IllegalStateException(String.format("No provider known by name '%s'", providerName));
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy