package org.arquillian.cube.docker.impl.client;
import java.util.ArrayList;
import java.util.List;
import org.arquillian.cube.docker.impl.client.config.DockerCompositions;
import org.arquillian.cube.impl.util.ContainerUtil;
import org.arquillian.cube.spi.AutoStartParser;
import org.jboss.arquillian.config.descriptor.api.ArquillianDescriptor;
import org.jboss.arquillian.container.spi.Container;
import org.jboss.arquillian.container.spi.ContainerRegistry;
import org.jboss.arquillian.core.api.annotation.Observes;
public class CubeDockerAutoStartConfigurator {
private static List<String> toContainersName(List<Container> containers) {
List<String> containerNames = new ArrayList<>();
for (Container container : containers) {
containerNames.add(ContainerUtil.getCubeIDForContainer(container));
}
return containerNames;
}
public void configure(@Observes CubeDockerConfiguration event, ArquillianDescriptor arquillianDescriptor,
ContainerRegistry registry) {
if (event.getAutoStartContainers() == null) {
AutoStartParser autoStartParser = resolveNotSetAutoStart(registry, event.getDockerContainersContent());
event.setAutoStartContainers(autoStartParser);
}
}
private AutoStartParser resolveNotSetAutoStart(ContainerRegistry containerRegistry, DockerCompositions containers) {
//we want to use the automatic autoconfiguration
List<String> containersName = toContainersName(containerRegistry.getContainers());
if (containers.getNetworkIds().size() > 0) {
//if network defined then you should not mix links and network
return new AutomaticResolutionNetworkAutoStartParser(containersName, containers);
} else {
// if no network defined then links approach is used.
return new AutomaticResolutionLinksAutoStartParser(containersName, containers);
}
}
}