package org.arquillian.cube.docker.impl.client.containerobject;
import java.util.Optional;
import org.arquillian.cube.ContainerObjectConfiguration;
import org.arquillian.cube.docker.impl.await.PollingAwaitStrategy;
import org.arquillian.cube.docker.impl.client.config.Await;
import org.arquillian.cube.docker.impl.client.config.CubeContainer;
import org.arquillian.cube.docker.impl.client.config.Link;
import org.arquillian.cube.docker.impl.client.config.PortBinding;
/**
* This implementation of {@link ContainerObjectConfiguration} is a bridge to {@link CubeContainer}
* Clients of this class are encouraged to access the internal {@link CubeContainer} for additional options
*
* @author <a href="mailto:rivasdiaz@gmail.com">Ramon Rivas</a>
*/
public class CubeContainerObjectConfiguration implements ContainerObjectConfiguration {
private final CubeContainer configuration;
public CubeContainerObjectConfiguration(CubeContainer configuration) {
this.configuration = configuration;
}
public CubeContainer getCubeContainerConfiguration() {
return configuration;
}
public static CubeContainerObjectConfiguration empty() {
return new CubeContainerObjectConfiguration(null);
}
@Override
public String getContainerName() {
return configuration.getContainerName();
}
@Override
public String[] getPortBindings() {
return Optional.ofNullable(configuration.getPortBindings())
.map(links -> links.stream().map(PortBinding::toString).toArray(String[]::new))
.orElse(null);
}
@Override
public int[] getAwaitPorts() {
return Optional.ofNullable(configuration.getAwait())
.filter(await -> await.getStrategy().equals(PollingAwaitStrategy.TAG))
.map(Await::getPorts)
.map(ports -> ports.stream().mapToInt(Integer::intValue).toArray())
.orElse(null);
}
@Override
public String[] getEnvironmentVariables() {
return Optional.ofNullable(configuration.getEnv())
.map(env -> env.stream().toArray(String[]::new))
.orElse(null);
}
@Override
public String[] getVolumes() {
return Optional.ofNullable(configuration.getVolumes())
.map(volumes -> volumes.stream().toArray(String[]::new))
.orElse(null);
}
@Override
public String[] getLinks() {
return Optional.ofNullable(configuration.getLinks())
.map(links -> links.stream().map(Link::toString).toArray(String[]::new))
.orElse(null);
}
}