package io.ebeaninternal.server.transaction;
import io.ebean.event.BulkTableEvent;
import io.ebean.event.BulkTableEventListener;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Set;
public class BulkEventListenerMap {
private final HashMap<String, Entry> map = new HashMap<>();
public BulkEventListenerMap(List<BulkTableEventListener> listeners) {
if (listeners != null) {
for (BulkTableEventListener l : listeners) {
Set<String> tables = l.registeredTables();
for (String tableName : tables) {
register(tableName, l);
}
}
}
}
public boolean isEmpty() {
return map.isEmpty();
}
public void process(BulkTableEvent event) {
Entry entry = map.get(event.getTableName());
if (entry != null) {
entry.process(event);
}
}
private void register(String tableName, BulkTableEventListener l) {
String upperTableName = tableName.trim().toUpperCase();
Entry entry = map.computeIfAbsent(upperTableName, k -> new Entry());
entry.add(l);
}
private static class Entry {
final List<BulkTableEventListener> listeners = new ArrayList<>();
private void add(BulkTableEventListener l) {
listeners.add(l);
}
private void process(BulkTableEvent event) {
for (BulkTableEventListener listener : listeners) {
listener.process(event);
}
}
}
}