package com.megatim.apifdxweb.service.impl.camel.routes.out; import com.megatim.apifdxweb.tools.AppContext; import com.megatim.fdxcommons.model.dataproduction.DataProduction; import com.megatim.fdxcommons.model.enumeration.StatutDataProduction; import com.megatim.fdxcommons.tools.integration.FdxConsultationIntegrationData; import com.megatim.fdxcommons.tools.integration.dto.FdxConsultationIntegrationDataDto; import com.megatim.fdxcommons.tools.resolvers.JacksonMapperFormat; import java.time.LocalDateTime; import javax.enterprise.context.ApplicationScoped; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.jta.JtaTransactionErrorHandlerBuilder; /** * * @author lenovo */ @ApplicationScoped public class FileIntegrationRoute extends RouteBuilder { @Override public void configure() throws Exception { JtaTransactionErrorHandlerBuilder transactionErrorHandler = new JtaTransactionErrorHandlerBuilder(); errorHandler(transactionErrorHandler); onException(Exception.class) .handled(true) .log("Exception occured: ${exception.message}") .logStackTrace(true) .end(); from("direct:" + AppContext.DATA_TO_API_DIRECT) .transacted() .marshal(JacksonMapperFormat.jacksonDataFormat(FdxConsultationIntegrationDataDto.class)) .to("rabbitmq:" + com.megatim.fdxcommons.tools.context.AppContext.DATA_INTEGRATION_EXCHANGE + "?queue=" + com.megatim.fdxcommons.tools.context.AppContext.DATA_INTEGRATION_QUEUE + "&routingKey=" + com.megatim.fdxcommons.tools.context.AppContext.DATA_INTEGRATION_ROUTING_KEY + "&autoDelete=false") .unmarshal(JacksonMapperFormat.jacksonDataFormat(FdxConsultationIntegrationDataDto.class)) .process(ex -> { FdxConsultationIntegrationDataDto dto = ex.getIn().getBody(FdxConsultationIntegrationDataDto.class); FdxConsultationIntegrationData integrationData = new FdxConsultationIntegrationData(dto.getRows(), dto.getDataProduction()); ex.getIn().setHeader("id", integrationData.getDataProduction().getId()); ex.getIn().setHeader("statutDataProduction", StatutDataProduction.CONSOMME.name()); ex.getIn().setHeader("dateMiseAJour", LocalDateTime.now()); String query = "UPDATE " + DataProduction.class.getSimpleName().toLowerCase() + " SET statutDataProduction= :?statutDataProduction, dateMiseAJour = :?dateMiseAJour" + " WHERE id = :?id"; ex.getIn().setBody(query); }) .to("jdbc:datasource?useHeadersAsParameters=true&resetAutoCommit=false") .end(); } }