package com.sequenceiq.cloudbreak.orchestrator.model;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.sequenceiq.cloudbreak.orchestrator.model.port.TcpPortBinding;
public class ContainerConstraint {
private final String[] cmd;
private final Integer instances;
private final List<Integer> ports;
private final List<List<String>> constraints;
private Map<String, String> env;
private final String networkMode;
private final TcpPortBinding tcpPortBinding;
private ContainerName containerName;
private final Map<String, String> links;
private final String appName;
private List<String> hosts;
private Map<String, String> volumeBinds;
private Double cpu;
private Double mem;
private Double disk;
private String identifier;
private ContainerConstraint(ContainerConstraint.Builder builder) {
this.cmd = builder.cmd;
this.cpu = builder.cpus;
this.mem = builder.mem;
this.instances = builder.instances;
this.ports = builder.ports;
this.constraints = builder.constraints;
this.volumeBinds = builder.volumeBinds;
this.env = builder.env;
this.networkMode = builder.networkMode;
this.tcpPortBinding = builder.tcpPortBinding;
this.hosts = builder.hosts;
this.containerName = builder.containerName;
this.links = builder.links;
this.appName = builder.appName;
this.disk = builder.disk;
this.identifier = builder.identifier;
}
public String[] getCmd() {
return cmd;
}
public Integer getInstances() {
return instances;
}
public List<Integer> getPorts() {
return ports;
}
public List<List<String>> getConstraints() {
return constraints;
}
public Map<String, String> getVolumeBinds() {
return volumeBinds;
}
public Map<String, String> getEnv() {
return env;
}
public String getNetworkMode() {
return networkMode;
}
public TcpPortBinding getTcpPortBinding() {
return tcpPortBinding;
}
public List<String> getHosts() {
return hosts;
}
public Double getCpu() {
return cpu;
}
public Double getMem() {
return mem;
}
public ContainerName getContainerName() {
return containerName;
}
public Map<String, String> getLinks() {
return links;
}
public String getAppName() {
return appName;
}
public Double getDisk() {
return disk;
}
public String getIdentifier() {
return identifier;
}
public static class Builder {
private String[] cmd;
private List<Integer> ports = new ArrayList<>();
private Double cpus;
private Double mem;
private Integer instances;
private List<List<String>> constraints = new ArrayList<>();
private Map<String, String> volumeBinds = new HashMap<>();
private Map<String, String> env = new HashMap<>();
private String networkMode;
private TcpPortBinding tcpPortBinding;
private List<String> hosts = new ArrayList<>();
private ContainerName containerName;
private Map<String, String> links = new HashMap<>();
private String appName;
private Double disk;
private String identifier;
public Builder containerConstraint(ContainerConstraint containerConstraint) {
this.cmd = containerConstraint.getCmd();
this.ports = containerConstraint.getPorts();
this.cpus = containerConstraint.getCpu();
this.mem = containerConstraint.getMem();
this.instances = containerConstraint.getInstances();
this.constraints = containerConstraint.getConstraints();
this.volumeBinds = containerConstraint.getVolumeBinds();
this.env = containerConstraint.getEnv();
this.networkMode = containerConstraint.getNetworkMode();
this.tcpPortBinding = containerConstraint.getTcpPortBinding();
this.hosts = containerConstraint.getHosts();
this.containerName = containerConstraint.getContainerName();
this.links = containerConstraint.getLinks();
this.appName = containerConstraint.getAppName();
this.disk = containerConstraint.getDisk();
this.identifier = containerConstraint.getIdentifier();
return this;
}
public Builder cmd(String[] cmd) {
this.cmd = cmd;
return this;
}
public Builder ports(List<Integer> ports) {
this.ports.addAll(ports);
return this;
}
public Builder cpus(Double numberOfCpus) {
this.cpus = numberOfCpus;
return this;
}
public Builder memory(Double megaBytesOfMemory) {
this.mem = megaBytesOfMemory;
return this;
}
public Builder withDiskSize(Double diskSize) {
this.disk = diskSize;
return this;
}
public Builder instances(Integer numberOfInstances) {
this.instances = numberOfInstances;
return this;
}
public Builder constraints(List<List<String>> constraints) {
this.constraints.addAll(constraints);
return this;
}
public Builder addVolumeBindings(Map<String, String> volumeBinds) {
this.volumeBinds.putAll(volumeBinds);
return this;
}
public Builder addEnv(Map<String, String> env) {
this.env.putAll(env);
return this;
}
public Builder networkMode(String networkMode) {
this.networkMode = networkMode;
return this;
}
public Builder tcpPortBinding(TcpPortBinding binding) {
this.tcpPortBinding = binding;
return this;
}
public Builder addHosts(List<String> hosts) {
this.hosts.addAll(hosts);
return this;
}
public Builder withNamePrefix(String namePrefix) {
this.containerName = new ContainerName(null, namePrefix);
return this;
}
public Builder withName(String name) {
this.containerName = new ContainerName(name, null);
return this;
}
public Builder addLink(String hostContainerLink, String link) {
this.links.put(hostContainerLink, link);
return this;
}
public Builder withAppName(String appName) {
this.appName = appName;
return this;
}
public Builder withIdentifier(String identifier) {
this.identifier = identifier;
return this;
}
public ContainerConstraint build() {
return new ContainerConstraint(this);
}
}
}