Skip to content

Commit

Permalink
add readOnly support
Browse files Browse the repository at this point in the history
  • Loading branch information
hohwille committed May 5, 2024
1 parent 059d3c5 commit 96eb72e
Show file tree
Hide file tree
Showing 2 changed files with 481 additions and 398 deletions.
159 changes: 86 additions & 73 deletions core/src/main/java/io/github/mmm/event/AbstractEventSender.java
Original file line number Diff line number Diff line change
@@ -1,73 +1,86 @@
/* Copyright (c) The m-m-m Team, Licensed under the Apache License, Version 2.0
* http://www.apache.org/licenses/LICENSE-2.0 */
package io.github.mmm.event;

/**
* Implementation of {@link EventSource}.
*
* @param <E> the type of the events to {@link EventListener#onEvent(Object) send}.
* @param <L> the type of the {@link EventListener listeners}.
* @since 1.0.0
*/
public abstract class AbstractEventSender<E, L extends EventListener<?/* super E */> >
extends AbstractEventSource<E, L> {

private EventSourceAdapter<E, L> eventAdapter;

/**
* The constructor.
*/
public AbstractEventSender() {

super();
this.eventAdapter = EventSourceAdapter.empty();
}

@Override
protected void doAddListener(EventListener<E> listener) {

this.eventAdapter = this.eventAdapter.addListener(listener);
}

@SuppressWarnings({ "rawtypes", "unchecked" })
@Override
public boolean removeListener(L listener) {

EventSourceAdapter<E, L> adapter = this.eventAdapter.removeListener((EventListener) listener);
if (adapter == null) {
return false;
}
this.eventAdapter = adapter;
return true;
}

/**
* @return {@code true} if at least one {@link EventListener} is {@link #addListener(EventListener) registered},
* {@code false} otherwise.
*/
protected boolean hasListeners() {

return this.eventAdapter.hasListeners();
}

/**
* @return the {@link EventSourceAdapter}.
*/
protected EventSourceAdapter<E, L> getEventAdapter() {

return this.eventAdapter;
}

/**
* @param event the event to {@link EventListener#onEvent(Object) send} to all {@link #addListener(EventListener)
* registered} {@link EventListener}s.
* @return {@code true} if the event has actually been dispatched, {@code false} otherwise (no listener was
* {@link #addListener(EventListener) registered} for the event).
*/
@Override
protected boolean fireEvent(E event) {

return this.eventAdapter.fireEvent(event);
}

}
/* Copyright (c) The m-m-m Team, Licensed under the Apache License, Version 2.0
* http://www.apache.org/licenses/LICENSE-2.0 */
package io.github.mmm.event;

/**
* Implementation of {@link EventSource}.
*
* @param <E> the type of the events to {@link EventListener#onEvent(Object) send}.
* @param <L> the type of the {@link EventListener listeners}.
* @since 1.0.0
*/
public abstract class AbstractEventSender<E, L extends EventListener<?/* super E */> >
extends AbstractEventSource<E, L> {

private EventSourceAdapter<E, L> eventAdapter;

/**
* The constructor.
*/
public AbstractEventSender() {

super();
this.eventAdapter = EventSourceAdapter.empty();
}

@Override
protected void doAddListener(EventListener<E> listener) {

this.eventAdapter = this.eventAdapter.addListener(listener);
}

@SuppressWarnings({ "rawtypes", "unchecked" })
@Override
public boolean removeListener(L listener) {

EventSourceAdapter<E, L> adapter = this.eventAdapter.removeListener((EventListener) listener);
if (adapter == null) {
return false;
}
this.eventAdapter = adapter;
return true;
}

/**
* @return {@code true} if at least one {@link EventListener} is {@link #addListener(EventListener) registered},
* {@code false} otherwise.
*/
protected boolean hasListeners() {

return this.eventAdapter.hasListeners();
}

/**
* @return the {@link EventSourceAdapter}.
*/
protected EventSourceAdapter<E, L> getEventAdapter() {

return this.eventAdapter;
}

/**
* @param event the event to {@link EventListener#onEvent(Object) send} to all {@link #addListener(EventListener)
* registered} {@link EventListener}s.
* @return {@code true} if the event has actually been dispatched, {@code false} otherwise (no listener was
* {@link #addListener(EventListener) registered} for the event).
*/
@Override
protected boolean fireEvent(E event) {

return this.eventAdapter.fireEvent(event);
}

/**
* Makes this event sender read-only so it discards all {@link #addListener(EventListener) added}
* {@link EventListener}s and prevents future {@link #addListener(EventListener) adding}.<br>
* <b>ATTENTION</b>: This is an internal method that shall only be used by code of this library and not by third-party
* users.
*
* @see EventSourceAdapter#readOnly()
*/
protected void makeReadOnly() {

this.eventAdapter = EventSourceAdapter.readOnly();
}

}
Loading

0 comments on commit 96eb72e

Please sign in to comment.