package org.arquillian.cube.docker.impl.await; import java.util.logging.Logger; import org.arquillian.cube.docker.impl.client.config.Await; import org.arquillian.cube.docker.impl.client.config.CubeContainer; import org.arquillian.cube.docker.impl.docker.DockerClientExecutor; import org.arquillian.cube.spi.Cube; import org.arquillian.cube.spi.await.AwaitStrategy; public class AwaitStrategyFactory { private static final Logger log = Logger.getLogger(AwaitStrategyFactory.class.getName()); private AwaitStrategyFactory() { super(); } public static final AwaitStrategy create(DockerClientExecutor dockerClientExecutor, Cube<?> cube, CubeContainer options) { if (options.getAwait() != null) { Await await = options.getAwait(); if (await.getStrategy() != null) { String strategy = await.getStrategy().toLowerCase(); switch (strategy) { case PollingAwaitStrategy.TAG: return new PollingAwaitStrategy(cube, dockerClientExecutor, await); case LogScanningAwaitStrategy.TAG: return new LogScanningAwaitStrategy(cube, dockerClientExecutor, await); case NativeAwaitStrategy.TAG: return new NativeAwaitStrategy(cube, dockerClientExecutor); case StaticAwaitStrategy.TAG: return new StaticAwaitStrategy(cube, await); case SleepingAwaitStrategy.TAG: return new SleepingAwaitStrategy(cube, await); case HttpAwaitStrategy.TAG: return new HttpAwaitStrategy(cube, dockerClientExecutor, await); default: return new CustomAwaitStrategyInstantiator(cube, dockerClientExecutor, await); } } else { log.fine("No await strategy is set and Polling one is going to be used."); return new PollingAwaitStrategy(cube, dockerClientExecutor, new Await()); } } else { log.fine("No await strategy is set and Polling strategy is going to be used."); return new PollingAwaitStrategy(cube, dockerClientExecutor, new Await()); } } }