package com.megatim.apifdxweb.service.impl.scheduler; import com.megatim.apifdxweb.core.ifaces.helper.ApiRequestDataExporter; import com.megatim.apifdxweb.core.ifaces.dataproduction.DataProductionManager; import com.megatim.apifdxweb.tools.AppContext; import com.megatim.fdxcommons.tools.utils.CustomColumns; import com.megatim.fdxcommons.tools.integration.FdxConsultationIntegrationData; import com.megatim.fdxcommons.model.enumeration.Operateur; import javax.enterprise.context.Dependent; import javax.inject.Inject; import com.megatim.apifdxweb.service.ifaces.scheduler.TypeFichierDataJob; import com.megatim.apifdxweb.service.impl.camel.config.CamelRouteConfiguration; import com.megatim.fdxcommons.model.dataproduction.DataProduction; import com.megatim.fdxcommons.model.dataproduction.DataProductionSource; import com.megatim.fdxcommons.model.enumeration.CriteriaLogicConnector; import com.megatim.fdxcommons.model.enumeration.StatutDataProduction; import com.megatim.fdxcommons.model.searchentities.DataProductionSearch; import com.megatim.fdxcommons.tools.database.connection.DBConnection; import com.megatim.fdxcommons.tools.database.queries.metadata.QueryCriterion; import com.megatim.fdxcommons.tools.database.queries.metadata.SelectQueryResult; import com.megatim.fdxcommons.tools.database.tables.DataProductionIdColumnDefinition; import com.megatim.fdxcommons.tools.database.tables.FdxApiTable; import com.megatim.fdxcommons.tools.integration.dto.FdxConsultationIntegrationDataDto; import java.util.Arrays; import java.util.logging.Level; import java.util.logging.Logger; import org.apache.camel.ProducerTemplate; import org.apache.camel.cdi.CdiCamelContext; import com.megatim.fdxcommons.tools.mappers.FdxTableMapper; import java.io.IOException; import java.sql.Connection; import java.util.List; import javax.annotation.Resource; import javax.sql.DataSource; /** * * @author ASUS */ @Dependent public class TypeFichierDataJobImpl implements TypeFichierDataJob { @Resource(lookup = AppContext.JNDI_NAME) private DataSource dataSource; @Inject private DataProductionManager dataProductionManager; @Inject private CdiCamelContext camelContext; @Inject private ApiRequestDataExporter dataExporter; @Inject private FdxTableMapper fdxTableMapper; @Override public void publishData() { List dataProductions = dataProductionsToPublish(); for (DataProduction d : dataProductions) { QueryCriterion queryCriterion = constructQueryCriterion(d); try ( Connection connection = new DBConnection(dataSource).connection()) { SelectQueryResult result = new FdxApiTable( d.getCodeTypeFichier(), d.getReferentielVersion(), connection ).selectResultWithAllColumns(queryCriterion); FdxConsultationIntegrationData integrationData = new FdxConsultationIntegrationData(fdxTableMapper.fdxTableRowListToFdxTableRowDtoList(result.rows()), d); if (!integrationData.getRows().isEmpty()) { System.out.println("********************dataProduction Id " + integrationData.getDataProduction().getId() + " rows to send " + integrationData.getRows().size()); sendData(integrationData); System.out.println("****************************Really send " + integrationData.getDataProduction().getId()); } } catch (Exception ex) { Logger.getLogger(TypeFichierDataJobImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex); throw new com.megatim.commons.tools.exceptions.ApplicationServerException(ex.getMessage()); } } } private QueryCriterion constructQueryCriterion(DataProduction d) { if (d.getDateMiseAJour() == null) { return new QueryCriterion(new DataProductionIdColumnDefinition().name(), d.getId(), Operateur.EQUALS, null, Arrays.asList()); } else { return new QueryCriterion(null, null, null, CriteriaLogicConnector.AND, Arrays.asList(new QueryCriterion(new DataProductionIdColumnDefinition().name(), d.getId(), Operateur.EQUALS, null, Arrays.asList()), new QueryCriterion(CustomColumns.DATE_ACTION_COLUMN, d.getDateMiseAJour(), Operateur.EQUALS, null, Arrays.asList()) )); } } private void sendData(FdxConsultationIntegrationData integrationData) throws IOException { System.out.println("*************************PRODUCING DATA FOR FILE " + integrationData.getDataProduction().getCodeTypeFichier()); if (integrationData.getDataProduction().getSource().equals(DataProductionSource.API)) { String standaloneTmpDir = new CamelRouteConfiguration(AppContext.PROPERTY_FILE_PATH) .standaloneTmpDir(); dataExporter.export(integrationData, standaloneTmpDir); } ProducerTemplate producerTemplate = camelContext.createProducerTemplate(); producerTemplate.sendBody("direct:" + AppContext.DATA_TO_API_DIRECT, new FdxConsultationIntegrationDataDto(integrationData.getRows(), integrationData.getDataProduction())); } private List dataProductionsToPublish() { DataProductionSearch searchEntity = new DataProductionSearch(); searchEntity.setStatutDataProduction(StatutDataProduction.A_CONSOMMER); List dataProductions = dataProductionManager.getAll(searchEntity); return dataProductions; } }