View Javadoc
1   /**
2    * Copyright 2010-2014 The Kuali Foundation
3    *
4    * Licensed under the Educational Community License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    * http://www.opensource.org/licenses/ecl2.php
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  package org.kuali.common.util.wait;
17  
18  import static org.kuali.common.util.base.Precondition.checkMin;
19  
20  import org.kuali.common.util.FormatUtils;
21  
22  public final class WaitContext {
23  
24  	private final long timeoutMillis;
25  	private final long sleepMillis;
26  	private final long initialPauseMillis;
27  
28  	public static WaitContext create(long timeoutMillis) {
29  		return builder(timeoutMillis).build();
30  	}
31  
32  	public static Builder builder(long timeoutMillis) {
33  		return new Builder(timeoutMillis);
34  	}
35  
36  	public static class Builder implements org.apache.commons.lang3.builder.Builder<WaitContext> {
37  
38  		// Required
39  		private final long timeoutMillis;
40  
41  		// Optional
42  		private long sleepMillis = FormatUtils.getMillis("1s"); // 1 second
43  		private long initialPauseMillis = 0;
44  
45  		public Builder(long timeoutMillis) {
46  			this.timeoutMillis = timeoutMillis;
47  		}
48  
49  		public Builder initialPauseMillis(long initialPauseMillis) {
50  			this.initialPauseMillis = initialPauseMillis;
51  			return this;
52  		}
53  
54  		public Builder sleepMillis(long sleepMillis) {
55  			this.sleepMillis = sleepMillis;
56  			return this;
57  		}
58  
59  		@Override
60  		public WaitContext build() {
61  			WaitContext instance = new WaitContext(this);
62  			validate(instance);
63  			return instance;
64  		}
65  
66  		private static void validate(WaitContext instance) {
67  			checkMin(instance.timeoutMillis, 0, "timeoutMillis");
68  			checkMin(instance.sleepMillis, 0, "sleepMillis");
69  			checkMin(instance.initialPauseMillis, 0, "initialPauseMillis");
70  		}
71  
72  	}
73  
74  	private WaitContext(Builder builder) {
75  		this.timeoutMillis = builder.timeoutMillis;
76  		this.sleepMillis = builder.sleepMillis;
77  		this.initialPauseMillis = builder.initialPauseMillis;
78  	}
79  
80  	public long getTimeoutMillis() {
81  		return timeoutMillis;
82  	}
83  
84  	public long getSleepMillis() {
85  		return sleepMillis;
86  	}
87  
88  	public long getInitialPauseMillis() {
89  		return initialPauseMillis;
90  	}
91  
92  }