use of io.syndesis.integration.runtime.logging.StepStartTracker in project syndesis by syndesisio.
the class IntegrationRouteBuilder method configure.
@SuppressWarnings("PMD")
@Override
public void configure() throws Exception {
final Integration integration = loadIntegration();
final List<Step> steps = Collections.unmodifiableList(integration.getSteps());
if (steps.isEmpty()) {
return;
}
ProcessorDefinition route = configureRouteScheduler(integration);
for (int i = 0; i < steps.size(); i++) {
final Step step = steps.get(i);
final IntegrationStepHandler handler = findHandler(step);
if (route == null && !(handler instanceof IntegrationStepHandler.Consumer)) {
throw new IllegalStateException("The handler for step kind " + step.getKind() + " is not a consumer");
}
// Load route fragments eventually defined by extensions.
loadFragments(step);
// If a step id is present, then we need to log the step.
StepStartTracker startTracker = null;
if (loggingEnabled && route != null && step.getId().isPresent()) {
startTracker = new StepStartTracker(step.getId().get());
route = route.process(startTracker);
}
final String index = Integer.toString(i + 1);
final Optional<ProcessorDefinition> definition = handler.handle(step, route, this, index);
if (route == null && definition.isPresent()) {
definition.filter(RouteDefinition.class::isInstance).map(RouteDefinition.class::cast).map(rd -> rd.getInputs().get(0)).ifPresent(rd -> {
step.getId().ifPresent(rd::id);
});
route = definition.get();
integration.getId().ifPresent(route::setId);
} else {
route = definition.map(rd -> {
step.getId().ifPresent(rd::id);
return rd;
}).orElse(route);
}
route = handleConnectorSplit(step, route, index).map(rd -> {
step.getId().ifPresent(id -> rd.id(id + "-split"));
return rd;
}).orElse(route);
if (route != null) {
route = route.process(new OutMessageCaptureProcessor(step));
if (step.getId().isPresent()) {
route.id(step.getId().get() + "-capture");
}
if (startTracker != null) {
route = route.process(StepDoneTracker.INSTANCE);
}
}
}
}
Aggregations