/******************************************************************************* * Copyright (c) 2014 Red Hat. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Red Hat - Initial Contribution *******************************************************************************/ package org.eclipse.linuxtools.internal.docker.core; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import org.eclipse.linuxtools.docker.core.IDockerConfParameter; import org.eclipse.linuxtools.docker.core.IDockerHostConfig; import org.eclipse.linuxtools.docker.core.IDockerPortBinding; import com.spotify.docker.client.messages.HostConfig; import com.spotify.docker.client.messages.HostConfig.LxcConfParameter; import com.spotify.docker.client.messages.PortBinding; public class DockerHostConfig implements IDockerHostConfig { private final List<String> binds; private final String containerIDFile; private final List<IDockerConfParameter> lxcConf; private final boolean privileged; private final Map<String, List<IDockerPortBinding>> portBindings; private final List<String> links; private final boolean publishAllPorts; private final List<String> dns; private final List<String> dnsSearch; private final List<String> volumesFrom; private final List<String> securityOpt; private final String networkMode; private final Long memory; private final Long cpuShares; public DockerHostConfig(final HostConfig hostConfig) { this.binds = hostConfig.binds(); this.containerIDFile = hostConfig.containerIDFile(); this.lxcConf = new ArrayList<>(); if(hostConfig.lxcConf() != null) { for (LxcConfParameter lxcConfParameter : hostConfig.lxcConf()) { this.lxcConf.add(new DockerConfParameter(lxcConfParameter)); } } this.privileged = hostConfig.privileged() != null ? hostConfig.privileged() : false; this.portBindings = new HashMap<>(); if(hostConfig != null && hostConfig.portBindings() != null) { for(Entry<String, List<PortBinding>> entry : hostConfig.portBindings().entrySet()) { final List<IDockerPortBinding> portBindings = new ArrayList<>(); for (PortBinding portBinding : entry.getValue()) { portBindings.add(new DockerPortBinding(portBinding)); } this.portBindings.put(entry.getKey(), portBindings); } } this.links = hostConfig.links(); this.publishAllPorts = hostConfig.publishAllPorts() != null ? hostConfig.publishAllPorts() : false; this.dns = hostConfig.dns(); this.dnsSearch = hostConfig.dnsSearch(); this.volumesFrom = hostConfig.volumesFrom(); this.networkMode = hostConfig.networkMode(); this.memory = hostConfig.memory(); this.cpuShares = hostConfig.cpuShares(); this.securityOpt = hostConfig.securityOpt(); } private DockerHostConfig(final Builder builder) { this.binds = builder.binds; this.containerIDFile = builder.containerIDFile; this.lxcConf = builder.lxcConf; this.privileged = builder.privileged != null ? builder.privileged : false; this.portBindings = builder.portBindings; this.links = builder.links; this.publishAllPorts = builder.publishAllPorts != null ? builder.publishAllPorts : false; this.dns = builder.dns; this.dnsSearch = builder.dnsSearch; this.volumesFrom = builder.volumesFrom; this.networkMode = builder.networkMode; this.memory = builder.memory; this.cpuShares = builder.cpuShares; this.securityOpt = builder.securityOpt; } @Override public List<String> binds() { return binds; } @Override public String containerIDFile() { return containerIDFile; } @Override public List<IDockerConfParameter> lxcConf() { return lxcConf; } @Override public boolean privileged() { return privileged; } @Override public Map<String, List<IDockerPortBinding>> portBindings() { return portBindings; } @Override public List<String> links() { return links; } @Override public boolean publishAllPorts() { return publishAllPorts; } @Override public List<String> dns() { return dns; } @Override public List<String> dnsSearch() { return dnsSearch; } @Override public List<String> volumesFrom() { return volumesFrom; } @Override public List<String> securityOpt() { return securityOpt; } @Override public String networkMode() { return networkMode; } public Long memory() { return memory; } public Long cpuShares() { return cpuShares; } public static Builder builder() { return new Builder(); } public static class Builder { private List<String> binds; private String containerIDFile; private List<IDockerConfParameter> lxcConf; private Boolean privileged; private Map<String, List<IDockerPortBinding>> portBindings; private List<String> links; private Boolean publishAllPorts; private List<String> dns; private List<String> dnsSearch; private List<String> volumesFrom; private List<String> securityOpt; private String networkMode; private Long memory; private Long cpuShares; public Builder binds(final List<String> binds) { this.binds = new ArrayList<>(binds); return this; } public Builder binds(final String... binds) { this.binds = Arrays.asList(binds); return this; } public List<String> binds() { return binds; } public Builder containerIDFile(final String containerIDFile) { this.containerIDFile = containerIDFile; return this; } public Builder lxcConf(final List<IDockerConfParameter> lxcConf) { this.lxcConf = new ArrayList<>(lxcConf); return this; } public Builder lxcConf(final IDockerConfParameter... lxcConf) { this.lxcConf = Arrays.asList(lxcConf); return this; } public Builder privileged(final Boolean privileged) { this.privileged = privileged; return this; } public Builder portBindings( final Map<String, List<IDockerPortBinding>> portBindings) { this.portBindings = portBindings; return this; } public Builder links(final List<String> links) { this.links = new ArrayList<>(links); return this; } public Builder links(final String... links) { this.links = Arrays.asList(links); return this; } public Builder publishAllPorts(final Boolean publishAllPorts) { this.publishAllPorts = publishAllPorts; return this; } public Builder dns(final List<String> dns) { this.dns = new ArrayList<>(dns); return this; } public Builder dns(final String... dns) { this.dns = Arrays.asList(dns); return this; } public Builder dnsSearch(final List<String> dnsSearch) { this.dnsSearch = new ArrayList<>(dnsSearch); return this; } public Builder dnsSearch(final String... dnsSearch) { this.dnsSearch = Arrays.asList(dnsSearch); return this; } public Builder volumesFrom(final List<String> volumesFrom) { this.volumesFrom = new ArrayList<>(volumesFrom); return this; } public Builder volumesFrom(final String... volumesFrom) { this.volumesFrom = Arrays.asList(volumesFrom); return this; } public Builder securityOpt(final List<String> securityOpt) { this.securityOpt = new ArrayList<>(securityOpt); return this; } public Builder securityOpt(final String... securityOpt) { this.securityOpt = Arrays.asList(securityOpt); return this; } public Builder networkMode(final String networkMode) { this.networkMode = networkMode; return this; } public Builder memory(final Long memory) { this.memory = memory; return this; } public Builder cpuShares(final Long cpuShares) { this.cpuShares = cpuShares; return this; } public IDockerHostConfig build() { return new DockerHostConfig(this); } } }