Skip to content

Commit 8467893

Browse files
Merge pull request #559 from TikhomirovSergey/master
EventFiring objects. The addition to event firing WebDriver
2 parents 5352b84 + 699c2ed commit 8467893

File tree

5 files changed

+274
-46
lines changed

5 files changed

+274
-46
lines changed

src/main/java/io/appium/java_client/events/DefaultAspect.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package io.appium.java_client.events;
1818

19+
import static io.appium.java_client.events.DefaultBeanConfiguration.COMPONENT_BEAN;
1920

2021
import com.google.common.collect.ImmutableList;
2122

@@ -96,15 +97,15 @@ class DefaultAspect {
9697
+ "execution(* io.appium.java_client.FindsByAccessibilityId.*(..)) || "
9798
+ "execution(* io.appium.java_client.FindsByAndroidUIAutomator.*(..)) || "
9899
+ "execution(* io.appium.java_client.FindsByIosUIAutomation.*(..)) || "
100+
+ "execution(* io.appium.java_client.FindsByWindowsAutomation.*(..)) || "
101+
+ "execution(* io.appium.java_client.FindsByIosNSPredicate.*(..)) || "
99102
+ "execution(* org.openqa.selenium.internal.FindsByClassName.*(..)) || "
100103
+ "execution(* org.openqa.selenium.internal.FindsByCssSelector.*(..)) || "
101104
+ "execution(* org.openqa.selenium.internal.FindsById.*(..)) || "
102105
+ "execution(* org.openqa.selenium.internal.FindsByLinkText.*(..)) || "
103106
+ "execution(* org.openqa.selenium.internal.FindsByName.*(..)) || "
104107
+ "execution(* org.openqa.selenium.internal.FindsByTagName.*(..)) || "
105108
+ "execution(* org.openqa.selenium.internal.FindsByXPath.*(..)) || "
106-
+ "execution(* io.appium.java_client.FindsByFluentSelector.*(..)) || "
107-
+ "execution(* io.appium.java_client.FindsByWindowsAutomation.*(..)) || "
108109
+ "execution(* org.openqa.selenium.WebDriver.Window.*(..)) || "
109110
+ "execution(* io.appium.java_client.android.AndroidElement.*(..)) || "
110111
+ "execution(* io.appium.java_client.ios.IOSElement.*(..)) || "
@@ -155,7 +156,7 @@ private Object transformToListenable(Object toBeTransformed) {
155156

156157
Object result = toBeTransformed;
157158
if (getClassForProxy(toBeTransformed.getClass()) != null) {
158-
result = context.getBean(DefaultBeanConfiguration.COMPONENT_BEAN, toBeTransformed);
159+
result = context.getBean(COMPONENT_BEAN, toBeTransformed);
159160
}
160161
return result;
161162
}
@@ -167,7 +168,7 @@ private List<Object> returnProxyList(List<Object> originalList) throws Exception
167168
if (getClassForProxy(o.getClass()) == null) {
168169
proxyList.add(o);
169170
} else {
170-
proxyList.add(context.getBean(DefaultBeanConfiguration.COMPONENT_BEAN, o));
171+
proxyList.add(context.getBean(COMPONENT_BEAN, o));
171172
}
172173
}
173174
return proxyList;
@@ -254,12 +255,12 @@ public void afterNavigateRefresh(JoinPoint joinPoint) throws Throwable {
254255
}
255256

256257
@SuppressWarnings("unchecked")
257-
private <T extends Object> T castArgument(JoinPoint joinPoint, int argIndex) {
258+
private <T> T castArgument(JoinPoint joinPoint, int argIndex) {
258259
return (T) joinPoint.getArgs()[argIndex];
259260
}
260261

261262
@SuppressWarnings("unchecked")
262-
private <T extends Object> T castTarget(JoinPoint joinPoint) {
263+
private <T> T castTarget(JoinPoint joinPoint) {
263264
return (T) joinPoint.getTarget();
264265
}
265266

src/main/java/io/appium/java_client/events/DefaultBeanConfiguration.java

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -31,35 +31,34 @@
3131
@Configuration
3232
@EnableAspectJAutoProxy(proxyTargetClass = true)
3333
class DefaultBeanConfiguration {
34-
34+
public static final String LISTENABLE_OBJECT = "object";
3535
public static final String COMPONENT_BEAN = "component";
36-
public static final String WEB_DRIVER_BEAN = "webdriver";
3736

38-
private final List<Listener> listeners = new ArrayList<>();
39-
private WebDriver driver;
40-
private AbstractApplicationContext context;
37+
protected final List<Listener> listeners = new ArrayList<>();
38+
protected WebDriver driver;
39+
protected AbstractApplicationContext context;
4140

4241
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
43-
@Bean(name = WEB_DRIVER_BEAN)
44-
public <T extends WebDriver> T getListenableWebdriver(T driver, List<Listener> listeners,
42+
@Bean(name = LISTENABLE_OBJECT)
43+
public <T> T init(T t, WebDriver driver, List<Listener> listeners,
4544
AbstractApplicationContext context) {
4645
this.driver = driver;
4746
this.listeners.addAll(listeners);
4847
this.context = context;
49-
return driver;
48+
return t;
49+
}
50+
51+
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
52+
@Bean(name = COMPONENT_BEAN)
53+
public <T> T getComponent(T t) {
54+
return t;
5055
}
5156

5257
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
53-
@Bean(name = "webdriverAspect")
58+
@Bean(name = "defaultAspect")
5459
public DefaultAspect getAspect() {
5560
DefaultAspect aspect = new DefaultAspect(context, driver);
5661
aspect.add(listeners);
5762
return aspect;
5863
}
59-
60-
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
61-
@Bean(name = COMPONENT_BEAN)
62-
public Object getComponent(Object component) {
63-
return component;
64-
}
6564
}
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
package io.appium.java_client.events;
2+
3+
4+
import io.appium.java_client.events.api.Listener;
5+
import org.openqa.selenium.WebDriver;
6+
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
7+
import org.springframework.context.support.AbstractApplicationContext;
8+
9+
import java.util.ArrayList;
10+
import java.util.Arrays;
11+
import java.util.Collection;
12+
import java.util.Collections;
13+
import java.util.List;
14+
import java.util.ServiceLoader;
15+
16+
public class EventFiringObjectFactory {
17+
18+
/**
19+
* This method makes an event firing object
20+
*
21+
* @param t an original {@link Object} that is
22+
* supposed to be listenable
23+
* @param driver an instance of {@link org.openqa.selenium.WebDriver}
24+
* @param listeners is a collection of {@link io.appium.java_client.events.api.Listener} that
25+
* is supposed to be used for the event firing
26+
* @param <T> T
27+
* @return an {@link Object} that fires events
28+
*/
29+
@SuppressWarnings("unchecked")
30+
public static <T> T getEventFiringObject(T t, WebDriver driver, Collection<Listener> listeners) {
31+
final List<Listener> listenerList = new ArrayList<>();
32+
33+
for (Listener listener : ServiceLoader.load(
34+
Listener.class)) {
35+
listenerList.add(listener);
36+
}
37+
38+
listeners.stream().filter(listener -> !listenerList.contains(listener)).forEach(listenerList::add);
39+
40+
AbstractApplicationContext context = new AnnotationConfigApplicationContext(
41+
DefaultBeanConfiguration.class);
42+
return (T) context.getBean(
43+
DefaultBeanConfiguration.LISTENABLE_OBJECT, t, driver, listenerList, context);
44+
}
45+
46+
/**
47+
* This method makes an event firing object
48+
*
49+
* @param t an original {@link Object} that is
50+
* supposed to be listenable
51+
* @param driver an instance of {@link org.openqa.selenium.WebDriver}
52+
* @param <T> T
53+
* @return an {@link Object} that fires events
54+
*/
55+
public static <T> T getEventFiringObject(T t, WebDriver driver) {
56+
return getEventFiringObject(t, driver, Collections.<Listener>emptyList());
57+
}
58+
59+
/**
60+
* This method makes an event firing object
61+
*
62+
* @param t an original {@link Object} that is
63+
* supposed to be listenable
64+
* @param driver an instance of {@link org.openqa.selenium.WebDriver}
65+
* @param listeners is an array of {@link io.appium.java_client.events.api.Listener} that
66+
* is supposed to be used for the event firing
67+
*
68+
* @param <T> T
69+
* @return an instance of {@link org.openqa.selenium.WebDriver} that fires events
70+
*/
71+
public static <T> T getEventFiringObject(T t, WebDriver driver, Listener ... listeners) {
72+
return getEventFiringObject(t, driver, Arrays.asList(listeners));
73+
}
74+
}

src/main/java/io/appium/java_client/events/EventFiringWebDriverFactory.java

Lines changed: 4 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,12 @@
1616

1717
package io.appium.java_client.events;
1818

19+
import static io.appium.java_client.events.EventFiringObjectFactory.getEventFiringObject;
1920

2021
import io.appium.java_client.events.api.Listener;
2122
import org.openqa.selenium.WebDriver;
22-
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
23-
import org.springframework.context.support.AbstractApplicationContext;
2423

25-
import java.util.ArrayList;
26-
import java.util.Arrays;
2724
import java.util.Collection;
28-
import java.util.Collections;
29-
import java.util.Iterator;
30-
import java.util.List;
31-
import java.util.ServiceLoader;
3225

3326
public class EventFiringWebDriverFactory {
3427

@@ -41,7 +34,7 @@ public class EventFiringWebDriverFactory {
4134
* @return an instance of {@link org.openqa.selenium.WebDriver} that fires events
4235
*/
4336
public static <T extends WebDriver> T getEventFiringWebDriver(T driver) {
44-
return getEventFiringWebDriver(driver, Collections.<Listener>emptyList());
37+
return getEventFiringObject(driver, driver);
4538
}
4639

4740
/**
@@ -55,7 +48,7 @@ public static <T extends WebDriver> T getEventFiringWebDriver(T driver) {
5548
* @return an instance of {@link org.openqa.selenium.WebDriver} that fires events
5649
*/
5750
public static <T extends WebDriver> T getEventFiringWebDriver(T driver, Listener ... listeners) {
58-
return getEventFiringWebDriver(driver, Arrays.asList(listeners));
51+
return getEventFiringObject(driver, driver, listeners);
5952
}
6053

6154
/**
@@ -68,21 +61,7 @@ public static <T extends WebDriver> T getEventFiringWebDriver(T driver, Listener
6861
* @param <T> T
6962
* @return an instance of {@link org.openqa.selenium.WebDriver} that fires events
7063
*/
71-
@SuppressWarnings("unchecked")
7264
public static <T extends WebDriver> T getEventFiringWebDriver(T driver, Collection<Listener> listeners) {
73-
List<Listener> listenerList = new ArrayList<>();
74-
Iterator<Listener> providers = ServiceLoader.load(
75-
Listener.class).iterator();
76-
77-
while (providers.hasNext()) {
78-
listenerList.add(providers.next());
79-
}
80-
81-
listenerList.addAll(listeners);
82-
83-
AbstractApplicationContext context = new AnnotationConfigApplicationContext(
84-
DefaultBeanConfiguration.class);
85-
return (T) context.getBean(
86-
DefaultBeanConfiguration.WEB_DRIVER_BEAN, driver, listenerList, context);
65+
return getEventFiringObject(driver, driver, listeners);
8766
}
8867
}

0 commit comments

Comments
 (0)