package com.nirima.jenkins.plugins.docker.client; import com.github.dockerjava.api.DockerClient; import com.github.dockerjava.api.command.DockerCmdExecFactory; import com.github.dockerjava.core.DockerClientBuilder; import com.github.dockerjava.core.DockerClientConfig; import com.github.dockerjava.core.DockerClientImpl; import com.github.dockerjava.jaxrs.DockerCmdExecFactoryImpl; import org.apache.commons.lang.Validate; import java.io.Serializable; import java.util.ServiceLoader; /** * Builds ClientConfig with helper methods that extracts info for plugin routines. * * @author magnayn */ public class ClientBuilderForPlugin { private DockerClientConfig config; private DockerCmdExecFactory dockerCmdExecFactory; private ClientBuilderForPlugin() { } private ClientBuilderForPlugin(DockerClientConfig config, DockerCmdExecFactory dockerCmdExecFactory) { this.config = config; this.dockerCmdExecFactory = dockerCmdExecFactory; } public ClientBuilderForPlugin withDockerCmdExecFactory(DockerCmdExecFactory dockerCmdExecFactory) { this.dockerCmdExecFactory = dockerCmdExecFactory; return this; } public ClientBuilderForPlugin withDockerCmdExecConfig(DockerCmdExecConfig config) { DockerCmdExecFactoryImpl impl = new DockerCmdExecFactoryImpl(); this.dockerCmdExecFactory = impl; if( config.getReadTimeoutMillis() != null ) impl.withReadTimeout(config.getReadTimeoutMillis()); if( config.getConnectTimeoutMillis() != null ) impl.withConnectTimeout(config.getConnectTimeoutMillis()); return this; } public static ClientBuilderForPlugin builder() { return new ClientBuilderForPlugin(); } public ClientBuilderForPlugin withDockerClientConfig(DockerClientConfig clientConfig) { this.config = clientConfig; return this; } public DockerClient build() { Validate.notNull(config, "ClientConfig must be set"); Validate.notNull(dockerCmdExecFactory, "DockerCmdExecFactory must be set"); return DockerClientBuilder.getInstance(config) .withDockerCmdExecFactory(dockerCmdExecFactory) .build(); } }