Search in sources :

Example 1 with RouteBuilderLifecycleStrategy

use of org.apache.camel.builder.RouteBuilderLifecycleStrategy in project camel-k-runtime by apache.

the class SourcesSupport method load.

public static void load(Runtime runtime, Source source) {
    final List<RouteBuilderLifecycleStrategy> interceptors;
    switch(source.getType()) {
        case source:
            interceptors = RuntimeSupport.loadInterceptors(runtime.getCamelContext(), source);
            interceptors.forEach(interceptor -> {
                if (interceptor instanceof RuntimeAware) {
                    ((RuntimeAware) interceptor).setRuntime(runtime);
                }
            });
            break;
        case template:
            if (!source.getInterceptors().isEmpty()) {
                LOGGER.warn("Interceptors associated to the route template {} will be ignored", source.getName());
            }
            interceptors = List.of(new RouteBuilderLifecycleStrategy() {

                @Override
                public void afterConfigure(RouteBuilder builder) {
                    List<RouteDefinition> routes = builder.getRouteCollection().getRoutes();
                    List<RouteTemplateDefinition> templates = builder.getRouteTemplateCollection().getRouteTemplates();
                    if (routes.size() != 1) {
                        throw new IllegalArgumentException("There should be a single route definition, got " + routes.size());
                    }
                    if (!templates.isEmpty()) {
                        throw new IllegalArgumentException("There should not be any template, got " + templates.size());
                    }
                    // create a new template from the source
                    RouteTemplateDefinition templatesDefinition = builder.getRouteTemplateCollection().routeTemplate(source.getId());
                    templatesDefinition.setRoute(routes.get(0));
                    source.getPropertyNames().forEach(templatesDefinition::templateParameter);
                    // remove all routes definitions as they have been translated
                    // in the related route template
                    routes.clear();
                }
            });
            break;
        case errorHandler:
            if (!source.getInterceptors().isEmpty()) {
                LOGGER.warn("Interceptors associated to the route template {} will be ignored", source.getName());
            }
            interceptors = List.of(new RouteBuilderLifecycleStrategy() {

                @Override
                public void afterConfigure(RouteBuilder builder) {
                    List<RouteDefinition> routes = builder.getRouteCollection().getRoutes();
                    List<RouteTemplateDefinition> templates = builder.getRouteTemplateCollection().getRouteTemplates();
                    if (!routes.isEmpty()) {
                        throw new IllegalArgumentException("There should be no route definition, got " + routes.size());
                    }
                    if (!templates.isEmpty()) {
                        throw new IllegalArgumentException("There should not be any template, got " + templates.size());
                    }
                    if (hasErrorHandlerBuilder(builder)) {
                        LOGGER.debug("Setting default error handler builder factory as {}", builder.getErrorHandlerBuilder());
                        runtime.getCamelContext().adapt(ExtendedCamelContext.class).setErrorHandlerFactory(builder.getErrorHandlerBuilder());
                    }
                }
            });
            break;
        default:
            throw new IllegalArgumentException("Unknown source type: " + source.getType());
    }
    try {
        final Resource resource = Sources.asResource(runtime.getCamelContext(), source);
        final ExtendedCamelContext ecc = runtime.getCamelContext(ExtendedCamelContext.class);
        final Collection<RoutesBuilder> builders = ecc.getRoutesLoader().findRoutesBuilders(resource);
        builders.stream().map(RouteBuilder.class::cast).peek(b -> interceptors.forEach(b::addLifecycleInterceptor)).forEach(runtime::addRoutes);
    } catch (Exception e) {
        throw RuntimeCamelException.wrapRuntimeCamelException(e);
    }
}
Also used : RuntimeCamelException(org.apache.camel.RuntimeCamelException) RouteDefinition(org.apache.camel.model.RouteDefinition) RoutesBuilder(org.apache.camel.RoutesBuilder) RouteTemplateDefinition(org.apache.camel.model.RouteTemplateDefinition) SourcesConfigurer(org.apache.camel.k.listener.SourcesConfigurer) Logger(org.slf4j.Logger) Resource(org.apache.camel.spi.Resource) AbstractPhaseListener(org.apache.camel.k.listener.AbstractPhaseListener) Collection(java.util.Collection) LoggerFactory(org.slf4j.LoggerFactory) ExtendedCamelContext(org.apache.camel.ExtendedCamelContext) List(java.util.List) SourceDefinition(org.apache.camel.k.SourceDefinition) RouteBuilder(org.apache.camel.builder.RouteBuilder) Source(org.apache.camel.k.Source) RuntimeAware(org.apache.camel.k.RuntimeAware) Runtime(org.apache.camel.k.Runtime) ObjectHelper(org.apache.camel.util.ObjectHelper) RouteBuilderLifecycleStrategy(org.apache.camel.builder.RouteBuilderLifecycleStrategy) RuntimeAware(org.apache.camel.k.RuntimeAware) RouteBuilder(org.apache.camel.builder.RouteBuilder) Resource(org.apache.camel.spi.Resource) RouteTemplateDefinition(org.apache.camel.model.RouteTemplateDefinition) RuntimeCamelException(org.apache.camel.RuntimeCamelException) RouteDefinition(org.apache.camel.model.RouteDefinition) ExtendedCamelContext(org.apache.camel.ExtendedCamelContext) RouteBuilderLifecycleStrategy(org.apache.camel.builder.RouteBuilderLifecycleStrategy) RoutesBuilder(org.apache.camel.RoutesBuilder)

Example 2 with RouteBuilderLifecycleStrategy

use of org.apache.camel.builder.RouteBuilderLifecycleStrategy in project camel-k-runtime by apache.

the class RuntimeSupport method loadInterceptors.

// *********************************
// 
// Helpers - Interceptors
// 
// *********************************
public static List<RouteBuilderLifecycleStrategy> loadInterceptors(CamelContext context, Source source) {
    ExtendedCamelContext ecc = context.adapt(ExtendedCamelContext.class);
    List<RouteBuilderLifecycleStrategy> answer = new ArrayList<>();
    for (String id : source.getInterceptors()) {
        try {
            // first check the registry
            RouteBuilderLifecycleStrategy interceptor = ecc.getRegistry().lookupByNameAndType(id, RouteBuilderLifecycleStrategy.class);
            if (interceptor == null) {
                // then try with factory finder
                interceptor = ecc.getFactoryFinder(Constants.SOURCE_LOADER_INTERCEPTOR_RESOURCE_PATH).newInstance(id, RouteBuilderLifecycleStrategy.class).orElseThrow(() -> new IllegalArgumentException("Unable to find source loader interceptor for: " + id));
                LOGGER.debug("Found source loader interceptor {} from service definition", id);
            } else {
                LOGGER.debug("Found source loader interceptor {} from registry", id);
            }
            PropertiesSupport.bindProperties(context, interceptor, Constants.LOADER_INTERCEPTOR_PREFIX + id + ".");
            PropertiesSupport.bindProperties(context, interceptor, Constants.LOADER_INTERCEPTOR_PREFIX_FALLBACK + id + ".");
            answer.add(interceptor);
        } catch (Exception e) {
            throw new IllegalArgumentException("Unable to find source loader interceptor for: " + id, e);
        }
    }
    return answer;
}
Also used : ExtendedCamelContext(org.apache.camel.ExtendedCamelContext) ArrayList(java.util.ArrayList) RouteBuilderLifecycleStrategy(org.apache.camel.builder.RouteBuilderLifecycleStrategy) MalformedInputException(java.nio.charset.MalformedInputException) IOException(java.io.IOException)

Aggregations

ExtendedCamelContext (org.apache.camel.ExtendedCamelContext)2 RouteBuilderLifecycleStrategy (org.apache.camel.builder.RouteBuilderLifecycleStrategy)2 IOException (java.io.IOException)1 MalformedInputException (java.nio.charset.MalformedInputException)1 ArrayList (java.util.ArrayList)1 Collection (java.util.Collection)1 List (java.util.List)1 RoutesBuilder (org.apache.camel.RoutesBuilder)1 RuntimeCamelException (org.apache.camel.RuntimeCamelException)1 RouteBuilder (org.apache.camel.builder.RouteBuilder)1 Runtime (org.apache.camel.k.Runtime)1 RuntimeAware (org.apache.camel.k.RuntimeAware)1 Source (org.apache.camel.k.Source)1 SourceDefinition (org.apache.camel.k.SourceDefinition)1 AbstractPhaseListener (org.apache.camel.k.listener.AbstractPhaseListener)1 SourcesConfigurer (org.apache.camel.k.listener.SourcesConfigurer)1 RouteDefinition (org.apache.camel.model.RouteDefinition)1 RouteTemplateDefinition (org.apache.camel.model.RouteTemplateDefinition)1 Resource (org.apache.camel.spi.Resource)1 ObjectHelper (org.apache.camel.util.ObjectHelper)1