package org.arquillian.cube.docker.impl.client.config;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
public class CubeContainer {
private String containerName;
private String workingDir;
private Boolean disableNetwork;
private String hostName;
private Collection<String> portSpecs;
private String user;
private Boolean tty;
private Boolean stdinOpen;
private Boolean stdinOnce;
private Long memoryLimit;
private Long memorySwap;
private Long shmSize;
private Integer cpuShares;
private Integer cpuQuota;
private String cpuSet;
private Boolean attachStdin;
private Boolean attachSterr;
private Collection<String> env;
private Collection<String> cmd;
private Collection<String> dns;
private Collection<String> volumes;
private Collection<String> volumesFrom;
private Boolean removeVolumes = Boolean.TRUE;
private Collection<String> binds;
private Collection<Link> links;
private Collection<String> dependsOn;
private Collection<PortBinding> portBindings;
private Collection<ExposedPort> exposedPorts;
private Boolean privileged;
private Boolean publishAllPorts;
private String networkMode;
private String ipv4Address;
private String ipv6Address;
private Collection<String> dnsSearch;
private Collection<Device> devices;
private RestartPolicy restartPolicy;
private Collection<String> capAdd;
private Collection<String> capDrop;
private Collection<String> extraHosts;
private Collection<String> entryPoint;
private Collection<String> networks;
private String domainName;
private Boolean alwaysPull = Boolean.FALSE;
private boolean manual = false;
private boolean killContainer = false;
private Await await;
private Image image;
private String extendsImage;
private boolean ReadonlyRootfs;
private Map<String, String> labels;
private BuildImage buildImage;
private Collection<BeforeStop> beforeStop;
public Image getImage() {
return image;
}
public void setImage(Image image) {
this.image = image;
}
public BuildImage getBuildImage() {
return buildImage;
}
public void setBuildImage(BuildImage buildImage) {
this.buildImage = buildImage;
}
public Collection<PortBinding> getPortBindings() {
return portBindings;
}
public void setPortBindings(Collection<PortBinding> portBindings) {
this.portBindings = portBindings;
}
public Collection<ExposedPort> getExposedPorts() {
return exposedPorts;
}
public void setExposedPorts(Collection<ExposedPort> exposedPorts) {
this.exposedPorts = exposedPorts;
}
public Boolean getReadonlyRootfs() {
return ReadonlyRootfs;
}
public void setReadonlyRootfs(Boolean readonlyRootfs) {
this.ReadonlyRootfs = readonlyRootfs;
}
public Map<String, String> getLabels() {
return labels;
}
public void setLabels(Map<String, String> labels) {
this.labels = labels;
}
public String getWorkingDir() {
return workingDir;
}
public void setWorkingDir(String workingDir) {
this.workingDir = workingDir;
}
public Boolean getDisableNetwork() {
return disableNetwork;
}
public void setDisableNetwork(Boolean disableNetwork) {
this.disableNetwork = disableNetwork;
}
public String getHostName() {
return hostName;
}
public void setHostName(String hostName) {
this.hostName = hostName;
}
public Collection<String> getPortSpecs() {
return portSpecs;
}
public void setPortSpecs(Collection<String> portSpecs) {
this.portSpecs = portSpecs;
}
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public Boolean getTty() {
return tty;
}
public void setTty(Boolean tty) {
this.tty = tty;
}
public Boolean getStdinOpen() {
return stdinOpen;
}
public void setStdinOpen(Boolean stdinOpen) {
this.stdinOpen = stdinOpen;
}
public Boolean getStdinOnce() {
return stdinOnce;
}
public void setStdinOnce(Boolean stdinOnce) {
this.stdinOnce = stdinOnce;
}
public Long getMemoryLimit() {
return memoryLimit;
}
public void setMemoryLimit(Long memoryLimit) {
this.memoryLimit = memoryLimit;
}
public Long getMemorySwap() {
return memorySwap;
}
public void setMemorySwap(Long memorySwap) {
this.memorySwap = memorySwap;
}
public Long getShmSize() {
return shmSize;
}
public void setShmSize(Long shmSize) {
this.shmSize = shmSize;
}
public Integer getCpuShares() {
return cpuShares;
}
public void setCpuShares(Integer cpuShares) {
this.cpuShares = cpuShares;
}
public String getCpuSet() {
return cpuSet;
}
public void setCpuSet(String cpuSet) {
this.cpuSet = cpuSet;
}
public Integer getCpuQuota() {
return cpuQuota;
}
public void setCpuQuota(Integer cpuQuota) {
this.cpuQuota = cpuQuota;
}
public Boolean getAttachStdin() {
return attachStdin;
}
public void setAttachStdin(Boolean attachStdin) {
this.attachStdin = attachStdin;
}
public Boolean getAttachSterr() {
return attachSterr;
}
public void setAttachSterr(Boolean attachSterr) {
this.attachSterr = attachSterr;
}
public Collection<String> getEnv() {
return env;
}
public void setEnv(Collection<String> env) {
this.env = env;
}
public Collection<String> getCmd() {
return cmd;
}
public void setCmd(Collection<String> cmd) {
this.cmd = cmd;
}
public Collection<String> getDns() {
return dns;
}
public void setDns(Collection<String> dns) {
this.dns = dns;
}
public Collection<String> getVolumes() {
return volumes;
}
public void setVolumes(Collection<String> volumes) {
this.volumes = volumes;
}
public Collection<String> getVolumesFrom() {
return volumesFrom;
}
public void setVolumesFrom(Collection<String> volumesFrom) {
this.volumesFrom = volumesFrom;
}
public Boolean getRemoveVolumes() {
return removeVolumes;
}
public void setRemoveVolumes(Boolean deleteVolumes) {
this.removeVolumes = deleteVolumes;
}
public Collection<String> getBinds() {
return binds;
}
public void setBinds(Collection<String> binds) {
this.binds = binds;
}
public Collection<Link> getLinks() {
return links;
}
public void setLinks(Collection<Link> links) {
this.links = links;
}
public Boolean getPrivileged() {
return privileged;
}
public void setPrivileged(Boolean privileged) {
this.privileged = privileged;
}
public Boolean getPublishAllPorts() {
return publishAllPorts;
}
public void setPublishAllPorts(Boolean publishAllPorts) {
this.publishAllPorts = publishAllPorts;
}
public String getNetworkMode() {
return networkMode;
}
public void setNetworkMode(String networkMode) {
this.networkMode = networkMode;
}
public Collection<String> getDnsSearch() {
return dnsSearch;
}
public void setDnsSearch(Collection<String> dnsSearch) {
this.dnsSearch = dnsSearch;
}
public Collection<Device> getDevices() {
return devices;
}
public void setDevices(Collection<Device> devices) {
this.devices = devices;
}
public Collection<String> getCapAdd() {
return capAdd;
}
public void setCapAdd(Collection<String> capAdd) {
this.capAdd = capAdd;
}
public Collection<String> getCapDrop() {
return capDrop;
}
public void setCapDrop(Collection<String> capDrop) {
this.capDrop = capDrop;
}
public Collection<String> getExtraHosts() {
return extraHosts;
}
public void setExtraHosts(Collection<String> extraHosts) {
this.extraHosts = extraHosts;
}
public Collection<String> getEntryPoint() {
return entryPoint;
}
public void setEntryPoint(Collection<String> entryPoint) {
this.entryPoint = entryPoint;
}
public String getDomainName() {
return domainName;
}
public void setDomainName(String domainName) {
this.domainName = domainName;
}
public Boolean getAlwaysPull() {
return alwaysPull;
}
public void setAlwaysPull(Boolean alwaysPull) {
this.alwaysPull = alwaysPull;
}
public RestartPolicy getRestartPolicy() {
return restartPolicy;
}
public void setRestartPolicy(RestartPolicy restartPolicy) {
this.restartPolicy = restartPolicy;
}
public Await getAwait() {
return await;
}
public void setAwait(Await await) {
this.await = await;
}
public boolean hasAwait() {
return this.await != null;
}
public String getExtends() {
return extendsImage;
}
public void setExtends(String extendsImage) {
this.extendsImage = extendsImage;
}
public Collection<BeforeStop> getBeforeStop() {
return beforeStop;
}
public void setBeforeStop(Collection<BeforeStop> beforeStop) {
this.beforeStop = beforeStop;
}
public boolean hasBeforeStop() {
return this.beforeStop != null && !this.beforeStop.isEmpty();
}
public String getContainerName() {
return containerName;
}
public void setContainerName(String containerName) {
this.containerName = containerName;
}
public Collection<String> getDependsOn() {
return dependsOn;
}
public void setDependsOn(Collection<String> dependsOn) {
this.dependsOn = dependsOn;
}
public boolean isManual() {
return manual;
}
public void setManual(boolean manual) {
this.manual = manual;
}
public boolean isKillContainer() {
return killContainer;
}
public void setKillContainer(boolean killContainer) {
this.killContainer = killContainer;
}
public Collection<String> getNetworks() {
return networks;
}
public void setNetworks(Collection<String> networks) {
this.networks = networks;
}
public Collection<String> getDependingContainers() {
// Depends on has more priority than links
if (dependsOn != null && dependsOn.size() > 0) {
return Collections.unmodifiableCollection(dependsOn);
} else {
return getLinksName();
}
}
private Collection<String> getLinksName() {
if (links != null && links.size() > 0) {
Set<String> dependencies = new HashSet<>();
for (Link link : links) {
dependencies.add(link.getName());
}
return dependencies;
} else {
return new ArrayList<>();
}
}
public void merge(CubeContainer container) {
try {
Field[] fields = CubeContainer.class.getDeclaredFields();
for (Field field : fields) {
if (!field.isAccessible()) {
field.setAccessible(true);
}
Object thisVal = field.get(this);
if (thisVal == null) {
Object otherVal = field.get(container);
field.set(this, otherVal);
}
}
} catch (Exception e) {
throw new RuntimeException("Could not merge objects", e);
}
}
public String getIpv4Address() {
return ipv4Address;
}
public void setIpv4Address(String ipv4Address) {
this.ipv4Address = ipv4Address;
}
public String getIpv6Address() {
return ipv6Address;
}
public void setIpv6Address(String ipv6Address) {
this.ipv6Address = ipv6Address;
}
}