View Javadoc

1   package com.atlassian.pageobjects.binder;
2   
3   import com.atlassian.pageobjects.browser.Browser;
4   import com.atlassian.pageobjects.browser.BrowserAware;
5   import com.google.inject.AbstractModule;
6   import com.google.inject.Binding;
7   import com.google.inject.Injector;
8   import com.google.inject.Key;
9   import com.google.inject.Provider;
10  
11  import javax.inject.Inject;
12  import java.util.Map;
13  
14  /**
15   * Adds the browser associated with the product to the context, via
16   * {@link com.atlassian.pageobjects.browser.BrowserAware}.
17   *
18   * @since 2.1
19   */
20  public class BrowserModule extends AbstractModule
21  {
22      @Override
23      protected void configure()
24      {
25          bind(BrowserAware.class).toProvider(BrowserAwareProvider.class);
26          bind(Browser.class).toProvider(BrowserProvider.class);
27      }
28  
29      protected static class AbstractBrowserAwareFinder
30      {
31          protected final BrowserAware browserAware;
32  
33  
34          protected AbstractBrowserAwareFinder(Injector injector)
35          {
36              this.browserAware = find(injector);
37          }
38  
39          private BrowserAware find(Injector injector)
40          {
41              for (Map.Entry<Key<?>,Binding<?>> entry : injector.getBindings().entrySet())
42              {
43                  if (entry.getValue().getProvider().get() instanceof BrowserAware)
44                  {
45                      return (BrowserAware) entry.getValue().getProvider().get();
46                  }
47              }
48              throw new IllegalStateException("BrowserAware not found in this injector");
49          }
50  
51      }
52  
53      public static class BrowserAwareProvider extends AbstractBrowserAwareFinder implements Provider<BrowserAware>
54      {
55          @Inject public BrowserAwareProvider(Injector injector)
56          {
57              super(injector);
58          }
59  
60          @Override
61          public BrowserAware get()
62          {
63              return browserAware;
64          }
65      }
66  
67      public static class BrowserProvider extends AbstractBrowserAwareFinder implements Provider<Browser>
68      {
69          @Inject public BrowserProvider(Injector injector)
70          {
71              super(injector);
72          }
73  
74          @Override
75          public Browser get()
76          {
77              return browserAware.getBrowser();
78          }
79      }
80  }