View Javadoc

1   package com.atlassian.webdriver.jira;
2   
3   import com.atlassian.pageobjects.PageBinder;
4   import com.atlassian.pageobjects.binder.PostInjectionProcessor;
5   import com.atlassian.pageobjects.util.InjectUtils;
6   import com.atlassian.webdriver.jira.component.ClickableLink;
7   import com.atlassian.webdriver.jira.component.WebDriverLink;
8   import org.openqa.selenium.By;
9   
10  import javax.inject.Inject;
11  import java.lang.reflect.Field;
12  
13  import static com.atlassian.pageobjects.util.InjectUtils.forEachFieldWithAnnotation;
14  
15  /**
16   *
17   */
18  public class ClickableLinkPostInjectionProcessor implements PostInjectionProcessor
19  {
20      @Inject
21      PageBinder pageBinder;
22  
23      public <T> T process(T pageObject)
24      {
25          injectWebLinks(pageObject);
26          return pageObject;
27      }
28  
29      private void injectWebLinks(final Object instance)
30      {
31          forEachFieldWithAnnotation(instance, ClickableLink.class, new InjectUtils.FieldVisitor<ClickableLink>()
32          {
33              public void visit(Field field, ClickableLink annotation)
34              {
35                  WebDriverLink link = createLink(annotation);
36                  try
37                  {
38                      field.setAccessible(true);
39                      field.set(instance, link);
40                  }
41                  catch (IllegalAccessException e)
42                  {
43                      throw new RuntimeException(e);
44                  }
45              }
46          });
47      }
48  
49      private WebDriverLink createLink(ClickableLink clickableLink)
50      {
51          By by;
52          if (clickableLink.className().length() > 0)
53          {
54              by = By.className(clickableLink.className());
55          }
56          else if (clickableLink.id().length() > 0)
57          {
58              by = By.id(clickableLink.id());
59          }
60          else if (clickableLink.linkText().length() > 0)
61          {
62              by = By.linkText(clickableLink.linkText());
63          }
64          else if (clickableLink.partialLinkText().length() > 0)
65          {
66              by = By.partialLinkText(clickableLink.partialLinkText());
67          }
68          else
69          {
70              throw new IllegalArgumentException("No selector found");
71          }
72  
73          return pageBinder.bind(WebDriverLink.class, by, clickableLink.nextPage());
74      }
75  }