From b3d0580439b9a00c7eb918085de1694151066004 Mon Sep 17 00:00:00 2001
From: Kenmegne <stephanie.kenmegne@gmail.com>
Date: Thu, 18 Jun 2026 16:02:49 +0000
Subject: [PATCH] rename packages
---
fdx_convert/src/main/java/com/megatim/fdxconvert/util/ValidateurParser.java | 289 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 289 insertions(+), 0 deletions(-)
diff --git a/fdx_convert/src/main/java/com/megatim/fdxconvert/util/ValidateurParser.java b/fdx_convert/src/main/java/com/megatim/fdxconvert/util/ValidateurParser.java
new file mode 100644
index 0000000..9b55b5f
--- /dev/null
+++ b/fdx_convert/src/main/java/com/megatim/fdxconvert/util/ValidateurParser.java
@@ -0,0 +1,289 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxconvert.util;
+
+import com.megatim.dynamicjsonparser.enums.TypeDonnee;
+import com.megatim.typefichier.validator.utilities.Constantes;
+import com.megatim.fdxconvert.exceptions.ValidatorException;
+import com.megatim.fdxconvert.pojo.ColumnDefinition;
+import java.io.File;
+import java.text.Normalizer;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import org.w3c.dom.Document;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+/**
+ *
+ * @author ASUS
+ */
+public class ValidateurParser {
+
+ /**
+ * Méthode permettant d'extraire les éléments du validateur XML
+ *
+ * @param file : Fichier du validateur
+ * @param codeTypeFichier
+ * @return
+ * @throws Exception
+ */
+ public static List<ColumnDefinition> retrieveFieldsFromValidator(File file, String codeTypeFichier) throws Exception {
+
+ Document doc = intialize(file);
+
+ NodeList entityList = doc.getElementsByTagName("entity"); //Liste des noeud <entity>
+
+ //Map qui stocke le champ à une position, ainsi que les caractéristiques de champ(typeDonnee, taille, index de debut d'extraction)
+ Map<Integer, Map<String, String>> mapParams = new HashMap<>();
+
+ int position = 1;
+
+ //Le validateur XML doit avoir au moins deux balises <entity> pour être conforme
+ if (entityList.getLength() >= 2) {
+
+ //Liste des noeud de type <validation> du deuxième Noeud <entity>
+ NodeList entityFileLineChildren = entityList.item(1).getChildNodes();
+
+ //Map qui contient champ set son nombe d'occurrence dans le fichier en cours de traitement
+ Map<String, Integer> mapFieldName = new HashMap<>();
+
+ //parcours de la balise <entity> pour récupérer ses enfants
+ for (int i = 0; i < entityFileLineChildren.getLength(); i++) {
+
+ if (entityFileLineChildren.item(i) != null && entityFileLineChildren.item(i).getAttributes() != null) {
+
+ //balise <validation>
+ Node validation = entityFileLineChildren.item(i);
+
+ if (validation != null) {
+ Map<String, String> mapAttributes = new HashMap<>();
+
+ //Liste des assertions de la balise <validation>
+ NodeList assertions = validation.getChildNodes();
+
+ for (int r = 0; r < assertions.getLength(); r++) {
+
+ Node assertion = assertions.item(r);
+
+ if (assertion != null && assertion.getAttributes() != null) {
+ NamedNodeMap assertionAttributes = assertion.getAttributes();
+
+ for (int q = 0; q < assertionAttributes.getLength(); q++) {
+ String assertionAttributeName = assertionAttributes.item(q).getNodeName();
+ String assertionAttributeValue = assertionAttributes.item(q).getNodeValue();
+
+ if (assertionAttributeName.equalsIgnoreCase(Constantes.ERROR_CODE)) {
+ String fieldName = constructFieldName(assertionAttributeValue, codeTypeFichier);
+
+ //Stocker le nbre d'occurrences trouvés dans la map
+ if (mapFieldName.containsKey(fieldName)) {
+ Integer nbOccurrences = mapFieldName.get(fieldName);
+ mapFieldName.replace(fieldName, nbOccurrences + 1);
+
+ } else {
+ mapFieldName.put(fieldName, 1);
+ }
+ Integer nbOccurrences = mapFieldName.get(fieldName);
+ String finalFieldName = nbOccurrences == 1 ? fieldName : fieldName + (nbOccurrences - 1);
+
+ mapAttributes.put(Constantes.FIELD_NAME, finalFieldName);
+ break;
+ }
+ }
+ //Liste des balises <param-value> de la balise <assertion>
+ NodeList params = assertion.getChildNodes();
+
+ for (int j = 0; j < params.getLength(); j++) {
+
+ if (params.item(j) != null && params.item(j).getAttributes() != null) {
+
+ //Les attributs de la balise <param-value>
+ NamedNodeMap attributesParamValue = params.item(j).getAttributes();
+ Integer positionAttribute = null;
+
+ for (int k = 0; k < attributesParamValue.getLength(); k++) {
+
+ String nodeValue = attributesParamValue.item(k).getNodeValue();
+ String nextNodeValue = attributesParamValue.item(++k).getNodeValue();
+ mapAttributes.put(nodeValue, nextNodeValue);
+
+ if (nodeValue.equals(Constantes.LIBELLE_TAILLE) && !nextNodeValue.equalsIgnoreCase(Constantes.EQUAL_PARAM)) {
+ mapAttributes.put(nodeValue, nextNodeValue);
+
+ } else if (nodeValue.equals(Constantes.LIBELLE_TYPE_DONNEE)) {
+ mapAttributes.put(nodeValue, nextNodeValue);
+ } else if (nodeValue.equals(Constantes.LIBELLE_POSITION)) {
+ positionAttribute = Integer.valueOf(nextNodeValue);
+ }
+ }
+ mapParams.put(positionAttribute != null ? positionAttribute : position, mapAttributes);
+ }
+ }
+ }
+ }
+ }
+ position++;
+ }
+
+ }
+
+ }
+
+// mapParams.remove(mapParams.size());
+ List<ColumnDefinition> columnsDefinition = getColumnsDefinition(mapParams);
+
+ return columnsDefinition;
+
+ }
+
+ /**
+ * Méthode utilitaire pour extraire les données dans un fichier xml
+ *
+ * @param array
+ * @return
+ * @throws Exception
+ */
+ private static Document intialize(File file) throws Exception {
+
+ /**
+ * Défini un factory qui aide à obtenir un parseur qui produit un arbre
+ * d'objets DOM à partir d'un document XML.
+ */
+ DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+
+ /**
+ * création d'un objet du builder pour parser le fichier XML.
+ */
+ DocumentBuilder db = dbf.newDocumentBuilder();
+
+ Document doc = db.parse(file);
+
+ doc.getDocumentElement().normalize();
+
+ return doc;
+ }
+
+ /**
+ * Méthode qui met les informations du validateur dans un ColumnDefinition
+ * pour utilisation future
+ *
+ * @param mapStructure
+ * @return
+ */
+ private static List<ColumnDefinition> getColumnsDefinition(Map<Integer, Map<String, String>> mapStructure) throws ValidatorException {
+ List<ColumnDefinition> columns = new ArrayList<>();
+
+ for (Integer key : mapStructure.keySet()) {
+ ColumnDefinition column = new ColumnDefinition();
+ Map<String, String> value = mapStructure.get(key);
+ column.setPosition(key);
+
+ if (value.get(Constantes.LIBELLE_TAILLE) != null) {
+ column.setTaille(Integer.parseInt(value.get(Constantes.LIBELLE_TAILLE)));
+ }
+ column.setName(value.get(Constantes.FIELD_NAME));
+ column.setTypeDonnee(TypeDonnee.fromValeur(value.get(Constantes.LIBELLE_TYPE_DONNEE)).getValue());
+
+ if (column.getTypeDonnee().equalsIgnoreCase(TypeDonnee.DECIMAL.toString())) {
+
+ if (value.get(Constantes.LIBELLE_TAILLE_PARTIE_DECIMALE) != null) {
+ column.setTaillePartieDecimale(Integer.parseInt(value.get(Constantes.LIBELLE_TAILLE_PARTIE_DECIMALE)));
+ }
+
+ } else if (column.getTypeDonnee().equalsIgnoreCase(TypeDonnee.DATE.toString())) {
+ String separateurDate = value.get(Constantes.LIBELLE_SEPARATEUR_DATE);
+ String formatDate = value.get(Constantes.LIBELLE_FORMAT_DATE);
+
+ if (formatDate != null && !formatDate.isEmpty()) {
+
+ if (separateurDate != null && !separateurDate.isEmpty()) {
+
+ if (separateurDate.equals("-") || separateurDate.equals("/")) {
+ formatDate = addSeparateurToDateFormat(formatDate, separateurDate, column.getName());
+
+ } else {
+ throw new ValidatorException("Le séparateur de date du champ " + column.getName() + " ne peut être " + separateurDate);
+ }
+ }
+ column.setFormatDate(formatDate);
+ column.setSeparateurDate(separateurDate);
+ } else {
+ throw new ValidatorException("Le format date du champ " + column.getName() + " est absent");
+ }
+ }
+
+ columns.add(column);
+ }
+
+ return columns;
+ }
+
+ /**
+ * Méthode qui ajoute le séparateur renseigné dans le validateur au format
+ *
+ * @param formatDate
+ * @param separateurDate
+ * @param columnName
+ * @return
+ */
+ public static String addSeparateurToDateFormat(String formatDate, String separateurDate, String columnName) {
+ StringBuilder dateValue = new StringBuilder();
+
+ switch (formatDate) {
+ case "ddMMyyyy":
+ dateValue.append("dd").append(separateurDate).append("MM").append(separateurDate).append("yyyy");
+ break;
+ case "ddyyyyMM":
+ dateValue.append("dd").append(separateurDate).append("yyyy").append(separateurDate).append("MM");
+ break;
+ case "MMddyyyy":
+ dateValue.append("MM").append(separateurDate).append("dd").append(separateurDate).append("yyyy");
+ break;
+ case "MMyyyydd":
+ dateValue.append("MM").append(separateurDate).append("yyyy").append(separateurDate).append("dd");
+ break;
+ case "yyyyddMM":
+ dateValue.append("yyyy").append(separateurDate).append("dd").append(separateurDate).append("MM");
+ break;
+ case "yyyyMMdd":
+ dateValue.append("yyyy").append(separateurDate).append("MM").append(separateurDate).append("dd");
+ break;
+ case "yyyy":
+ dateValue.append("yyyy");
+ break;
+ case "yyyyMM":
+ dateValue.append("yyyy").append(separateurDate).append("MM");
+ case "MMyyyy":
+ dateValue.append("MM").append(separateurDate).append("yyyy");
+ break;
+ default:
+ throw new ValidatorException("Le format date " + formatDate + " du champ" + columnName + " n'est pas acceptable ");
+ }
+
+ return dateValue.toString();
+ }
+
+ private static String constructFieldName(String fieldName, String codeTypeFichier) {
+
+ fieldName = fieldName.startsWith(codeTypeFichier)
+ ? fieldName.substring(6)
+ : fieldName;
+ fieldName = fieldName.equalsIgnoreCase("int") ? "_" + fieldName : fieldName;
+ return removeAccents(fieldName.replaceAll(" ", "_"));
+ }
+
+ private static String removeAccents(String input) {
+ // Normalize to decomposed form (NFD): é → e + ´, è → e + `
+ String normalized = Normalizer.normalize(input, Normalizer.Form.NFD);
+ // Remove all diacritical marks (accents)
+ return normalized.replaceAll("\\p{M}", "");
+ }
+}
--
Gitblit v1.10.0