1   package com.atlassian.pageobjects.elements.query;
2   
3   import org.hamcrest.StringDescription;
4   
5   import static com.google.common.base.Preconditions.checkArgument;
6   import static com.google.common.base.Preconditions.checkNotNull;
7   
8   /**
9    * Abstract implementation of the {@link PollingQuery} interface.
10   *
11   */
12  public class AbstractPollingQuery implements PollingQuery
13  {
14      protected final long interval;
15      protected final long defaultTimeout;
16  
17      protected AbstractPollingQuery(long interval, long defaultTimeout)
18      {
19          checkArgument(interval > 0, new StringDescription().appendText("interval is ").appendValue(interval)
20                  .appendText(" should be > 0").toString());
21          checkArgument(defaultTimeout > 0, new StringDescription().appendText("defaultTimeout is ").appendValue(defaultTimeout)
22                  .appendText(" should be > 0").toString());
23          checkArgument(defaultTimeout > interval, new StringDescription().appendText("defaultTimeout is ").appendValue(defaultTimeout)
24                  .appendText("interval is ").appendValue(interval).appendText(" defaultTimeout should be > interval").toString());
25          this.interval = interval;
26          this.defaultTimeout = defaultTimeout;
27      }
28  
29      protected AbstractPollingQuery(PollingQuery other)
30      {
31          this(checkNotNull(other, "other").interval(), other.defaultTimeout());
32      }
33  
34      public long interval()
35      {
36          return interval;
37      }
38  
39      public long defaultTimeout()
40      {
41          return defaultTimeout;
42      }
43  }