All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.cucumber.core.eventbus.AbstractEventPublisher Maven / Gradle / Ivy

There is a newer version: 7.18.0
Show newest version
package io.cucumber.core.eventbus;

import io.cucumber.plugin.event.Event;
import io.cucumber.plugin.event.EventHandler;
import io.cucumber.plugin.event.EventPublisher;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public abstract class AbstractEventPublisher implements EventPublisher {

    protected final Map, List> handlers = new HashMap<>();

    @Override
    public final  void registerHandlerFor(Class eventType, EventHandler handler) {
        if (handlers.containsKey(eventType)) {
            handlers.get(eventType).add(handler);
        } else {
            List list = new ArrayList<>();
            list.add(handler);
            handlers.put(eventType, list);
        }
    }

    @Override
    public final  void removeHandlerFor(Class eventType, EventHandler handler) {
        if (handlers.containsKey(eventType)) {
            handlers.get(eventType).remove(handler);
        }
    }

    protected  void sendAll(Iterable events) {
        for (T event : events) {
            send(event);
        }
    }

    protected  void send(T event) {
        if (handlers.containsKey(Event.class) && event instanceof Event) {
            for (EventHandler handler : handlers.get(Event.class)) {
                // noinspection unchecked: protected by registerHandlerFor
                handler.receive(event);
            }
        }

        if (handlers.containsKey(event.getClass())) {
            for (EventHandler handler : handlers.get(event.getClass())) {
                // noinspection unchecked: protected by registerHandlerFor
                handler.receive(event);
            }
        }
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy