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<DataProduction> 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<DataProduction> dataProductionsToPublish() {
|
DataProductionSearch searchEntity = new DataProductionSearch();
|
searchEntity.setStatutDataProduction(StatutDataProduction.A_CONSOMMER);
|
|
List<DataProduction> dataProductions = dataProductionManager.getAll(searchEntity);
|
|
return dataProductions;
|
|
}
|
}
|