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;
}
Aggregations