1   package com.atlassian.pageobjects.elements.util;
2   
3   import java.util.concurrent.TimeUnit;
4   
5   /**
6    * Utility for quick timeout specification.
7    *
8    */
9   public final class Timeout
10  {
11      private Timeout()
12      {
13          throw new AssertionError("Don't hack with me");
14      }
15  
16      public static TimeoutBuilder of(long count)
17      {
18          return new TimeoutBuilder(count);
19      }
20  
21      public static WaitTimeBuilder waitFor(long count)
22      {
23          return new WaitTimeBuilder(count);
24      }
25  
26      public static final class TimeoutBuilder
27      {
28          private final long count;
29  
30  
31          TimeoutBuilder(final long count)
32          {
33              assert count >= 0;
34              this.count = count;
35          }
36  
37          public long milliseconds()
38          {
39              return count;
40          }
41  
42          public long seconds()
43          {
44              return TimeUnit.SECONDS.toMillis(count);
45          }
46      }
47  
48      public static final class WaitTimeBuilder
49      {
50          private final TimeoutBuilder builder;
51  
52  
53          WaitTimeBuilder(long waitTime)
54          {
55              this.builder = new TimeoutBuilder(waitTime);
56          }
57  
58          public void milliseconds()
59          {
60              waitFor(builder.milliseconds());
61          }
62  
63          public void seconds()
64          {
65              waitFor(builder.seconds());
66          }
67  
68          private void waitFor(long millis)
69          {
70              try
71              {
72                  TimeUnit.MILLISECONDS.sleep(millis);
73              }
74              catch (InterruptedException e)
75              {
76                  throw new RuntimeException(e);
77              }
78          }
79      }
80  }