/******************************************************************************* * Copyright (c) 2012-2017 Codenvy, S.A. * 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: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ package org.eclipse.che.plugin.docker.client.json; import org.eclipse.che.plugin.docker.client.json.container.NetworkingConfig; import java.util.Arrays; import java.util.HashMap; import java.util.Map; import java.util.Objects; /** @author andrew00x */ public class ContainerConfig { private String domainName; private int cpuShares; private String cpuset; private boolean attachStdin; private boolean attachStdout; private boolean attachStderr; private boolean tty; private boolean openStdin; private boolean stdinOnce; private String[] env; private String[] cmd; private String[] entrypoint; private String image; private boolean networkDisabled; private String macAddress; private String[] securityOpts; private HostConfig hostConfig; private NetworkingConfig networkingConfig; // from docs for 1.15 API https://docs.docker.com/reference/api/docker_remote_api_v1.15/#create-a-container // An object mapping ports to an empty object in the form of: "ExposedPorts": { "<port>/<tcp|udp>: {}" } private Map<String, Map<String, String>> exposedPorts = new HashMap<>(); private String user = ""; private String hostname = ""; private String workingDir = ""; private Map<String, Volume> volumes = new HashMap<>(); private Map<String, String> labels = new HashMap<>(); public String getHostname() { return hostname; } public void setHostname(String hostname) { this.hostname = hostname; } public String getUser() { return user; } public void setUser(String user) { this.user = user; } public String[] getEnv() { return env; } public void setEnv(String[] env) { this.env = env; } /** * @deprecated Use {@link HostConfig#getCpuShares()} */ @Deprecated public int getCpuShares() { return cpuShares; } /** * @deprecated Use {@link HostConfig#setCpuShares(int)} */ @Deprecated public void setCpuShares(int cpuShares) { this.cpuShares = cpuShares; } public boolean isAttachStdin() { return attachStdin; } public void setAttachStdin(boolean attachStdin) { this.attachStdin = attachStdin; } public boolean isAttachStdout() { return attachStdout; } public void setAttachStdout(boolean attachStdout) { this.attachStdout = attachStdout; } public boolean isAttachStderr() { return attachStderr; } public void setAttachStderr(boolean attachStderr) { this.attachStderr = attachStderr; } public boolean isTty() { return tty; } public void setTty(boolean tty) { this.tty = tty; } public boolean isOpenStdin() { return openStdin; } public void setOpenStdin(boolean openStdin) { this.openStdin = openStdin; } public boolean isStdinOnce() { return stdinOnce; } public void setStdinOnce(boolean stdinOnce) { this.stdinOnce = stdinOnce; } public String[] getCmd() { return cmd; } public void setCmd(String... cmd) { this.cmd = cmd; } public String getImage() { return image; } public void setImage(String image) { this.image = image; } public Map<String, Volume> getVolumes() { return volumes; } public void setVolumes(Map<String, Volume> volumes) { this.volumes = volumes; } public String getWorkingDir() { return workingDir; } public void setWorkingDir(String workingDir) { this.workingDir = workingDir; } public boolean isNetworkDisabled() { return networkDisabled; } public void setNetworkDisabled(boolean networkDisabled) { this.networkDisabled = networkDisabled; } public ContainerConfig withHostname(String hostname) { this.hostname = hostname; return this; } public ContainerConfig withUser(String user) { this.user = user; return this; } public ContainerConfig withEnv(String... env) { this.env = env; return this; } /** * @deprecated Use {@link HostConfig#withCpuShares(int)} */ @Deprecated public ContainerConfig withCpuShares(int cpuShares) { this.cpuShares = cpuShares; return this; } public ContainerConfig withAttachStdin(boolean attachStdin) { this.attachStdin = attachStdin; return this; } public ContainerConfig withAttachStdout(boolean attachStdout) { this.attachStdout = attachStdout; return this; } public ContainerConfig withAttachStderr(boolean attachStderr) { this.attachStderr = attachStderr; return this; } public ContainerConfig withTty(boolean tty) { this.tty = tty; return this; } public ContainerConfig withOpenStdin(boolean openStdin) { this.openStdin = openStdin; return this; } public ContainerConfig withStdinOnce(boolean stdinOnce) { this.stdinOnce = stdinOnce; return this; } public ContainerConfig withCmd(String... cmd) { this.cmd = cmd; return this; } public ContainerConfig withImage(String image) { this.image = image; return this; } public ContainerConfig withVolumes(Map<String, Volume> volumes) { this.volumes = volumes; return this; } public ContainerConfig withWorkingDir(String workingDir) { this.workingDir = workingDir; return this; } public ContainerConfig withNetworkDisabled(boolean networkDisabled) { this.networkDisabled = networkDisabled; return this; } public HostConfig getHostConfig() { return hostConfig; } public void setHostConfig(HostConfig hostConfig) { this.hostConfig = hostConfig; } public ContainerConfig withHostConfig(HostConfig hostConfig) { this.hostConfig = hostConfig; return this; } public String getDomainName() { return domainName; } public void setDomainName(String domainName) { this.domainName = domainName; } public ContainerConfig withDomainName(String domainName) { this.domainName = domainName; return this; } /** * @deprecated Use {@link HostConfig#getCpusetCpus()} */ @Deprecated public String getCpuset() { return cpuset; } /** * @deprecated Use {@link HostConfig#setCpusetCpus(String)} */ @Deprecated public void setCpuset(String cpuset) { this.cpuset = cpuset; } /** * @deprecated Use {@link HostConfig#withCpusetCpus(String)} */ @Deprecated public ContainerConfig withCpuset(String cpuset) { this.cpuset = cpuset; return this; } public String[] getEntrypoint() { return entrypoint; } public void setEntrypoint(String... entrypoint) { this.entrypoint = entrypoint; } public ContainerConfig withEntrypoint(String... entrypoint) { this.entrypoint = entrypoint; return this; } public String getMacAddress() { return macAddress; } public void setMacAddress(String macAddress) { this.macAddress = macAddress; } public ContainerConfig withMacAddress(String macAddress) { this.macAddress = macAddress; return this; } public Map<String, Map<String, String>> getExposedPorts() { return exposedPorts; } public void setExposedPorts(Map<String, Map<String, String>> exposedPorts) { this.exposedPorts = exposedPorts; } public ContainerConfig withExposedPorts(Map<String, Map<String, String>> exposedPorts) { this.exposedPorts = exposedPorts; return this; } public String[] getSecurityOpts() { return securityOpts; } public void setSecurityOpts(String[] securityOpts) { this.securityOpts = securityOpts; } public ContainerConfig withSecurityOpts(String[] securityOpts) { this.securityOpts = securityOpts; return this; } public Map<String, String> getLabels() { return labels; } public void setLabels(Map<String, String> labels) { this.labels = labels; } public ContainerConfig withLabels(Map<String, String> labels) { this.labels = labels; return this; } public NetworkingConfig getNetworkingConfig() { return networkingConfig; } public void setNetworkingConfig(NetworkingConfig networkingConfig) { this.networkingConfig = networkingConfig; } public ContainerConfig withNetworkingConfig(NetworkingConfig networkingConfig) { this.networkingConfig = networkingConfig; return this; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (!(obj instanceof ContainerConfig)) { return false; } final ContainerConfig that = (ContainerConfig)obj; return cpuShares == that.cpuShares && attachStdin == that.attachStdin && attachStdout == that.attachStdout && attachStderr == that.attachStderr && tty == that.tty && openStdin == that.openStdin && stdinOnce == that.stdinOnce && networkDisabled == that.networkDisabled && Objects.equals(domainName, that.domainName) && Objects.equals(cpuset, that.cpuset) && Arrays.equals(env, that.env) && Arrays.equals(cmd, that.cmd) && Arrays.equals(entrypoint, that.entrypoint) && Objects.equals(image, that.image) && Objects.equals(macAddress, that.macAddress) && Arrays.equals(securityOpts, that.securityOpts) && Objects.equals(hostConfig, that.hostConfig) && Objects.equals(networkingConfig, that.networkingConfig) && getExposedPorts().equals(that.getExposedPorts()) && Objects.equals(user, that.user) && Objects.equals(hostname, that.hostname) && Objects.equals(workingDir, that.workingDir) && getVolumes().equals(that.getVolumes()) && getLabels().equals(that.getLabels()); } @Override public int hashCode() { int hash = 7; hash = 31 * hash + Objects.hashCode(domainName); hash = 31 * hash + cpuShares; hash = 31 * hash + Objects.hashCode(cpuset); hash = 31 * hash + Boolean.hashCode(attachStdin); hash = 31 * hash + Boolean.hashCode(attachStdout); hash = 31 * hash + Boolean.hashCode(attachStderr); hash = 31 * hash + Boolean.hashCode(tty); hash = 31 * hash + Boolean.hashCode(openStdin); hash = 31 * hash + Boolean.hashCode(stdinOnce); hash = 31 * hash + Arrays.hashCode(env); hash = 31 * hash + Arrays.hashCode(cmd); hash = 31 * hash + Arrays.hashCode(entrypoint); hash = 31 * hash + Objects.hashCode(image); hash = 31 * hash + Boolean.hashCode(networkDisabled); hash = 31 * hash + Objects.hashCode(macAddress); hash = 31 * hash + Arrays.hashCode(securityOpts); hash = 31 * hash + Objects.hashCode(hostConfig); hash = 31 * hash + Objects.hashCode(networkingConfig); hash = 31 * hash + getExposedPorts().hashCode(); hash = 31 * hash + Objects.hashCode(user); hash = 31 * hash + Objects.hashCode(hostname); hash = 31 * hash + Objects.hashCode(workingDir); hash = 31 * hash + getVolumes().hashCode(); hash = 31 * hash + getLabels().hashCode(); return hash; } @Override public String toString() { return "ContainerConfig{" + "domainName='" + domainName + '\'' + ", cpuShares=" + cpuShares + ", cpuset='" + cpuset + '\'' + ", attachStdin=" + attachStdin + ", attachStdout=" + attachStdout + ", attachStderr=" + attachStderr + ", tty=" + tty + ", openStdin=" + openStdin + ", stdinOnce=" + stdinOnce + ", env=" + Arrays.toString(env) + ", cmd=" + Arrays.toString(cmd) + ", entrypoint=" + Arrays.toString(entrypoint) + ", image='" + image + '\'' + ", networkDisabled=" + networkDisabled + ", macAddress='" + macAddress + '\'' + ", securityOpts=" + Arrays.toString(securityOpts) + ", hostConfig=" + hostConfig + ", networkingConfig=" + networkingConfig + ", exposedPorts=" + exposedPorts + ", user='" + user + '\'' + ", hostname='" + hostname + '\'' + ", workingDir='" + workingDir + '\'' + ", volumes=" + volumes + ", labels=" + labels + '}'; } }