package com.megatim.apifdxweb.core.impl.helper;
|
|
import com.megatim.apifdxweb.core.ifaces.helper.DataProductionOperations;
|
import com.megatim.apifdxweb.core.ifaces.helper.RoutingChecker;
|
import com.megatim.apifdxweb.model.request.UpdateRequest;
|
import com.megatim.apifdxweb.tools.AppContext;
|
import com.megatim.commons.tools.exceptions.ApplicationServerException;
|
import com.megatim.fdxcommons.core.ifaces.helper.DataInMemoryHandler;
|
import com.megatim.fdxcommons.model.dataproduction.DataProduction;
|
import com.megatim.fdxcommons.model.dataproduction.DataProductionSource;
|
import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
|
import com.megatim.fdxcommons.tools.database.connection.DBConnection;
|
import com.megatim.fdxcommons.tools.database.queries.metadata.QueryCriterion;
|
import com.megatim.fdxcommons.tools.database.tables.FdxApiTable;
|
import com.megatim.fdxcommons.tools.exceptions.CommonRessourceNotFoundException;
|
import com.megatim.fdxcommons.tools.utils.CriteriaEntityFromViewToQueryCriterion;
|
import java.sql.Connection;
|
import java.time.LocalDateTime;
|
import java.util.LinkedHashMap;
|
import java.util.List;
|
import javax.annotation.Resource;
|
import javax.enterprise.context.Dependent;
|
import javax.inject.Inject;
|
import javax.sql.DataSource;
|
|
/**
|
*
|
* @author Gabuntu
|
*/
|
@Dependent
|
public class DataProductionOperationsImpl implements DataProductionOperations {
|
|
@Resource(lookup = AppContext.JNDI_NAME)
|
private DataSource dataSource;
|
|
@Inject
|
private DataInMemoryHandler dataInMemoryHandler;
|
|
@Inject
|
private RoutingChecker routingChecker;
|
|
@Override
|
public void saveAll(String codeTypeFichier, List<LinkedHashMap<String, Object>> datas, String connectedParticipant) {
|
|
stopIfProductionNotPermitted(codeTypeFichier, connectedParticipant);
|
|
try ( Connection connection = new DBConnection(dataSource).connection()) {
|
connection.setAutoCommit(false);
|
|
DataProduction dataProduction = newDataProduction(codeTypeFichier, connectedParticipant);
|
table(connection, codeTypeFichier).insert((List<LinkedHashMap<String, Object>>) datas, dataProduction);
|
|
connection.commit();
|
} catch (Exception ex) {
|
throw new ApplicationServerException(ex.getMessage());
|
}
|
}
|
|
@Override
|
public void saveOne(String codeTypeFichier, LinkedHashMap<String, Object> data, String connectedParticipant) {
|
|
stopIfProductionNotPermitted(codeTypeFichier, connectedParticipant);
|
|
try ( Connection connection = new DBConnection(dataSource).connection()) {
|
connection.setAutoCommit(false);
|
|
DataProduction dataProduction = newDataProduction(codeTypeFichier, connectedParticipant);
|
table(connection, codeTypeFichier).insert(data, dataProduction);
|
|
connection.commit();
|
} catch (Exception ex) {
|
throw new ApplicationServerException(ex.getMessage());
|
}
|
}
|
|
@Override
|
public void updateAll(String codeTypeFichier, UpdateRequest updateRequest, String connectedParticipant) {
|
|
stopIfProductionNotPermitted(codeTypeFichier, connectedParticipant);
|
|
try ( Connection connection = new DBConnection(dataSource).connection()) {
|
connection.setAutoCommit(false);
|
|
QueryCriterion queryCriterion = new CriteriaEntityFromViewToQueryCriterion(updateRequest.getCriteriaEntityFromView()).queryCriterion();
|
table(connection, codeTypeFichier).update(updateRequest.getDataToUpdate(), queryCriterion);
|
|
connection.commit();
|
} catch (Exception ex) {
|
throw new ApplicationServerException(ex.getMessage());
|
}
|
}
|
|
@Override
|
public void updateOne(String codeTypeFichier, UpdateRequest updateRequest, String connectedParticipant) {
|
|
stopIfProductionNotPermitted(codeTypeFichier, connectedParticipant);
|
|
try ( Connection connection = new DBConnection(dataSource).connection()) {
|
connection.setAutoCommit(false);
|
|
QueryCriterion queryCriterion = new CriteriaEntityFromViewToQueryCriterion(updateRequest.getCriteriaEntityFromView()).queryCriterion();
|
table(connection, codeTypeFichier).updateOne(updateRequest.getDataToUpdate(), queryCriterion);
|
|
connection.commit();
|
} catch (Exception ex) {
|
throw new ApplicationServerException(ex.getMessage());
|
}
|
}
|
|
@Override
|
public void deleteAll(String codeTypeFichier, CriteriaEntityFromView criterionFromView, String connectedParticipant) {
|
|
stopIfProductionNotPermitted(codeTypeFichier, connectedParticipant);
|
|
try ( Connection connection = new DBConnection(dataSource).connection()) {
|
connection.setAutoCommit(false);
|
|
QueryCriterion queryCriterion = new CriteriaEntityFromViewToQueryCriterion(criterionFromView).queryCriterion();
|
table(connection, codeTypeFichier).delete(queryCriterion);
|
|
connection.commit();
|
} catch (Exception ex) {
|
throw new ApplicationServerException(ex.getMessage());
|
}
|
}
|
|
@Override
|
public void deleteOne(String codeTypeFichier, CriteriaEntityFromView criterionFromView, String connectedParticipant) {
|
|
stopIfProductionNotPermitted(codeTypeFichier, connectedParticipant);
|
|
try ( Connection connection = new DBConnection(dataSource).connection()) {
|
connection.setAutoCommit(false);
|
|
QueryCriterion queryCriterion = new CriteriaEntityFromViewToQueryCriterion(criterionFromView).queryCriterion();
|
table(connection, codeTypeFichier).deleteOne(queryCriterion);
|
|
connection.commit();
|
} catch (Exception ex) {
|
throw new ApplicationServerException(ex.getMessage());
|
}
|
}
|
|
private FdxApiTable table(Connection connection, String codeTypeFichier) {
|
return new FdxApiTable(codeTypeFichier, versionReferentiel(), connection);
|
}
|
|
private DataProduction newDataProduction(String codeTypeFichier, String codeParticipant) {
|
DataProduction dataProduction = new DataProduction();
|
dataProduction.setDateProduction(LocalDateTime.now());
|
dataProduction.setReferentielVersion(versionReferentiel());
|
dataProduction.setCodeTypeFichier(codeTypeFichier);
|
dataProduction.setCodeParticipant(codeParticipant);
|
dataProduction.setSource(DataProductionSource.API);
|
|
return dataProduction;
|
}
|
|
private String versionReferentiel() {
|
return dataInMemoryHandler.getDataInMemory().getReferentielEnCours().getVersion();
|
}
|
|
private void stopIfProductionNotPermitted(String codeTypeFichier, String connectedParticipant) {
|
if (dataInMemoryHandler.getDataInMemory().getReferentielEnCours() == null) {
|
throw new CommonRessourceNotFoundException("Aucun référentiel en cours");
|
}
|
routingChecker.stopIfTypeFichierNotExists(codeTypeFichier, dataInMemoryHandler.getDataInMemory());
|
routingChecker.stopIfNotProducer(codeTypeFichier, dataInMemoryHandler.getDataInMemory(), connectedParticipant);
|
}
|
|
}
|