1 package org.kuali.common.util.wait; 2 3 import org.apache.commons.lang3.StringUtils; 4 import org.kuali.common.util.Assert; 5 import org.kuali.common.util.FormatUtils; 6 import org.kuali.common.util.ThreadUtils; 7 import org.kuali.common.util.condition.Condition; 8 import org.slf4j.Logger; 9 import org.slf4j.LoggerFactory; 10 11 public class DefaultWaitService implements WaitService { 12 13 private static final Logger logger = LoggerFactory.getLogger(DefaultWaitService.class); 14 15 @Override 16 public WaitResult wait(WaitContext context, Condition condition) { 17 long start = System.currentTimeMillis(); 18 long timeout = start + context.getTimeoutMillis(); 19 ThreadUtils.sleep(context.getInitialPauseMillis()); 20 while (!condition.isTrue()) { 21 long now = System.currentTimeMillis(); 22 Assert.isTrue(now <= timeout, "Timed out waiting"); 23 String elapsed = StringUtils.leftPad(FormatUtils.getTime(now - start), 7, " "); 24 String timeoutString = StringUtils.leftPad(FormatUtils.getTime(timeout - now), 7, " "); 25 logger.info("[elapsed: {} timeout: {}]", elapsed, timeoutString); 26 ThreadUtils.sleep(context.getSleepMillis()); 27 } 28 return new WaitResult.Builder(start, System.currentTimeMillis()).build(); 29 } 30 31 }