Example usage for org.springframework.data.redis.listener Topic getClass

List of usage examples for org.springframework.data.redis.listener Topic getClass

Introduction

In this page you can find the example usage for org.springframework.data.redis.listener Topic getClass.

Prototype

@HotSpotIntrinsicCandidate
public final native Class<?> getClass();

Source Link

Document

Returns the runtime class of this Object .

Usage

From source file:org.springframework.data.redis.listener.RedisMessageListenerContainer.java

private void addListener(MessageListener listener, Collection<? extends Topic> topics) {
    Assert.notNull(listener, "a valid listener is required");
    Assert.notEmpty(topics, "at least one topic is required");

    List<byte[]> channels = new ArrayList<byte[]>(topics.size());
    List<byte[]> patterns = new ArrayList<byte[]>(topics.size());

    boolean trace = logger.isTraceEnabled();

    // add listener mapping
    Set<Topic> set = listenerTopics.get(listener);
    if (set == null) {
        set = new CopyOnWriteArraySet<Topic>();
        listenerTopics.put(listener, set);
    }/*  w  w  w .j  a v  a2 s . c  om*/
    set.addAll(topics);

    for (Topic topic : topics) {

        ByteArrayWrapper holder = new ByteArrayWrapper(serializer.serialize(topic.getTopic()));

        if (topic instanceof ChannelTopic) {
            Collection<MessageListener> collection = channelMapping.get(holder);
            if (collection == null) {
                collection = new CopyOnWriteArraySet<MessageListener>();
                channelMapping.put(holder, collection);
            }
            collection.add(listener);
            channels.add(holder.getArray());

            if (trace)
                logger.trace("Adding listener '" + listener + "' on channel '" + topic.getTopic() + "'");
        }

        else if (topic instanceof PatternTopic) {
            Collection<MessageListener> collection = patternMapping.get(holder);
            if (collection == null) {
                collection = new CopyOnWriteArraySet<MessageListener>();
                patternMapping.put(holder, collection);
            }
            collection.add(listener);
            patterns.add(holder.getArray());

            if (trace)
                logger.trace("Adding listener '" + listener + "' for pattern '" + topic.getTopic() + "'");
        }

        else {
            throw new IllegalArgumentException("Unknown topic type '" + topic.getClass() + "'");
        }
    }

    // check the current listening state
    if (listening) {
        subscriptionTask.subscribeChannel(channels.toArray(new byte[channels.size()][]));
        subscriptionTask.subscribePattern(patterns.toArray(new byte[patterns.size()][]));
    }
}