Search in sources :

Example 1 with VetoCapableInterceptor

use of org.springframework.integration.channel.interceptor.VetoCapableInterceptor in project spring-integration by spring-projects.

the class GlobalChannelInterceptorProcessor method addMatchingInterceptors.

/**
 * Add any interceptor whose pattern matches against the channel's name.
 * @param channel the message channel to add interceptors.
 * @param beanName the message channel bean name to match the pattern.
 */
public void addMatchingInterceptors(ChannelInterceptorAware channel, String beanName) {
    if (logger.isDebugEnabled()) {
        logger.debug("Applying global interceptors on channel '" + beanName + "'");
    }
    List<GlobalChannelInterceptorWrapper> tempInterceptors = new ArrayList<>();
    for (GlobalChannelInterceptorWrapper globalChannelInterceptorWrapper : this.positiveOrderInterceptors) {
        String[] patterns = globalChannelInterceptorWrapper.getPatterns();
        patterns = StringUtils.trimArrayElements(patterns);
        if (beanName != null && Boolean.TRUE.equals(PatternMatchUtils.smartMatch(beanName, patterns))) {
            tempInterceptors.add(globalChannelInterceptorWrapper);
        }
    }
    Collections.sort(tempInterceptors, this.comparator);
    for (GlobalChannelInterceptorWrapper next : tempInterceptors) {
        ChannelInterceptor channelInterceptor = next.getChannelInterceptor();
        if (!(channelInterceptor instanceof VetoCapableInterceptor) || ((VetoCapableInterceptor) channelInterceptor).shouldIntercept(beanName, channel)) {
            channel.addInterceptor(channelInterceptor);
        }
    }
    tempInterceptors.clear();
    for (GlobalChannelInterceptorWrapper globalChannelInterceptorWrapper : this.negativeOrderInterceptors) {
        String[] patterns = globalChannelInterceptorWrapper.getPatterns();
        patterns = StringUtils.trimArrayElements(patterns);
        if (beanName != null && Boolean.TRUE.equals(PatternMatchUtils.smartMatch(beanName, patterns))) {
            tempInterceptors.add(globalChannelInterceptorWrapper);
        }
    }
    Collections.sort(tempInterceptors, this.comparator);
    if (!tempInterceptors.isEmpty()) {
        for (int i = tempInterceptors.size() - 1; i >= 0; i--) {
            ChannelInterceptor channelInterceptor = tempInterceptors.get(i).getChannelInterceptor();
            if (!(channelInterceptor instanceof VetoCapableInterceptor) || ((VetoCapableInterceptor) channelInterceptor).shouldIntercept(beanName, channel)) {
                channel.addInterceptor(0, channelInterceptor);
            }
        }
    }
}
Also used : VetoCapableInterceptor(org.springframework.integration.channel.interceptor.VetoCapableInterceptor) ChannelInterceptor(org.springframework.messaging.support.ChannelInterceptor) ArrayList(java.util.ArrayList) GlobalChannelInterceptorWrapper(org.springframework.integration.channel.interceptor.GlobalChannelInterceptorWrapper)

Aggregations

ArrayList (java.util.ArrayList)1 GlobalChannelInterceptorWrapper (org.springframework.integration.channel.interceptor.GlobalChannelInterceptorWrapper)1 VetoCapableInterceptor (org.springframework.integration.channel.interceptor.VetoCapableInterceptor)1 ChannelInterceptor (org.springframework.messaging.support.ChannelInterceptor)1