All Downloads are FREE. Search and download functionalities are using the official Maven repository.
Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
io.smallrye.reactive.messaging.providers.impl.InternalChannelRegistry Maven / Gradle / Ivy
package io.smallrye.reactive.messaging.providers.impl;
import static io.smallrye.reactive.messaging.providers.i18n.ProviderMessages.msg;
import java.util.*;
import java.util.concurrent.Flow;
import java.util.stream.Collectors;
import jakarta.enterprise.context.ApplicationScoped;
import org.eclipse.microprofile.reactive.messaging.Emitter;
import org.eclipse.microprofile.reactive.messaging.Message;
import io.smallrye.reactive.messaging.ChannelRegistry;
import io.smallrye.reactive.messaging.MutinyEmitter;
@ApplicationScoped
public class InternalChannelRegistry implements ChannelRegistry {
private final Map>>> publishers = new HashMap<>();
private final Map>>> subscribers = new HashMap<>();
private final Map outgoing = new HashMap<>();
private final Map incoming = new HashMap<>();
private final Map, Map> emitters = new HashMap<>();
@Override
public Flow.Publisher> register(String name,
Flow.Publisher> stream, boolean broadcast) {
Objects.requireNonNull(name, msg.nameMustBeSet());
Objects.requireNonNull(stream, msg.streamMustBeSet());
register(publishers, name, stream);
outgoing.put(name, broadcast);
return stream;
}
@Override
public synchronized Flow.Subscriber> register(String name,
Flow.Subscriber> subscriber, boolean merge) {
Objects.requireNonNull(name, msg.nameMustBeSet());
Objects.requireNonNull(subscriber, msg.subscriberMustBeSet());
register(subscribers, name, subscriber);
incoming.put(name, merge);
return subscriber;
}
@Override
public synchronized void register(String name, Emitter emitter) {
Objects.requireNonNull(name, msg.nameMustBeSet());
Objects.requireNonNull(emitter, msg.emitterMustBeSet());
register(name, Emitter.class, emitter);
}
@Override
public synchronized void register(String name, MutinyEmitter emitter) {
Objects.requireNonNull(name, msg.nameMustBeSet());
Objects.requireNonNull(emitter, msg.emitterMustBeSet());
register(name, MutinyEmitter.class, emitter);
}
@Override
public synchronized void register(String name, Class emitterType, T emitter) {
Objects.requireNonNull(name, msg.nameMustBeSet());
Objects.requireNonNull(emitter, msg.emitterMustBeSet());
Map map = emitters.computeIfAbsent(emitterType, key -> new HashMap<>());
map.put(name, emitter);
}
@Override
public synchronized List>> getPublishers(String name) {
Objects.requireNonNull(name, msg.nameMustBeSet());
return publishers.getOrDefault(name, Collections.emptyList());
}
@Override
public synchronized Emitter getEmitter(String name) {
Objects.requireNonNull(name, msg.nameMustBeSet());
return getEmitter(name, Emitter.class);
}
@Override
public synchronized MutinyEmitter getMutinyEmitter(String name) {
Objects.requireNonNull(name, msg.nameMustBeSet());
return getEmitter(name, MutinyEmitter.class);
}
@Override
public synchronized T getEmitter(String name, Class emitterType) {
Objects.requireNonNull(name, msg.nameMustBeSet());
Map typedEmitters = emitters.get(emitterType);
if (typedEmitters == null) {
return null;
} else {
return (T) typedEmitters.get(name);
}
}
@Override
public synchronized List>> getSubscribers(String name) {
Objects.requireNonNull(name, msg.nameMustBeSet());
return subscribers.getOrDefault(name, Collections.emptyList());
}
private void register(Map> multimap, String name, T item) {
List list = multimap.computeIfAbsent(name, key -> new ArrayList<>());
list.add(item);
}
@Override
public synchronized Set getIncomingNames() {
return new HashSet<>(publishers.keySet());
}
@Override
public synchronized Set getOutgoingNames() {
return new HashSet<>(subscribers.keySet());
}
@Override
public synchronized Set getEmitterNames() {
return emitters.values().stream().flatMap(m -> m.keySet().stream()).collect(Collectors.toSet());
}
@Override
public Map getIncomingChannels() {
return outgoing;
}
@Override
public Map getOutgoingChannels() {
return incoming;
}
}