package com.megatim.fdxconsultation.core.impl.dataproductionworker; import com.megatim.fdxcommons.core.impl.tools.CommonUtilities; import com.megatim.fdxcommons.model.camel.CamelRouteConfiguration; import com.megatim.fdxcommons.model.dataproduction.CommonDataProduction; import com.megatim.fdxcommons.tools.context.AppContext; import com.megatim.fdxcommons.tools.database.connection.DBConnection; import com.megatim.fdxconsultation.core.ifaces.dataproduction.metadata.ProductionMetaDataManager; import com.megatim.fdxconsultation.core.ifaces.helper.TableInsert; import com.megatim.fdxconsultation.core.ifaces.integration.ColumnDefinitionManager; import com.megatim.fdxconsultation.core.impl.camel.helper.FileInsertionProcess; import com.megatim.fdxconsultation.core.impl.sockets.DataProductionSessionHandler; import com.megatim.fdxconsultation.model.dataproduction.DataProduction; import com.megatim.fdxconsultation.model.mappers.MapStructMapper; import java.io.File; import java.io.IOException; import java.nio.charset.Charset; import java.sql.Connection; import java.util.logging.Level; import java.util.logging.Logger; import javax.sql.DataSource; /** * * @author Gabuntu */ class FileDataProductionTask implements DataProductionTask { private final DataProduction dataProduction; private final DataSource dataSource; private final ColumnDefinitionManager columnDefinitionManager; private final DataProductionSessionHandler dataProductionSessionHandler; private final TableInsert tableInsert; private final MapStructMapper mapper; private final ProductionMetaDataManager metaDataManager; public FileDataProductionTask(DataProduction dataProduction, DataSource dataSource, ColumnDefinitionManager columnDefinitionManager, DataProductionSessionHandler dataProductionSessionHandler, TableInsert tableInsert, MapStructMapper mapper, ProductionMetaDataManager metaDataManager) { this.dataProduction = dataProduction; this.dataSource = dataSource; this.columnDefinitionManager = columnDefinitionManager; this.dataProductionSessionHandler = dataProductionSessionHandler; this.tableInsert = tableInsert; this.mapper = mapper; this.metaDataManager = metaDataManager; } @Override public void processProduction() { System.out.println("-------------------------before FileInsertionProcess-------------------"); CommonDataProduction cd = mapper.dataProductionToCommonDataProduction(dataProduction); cd.setId(dataProduction.getId()); try { File dataFile = dataFile(dataProduction); if (dataFile.exists()) { Charset charset = CommonUtilities.getCharset(dataFile); try ( Connection connection = new DBConnection(dataSource).connection()) { connection.setAutoCommit(false); new FileInsertionProcess(columnDefinitionManager, cd, connection, dataFile, charset, tableInsert, metaDataManager ).process(); connection.commit(); } System.out.println("-------------------after FileInsertionProcess---------------------"); dataProductionSessionHandler.publishMessage(dataProduction); dataFile.delete(); metaDataManager.deleteById(cd.getId()); } } catch (Exception ex) { Logger.getLogger(FileDataProductionTask.class.getName()).log(Level.SEVERE, ex.getMessage(), ex); } } private File dataFile(CommonDataProduction dataProduction) throws IOException { CamelRouteConfiguration camelRouteConfiguration = new CamelRouteConfiguration(AppContext.PROPERTY_FILE_PATH); String dataDir = camelRouteConfiguration.getLocalConfiguration().consultationDestinationDir(); return new File(dataDir, dataProduction.getIntegrationFileName()); } }