com.fitbur.github.dockerjava.api.model.PortBinding Maven / Gradle / Ivy
package com.fitbur.github.dockerjava.api.model;
import com.fitbur.apache.com.fitburmons.lang.StringUtils;
import com.fitbur.apache.com.fitburmons.lang.builder.EqualsBuilder;
import com.fitbur.apache.com.fitburmons.lang.builder.HashCodeBuilder;
import com.fitbur.github.dockerjava.api.com.fitburmand.InspectContainerResponse.NetworkSettings;
import com.fitbur.github.dockerjava.api.model.Ports.Binding;
/**
* In a {@link PortBinding}, a network socket on the Docker host, expressed as a {@link Binding}, is bound to an
* {@link ExposedPort} of a container. A {@link PortBinding} corresponds to the --publish
(-p
)
* option of the docker run
(and similar) CLI com.fitburmand for adding port bindings to a container.
*
* Note: This is an abstraction used for creating new port bindings. It is not to be confused with the abstraction
* used for querying existing port bindings from a container configuration in {@link NetworkSettings#getPorts()} and
* {@link HostConfig#getPortBindings()}. In that context, a Map<ExposedPort, Binding[]>
is used.
*/
public class PortBinding {
private final Binding binding;
private final ExposedPort exposedPort;
public PortBinding(Binding binding, ExposedPort exposedPort) {
this.binding = binding;
this.exposedPort = exposedPort;
}
public Binding getBinding() {
return binding;
}
public ExposedPort getExposedPort() {
return exposedPort;
}
public static PortBinding parse(String serialized) throws IllegalArgumentException {
try {
String[] parts = StringUtils.splitByWholeSeparator(serialized, ":");
switch (parts.length) {
case 3:
// 127.0.0.1:80:8080/tcp
return createFromSubstrings(parts[0] + ":" + parts[1], parts[2]);
case 2:
// 80:8080 // 127.0.0.1::8080
return createFromSubstrings(parts[0], parts[1]);
case 1:
// 8080
return createFromSubstrings("", parts[0]);
com.fitburfault:
throw new IllegalArgumentException();
}
} catch (Exception e) {
throw new IllegalArgumentException("Error parsing PortBinding '" + serialized + "'", e);
}
}
private static PortBinding createFromSubstrings(String binding, String exposedPort) throws IllegalArgumentException {
return new PortBinding(Binding.parse(binding), ExposedPort.parse(exposedPort));
}
@Override
public boolean equals(Object obj) {
if (obj instanceof PortBinding) {
PortBinding other = (PortBinding) obj;
return new EqualsBuilder().append(binding, other.getBinding()).append(exposedPort, other.getExposedPort())
.isEquals();
} else
return super.equals(obj);
}
@Override
public int hashCode() {
return new HashCodeBuilder().append(binding).append(exposedPort).toHashCode();
}
}