// Generated by delombok at Sun Sep 08 08:37:39 UTC 2019
package org.testcontainers.containers;
import com.github.dockerjava.api.command.
CreateNetworkCmd;
import org.junit.rules.
ExternalResource;
import org.junit.rules.
TestRule;
import org.testcontainers.
DockerClientFactory;
import org.testcontainers.utility.
ResourceReaper;
import java.util.
Collections;
import java.util.
HashMap;
import java.util.
Map;
import java.util.
Set;
import java.util.
UUID;
import java.util.concurrent.atomic.
AtomicBoolean;
import java.util.function.
Consumer;
public interface
Network extends
AutoCloseable,
TestRule {
Network SHARED = new
NetworkImpl(false, null,
Collections.
emptySet(), null) {
@
Override
public void
close() {
// Do not allow users to close SHARED network, only ResourceReaper is allowed to close (destroy) it
}
};
String getId();
@
Override
void
close();
static
Network newNetwork() {
return
builder().
build();
}
static
NetworkImpl.
NetworkImplBuilder builder() {
return
NetworkImpl.
builder();
}
class
NetworkImpl extends
ExternalResource implements
Network {
private final
String name =
UUID.
randomUUID().
toString();
private
Boolean enableIpv6;
private
String driver;
private
Set<
Consumer<
CreateNetworkCmd>>
createNetworkCmdModifiers;
private
String id;
private final
AtomicBoolean initialized = new
AtomicBoolean();
@
Override
public synchronized
String getId() {
if (
initialized.
compareAndSet(false, true)) {
id =
create();
}
return
id;
}
private
String create() {
CreateNetworkCmd createNetworkCmd =
DockerClientFactory.
instance().
client().
createNetworkCmd();
createNetworkCmd.
withName(
name);
createNetworkCmd.
withCheckDuplicate(true);
if (
enableIpv6 != null) {
createNetworkCmd.
withEnableIpv6(
enableIpv6);
}
if (
driver != null) {
createNetworkCmd.
withDriver(
driver);
}
for (
Consumer<
CreateNetworkCmd>
consumer :
createNetworkCmdModifiers) {
consumer.
accept(
createNetworkCmd);
}
Map<
String,
String>
labels =
createNetworkCmd.
getLabels();
labels = new
HashMap<>(
labels != null ?
labels :
Collections.
emptyMap());
labels.
putAll(
DockerClientFactory.
DEFAULT_LABELS);
createNetworkCmd.
withLabels(
labels);
return
createNetworkCmd.
exec().
getId();
}
@
Override
protected void
after() {
close();
}
@
Override
public void
close() {
if (
initialized.
getAndSet(false)) {
ResourceReaper.
instance().
removeNetworkById(
id);
}
}
@java.lang.
SuppressWarnings("all")
NetworkImpl(final
Boolean enableIpv6, final
String driver, final
Set<
Consumer<
CreateNetworkCmd>>
createNetworkCmdModifiers, final
String id) {
this.
enableIpv6 =
enableIpv6;
this.
driver =
driver;
this.
createNetworkCmdModifiers =
createNetworkCmdModifiers;
this.
id =
id;
}
@java.lang.
SuppressWarnings("all")
public static class
NetworkImplBuilder {
@java.lang.
SuppressWarnings("all")
private
Boolean enableIpv6;
@java.lang.
SuppressWarnings("all")
private
String driver;
@java.lang.
SuppressWarnings("all")
private java.util.
ArrayList<
Consumer<
CreateNetworkCmd>>
createNetworkCmdModifiers;
@java.lang.
SuppressWarnings("all")
private
String id;
@java.lang.
SuppressWarnings("all")
NetworkImplBuilder() {
}
@java.lang.
SuppressWarnings("all")
public
NetworkImplBuilder enableIpv6(final
Boolean enableIpv6) {
this.
enableIpv6 =
enableIpv6;
return this;
}
@java.lang.
SuppressWarnings("all")
public
NetworkImplBuilder driver(final
String driver) {
this.
driver =
driver;
return this;
}
@java.lang.
SuppressWarnings("all")
public
NetworkImplBuilder createNetworkCmdModifier(final
Consumer<
CreateNetworkCmd>
createNetworkCmdModifier) {
if (this.
createNetworkCmdModifiers == null) this.
createNetworkCmdModifiers = new java.util.
ArrayList<
Consumer<
CreateNetworkCmd>>();
this.
createNetworkCmdModifiers.
add(
createNetworkCmdModifier);
return this;
}
@java.lang.
SuppressWarnings("all")
public
NetworkImplBuilder createNetworkCmdModifiers(final java.util.
Collection<? extends
Consumer<
CreateNetworkCmd>>
createNetworkCmdModifiers) {
if (this.
createNetworkCmdModifiers == null) this.
createNetworkCmdModifiers = new java.util.
ArrayList<
Consumer<
CreateNetworkCmd>>();
this.
createNetworkCmdModifiers.
addAll(
createNetworkCmdModifiers);
return this;
}
@java.lang.
SuppressWarnings("all")
public
NetworkImplBuilder clearCreateNetworkCmdModifiers() {
if (this.
createNetworkCmdModifiers != null) this.
createNetworkCmdModifiers.
clear();
return this;
}
@java.lang.
SuppressWarnings("all")
public
NetworkImplBuilder id(final
String id) {
this.
id =
id;
return this;
}
@java.lang.
SuppressWarnings("all")
public
NetworkImpl build() {
java.util.
Set<
Consumer<
CreateNetworkCmd>>
createNetworkCmdModifiers;
switch (this.
createNetworkCmdModifiers == null ? 0 : this.
createNetworkCmdModifiers.
size()) {
case 0:
createNetworkCmdModifiers = java.util.
Collections.
emptySet();
break;
case 1:
createNetworkCmdModifiers = java.util.
Collections.
singleton(this.
createNetworkCmdModifiers.
get(0));
break;
default:
createNetworkCmdModifiers = new java.util.
LinkedHashSet<
Consumer<
CreateNetworkCmd>>(this.
createNetworkCmdModifiers.
size() < 1073741824 ? 1 + this.
createNetworkCmdModifiers.
size() + (this.
createNetworkCmdModifiers.
size() - 3) / 3 : java.lang.
Integer.
MAX_VALUE);
createNetworkCmdModifiers.
addAll(this.
createNetworkCmdModifiers);
createNetworkCmdModifiers = java.util.
Collections.
unmodifiableSet(
createNetworkCmdModifiers);
}
return new
NetworkImpl(
enableIpv6,
driver,
createNetworkCmdModifiers,
id);
}
@java.lang.
Override
@java.lang.
SuppressWarnings("all")
public java.lang.
String toString() {
return "Network.NetworkImpl.NetworkImplBuilder(enableIpv6=" + this.
enableIpv6 + ", driver=" + this.
driver + ", createNetworkCmdModifiers=" + this.
createNetworkCmdModifiers + ", id=" + this.
id + ")";
}
}
@java.lang.
SuppressWarnings("all")
public static
NetworkImplBuilder builder() {
return new
NetworkImplBuilder();
}
@java.lang.
SuppressWarnings("all")
public
String getName() {
return this.
name;
}
@java.lang.
SuppressWarnings("all")
public
Boolean getEnableIpv6() {
return this.
enableIpv6;
}
@java.lang.
SuppressWarnings("all")
public
String getDriver() {
return this.
driver;
}
@java.lang.
SuppressWarnings("all")
public
Set<
Consumer<
CreateNetworkCmd>>
getCreateNetworkCmdModifiers() {
return this.
createNetworkCmdModifiers;
}
@java.lang.
SuppressWarnings("all")
public
AtomicBoolean getInitialized() {
return this.
initialized;
}
}
}