Skip to content

Commit 0e91e13

Browse files
committed
Created CastEventType.ALL for easier subscription to all events
1 parent da9f31e commit 0e91e13

1 file changed

Lines changed: 33 additions & 4 deletions

File tree

src/main/java/org/digitalmediaserver/cast/event/CastEvent.java

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import static org.digitalmediaserver.cast.util.Util.requireNotNull;
2020
import java.util.Arrays;
2121
import java.util.Collection;
22+
import java.util.Collections;
2223
import java.util.EnumSet;
2324
import java.util.EventListener;
2425
import java.util.HashMap;
@@ -277,6 +278,9 @@ public interface CastEventListenerList {
277278
*/
278279
public abstract static class AbstractCastEventListenerList implements CastEventListenerList {
279280

281+
/** A {@link EnumSet} of all {@link CastEventType}s */
282+
protected static final EnumSet<CastEventType> ALL_TYPES;
283+
280284
/** The identifier for the cast device used in logging */
281285
@Nonnull
282286
protected final String remoteName;
@@ -308,17 +312,33 @@ protected AbstractCastEventListenerList(@Nonnull String remoteName) {
308312
this.remoteName = remoteName;
309313
}
310314

315+
static {
316+
ALL_TYPES = EnumSet.allOf(CastEventType.class);
317+
ALL_TYPES.remove(CastEventType.ALL);
318+
}
319+
311320
@Override
312321
public boolean add(@Nullable CastEventListener listener, CastEventType... eventTypes) {
313322
if (listener == null) {
314323
return false;
315324
}
316325
synchronized (filtersLock) {
326+
List<CastEventType> eventTypeList;
327+
if (eventTypes == null || eventTypes.length == 0) {
328+
eventTypeList = Collections.emptyList();
329+
} else {
330+
eventTypeList = Arrays.asList(eventTypes);
331+
}
317332
if (listeners.contains(listener)) {
318-
if (eventTypes == null || eventTypes.length == 0) {
333+
if (eventTypeList.isEmpty()) {
319334
return filters.remove(listener) != null;
320335
}
321-
EnumSet<CastEventType> newTypes = EnumSet.copyOf(Arrays.asList(eventTypes));
336+
EnumSet<CastEventType> newTypes;
337+
if (eventTypeList.contains(CastEventType.ALL)) {
338+
newTypes = ALL_TYPES;
339+
} else {
340+
newTypes = EnumSet.copyOf(eventTypeList);
341+
}
322342
Set<CastEventType> types = filters.get(listener);
323343
if (types == null) {
324344
filters.put(listener, newTypes);
@@ -328,8 +348,12 @@ public boolean add(@Nullable CastEventListener listener, CastEventType... eventT
328348
}
329349

330350
listeners.add(listener);
331-
if (eventTypes != null && eventTypes.length > 0) {
332-
filters.put(listener, EnumSet.copyOf(Arrays.asList(eventTypes)));
351+
if (!eventTypeList.isEmpty()) {
352+
if (eventTypeList.contains(CastEventType.ALL)) {
353+
filters.put(listener, EnumSet.copyOf(ALL_TYPES));
354+
} else {
355+
filters.put(listener, EnumSet.copyOf(eventTypeList));
356+
}
333357
}
334358
return true;
335359
}
@@ -634,6 +658,11 @@ public void run() {
634658
*/
635659
public enum CastEventType {
636660

661+
/**
662+
* Event is never fired, but can be used to subscribe to all event types.
663+
*/
664+
ALL(Object.class),
665+
637666
/**
638667
* Event is fired when an unclaimed {@link AppAvailabilityResponse} is
639668
* received, which shouldn't normally happen

0 commit comments

Comments
 (0)