package org.arquillian.cube.spi;
import java.util.HashSet;
import java.util.Set;
public class Binding {
public Set<PortBinding> bindings;
private String ip;
private String internalIp;
public Binding(String ip) {
this(ip, null);
}
public Binding(String ip, String internalIp) {
this.ip = ip;
this.internalIp = internalIp;
this.bindings = new HashSet<PortBinding>();
}
public String getIP() {
return ip;
}
public Set<PortBinding> getPortBindings() {
return new HashSet<PortBinding>(bindings);
}
public int getNumberOfPortBindings() {
return this.bindings.size();
}
public PortBinding getFirstPortBinding() {
for (PortBinding binding : this.bindings) {
return binding;
}
return null;
}
public String getInternalIP() {
return internalIp;
}
/**
* @param exposedPort
* the port exposed by the container (e.g. EXPOSE or Pod.Spec.Container[].Ports[])
* @param bindingPort
* the port to which the container port is bound on this IP (e.g. docker run -p ip:hostPort:exposedPort or
* Pod.Spec.Container[].Ports[].HostPort)
*/
public Binding addPortBinding(Integer exposedPort, Integer bindingPort) {
this.bindings.add(new PortBinding(exposedPort, bindingPort));
return this;
}
public boolean arePortBindings() {
return !this.bindings.isEmpty();
}
public PortBinding getBindingForExposedPort(Integer exposedPort) {
for (PortBinding binding : this.bindings) {
if (exposedPort.equals(binding.getExposedPort())) {
return binding;
}
}
return null;
}
public class PortBinding {
private Integer exposedPort;
private Integer bindingPort;
public PortBinding(Integer exposedPort, Integer bindingPort) {
this.exposedPort = exposedPort;
this.bindingPort = bindingPort;
}
public Integer getExposedPort() {
return exposedPort;
}
public Integer getBindingPort() {
return bindingPort;
}
public Binding getParent() {
return Binding.this;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result
+ ((bindingPort == null) ? 0 : bindingPort.hashCode());
result = prime * result
+ ((exposedPort == null) ? 0 : exposedPort.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
PortBinding other = (PortBinding) obj;
if (bindingPort == null) {
if (other.bindingPort != null) {
return false;
}
} else if (!bindingPort.equals(other.bindingPort)) {
return false;
}
if (exposedPort == null) {
if (other.exposedPort != null) {
return false;
}
} else if (!exposedPort.equals(other.exposedPort)) {
return false;
}
return true;
}
}
}