Skip to content

Commit

Permalink
Delombok NetworkBuilderImpl
Browse files Browse the repository at this point in the history
My intent is to put this back without the id field after the deprecation
cycle.
  • Loading branch information
quincy committed May 29, 2020
1 parent dcd7f7f commit dc343ea
Showing 1 changed file with 75 additions and 4 deletions.
79 changes: 75 additions & 4 deletions core/src/main/java/org/testcontainers/containers/Network.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package org.testcontainers.containers;

import com.github.dockerjava.api.command.CreateNetworkCmd;
import java.util.ArrayList;
import java.util.Collection;
import lombok.Builder;
import lombok.Getter;
import lombok.Singular;
Expand Down Expand Up @@ -44,15 +46,14 @@ class NetworkImpl extends ExternalResource implements Network {

/** @deprecated The id field was never user modifiable, so should not have been exposed. */
@Deprecated
public NetworkImpl(Boolean enableIpv6, String driver, Set<Consumer<CreateNetworkCmd>> createNetworkCmdModifiers, String id) {
public NetworkImpl(Boolean enableIpv6, String driver, @Singular Set<Consumer<CreateNetworkCmd>> createNetworkCmdModifiers, String id) {
this.enableIpv6 = enableIpv6;
this.driver = driver;
this.createNetworkCmdModifiers = createNetworkCmdModifiers;
this.id = id;
}

@Builder
private NetworkImpl(Boolean enableIpv6, String driver, @Singular Set<Consumer<CreateNetworkCmd>> createNetworkCmdModifiers) {
// @Builder // Uncomment after NetworkImplBuilder.id has gone through deprecation cycle
public NetworkImpl(Boolean enableIpv6, String driver, @Singular Set<Consumer<CreateNetworkCmd>> createNetworkCmdModifiers) {
this.enableIpv6 = enableIpv6;
this.driver = driver;
this.createNetworkCmdModifiers = createNetworkCmdModifiers;
Expand All @@ -71,6 +72,10 @@ private NetworkImpl(Boolean enableIpv6, String driver, @Singular Set<Consumer<Cr

private final AtomicBoolean initialized = new AtomicBoolean();

public static NetworkImplBuilder builder() {
return new NetworkImplBuilder();
}

@Override
public synchronized String getId() {
if (initialized.compareAndSet(false, true)) {
Expand Down Expand Up @@ -117,5 +122,71 @@ public synchronized void close() {
ResourceReaper.instance().removeNetworkById(id);
}
}

public static class NetworkImplBuilder {
private Boolean enableIpv6;
private String driver;
private ArrayList<Consumer<CreateNetworkCmd>> createNetworkCmdModifiers;
private String id;

NetworkImplBuilder() {
}

public NetworkImplBuilder enableIpv6(Boolean enableIpv6) {
this.enableIpv6 = enableIpv6;
return this;
}

public NetworkImplBuilder driver(String driver) {
this.driver = driver;
return this;
}

public NetworkImplBuilder createNetworkCmdModifier(Consumer<CreateNetworkCmd> createNetworkCmdModifier) {
if (this.createNetworkCmdModifiers == null) this.createNetworkCmdModifiers = new ArrayList<Consumer<CreateNetworkCmd>>();
this.createNetworkCmdModifiers.add(createNetworkCmdModifier);
return this;
}

public NetworkImplBuilder createNetworkCmdModifiers(Collection<? extends Consumer<CreateNetworkCmd>> createNetworkCmdModifiers) {
if (this.createNetworkCmdModifiers == null) this.createNetworkCmdModifiers = new ArrayList<Consumer<CreateNetworkCmd>>();
this.createNetworkCmdModifiers.addAll(createNetworkCmdModifiers);
return this;
}

public NetworkImplBuilder clearCreateNetworkCmdModifiers() {
if (this.createNetworkCmdModifiers != null)
this.createNetworkCmdModifiers.clear();
return this;
}

/** @deprecated The id field was never user modifiable, so should not have been exposed. */
@Deprecated
public NetworkImplBuilder id(String id) {
return this;
}

public NetworkImpl build() {
Set<Consumer<CreateNetworkCmd>> createNetworkCmdModifiers;
switch (this.createNetworkCmdModifiers == null ? 0 : this.createNetworkCmdModifiers.size()) {
case 0:
createNetworkCmdModifiers = Collections.emptySet();
break;
case 1:
createNetworkCmdModifiers = 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 : Integer.MAX_VALUE);
createNetworkCmdModifiers.addAll(this.createNetworkCmdModifiers);
createNetworkCmdModifiers = Collections.unmodifiableSet(createNetworkCmdModifiers);
}

return new NetworkImpl(enableIpv6, driver, createNetworkCmdModifiers, id);
}

public String toString() {
return "Network.NetworkImpl.NetworkImplBuilder(enableIpv6=" + this.enableIpv6 + ", driver=" + this.driver + ", createNetworkCmdModifiers=" + this.createNetworkCmdModifiers + ")";
}
}
}
}

0 comments on commit dc343ea

Please sign in to comment.