Thomas Vachuska
Committed by Gerrit Code Review

Listener enhancement to allow separation of filtering from processing.

Change-Id: I79b4d7e663ea8347f8cc015dc7f4de842b06557b
1 +/*
2 + * Copyright 2015 Open Networking Laboratory
3 + *
4 + * Licensed under the Apache License, Version 2.0 (the "License");
5 + * you may not use this file except in compliance with the License.
6 + * You may obtain a copy of the License at
7 + *
8 + * http://www.apache.org/licenses/LICENSE-2.0
9 + *
10 + * Unless required by applicable law or agreed to in writing, software
11 + * distributed under the License is distributed on an "AS IS" BASIS,
12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 + * See the License for the specific language governing permissions and
14 + * limitations under the License.
15 + */
16 +package org.onosproject.event;
17 +
18 +/**
19 + * Entity capable of filtering events.
20 + */
21 +public interface EventFilter<E extends Event> {
22 +
23 + /**
24 + * Indicates whether the specified event is of interest or not.
25 + * Default implementation always returns true.
26 + *
27 + * @param event event to be inspected
28 + * @return true if event is relevant; false otherwise
29 + */
30 + default boolean isRelevant(E event) {
31 + return true;
32 + }
33 +
34 +}
...@@ -18,7 +18,7 @@ package org.onosproject.event; ...@@ -18,7 +18,7 @@ package org.onosproject.event;
18 /** 18 /**
19 * Entity capable of receiving events. 19 * Entity capable of receiving events.
20 */ 20 */
21 -public interface EventListener<E extends Event> { 21 +public interface EventListener<E extends Event> extends EventFilter<E> {
22 22
23 /** 23 /**
24 * Reacts to the specified event. 24 * Reacts to the specified event.
......
...@@ -71,7 +71,9 @@ public class ListenerRegistry<E extends Event, L extends EventListener<E>> ...@@ -71,7 +71,9 @@ public class ListenerRegistry<E extends Event, L extends EventListener<E>>
71 try { 71 try {
72 lastListener = listener; 72 lastListener = listener;
73 lastStart = System.currentTimeMillis(); 73 lastStart = System.currentTimeMillis();
74 - listener.event(event); 74 + if (listener.isRelevant(event)) {
75 + listener.event(event);
76 + }
75 lastStart = 0; 77 lastStart = 0;
76 } catch (Exception error) { 78 } catch (Exception error) {
77 reportProblem(event, error); 79 reportProblem(event, error);
......