001package org.kuali.common.util.wait;
002
003import org.kuali.common.util.Assert;
004import org.kuali.common.util.FormatUtils;
005
006public final class WaitContext {
007
008        private final long timeoutMillis;
009        private final long sleepMillis;
010        private final long initialPauseMillis;
011
012        public static class Builder {
013
014                // Required
015                private final long timeoutMillis;
016
017                // Optional
018                private long sleepMillis = FormatUtils.getMillis("1s"); // 1 second
019                private long initialPauseMillis = 0;
020
021                public Builder(long timeoutMillis) {
022                        this.timeoutMillis = timeoutMillis;
023                }
024
025                public Builder initialPauseMillis(long initialPauseMillis) {
026                        this.initialPauseMillis = initialPauseMillis;
027                        return this;
028                }
029
030                public Builder sleepMillis(long sleepMillis) {
031                        this.sleepMillis = sleepMillis;
032                        return this;
033                }
034
035                public WaitContext build() {
036                        Assert.noNegatives(timeoutMillis, sleepMillis, initialPauseMillis);
037                        return new WaitContext(this);
038                }
039
040        }
041
042        private WaitContext(Builder builder) {
043                this.timeoutMillis = builder.timeoutMillis;
044                this.sleepMillis = builder.sleepMillis;
045                this.initialPauseMillis = builder.initialPauseMillis;
046        }
047
048        public long getTimeoutMillis() {
049                return timeoutMillis;
050        }
051
052        public long getSleepMillis() {
053                return sleepMillis;
054        }
055
056        public long getInitialPauseMillis() {
057                return initialPauseMillis;
058        }
059
060}