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

---
 fdx-commons/fdxcommons-core-impl/src/main/java/com/megatim/fdxcommons/core/impl/db/ImportZipValidatorImpl.java |  133 ++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 133 insertions(+), 0 deletions(-)

diff --git a/fdx-commons/fdxcommons-core-impl/src/main/java/com/megatim/fdxcommons/core/impl/db/ImportZipValidatorImpl.java b/fdx-commons/fdxcommons-core-impl/src/main/java/com/megatim/fdxcommons/core/impl/db/ImportZipValidatorImpl.java
new file mode 100644
index 0000000..292bb60
--- /dev/null
+++ b/fdx-commons/fdxcommons-core-impl/src/main/java/com/megatim/fdxcommons/core/impl/db/ImportZipValidatorImpl.java
@@ -0,0 +1,133 @@
+package com.megatim.fdxcommons.core.impl.db;
+
+import com.megatim.fdxcommons.model.referentiel.Referentiel;
+import com.megatim.fdxcommons.model.referentiel.ValidateurFichierConfiguration;
+import com.megatim.fdxcommons.core.ifaces.db.ImportZipValidatorIfaces;
+import com.megatim.fdxcommons.core.ifaces.helper.referentiel.ValidateurTypeFichierParser;
+import com.megatim.fdxcommons.tools.exceptions.ImportReferentielException;
+import com.megatim.fdxcommons.model.pojo.ReferentielToImportData;
+import com.megatim.fdxcommons.model.integration.TableDefinition;
+import java.io.File;
+import java.nio.file.Files;
+import java.nio.file.LinkOption;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+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.enterprise.context.Dependent;
+import javax.inject.Inject;
+
+/**
+ *
+ * @author ASUS
+ */
+@Dependent
+public class ImportZipValidatorImpl implements ImportZipValidatorIfaces {
+
+    @Inject
+    private ValidateurTypeFichierParser validateurTypeFichierParser;
+
+    @Override
+    public List<TableDefinition> getTableDefinitions(File validatorDir, ReferentielToImportData referentielToImportData) throws Exception {
+
+        List<TableDefinition> tableDefinitions = new ArrayList<>();
+
+        if (validatorDir.isDirectory()) {
+            for (Referentiel referentiel : referentielToImportData.getReferentiels()) {
+                Path referentielPath = Paths.get(validatorDir.getAbsolutePath(), referentiel.getVersion());
+
+                //S'il n'existe pas un chemin correspondant à la version du referentiel en_cours
+                if (!Files.exists(referentielPath, LinkOption.NOFOLLOW_LINKS)) {
+                    if (referentiel.getVersion().equals(referentielToImportData.getReferentielEnCours().getVersion())) {
+                        throw new ImportReferentielException("Le répertoire '" + referentiel.getVersion() + "' des validateurs est introuvable");
+                    } else {
+                        continue;
+                    }
+                }
+
+                //Si ce chemin n'est pas celui d'un répertoire
+                if (!Files.isDirectory(referentielPath, LinkOption.NOFOLLOW_LINKS)) {
+                    throw new ImportReferentielException("'" + referentiel.getVersion() + "' n'est pas un répertoire dans le repertoire des validateurs");
+                }
+
+                //Liste des configurations de validateurs associées au reférentiel en cours de traitement
+                List<ValidateurFichierConfiguration> validateursConfiguratioForReferentiel
+                        = validateurFichierConfigurationForCurrentReferentiel(referentiel, referentielToImportData);
+
+                Map<String, ValidateurFichierConfiguration> mapValidateurConfByFileName = fileNameToValidateurConfiguration(validateursConfiguratioForReferentiel);
+
+                //Liste des répertoires des participants du referentiel en cours de traitement
+                File[] participantDirectories = (new File(validatorDir.getAbsolutePath(), referentiel.getVersion())).listFiles();
+                for (File participantDirectory : participantDirectories) {
+
+                    //Si le fichier en cours de traitement est un répertoire   
+                    if (participantDirectory.isDirectory()) {
+
+                        //Liste des validateurs contenus dans le dossier d'un participant
+                        File[] validateurs = participantDirectory.listFiles();
+
+                        for (File validatorFile : validateurs) {
+
+                            if (validatorFile.isFile()) {
+
+                                if (mapValidateurConfByFileName.containsKey(validatorFile.getName())) {
+                                    TableDefinition tableDefinition = new TableDefinition();
+                                    String codeTypeFichier = mapValidateurConfByFileName.get(validatorFile.getName()).getTypeFichier().getCode();
+
+                                    try {
+                                        tableDefinition = validateurTypeFichierParser.parseToColumnDefinition(validatorFile.getAbsolutePath(),
+                                                codeTypeFichier, referentiel.getVersion());
+                                    } catch (Exception ex) {
+                                        tableDefinition.setColumnDefinitions(new ArrayList<>());
+                                        Logger.getLogger(ImportZipValidatorImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
+                                    }
+                                    if (tableDefinition.getColumnDefinitions() != null && !tableDefinition.getColumnDefinitions().isEmpty()) {
+                                        tableDefinitions.add(tableDefinition);
+                                    }
+                                }
+                            }
+                        }
+
+                    }
+                }
+            }
+        }
+
+        return tableDefinitions;
+    }
+
+    private List<ValidateurFichierConfiguration> validateurFichierConfigurationForCurrentReferentiel(Referentiel referentielEnCours, ReferentielToImportData referentielToImportData) {
+        return referentielToImportData.getValidateurFichierConfigurations()
+                .stream()
+                .filter(p -> p.getReferentiel().getVersion().equals(referentielEnCours.getVersion()))
+                .collect(Collectors.toList());
+    }
+
+    /**
+     * Classer les configurations des validateurs par nom du fichier
+     *
+     * @param validateursConf
+     * @return
+     */
+    private Map<String, ValidateurFichierConfiguration> fileNameToValidateurConfiguration(List<ValidateurFichierConfiguration> validateursConfiguration) {
+        Map<String, ValidateurFichierConfiguration> mapValidateurConf = new HashMap<>();
+
+        for (ValidateurFichierConfiguration vc : validateursConfiguration) {
+            File file = new File(vc.getFileName());
+            /**
+             * Dans le fichier zip du referentiel, le nom du fichier de
+             * validateur est en chemin absolu Raison pour laquelle il faut
+             * passer un objet de type 'File' afin de recupérer le nom relatif
+             * du fichier
+             */
+            mapValidateurConf.put(file.getName(), vc);
+        }
+
+        return mapValidateurConf;
+    }
+}

--
Gitblit v1.10.0