From 23a46b4be35277e06ec89f48730eeb694e686be8 Mon Sep 17 00:00:00 2001
From: Kenmegne <stephanie.kenmegne@gmail.com>
Date: Thu, 18 Jun 2026 15:40:06 +0000
Subject: [PATCH] add fdx-commons and fdx-consultation
---
apifdxweb/api/apifdxweb-core-impl/src/main/java/com/megatim/apifdxweb/core/impl/helper/DataConsumptionOperationsImpl.java | 342 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 342 insertions(+), 0 deletions(-)
diff --git a/apifdxweb/api/apifdxweb-core-impl/src/main/java/com/megatim/apifdxweb/core/impl/helper/DataConsumptionOperationsImpl.java b/apifdxweb/api/apifdxweb-core-impl/src/main/java/com/megatim/apifdxweb/core/impl/helper/DataConsumptionOperationsImpl.java
new file mode 100644
index 0000000..0348505
--- /dev/null
+++ b/apifdxweb/api/apifdxweb-core-impl/src/main/java/com/megatim/apifdxweb/core/impl/helper/DataConsumptionOperationsImpl.java
@@ -0,0 +1,342 @@
+package com.megatim.apifdxweb.core.impl.helper;
+
+import com.megatim.apifdxweb.core.ifaces.helper.DataConsumptionOperations;
+import com.megatim.apifdxweb.core.ifaces.helper.RoutingChecker;
+import com.megatim.apifdxweb.dao.impl.audit.AuditActionsParticicipantsQuery;
+import com.megatim.apifdxweb.dao.impl.audit.AuditActionsParticipantRepository;
+import com.megatim.apifdxweb.model.audit.AuditActionsParticipant;
+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.enumeration.CriteriaLogicConnector;
+import com.megatim.fdxcommons.model.enumeration.Operateur;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.model.pojo.PageData;
+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.DateActionColumnDefinition;
+import com.megatim.fdxcommons.tools.database.tables.FdxApiTable;
+import com.megatim.fdxcommons.tools.database.tables.FdxTableRow;
+import com.megatim.fdxcommons.tools.database.tables.IndexColumnDefinition;
+import com.megatim.fdxcommons.tools.exceptions.CommonApplicationServerException;
+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.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.stream.Collectors;
+import javax.annotation.Resource;
+import javax.ejb.EJB;
+import javax.enterprise.context.Dependent;
+import javax.inject.Inject;
+import javax.sql.DataSource;
+
+/**
+ *
+ * @author Gabuntu
+ */
+@Dependent
+public class DataConsumptionOperationsImpl implements DataConsumptionOperations {
+
+ @Resource(lookup = AppContext.JNDI_NAME)
+ private DataSource dataSource;
+
+ @Inject
+ private DataInMemoryHandler dataInMemoryHandler;
+
+ @Inject
+ private RoutingChecker routingChecker;
+
+ @EJB
+ private AuditActionsParticipantRepository auditActionsParticipantRepository;
+
+ @Override
+ public List<Map<String, Object>> loadAll(String codeTypeFichier, String codeParticipant) {
+ stopIfNotConsumer(codeTypeFichier, codeParticipant);
+
+ try ( Connection connection = new DBConnection(dataSource).connection()) {
+
+ connection.setAutoCommit(false);
+
+ SelectQueryResult result = selectResult(connection, codeTypeFichier, null);
+ performAudit(connection, codeParticipant, codeTypeFichier, result.lastIndexRead());
+
+ connection.commit();
+
+ return selectedData(result.rows());
+ } catch (Exception ex) {
+ Logger.getLogger(DataConsumptionOperationsImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+ throw new CommonApplicationServerException();
+ }
+ }
+
+ @Override
+ public List<Map<String, Object>> findByCriterias(String codeTypeFichier, CriteriaEntityFromView criterion, String codeParticipant) {
+ stopIfNotConsumer(codeTypeFichier, codeParticipant);
+
+ try ( Connection connection = new DBConnection(dataSource).connection()) {
+
+ SelectQueryResult result = selectResult(connection, codeTypeFichier, new CriteriaEntityFromViewToQueryCriterion(criterion).queryCriterion());
+ return selectedData(result.rows());
+
+ } catch (Exception ex) {
+ Logger.getLogger(DataConsumptionOperationsImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+ throw new CommonApplicationServerException();
+ }
+ }
+
+// @Override
+// public List<Map<String, Object>> loadAllUpdated(String codeTypeFichier, String codeParticipant) {
+// stopIfNotConsumer(codeTypeFichier, codeParticipant);
+//
+// try ( Connection connection = new DBConnection(dataSource).connection()) {
+//
+// connection.setAutoCommit(false);
+//
+// SelectQueryResult result = selectResult(connection, codeTypeFichier, updatedCriterion(codeTypeFichier, codeParticipant));
+//
+// if (!result.rows().isEmpty()) {
+// performAudit(connection, codeParticipant, codeTypeFichier, result.lastIndexRead());
+// }
+// connection.commit();
+// return selectedData(result.rows());
+// } catch (Exception ex) {
+// Logger.getLogger(DataConsumptionOperationsImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+// throw new CommonApplicationServerException();
+// }
+// }
+ @Override
+ public List<Map<String, Object>> loadAllAddedAndUpdated(String codeTypeFichier, String codeParticipant) {
+ stopIfNotConsumer(codeTypeFichier, codeParticipant);
+
+ try ( Connection connection = new DBConnection(dataSource).connection()) {
+
+ connection.setAutoCommit(false);
+
+ SelectQueryResult result = selectResult(connection, codeTypeFichier, loadedAndUpdatedCriterion(codeTypeFichier, codeParticipant));
+
+ if (!result.rows().isEmpty()) {
+ performAudit(connection, codeParticipant, codeTypeFichier, result.lastIndexRead());
+ }
+ connection.commit();
+ return selectedData(result.rows());
+ } catch (Exception ex) {
+ Logger.getLogger(DataConsumptionOperationsImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+ throw new CommonApplicationServerException();
+ }
+ }
+
+ @Override
+ public PageData loadAllWithPagination(String codeTypeFichier, String codeParticipant, int pageNumber, int pageSize) {
+ stopIfNotConsumer(codeTypeFichier, codeParticipant);
+
+ try ( Connection connection = new DBConnection(dataSource).connection()) {
+ return getPageData(connection, codeTypeFichier, null, pageNumber, pageSize);
+
+ } catch (Exception ex) {
+ Logger.getLogger(DataConsumptionOperationsImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+ throw new CommonApplicationServerException();
+ }
+
+ }
+
+ @Override
+ public PageData findByCriteriaWithPagination(String codeTypeFichier, CriteriaEntityFromView criterion, String codeParticipant, int pageNumber, int pageSize) {
+ stopIfNotConsumer(codeTypeFichier, codeParticipant);
+
+ try ( Connection connection = new DBConnection(dataSource).connection()) {
+ return getPageData(connection, codeTypeFichier, new CriteriaEntityFromViewToQueryCriterion(criterion).queryCriterion(), pageNumber, pageSize);
+
+ } catch (Exception ex) {
+ Logger.getLogger(DataConsumptionOperationsImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+ throw new CommonApplicationServerException();
+ }
+ }
+
+ @Override
+ public long countAll(String codeTypeFichier, String codeParticipant) {
+ stopIfNotConsumer(codeTypeFichier, codeParticipant);
+
+ try ( Connection connection = new DBConnection(dataSource).connection()) {
+ return count(connection, codeTypeFichier, null);
+
+ } catch (Exception ex) {
+ Logger.getLogger(DataConsumptionOperationsImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+ throw new CommonApplicationServerException();
+ }
+ }
+
+ @Override
+ public long countAllLoadedOrUpdated(String codeTypeFichier, String codeParticipant) {
+ stopIfNotConsumer(codeTypeFichier, codeParticipant);
+
+ try ( Connection connection = new DBConnection(dataSource).connection()) {
+ return count(connection, codeTypeFichier, loadedAndUpdatedCriterion(codeTypeFichier, codeParticipant));
+ } catch (Exception ex) {
+ Logger.getLogger(DataConsumptionOperationsImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+ throw new CommonApplicationServerException();
+ }
+ }
+
+ private void performAudit(Connection connection, String participantDemandeur, String typeFichierConsulte, int lastReadIndex) throws Exception {
+ AuditActionsParticipant auditAction = lastAudit(participantDemandeur, typeFichierConsulte);
+ LocalDateTime dateAction = LocalDateTime.now();
+
+ if (auditAction == null) {
+ auditAction = new AuditActionsParticipant();
+ auditAction.setParticipantDemandeur(participantDemandeur);
+ auditAction.setTypeFichierConsulte(typeFichierConsulte);
+ auditAction.setLastIndexRead(lastReadIndex);
+ auditAction.setDateAction(dateAction);
+
+ new AuditActionsParticicipantsQuery(connection, auditAction).insert();
+
+ } else {
+ auditAction.setDateAction(dateAction);
+
+ if (lastReadIndex > auditAction.getLastIndexRead()) {
+ auditAction.setLastIndexRead(lastReadIndex);
+ }
+
+ new AuditActionsParticicipantsQuery(connection, auditAction).update();
+ }
+ }
+
+ private AuditActionsParticipant lastAudit(String codeParticipant, String codeTypeFichier) {
+ return auditActionsParticipantRepository.lastAudit(codeParticipant, codeTypeFichier);
+ }
+
+ private long count(Connection connection, String codeTypeFichier, QueryCriterion criterion) {
+ try {
+
+ return table(connection, codeTypeFichier).count(criterion);
+ } catch (Exception ex) {
+ throw new ApplicationServerException(ex.getMessage());
+ }
+ }
+
+ private SelectQueryResult selectResult(Connection connection, String codeTypeFichier, QueryCriterion queryCriterion) {
+ try {
+ return table(connection, codeTypeFichier).selectResult(queryCriterion);
+ } catch (Exception ex) {
+ throw new ApplicationServerException(ex.getMessage());
+ }
+ }
+
+ private SelectQueryResult selectResult(Connection connection, String codeTypeFichier, QueryCriterion queryCriterion, int pageNumber, int pageSize) {
+ try {
+ int offset = (pageNumber - 1) * pageSize;
+ return table(connection, codeTypeFichier).selectResult(queryCriterion, pageSize, offset);
+ } catch (Exception ex) {
+ throw new ApplicationServerException(ex.getMessage());
+ }
+ }
+
+ private List<Map<String, Object>> selectedData(List<FdxTableRow> rows) {
+ return rows
+ .stream()
+ .map(r -> {
+ Map<String, Object> result = new HashMap<>();
+ r.getDataColumns().forEach(column -> result.put(column.getName(), column.getValue()));
+ return result;
+ })
+ .collect(Collectors.toList());
+ }
+
+ private FdxApiTable table(Connection connection, String codeTypeFichier) {
+ return new FdxApiTable(codeTypeFichier, versionReferentiel(), connection);
+ }
+
+ private String versionReferentiel() {
+ return dataInMemoryHandler.getDataInMemory().getReferentielEnCours().getVersion();
+ }
+
+ private void stopIfNotConsumer(String codeTypeFichier, String connectedParticipant) {
+ if (dataInMemoryHandler.getDataInMemory().getReferentielEnCours() == null) {
+ throw new CommonRessourceNotFoundException("Aucun référentiel en cours");
+ }
+ routingChecker.stopIfTypeFichierNotExists(codeTypeFichier, dataInMemoryHandler.getDataInMemory());
+ routingChecker.stopIfNotConsumer(codeTypeFichier, dataInMemoryHandler.getDataInMemory(), connectedParticipant);
+ }
+
+ private PageData getPageData(Connection connection, String codeTypeFichier, QueryCriterion queryCriterion, int pageNumber, int pageSize) {
+
+ try {
+
+ SelectQueryResult result = selectResult(connection, codeTypeFichier, queryCriterion, pageNumber, pageSize);
+
+ List<Map<String, Object>> loadedData = selectedData(result.rows());
+ long totalNumberOfElements = table(connection, codeTypeFichier).count(queryCriterion);
+
+ PageData pageData = new PageData();
+ pageData.setLoadedData(loadedData);
+ pageData.setPageNumber(pageNumber);
+ pageData.setPageSize(pageSize);
+ pageData.setTotalNumberOfElements(totalNumberOfElements);
+
+ return pageData;
+
+ } catch (Exception ex) {
+ throw new ApplicationServerException(ex.getMessage());
+ }
+ }
+
+ private QueryCriterion updatedCriterion(String codeTypeFichier, String codeParticipant) {
+ AuditActionsParticipant lastAudit = lastAudit(codeParticipant, codeTypeFichier);
+ if (lastAudit != null) {
+
+ String dateActionColonne = new DateActionColumnDefinition().name();
+
+ return new QueryCriterion(
+ dateActionColonne,
+ lastAudit.getDateAction(),
+ Operateur.GREATER_THAN,
+ null,
+ Arrays.asList()
+ );
+ } else {
+ return null;
+ }
+ }
+
+ private QueryCriterion loadedAndUpdatedCriterion(String codeTypeFichier, String codeParticipant) {
+ AuditActionsParticipant lastAudit = lastAudit(codeParticipant, codeTypeFichier);
+ if (lastAudit != null) {
+
+ String indexColonne = new IndexColumnDefinition().name();
+ String dateActionColonne = new DateActionColumnDefinition().name();
+
+ return new QueryCriterion(
+ null,
+ null,
+ null,
+ CriteriaLogicConnector.OR,
+ Arrays.asList(
+ new QueryCriterion(
+ indexColonne,
+ lastAudit.getLastIndexRead(),
+ Operateur.GREATER_THAN,
+ null,
+ Arrays.asList()
+ ),
+ new QueryCriterion(
+ dateActionColonne,
+ lastAudit.getDateAction(),
+ Operateur.GREATER_THAN,
+ null,
+ Arrays.asList()
+ )
+ )
+ );
+ } else {
+ return null;
+ }
+ }
+
+}
--
Gitblit v1.10.0