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());
|
}
|
}
|