aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenri Sara <hesara@vaadin.com>2016-12-13 14:23:38 +0200
committerHenri Sara <hesara@vaadin.com>2016-12-13 14:23:38 +0200
commit5e09b462cc09caee832f7901bdf479c44208e1fb (patch)
treef7ee0b44c8aa85104a9c6e95051af311fe6fa385
parent6d1abeb9fc1103af0a04dfd79d56b0f883de6f72 (diff)
downloadvaadin-framework-5e09b462cc09caee832f7901bdf479c44208e1fb.tar.gz
vaadin-framework-5e09b462cc09caee832f7901bdf479c44208e1fb.zip
WIP: prototype of SimpleEventRouterfix_event_router_prototype
-rw-r--r--server/src/main/java/com/vaadin/data/Binder.java20
-rw-r--r--server/src/main/java/com/vaadin/data/StatusChangeListener.java11
-rw-r--r--server/src/main/java/com/vaadin/event/EventRouter.java139
-rw-r--r--server/src/main/java/com/vaadin/event/Listener.java29
-rw-r--r--server/src/main/java/com/vaadin/event/MethodEventSource.java184
-rw-r--r--server/src/main/java/com/vaadin/event/SimpleEventRouter.java52
-rw-r--r--server/src/main/java/com/vaadin/server/AbstractClientConnector.java94
-rw-r--r--server/src/main/java/com/vaadin/server/data/AbstractDataProvider.java41
-rw-r--r--server/src/main/java/com/vaadin/server/data/DataProviderListener.java9
-rw-r--r--server/src/test/java/com/vaadin/server/RemoveListenersDeprecatedTest.java7
-rw-r--r--server/src/test/java/com/vaadin/server/data/provider/DataProviderTestBase.java2
11 files changed, 177 insertions, 411 deletions
diff --git a/server/src/main/java/com/vaadin/data/Binder.java b/server/src/main/java/com/vaadin/data/Binder.java
index 41c07a4c08..e6c0424b5f 100644
--- a/server/src/main/java/com/vaadin/data/Binder.java
+++ b/server/src/main/java/com/vaadin/data/Binder.java
@@ -34,7 +34,7 @@ import com.vaadin.data.HasValue.ValueChangeEvent;
import com.vaadin.data.util.converter.Converter;
import com.vaadin.data.util.converter.StringToIntegerConverter;
import com.vaadin.data.util.converter.ValueContext;
-import com.vaadin.event.EventRouter;
+import com.vaadin.event.SimpleEventRouter;
import com.vaadin.server.ErrorMessage;
import com.vaadin.server.SerializableBiConsumer;
import com.vaadin.server.SerializableFunction;
@@ -957,7 +957,7 @@ public class Binder<BEAN> implements Serializable {
private final Map<HasValue<?>, ConverterDelegate<?>> initialConverters = new IdentityHashMap<>();
- private EventRouter eventRouter;
+ private SimpleEventRouter<StatusChangeEvent> eventRouter;
private Label statusLabel;
@@ -1373,11 +1373,10 @@ public class Binder<BEAN> implements Serializable {
*/
private List<ValidationResult> validateBean(BEAN bean) {
Objects.requireNonNull(bean, "bean cannot be null");
- List<ValidationResult> results = Collections
- .unmodifiableList(validators.stream()
- .map(validator -> validator.apply(bean,
- new ValueContext()))
- .collect(Collectors.toList()));
+ List<ValidationResult> results = Collections.unmodifiableList(validators
+ .stream()
+ .map(validator -> validator.apply(bean, new ValueContext()))
+ .collect(Collectors.toList()));
return results;
}
@@ -1494,8 +1493,7 @@ public class Binder<BEAN> implements Serializable {
* @return a registration for the listener
*/
public Registration addStatusChangeListener(StatusChangeListener listener) {
- return getEventRouter().addListener(StatusChangeEvent.class, listener,
- StatusChangeListener.class.getDeclaredMethods()[0]);
+ return getEventRouter().addListener(listener);
}
/**
@@ -1663,9 +1661,9 @@ public class Binder<BEAN> implements Serializable {
*
* @return the event router, not null
*/
- protected EventRouter getEventRouter() {
+ private SimpleEventRouter getEventRouter() {
if (eventRouter == null) {
- eventRouter = new EventRouter();
+ eventRouter = new SimpleEventRouter();
}
return eventRouter;
}
diff --git a/server/src/main/java/com/vaadin/data/StatusChangeListener.java b/server/src/main/java/com/vaadin/data/StatusChangeListener.java
index cb6afead24..40af2a046b 100644
--- a/server/src/main/java/com/vaadin/data/StatusChangeListener.java
+++ b/server/src/main/java/com/vaadin/data/StatusChangeListener.java
@@ -15,23 +15,24 @@
*/
package com.vaadin.data;
-import java.io.Serializable;
+import com.vaadin.event.Listener;
/**
* Listener interface for {@link StatusChangeEvent}s.
- *
+ *
* @see StatusChangeEvent
* @author Vaadin Ltd
*
*/
@FunctionalInterface
-public interface StatusChangeListener extends Serializable {
+public interface StatusChangeListener extends Listener<StatusChangeEvent> {
/**
* Notifies the listener about status change {@code event}.
- *
+ *
* @param event
* a status change event, not null
*/
- void statusChange(StatusChangeEvent event);
+ @Override
+ void onEvent(StatusChangeEvent event);
}
diff --git a/server/src/main/java/com/vaadin/event/EventRouter.java b/server/src/main/java/com/vaadin/event/EventRouter.java
index b07efb6c53..a9f9703bec 100644
--- a/server/src/main/java/com/vaadin/event/EventRouter.java
+++ b/server/src/main/java/com/vaadin/event/EventRouter.java
@@ -24,7 +24,6 @@ import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Objects;
-import java.util.logging.Logger;
import com.vaadin.server.ErrorEvent;
import com.vaadin.server.ErrorHandler;
@@ -39,19 +38,40 @@ import com.vaadin.shared.Registration;
* @since 3.0
*/
@SuppressWarnings("serial")
-public class EventRouter implements MethodEventSource {
+public class EventRouter {
/**
* List of registered listeners.
*/
private LinkedHashSet<ListenerMethod> listenerList = null;
- /*
- * Registers a new listener with the specified activation method to listen
- * events generated by this component. Don't add a JavaDoc comment here, we
- * use the default documentation from implemented interface.
+ /**
+ * <p>
+ * Registers a new event listener with the specified activation method to
+ * listen events generated by this component. If the activation method does
+ * not have any arguments the event object will not be passed to it when
+ * it's called.
+ * </p>
+ *
+ * <p>
+ * For more information on the inheritable event mechanism see the
+ * {@link com.vaadin.event com.vaadin.event package documentation}.
+ * </p>
+ *
+ * @param eventType
+ * the type of the listened event. Events of this type or its
+ * subclasses activate the listener.
+ * @param object
+ * the object instance who owns the activation method.
+ * @param method
+ * the activation method.
+ * @return a registration object for removing the listener
+ * @throws java.lang.IllegalArgumentException
+ * unless <code>method</code> has exactly one match in
+ * <code>object</code>
+ * @throws NullPointerException
+ * if {@code object} is {@code null}
*/
- @Override
public Registration addListener(Class<?> eventType, Object object,
Method method) {
Objects.requireNonNull(object, "Listener must not be null.");
@@ -64,30 +84,24 @@ public class EventRouter implements MethodEventSource {
return () -> listenerList.remove(listenerMethod);
}
- /*
- * Registers a new listener with the specified named activation method to
- * listen events generated by this component. Don't add a JavaDoc comment
- * here, we use the default documentation from implemented interface.
- */
- @Override
- public Registration addListener(Class<?> eventType, Object object,
- String methodName) {
- Objects.requireNonNull(object, "Listener must not be null.");
- if (listenerList == null) {
- listenerList = new LinkedHashSet<>();
- }
- ListenerMethod listenerMethod = new ListenerMethod(eventType, object,
- methodName);
- listenerList.add(listenerMethod);
- return () -> listenerList.remove(listenerMethod);
- }
-
- /*
- * Removes all registered listeners matching the given parameters. Don't add
- * a JavaDoc comment here, we use the default documentation from implemented
- * interface.
+ /**
+ * Removes all registered listeners matching the given parameters. Since
+ * this method receives the event type and the listener object as
+ * parameters, it will unregister all <code>object</code>'s methods that are
+ * registered to listen to events of type <code>eventType</code> generated
+ * by this component.
+ *
+ * <p>
+ * For more information on the inheritable event mechanism see the
+ * {@link com.vaadin.event com.vaadin.event package documentation}.
+ * </p>
+ *
+ * @param eventType
+ * the exact event type the <code>object</code> listens to.
+ * @param target
+ * the target object that has registered to listen to events of
+ * type <code>eventType</code> with one or more methods.
*/
- @Override
public void removeListener(Class<?> eventType, Object target) {
if (listenerList != null) {
final Iterator<ListenerMethod> i = listenerList.iterator();
@@ -101,12 +115,28 @@ public class EventRouter implements MethodEventSource {
}
}
- /*
- * Removes the event listener methods matching the given given paramaters.
- * Don't add a JavaDoc comment here, we use the default documentation from
- * implemented interface.
+ /**
+ * Removes one registered listener method. The given method owned by the
+ * given object will no longer be called when the specified events are
+ * generated by this component.
+ *
+ * <p>
+ * For more information on the inheritable event mechanism see the
+ * {@link com.vaadin.event com.vaadin.event package documentation}.
+ * </p>
+ *
+ * @param eventType
+ * the exact event type the <code>object</code> listens to.
+ * @param target
+ * the target object that has registered to listen to events of
+ * type eventType with one or more methods.
+ * @param method
+ * the method owned by the target that's registered to listen to
+ * events of type eventType.
+ * @deprecated use a {@link Registration} returned by
+ * {@link #addListener(Class, Object, Method)}
*/
- @Override
+ @Deprecated
public void removeListener(Class<?> eventType, Object target,
Method method) {
if (listenerList != null) {
@@ -121,41 +151,6 @@ public class EventRouter implements MethodEventSource {
}
}
- /*
- * Removes the event listener method matching the given given parameters.
- * Don't add a JavaDoc comment here, we use the default documentation from
- * implemented interface.
- */
- @Override
- public void removeListener(Class<?> eventType, Object target,
- String methodName) {
-
- // Find the correct method
- final Method[] methods = target.getClass().getMethods();
- Method method = null;
- for (int i = 0; i < methods.length; i++) {
- if (methods[i].getName().equals(methodName)) {
- method = methods[i];
- }
- }
- if (method == null) {
- throw new IllegalArgumentException();
- }
-
- // Remove the listeners
- if (listenerList != null) {
- final Iterator<ListenerMethod> i = listenerList.iterator();
- while (i.hasNext()) {
- final ListenerMethod lm = i.next();
- if (lm.matches(eventType, target, method)) {
- i.remove();
- return;
- }
- }
- }
-
- }
-
/**
* Removes all listeners from event router.
*/
@@ -254,8 +249,4 @@ public class EventRouter implements MethodEventSource {
return listeners;
}
- private Logger getLogger() {
- return Logger.getLogger(EventRouter.class.getName());
- }
-
}
diff --git a/server/src/main/java/com/vaadin/event/Listener.java b/server/src/main/java/com/vaadin/event/Listener.java
new file mode 100644
index 0000000000..b7da88d559
--- /dev/null
+++ b/server/src/main/java/com/vaadin/event/Listener.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2000-2016 Vaadin Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.vaadin.event;
+
+import java.io.Serializable;
+
+/**
+ * Generic Listener interface.
+ *
+ * @author Vaadin Ltd.
+ * @since 8.0
+ */
+@FunctionalInterface
+public interface Listener<E extends Serializable> extends Serializable {
+ public void onEvent(E event);
+} \ No newline at end of file
diff --git a/server/src/main/java/com/vaadin/event/MethodEventSource.java b/server/src/main/java/com/vaadin/event/MethodEventSource.java
deleted file mode 100644
index e59ccfd4d4..0000000000
--- a/server/src/main/java/com/vaadin/event/MethodEventSource.java
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
- * Copyright 2000-2016 Vaadin Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-package com.vaadin.event;
-
-import java.io.Serializable;
-import java.lang.reflect.Method;
-
-import com.vaadin.shared.Registration;
-
-/**
- * <p>
- * Interface for classes supporting registration of methods as event receivers.
- * </p>
- *
- * <p>
- * For more information on the inheritable event mechanism see the
- * {@link com.vaadin.event com.vaadin.event package documentation}.
- * </p>
- *
- * @author Vaadin Ltd.
- * @since 3.0
- */
-public interface MethodEventSource extends Serializable {
-
- /**
- * <p>
- * Registers a new event listener with the specified activation method to
- * listen events generated by this component. If the activation method does
- * not have any arguments the event object will not be passed to it when
- * it's called.
- * </p>
- *
- * <p>
- * For more information on the inheritable event mechanism see the
- * {@link com.vaadin.event com.vaadin.event package documentation}.
- * </p>
- *
- * @param eventType
- * the type of the listened event. Events of this type or its
- * subclasses activate the listener.
- * @param object
- * the object instance who owns the activation method.
- * @param method
- * the activation method.
- * @return a registration object for removing the listener
- * @throws java.lang.IllegalArgumentException
- * unless <code>method</code> has exactly one match in
- * <code>object</code>
- * @throws NullPointerException
- * if {@code object} is {@code null}
- */
- public Registration addListener(Class<?> eventType, Object object,
- Method method);
-
- /**
- * <p>
- * Registers a new listener with the specified activation method to listen
- * events generated by this component. If the activation method does not
- * have any arguments the event object will not be passed to it when it's
- * called.
- * </p>
- *
- * <p>
- * This version of <code>addListener</code> gets the name of the activation
- * method as a parameter. The actual method is reflected from
- * <code>object</code>, and unless exactly one match is found,
- * <code>java.lang.IllegalArgumentException</code> is thrown.
- * </p>
- *
- * <p>
- * For more information on the inheritable event mechanism see the
- * {@link com.vaadin.event com.vaadin.event package documentation}.
- * </p>
- *
- * @param eventType
- * the type of the listened event. Events of this type or its
- * subclasses activate the listener.
- * @param object
- * the object instance who owns the activation method.
- * @param methodName
- * the name of the activation method.
- * @return a registration object for removing the listener
- * @throws java.lang.IllegalArgumentException
- * unless <code>method</code> has exactly one match in
- * <code>object</code>
- * @throws NullPointerException
- * if {@code object} is {@code null}
- */
- public Registration addListener(Class<?> eventType, Object object,
- String methodName);
-
- /**
- * Removes all registered listeners matching the given parameters. Since
- * this method receives the event type and the listener object as
- * parameters, it will unregister all <code>object</code>'s methods that are
- * registered to listen to events of type <code>eventType</code> generated
- * by this component.
- *
- * <p>
- * For more information on the inheritable event mechanism see the
- * {@link com.vaadin.event com.vaadin.event package documentation}.
- * </p>
- *
- * @param eventType
- * the exact event type the <code>object</code> listens to.
- * @param target
- * the target object that has registered to listen to events of
- * type <code>eventType</code> with one or more methods.
- */
- public void removeListener(Class<?> eventType, Object target);
-
- /**
- * Removes one registered listener method. The given method owned by the
- * given object will no longer be called when the specified events are
- * generated by this component.
- *
- * <p>
- * For more information on the inheritable event mechanism see the
- * {@link com.vaadin.event com.vaadin.event package documentation}.
- * </p>
- *
- * @param eventType
- * the exact event type the <code>object</code> listens to.
- * @param target
- * the target object that has registered to listen to events of
- * type eventType with one or more methods.
- * @param method
- * the method owned by the target that's registered to listen to
- * events of type eventType.
- * @deprecated use a {@link Registration} returned by
- * {@link #addListener(Class, Object, Method)}
- */
- @Deprecated
- public void removeListener(Class<?> eventType, Object target,
- Method method);
-
- /**
- * <p>
- * Removes one registered listener method. The given method owned by the
- * given object will no longer be called when the specified events are
- * generated by this component.
- * </p>
- *
- * <p>
- * This version of <code>removeListener</code> gets the name of the
- * activation method as a parameter. The actual method is reflected from the
- * target, and unless exactly one match is found,
- * <code>java.lang.IllegalArgumentException</code> is thrown.
- * </p>
- *
- * <p>
- * For more information on the inheritable event mechanism see the
- * {@link com.vaadin.event com.vaadin.event package documentation}.
- * </p>
- *
- * @param eventType
- * the exact event type the <code>object</code> listens to.
- * @param target
- * the target object that has registered to listen to events of
- * type <code>eventType</code> with one or more methods.
- * @param methodName
- * the name of the method owned by <code>target</code> that's
- * registered to listen to events of type <code>eventType</code>.
- * @deprecated use a {@link Registration} returned by
- * {@link #addListener(Class, Object, String)}
- */
- @Deprecated
- public void removeListener(Class<?> eventType, Object target,
- String methodName);
-}
diff --git a/server/src/main/java/com/vaadin/event/SimpleEventRouter.java b/server/src/main/java/com/vaadin/event/SimpleEventRouter.java
new file mode 100644
index 0000000000..4c2bcae960
--- /dev/null
+++ b/server/src/main/java/com/vaadin/event/SimpleEventRouter.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2000-2016 Vaadin Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package com.vaadin.event;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.LinkedHashSet;
+
+import com.vaadin.shared.Registration;
+
+public class SimpleEventRouter<E extends Serializable> {
+
+ private Collection<Listener<E>> listeners = null;
+
+ public Registration addListener(Listener<E> listener) {
+ if (listeners == null) {
+ listeners = new LinkedHashSet<>();
+ }
+ listeners.add(listener);
+ return () -> listeners.remove(listener);
+ }
+
+ public void fireEvent(E event) {
+ if (listeners == null) {
+ return;
+ }
+ for (Listener<E> listener : new ArrayList<>(listeners)) {
+ // very few callers have been doing error handling here, so not
+ // complicating the basic event list with it
+ listener.onEvent(event);
+ }
+ }
+
+ public boolean hasListeners() {
+ return listeners != null && !listeners.isEmpty();
+ }
+}
diff --git a/server/src/main/java/com/vaadin/server/AbstractClientConnector.java b/server/src/main/java/com/vaadin/server/AbstractClientConnector.java
index 5c905e2f84..5ba74070f2 100644
--- a/server/src/main/java/com/vaadin/server/AbstractClientConnector.java
+++ b/server/src/main/java/com/vaadin/server/AbstractClientConnector.java
@@ -34,7 +34,6 @@ import java.util.concurrent.ConcurrentHashMap;
import java.util.logging.Logger;
import com.vaadin.event.EventRouter;
-import com.vaadin.event.MethodEventSource;
import com.vaadin.shared.Registration;
import com.vaadin.shared.communication.ClientRpc;
import com.vaadin.shared.communication.ServerRpc;
@@ -56,8 +55,7 @@ import elemental.json.JsonValue;
* @author Vaadin Ltd
* @since 7.0.0
*/
-public abstract class AbstractClientConnector
- implements ClientConnector, MethodEventSource {
+public abstract class AbstractClientConnector implements ClientConnector {
/**
* A map from client to server RPC interface class name to the RPC call
* manager that handles incoming RPC calls for that interface.
@@ -842,7 +840,6 @@ public abstract class AbstractClientConnector
* the activation method.
* @return a registration object for removing the listener
*/
- @Override
public Registration addListener(Class<?> eventType, Object target,
Method method) {
if (eventRouter == null) {
@@ -852,54 +849,6 @@ public abstract class AbstractClientConnector
}
/**
- * <p>
- * Convenience method for registering a new listener with the specified
- * activation method to listen events generated by this component. If the
- * activation method does not have any arguments the event object will not
- * be passed to it when it's called.
- * </p>
- *
- * <p>
- * This version of <code>addListener</code> gets the name of the activation
- * method as a parameter. The actual method is reflected from
- * <code>object</code>, and unless exactly one match is found,
- * <code>java.lang.IllegalArgumentException</code> is thrown.
- * </p>
- *
- * <p>
- * For more information on the inheritable event mechanism see the
- * {@link com.vaadin.event com.vaadin.event package documentation}.
- * </p>
- *
- * <p>
- * Note: Using this method is discouraged because it cannot be checked
- * during compilation. Use {@link #addListener(Class, Object, Method)} or
- * {@link #addListener(com.vaadin.ui.Component.Listener)} instead.
- * </p>
- *
- * @param eventType
- * the type of the listened event. Events of this type or its
- * subclasses activate the listener.
- * @param target
- * the object instance who owns the activation method.
- * @param methodName
- * the name of the activation method.
- * @return a registration object for removing the listener
- * @deprecated As of 7.0. This method should be avoided. Use
- * {@link #addListener(Class, Object, Method)} or
- * {@link #addListener(String, Class, Object, Method)} instead.
- */
- @Override
- @Deprecated
- public Registration addListener(Class<?> eventType, Object target,
- String methodName) {
- if (eventRouter == null) {
- eventRouter = new EventRouter();
- }
- return eventRouter.addListener(eventType, target, methodName);
- }
-
- /**
* Removes all registered listeners matching the given parameters. Since
* this method receives the event type and the listener object as
* parameters, it will unregister all <code>object</code>'s methods that are
@@ -917,7 +866,6 @@ public abstract class AbstractClientConnector
* the target object that has registered to listen to events of
* type <code>eventType</code> with one or more methods.
*/
- @Override
public void removeListener(Class<?> eventType, Object target) {
if (eventRouter != null) {
eventRouter.removeListener(eventType, target);
@@ -946,7 +894,6 @@ public abstract class AbstractClientConnector
* {@link #addListener(Class, Object, Method)} to remove a
* listener
*/
- @Override
@Deprecated
public void removeListener(Class<?> eventType, Object target,
Method method) {
@@ -956,45 +903,6 @@ public abstract class AbstractClientConnector
}
/**
- * <p>
- * Removes one registered listener method. The given method owned by the
- * given object will no longer be called when the specified events are
- * generated by this component.
- * </p>
- *
- * <p>
- * This version of <code>removeListener</code> gets the name of the
- * activation method as a parameter. The actual method is reflected from
- * <code>target</code>, and unless exactly one match is found,
- * <code>java.lang.IllegalArgumentException</code> is thrown.
- * </p>
- *
- * <p>
- * For more information on the inheritable event mechanism see the
- * {@link com.vaadin.event com.vaadin.event package documentation}.
- * </p>
- *
- * @param eventType
- * the exact event type the <code>object</code> listens to.
- * @param target
- * the target object that has registered to listen to events of
- * type <code>eventType</code> with one or more methods.
- * @param methodName
- * the name of the method owned by <code>target</code> that's
- * registered to listen to events of type <code>eventType</code>.
- * @deprecated As of 7.0. This method should be avoided. Use
- * {@link #removeListener(Class, Object, Method)} instead.
- */
- @Deprecated
- @Override
- public void removeListener(Class<?> eventType, Object target,
- String methodName) {
- if (eventRouter != null) {
- eventRouter.removeListener(eventType, target, methodName);
- }
- }
-
- /**
* Returns all listeners that are registered for the given event type or one
* of its subclasses.
*
diff --git a/server/src/main/java/com/vaadin/server/data/AbstractDataProvider.java b/server/src/main/java/com/vaadin/server/data/AbstractDataProvider.java
index 1ab21a3125..bce99e5801 100644
--- a/server/src/main/java/com/vaadin/server/data/AbstractDataProvider.java
+++ b/server/src/main/java/com/vaadin/server/data/AbstractDataProvider.java
@@ -15,10 +15,7 @@
*/
package com.vaadin.server.data;
-import java.lang.reflect.Method;
-import java.util.EventObject;
-
-import com.vaadin.event.EventRouter;
+import com.vaadin.event.SimpleEventRouter;
import com.vaadin.shared.Registration;
/**
@@ -36,12 +33,11 @@ import com.vaadin.shared.Registration;
*/
public abstract class AbstractDataProvider<T, F> implements DataProvider<T, F> {
- private EventRouter eventRouter;
+ private SimpleEventRouter<DataChangeEvent> eventRouter = new SimpleEventRouter<>();
@Override
public Registration addDataProviderListener(DataProviderListener listener) {
- return addListener(DataChangeEvent.class, listener,
- DataProviderListener.class.getMethods()[0]);
+ return eventRouter.addListener(listener);
}
@Override
@@ -50,37 +46,12 @@ public abstract class AbstractDataProvider<T, F> implements DataProvider<T, F> {
}
/**
- * Registers a new listener with the specified activation method to listen
- * events generated by this component. If the activation method does not
- * have any arguments the event object will not be passed to it when it's
- * called.
- *
- * @param eventType
- * the type of the listened event. Events of this type or its
- * subclasses activate the listener.
- * @param listener
- * the object instance who owns the activation method.
- * @param method
- * the activation method.
- * @return a registration for the listener
- */
- protected Registration addListener(Class<?> eventType,
- DataProviderListener listener, Method method) {
- if (eventRouter == null) {
- eventRouter = new EventRouter();
- }
- return eventRouter.addListener(eventType, listener, method);
- }
-
- /**
* Sends the event to all listeners.
*
* @param event
- * the Event to be sent to all listeners.
+ * the event to be sent to all listeners.
*/
- protected void fireEvent(EventObject event) {
- if (eventRouter != null) {
- eventRouter.fireEvent(event);
- }
+ protected void fireEvent(DataChangeEvent event) {
+ eventRouter.fireEvent(event);
}
}
diff --git a/server/src/main/java/com/vaadin/server/data/DataProviderListener.java b/server/src/main/java/com/vaadin/server/data/DataProviderListener.java
index 27bd781c4a..ae83363534 100644
--- a/server/src/main/java/com/vaadin/server/data/DataProviderListener.java
+++ b/server/src/main/java/com/vaadin/server/data/DataProviderListener.java
@@ -15,17 +15,17 @@
*/
package com.vaadin.server.data;
-import java.io.Serializable;
+import com.vaadin.event.Listener;
/**
* Interface for listening for a data change events fired by a
* {@link DataProvider}.
- *
+ *
* @author Vaadin Ltd
* @since 8.0
*/
@FunctionalInterface
-public interface DataProviderListener extends Serializable {
+public interface DataProviderListener extends Listener<DataChangeEvent> {
/**
* Invoked when this listener receives a data change event from a data
@@ -39,5 +39,6 @@ public interface DataProviderListener extends Serializable {
* @param event
* the received event, not null
*/
- void onDataChange(DataChangeEvent event);
+ @Override
+ void onEvent(DataChangeEvent event);
}
diff --git a/server/src/test/java/com/vaadin/server/RemoveListenersDeprecatedTest.java b/server/src/test/java/com/vaadin/server/RemoveListenersDeprecatedTest.java
index e9c97d1b80..168015954e 100644
--- a/server/src/test/java/com/vaadin/server/RemoveListenersDeprecatedTest.java
+++ b/server/src/test/java/com/vaadin/server/RemoveListenersDeprecatedTest.java
@@ -11,7 +11,6 @@ import org.junit.Assert;
import org.junit.Test;
import com.vaadin.event.EventRouter;
-import com.vaadin.event.MethodEventSource;
import com.vaadin.server.data.AbstractDataProvider;
import com.vaadin.shared.Registration;
import com.vaadin.tests.VaadinClasses;
@@ -26,7 +25,7 @@ public class RemoveListenersDeprecatedTest {
ALLOW_REMOVE_LISTENER
.add(RemoveListenersDeprecatedTest::acceptAbstractDataProvider);
ALLOW_REMOVE_LISTENER
- .add(RemoveListenersDeprecatedTest::acceptMethodEventSource);
+ .add(RemoveListenersDeprecatedTest::acceptEventRouter);
}
@Test
@@ -71,8 +70,8 @@ public class RemoveListenersDeprecatedTest {
Assert.assertTrue(count > 0);
}
- private static boolean acceptMethodEventSource(Method method) {
- return method.getDeclaringClass().equals(MethodEventSource.class)
+ private static boolean acceptEventRouter(Method method) {
+ return method.getDeclaringClass().equals(EventRouter.class)
&& method.getParameterCount() == 2;
}
diff --git a/server/src/test/java/com/vaadin/server/data/provider/DataProviderTestBase.java b/server/src/test/java/com/vaadin/server/data/provider/DataProviderTestBase.java
index d930162016..3906b86cb6 100644
--- a/server/src/test/java/com/vaadin/server/data/provider/DataProviderTestBase.java
+++ b/server/src/test/java/com/vaadin/server/data/provider/DataProviderTestBase.java
@@ -27,7 +27,7 @@ public abstract class DataProviderTestBase<D extends DataProvider<StrBean, Seria
private int counter = 0;
@Override
- public void onDataChange(DataChangeEvent event) {
+ public void onEvent(DataChangeEvent event) {
++counter;
}