package org.arquillian.cube.docker.impl.client.containerobject.dsl; import org.arquillian.cube.docker.impl.client.config.IPAM; import org.arquillian.cube.docker.impl.client.config.IPAMConfig; import java.util.ArrayList; import java.util.List; /** * Builder to create a network object. */ public class NetworkBuilder { private static final String DEFAULT_NETWORK_DRIVER = "bridge"; private String id; private String networkDriver; private NetworkBuilder(String id, String networkDriver) { this.networkDriver = networkDriver; this.id = id; } public static NetworkBuilder withDefaultDriver(String networkId) { return new NetworkBuilder(networkId, DEFAULT_NETWORK_DRIVER); } public static NetworkBuilder withDriver(String networkId, String driver) { return new NetworkBuilder(networkId, driver); } public IpamBuilder withIpam(String driver) { return new IpamBuilder(driver); } public Network build() { final org.arquillian.cube.docker.impl.client.config.Network network = new org.arquillian.cube.docker.impl.client.config.Network(); network.setDriver(this.networkDriver); return new Network(this.id, network); } private Network build(IPAM ipam) { final org.arquillian.cube.docker.impl.client.config.Network network = new org.arquillian.cube.docker.impl.client.config.Network(); network.setDriver(this.networkDriver); network.setIpam(ipam); return new Network(this.id, network); } public class IpamBuilder { private IPAM ipam = new IPAM(); private List<IPAMConfig> configs = new ArrayList<>(); public IpamBuilder(String driver) { ipam.setDriver(driver); } public IpamConfigurationBuilder withIpamConfiguration() { return new IpamConfigurationBuilder(this); } public Network build() { if (! configs.isEmpty()) { ipam.setIpamConfigs(configs); } return NetworkBuilder.this.build(ipam); } } public class IpamConfigurationBuilder { private IPAMConfig ipamConfig = new IPAMConfig(); private IpamBuilder ipamBuilder; public IpamConfigurationBuilder(IpamBuilder ipamBuilder) { this.ipamBuilder = ipamBuilder; } public IpamConfigurationBuilder withSubnet(String subnet) { ipamConfig.setSubnet(subnet); return this; } public IpamConfigurationBuilder withGateway(String gateway) { ipamConfig.setGateway(gateway); return this; } public IpamConfigurationBuilder withIpRange(String ipRange) { ipamConfig.setIpRange(ipRange); return this; } public IpamBuilder add() { this.ipamBuilder.configs.add(this.ipamConfig); return this.ipamBuilder; } } }