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

com.github.events1000.emitter.api.AbstractEventEmitter Maven / Gradle / Ivy

The newest version!
package com.github.events1000.emitter.api;

import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.Map;
import java.util.Queue;

import com.github.events1000.api.EventTopic;
import com.github.events1000.listener.api.EventListener;

public abstract class AbstractEventEmitter implements EventEmitter {

    private final Map> listeners;

    public AbstractEventEmitter() {

	this.listeners = new LinkedHashMap<>();
    }

    @Override
    public synchronized void registerEventListener(EventTopic topic, final L listener) {

	Queue queue = listeners.get(topic);
	if (queue == null) {
	    queue = new LinkedList<>();
	    while (topic != null) {
		listeners.put(topic, queue);
		topic = topic.getParent();
	    }
	}
	queue.add(listener);
    }

    @Override
    public void unregisterEventListener(final L listener) {
	for (final Queue q : listeners.values()) {
	    q.remove(listener);
	}
    }

    protected Map> getListeners() {

	return listeners;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy