Search in sources :

Example 1 with AntPathMatcher

use of org.apache.camel.util.AntPathMatcher in project camel-spring-boot by apache.

the class SpringBootRoutesCollector method collectRoutesFromRegistry.

@Override
public List<RoutesBuilder> collectRoutesFromRegistry(final CamelContext camelContext, final String excludePattern, final String includePattern) {
    final List<RoutesBuilder> routes = new ArrayList<>();
    Set<LambdaRouteBuilder> lrbs = camelContext.getRegistry().findByType(LambdaRouteBuilder.class);
    for (LambdaRouteBuilder lrb : lrbs) {
        RouteBuilder rb = new RouteBuilder() {

            @Override
            public void configure() throws Exception {
                lrb.accept(this);
            }
        };
        routes.add(rb);
    }
    final AntPathMatcher matcher = new AntPathMatcher();
    for (RoutesBuilder routesBuilder : applicationContext.getBeansOfType(RoutesBuilder.class, true, true).values()) {
        // filter out abstract classes
        boolean abs = Modifier.isAbstract(routesBuilder.getClass().getModifiers());
        if (!abs) {
            String name = routesBuilder.getClass().getName();
            // make name as path so we can use ant path matcher
            name = name.replace('.', '/');
            boolean match = !"false".equals(includePattern);
            // special support for testing with @ExcludeRoutes annotation with camel-test modules
            String exclude = camelContext.adapt(ExtendedCamelContext.class).getTestExcludeRoutes();
            // exclude take precedence over include
            if (match && ObjectHelper.isNotEmpty(exclude)) {
                // this property is a comma separated list of FQN class names, so we need to make
                // name as path so we can use ant patch matcher
                exclude = exclude.replace('.', '/');
                // there may be multiple separated by comma
                String[] parts = exclude.split(",");
                for (String part : parts) {
                    // must negate when excluding, and hence !
                    match = !matcher.match(part, name);
                    log.trace("Java RoutesBuilder: {} exclude filter: {} -> {}", name, part, match);
                    if (!match) {
                        break;
                    }
                }
            }
            // exclude take precedence over include
            if (match && ObjectHelper.isNotEmpty(excludePattern)) {
                // there may be multiple separated by comma
                String[] parts = excludePattern.split(",");
                for (String part : parts) {
                    // must negate when excluding, and hence !
                    match = !matcher.match(part, name);
                    log.trace("Java RoutesBuilder: {} exclude filter: {} -> {}", name, part, match);
                    if (!match) {
                        break;
                    }
                }
            }
            if (match && ObjectHelper.isNotEmpty(includePattern)) {
                // there may be multiple separated by comma
                String[] parts = includePattern.split(",");
                for (String part : parts) {
                    match = matcher.match(part, name);
                    log.trace("Java RoutesBuilder: {} include filter: {} -> {}", name, part, match);
                    if (match) {
                        break;
                    }
                }
            }
            log.debug("Java RoutesBuilder: {} accepted by include/exclude filter: {}", name, match);
            if (match) {
                routes.add(routesBuilder);
            }
        }
    }
    return routes;
}
Also used : LambdaRouteBuilder(org.apache.camel.builder.LambdaRouteBuilder) RouteBuilder(org.apache.camel.builder.RouteBuilder) ExtendedCamelContext(org.apache.camel.ExtendedCamelContext) ArrayList(java.util.ArrayList) LambdaRouteBuilder(org.apache.camel.builder.LambdaRouteBuilder) AntPathMatcher(org.apache.camel.util.AntPathMatcher) RoutesBuilder(org.apache.camel.RoutesBuilder)

Aggregations

ArrayList (java.util.ArrayList)1 ExtendedCamelContext (org.apache.camel.ExtendedCamelContext)1 RoutesBuilder (org.apache.camel.RoutesBuilder)1 LambdaRouteBuilder (org.apache.camel.builder.LambdaRouteBuilder)1 RouteBuilder (org.apache.camel.builder.RouteBuilder)1 AntPathMatcher (org.apache.camel.util.AntPathMatcher)1