package org.springframework.data.simpledb.repository.util;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public abstract class IncrementalWait<T> {
private static final Logger LOGGER = LoggerFactory.getLogger(IncrementalWait.class);
public static final int MAX_RETRIES = 50;
public static final int INCREEMENT_WAIT_MILLIS = 500;
public T execute() {
return null;
}
public boolean condition(T t) {
return true;
}
public boolean condition() {
return false;
}
public void untilResponseNull() {
T ret = execute();
int retries = 0;
while(ret != null && retries < MAX_RETRIES) {
ret = execute();
retries++;
try {
Thread.sleep(INCREEMENT_WAIT_MILLIS);
} catch(InterruptedException e) {
e.printStackTrace();
}
}
LOGGER.debug("Retries: {}", retries);
}
public void untilResponseNotNull() {
T ret = null;
int retries = 0;
while(ret == null && retries < MAX_RETRIES) {
ret = execute();
retries++;
try {
Thread.sleep(INCREEMENT_WAIT_MILLIS);
} catch(InterruptedException e) {
e.printStackTrace();
}
}
}
public void untilResponseSatisfiesCondition() {
T ret = null;
int retries = 0;
while((ret == null || !condition(ret)) && retries < MAX_RETRIES) {
ret = execute();
retries++;
try {
Thread.sleep(INCREEMENT_WAIT_MILLIS);
} catch(InterruptedException e) {
e.printStackTrace();
}
}
}
public void untilCondition() {
int retries = 0;
while(condition() && retries < MAX_RETRIES) {
retries++;
try {
Thread.sleep(INCREEMENT_WAIT_MILLIS);
} catch(InterruptedException e) {
e.printStackTrace();
}
}
}
}