package org.arquillian.cube.docker.impl.await;
import java.util.concurrent.TimeUnit;
import org.arquillian.cube.spi.await.AwaitStrategy;
public abstract class SleepingAwaitStrategyBase implements AwaitStrategy {
private static final int DEFAULT_SLEEP_TIME = 250;
private int sleepTime;
private TimeUnit timeUnit;
protected SleepingAwaitStrategyBase(Object sleepTime) {
this(sleepTime, DEFAULT_SLEEP_TIME);
}
protected SleepingAwaitStrategyBase(Object sleepTime, int defaultSleepTime) {
configureSleepingTime(sleepTime != null ? sleepTime : defaultSleepTime);
}
private void configureSleepingTime(Object sleepTime) {
if (sleepTime instanceof Integer) {
this.timeUnit = TimeUnit.MILLISECONDS;
this.sleepTime = (Integer) sleepTime;
} else {
String sleepTimeWithUnit = ((String) sleepTime).trim();
if (sleepTimeWithUnit.endsWith("ms")) {
this.timeUnit = TimeUnit.MILLISECONDS;
this.sleepTime = Integer.parseInt(sleepTimeWithUnit.substring(0, sleepTimeWithUnit.indexOf("ms")).trim());
} else if (sleepTimeWithUnit.endsWith("s")) {
this.timeUnit = TimeUnit.SECONDS;
this.sleepTime = Integer.parseInt(sleepTimeWithUnit.substring(0, sleepTimeWithUnit.indexOf('s')).trim());
} else {
this.timeUnit = TimeUnit.MILLISECONDS;
this.sleepTime = Integer.parseInt(sleepTimeWithUnit);
}
}
}
public int getSleepTime() {
return sleepTime;
}
public TimeUnit getTimeUnit() {
return timeUnit;
}
}