Skip to content

Commit

Permalink
feat: Simplify usage of ListenerService API - MEED-7009 - Meeds-io/me…
Browse files Browse the repository at this point in the history
…eds#2116 (#64)

**Is your feature request related to a problem? Please describe.**
Using current implementation of `ListenerService`, it's difficult to trigger and to add event listeners. In fact the source code is very noisy when handling `ListenerService`, by example
-  to add a Listener:
```java
listenerService.addListener("event.to.catch", new EventListener<> {
  public void onEvent(Event<S, D> event) {
     // Code ....
  }
});
```
- to trigger an event:

```java
try {
  listenerService.broadcast("", s, d);
} catch(Exception e) {
  ....
}
```

This change will use `@FuntionalInterface` behavior to allow using Lambda expressions and avoid having to catch a checked exception while broadcasting event.
  • Loading branch information
boubaker authored Jun 6, 2024
1 parent 039d610 commit 8cf08d9
Show file tree
Hide file tree
Showing 3 changed files with 234 additions and 265 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -29,14 +29,6 @@
* @author <a href="mailto:nhudinhthuan@exoplatform.com">Nhu Dinh Thuan</a>
* @LevelAPI Platform
*/
public abstract class Listener<S, D> extends BaseComponentPlugin
{

/**
* This method should be invoked when an event with the same name is
* broadcasted
* @param event the event instance
*/
public abstract void onEvent(Event<S, D> event) throws Exception;
public abstract class Listener<S, D> extends BaseComponentPlugin implements ListenerBase<S, D> {

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
/*
* This file is part of the Meeds project (https://meeds.io/).
*
* Copyright (C) 2020 - 2024 Meeds Association contact@meeds.io
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package org.exoplatform.services.listener;

/**
* Created by The eXo Platform SAS<br>
* This class is registered with the Listener service and is invoked when an
* event with the same name is broadcasted. You can have many listeners with the
* same name to listen to an event.
*
* @author <a href="mailto:nhudinhthuan@exoplatform.com">Nhu Dinh Thuan</a>
* @LevelAPI Platform
*/
@FunctionalInterface
public interface ListenerBase<S, D> {

/**
* This method should be invoked when an event with the same name is
* broadcasted
*
* @param event the event instance
*/
void onEvent(Event<S, D> event) throws Exception;

default String getName() {
return this.getClass().getName();
}

}
Loading

0 comments on commit 8cf08d9

Please sign in to comment.