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/ReferentielConsumptionHelperImpl.java | 125 +++++++++++++++++++++++++++++++++++++++++
1 files changed, 125 insertions(+), 0 deletions(-)
diff --git a/apifdxweb/api/apifdxweb-core-impl/src/main/java/com/megatim/apifdxweb/core/impl/helper/ReferentielConsumptionHelperImpl.java b/apifdxweb/api/apifdxweb-core-impl/src/main/java/com/megatim/apifdxweb/core/impl/helper/ReferentielConsumptionHelperImpl.java
new file mode 100644
index 0000000..28477c1
--- /dev/null
+++ b/apifdxweb/api/apifdxweb-core-impl/src/main/java/com/megatim/apifdxweb/core/impl/helper/ReferentielConsumptionHelperImpl.java
@@ -0,0 +1,125 @@
+package com.megatim.apifdxweb.core.impl.helper;
+
+import com.megatim.apifdxweb.core.ifaces.referentiel.ReferentielManager;
+import com.megatim.apifdxweb.tools.AppContext;
+import com.megatim.fdxcommons.core.ifaces.db.ReferentielDataSaver;
+import com.megatim.fdxcommons.core.ifaces.helper.DataInMemoryHandler;
+import com.megatim.fdxcommons.core.ifaces.helper.ReferentielConsumptionHelper;
+import com.megatim.fdxcommons.core.ifaces.helper.referentiel.DynamicTableCreator;
+import com.megatim.fdxcommons.model.pojo.ReferentielToImportData;
+import com.megatim.fdxcommons.model.referentiel.Referentiel;
+import com.megatim.fdxcommons.tools.exceptions.ImportReferentielException;
+import javax.annotation.Resource;
+import javax.enterprise.context.Dependent;
+import javax.inject.Inject;
+import javax.sql.DataSource;
+import javax.transaction.Transactional;
+import com.megatim.fdxcommons.core.ifaces.dataproduction.DataMigration;
+import com.megatim.fdxcommons.core.ifaces.referentiel.historique.ReferentielIntegrationHistoriqueManager;
+import com.megatim.fdxcommons.model.pojo.TableDefinition;
+import com.megatim.fdxcommons.model.referentiel.historique.ReferentielIntegrationHistorique;
+import com.megatim.fdxcommons.model.referentiel.historique.ReferentielIntegrationHistoriqueId;
+import com.megatim.fdxcommons.model.referentiel.historique.pojo.FilteredTypeFichier;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+ *
+ * @author ASUS
+ */
+@Dependent
+public class ReferentielConsumptionHelperImpl implements ReferentielConsumptionHelper {
+
+ @Inject
+ private ReferentielDataSaver referentielDataSaver;
+
+ @Inject
+ ReferentielManager referentielManager;
+
+ @Inject
+ private DataInMemoryHandler dataInMemoryHandler;
+
+ @Inject
+ private DynamicTableCreator dynamicTableCreator;
+
+ @Resource(lookup = AppContext.JNDI_NAME)
+ private DataSource dataSource;
+
+ @Inject
+ private DataMigration dataMigration;
+
+ @Inject
+ private ReferentielIntegrationHistoriqueManager refIntegrationHistoriqueManager;
+
+ @Override
+ @Transactional
+ public void consume(ReferentielToImportData referentielToImportData) throws Exception {
+ Referentiel refInDB = referentielManager.getReferentielEnCours();
+
+ if (refInDB != null && Long.valueOf(refInDB.getVersion()) >= Long.valueOf(referentielToImportData.getReferentielEnCours().getVersion())) {
+ throw new ImportReferentielException("Version du référentiel 'en cours' est antérieure à la version existante dans le système");
+ }
+ referentielDataSaver.persist(referentielToImportData);
+
+ if (refInDB != null) {
+ FilteredTypeFichier filteredTypeFichiers = dataMigration.filterTypeFichiers(referentielToImportData.getTableDefinitions(),
+ refInDB.getVersion(),
+ referentielToImportData.getReferentielEnCours().getVersion());
+
+ //On creé uniquement les tables dont le typefichier est absent dans le ref précédent ou la structure de ses colonnes a changé
+ createTables(filteredTypeFichiers.getChangedOrNewTypeFichiers(), referentielToImportData.getTableDefinitions());
+
+ saveReferentielIntegrationHistorique(filteredTypeFichiers, referentielToImportData.getReferentielEnCours().getVersion());
+ } else {
+ //On creé les tables
+ dynamicTableCreator.createDynamicTables(referentielToImportData.getTableDefinitions());
+
+ saveHistoriqueChangedOrNewTypeFichiers(referentielToImportData);
+ }
+
+ //Charger les nouvelles informations du référentiel dans un objet en mémoire
+ dataInMemoryHandler.initializeDataInMemory();
+ }
+
+ private void createTables(Set<String> changedOrNewTypeFichiers, List<TableDefinition> tableDefs) throws Exception {
+ dynamicTableCreator
+ .createDynamicTables(tableDefs
+ .stream()
+ .filter(t -> changedOrNewTypeFichiers.contains(t.getCodeTypeFichier()))
+ .collect(Collectors.toList()));
+ }
+
+ private void saveReferentielIntegrationHistorique(FilteredTypeFichier filteredTypeFichiers, String newRef) {
+ saveHistoriqueChangedOrNewTypeFichiers(filteredTypeFichiers.getChangedOrNewTypeFichiers(), newRef);
+ saveHistoriqueUnChangedTypeFichiers(filteredTypeFichiers.getUnChangedTypeFichiers(), newRef);
+ }
+
+ private void saveHistoriqueChangedOrNewTypeFichiers(Set<String> changedOrNewTypeFichiers, String newRef) {
+ for (String codeTypeFichier : changedOrNewTypeFichiers) {
+ refIntegrationHistoriqueManager.save(new ReferentielIntegrationHistorique(codeTypeFichier, newRef, new HashSet<>(Arrays.asList(newRef))));
+ }
+ }
+
+ private void saveHistoriqueChangedOrNewTypeFichiers(ReferentielToImportData referentielToImportData) {
+ Set<String> changedOrNewTypeFichiers = referentielToImportData.getTypeFichiers().stream().map(t -> t.getCode()).collect(Collectors.toSet());
+ saveHistoriqueChangedOrNewTypeFichiers(changedOrNewTypeFichiers, referentielToImportData.getReferentielEnCours().getVersion());
+ }
+
+ private void saveHistoriqueUnChangedTypeFichiers(Set<String> unChangedOrNewTypeFichiers, String newRef) {
+
+ for (String codeTypeFichier : unChangedOrNewTypeFichiers) {
+ ReferentielIntegrationHistorique refInt = refIntegrationHistoriqueManager
+ .getById(new ReferentielIntegrationHistoriqueId(codeTypeFichier, newRef));
+
+ if (refInt == null) {
+ refIntegrationHistoriqueManager.save(new ReferentielIntegrationHistorique(codeTypeFichier, newRef, new HashSet<>(Arrays.asList(newRef))));
+ } else {
+ refInt.getDependingReferentiels().add(newRef);
+ refIntegrationHistoriqueManager.save(refInt);
+ }
+ }
+ }
+}
--
Gitblit v1.10.0