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
16
17
18
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 }