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-tools/src/main/java/com/megatim/fdxcommons/tools/utils/ParserUtils.java |  420 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 420 insertions(+), 0 deletions(-)

diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/utils/ParserUtils.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/utils/ParserUtils.java
new file mode 100644
index 0000000..befb586
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/utils/ParserUtils.java
@@ -0,0 +1,420 @@
+/*
+ * 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.fdxcommons.tools.utils;
+
+import com.megatim.fdxcommons.model.enumeration.TypeDonnee;
+import com.megatim.fdxcommons.model.pojo.Constantes;
+import java.io.BufferedWriter;
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.nio.file.Files;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import org.apache.poi.ss.usermodel.CellValue;
+import org.apache.poi.ss.usermodel.DataFormatter;
+import org.apache.poi.ss.usermodel.DateUtil;
+import org.apache.poi.ss.usermodel.FormulaEvaluator;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.ss.util.NumberToTextConverter;
+import org.dhatim.fastexcel.reader.Cell;
+import org.w3c.dom.Document;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+/**
+ *
+ * @author ASUS
+ */
+public class ParserUtils {
+    //Nombre be balise <entity> dans le validateur XML
+
+    private static final int ENTITY_LIST_SIZE = 2;
+
+    private ParserUtils() {
+
+    }
+
+    public static Map<Integer, Map> getValidateurElements(File file) throws Exception {
+        byte[] bytes = Files.readAllBytes(file.toPath());
+        return getValidateurElements(bytes);
+    }
+
+    public static Map<Integer, Map> getValidateurElements(byte[] bytes) throws Exception {
+        Document doc = intialize(bytes);
+        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> mapParams = new HashMap<>();
+
+        int position = 0;
+
+        if (entityList.getLength() == ENTITY_LIST_SIZE) {
+
+            //Liste des noeud de type <validation> du deuximème Noeud <entity>
+            NodeList entityFileLineChildren = entityList.item(1).getChildNodes();
+
+            //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) {
+
+                        position++;
+
+                        //Liste des assertions de la balise <validation>
+                        NodeList assertions = validation.getChildNodes();
+
+                        for (int r = 0; r < assertions.getLength(); r++) {
+                            Node assertion = assertions.item(r);
+                            Map<String, String> mapAttributes = new HashMap<>();
+
+                            if (assertion != null && assertion.getAttributes() != null) {
+
+                                //Les attributs de la balise <assertion>
+                                NamedNodeMap attributesAssertion = assertion.getAttributes();
+
+                                for (int k = 0; k < attributesAssertion.getLength(); k++) {
+
+                                    String nodeValue = attributesAssertion.item(k).getNodeValue();
+                                    String nodeName = attributesAssertion.item(k).getNodeName();
+
+                                    if (nodeName.equals("error-code")) {
+                                        mapAttributes.put(nodeName, nodeValue);
+                                        break;
+                                    }
+                                }
+
+                                //Liste des balises <param-value> de la balise <assertion>
+                                NodeList params = assertion.getChildNodes();
+                                Integer positionValue = null;
+
+                                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();
+
+                                        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.POSITION)) {
+                                                positionValue = Integer.valueOf(nextNodeValue);
+                                            }
+                                        }
+                                        mapParams.put(positionValue != null ? positionValue : position, mapAttributes);
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+        return mapParams;
+
+    }
+
+    public static String getXlxsCellValue(org.apache.poi.ss.usermodel.Cell cell, Workbook wb, String typeDonnee, String formatDate) {
+        if (cell != null) {
+            String formatString = cell.getCellStyle().getDataFormatString();
+
+            switch (cell.getCellTypeEnum()) {
+                case STRING:
+                    if (typeDonnee.equalsIgnoreCase(TypeDonnee.DATE.getValue())) {
+                        Date date = DateUtil.getJavaDate(Double.parseDouble(cell.getStringCellValue()));
+                        return formatDate(date, formatDate);
+
+                    } else if (typeDonnee.equalsIgnoreCase(TypeDonnee.NUMERIQUE.getValue())) {
+                        DataFormatter formatter = new DataFormatter();
+                        String formattedValue = formatter.formatCellValue(cell);
+                        return formattedValue.replace(",", "");
+                    }
+                    return cell.getStringCellValue();
+                case NUMERIC:
+                    if (typeDonnee.equalsIgnoreCase(TypeDonnee.DATE.getValue())) {
+                        Date date = DateUtil.getJavaDate(cell.getNumericCellValue());
+                        return formatDate(date, formatDate);
+
+                    } else if (DateUtil.isCellDateFormatted(cell)) {
+                        return convertToDate(cell, formatDate);
+
+                    } else if (formatString != null && formatString.contains("%")) {
+                        return String.valueOf(cell.getNumericCellValue());
+
+                    } else {
+                        return NumberToTextConverter.toText(cell.getNumericCellValue());
+                    }
+                case BOOLEAN:
+                    return String.valueOf(cell.getBooleanCellValue());
+                case BLANK:
+                    return "";
+                case FORMULA:
+                    FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
+                    CellValue cellValue = evaluator.evaluate(cell);
+                    return cellValue.formatAsString();
+                default:
+                    return "";
+            }
+        }
+        return "";
+    }
+
+    private static String convertToDate(org.apache.poi.ss.usermodel.Cell cell, String formatDate) {
+        Date date = cell.getDateCellValue();
+        return formatDate(date, formatDate);
+    }
+
+    private static String formatDate(Date date, String formatDate) {
+        SimpleDateFormat sdf
+                = new SimpleDateFormat(formatDate != null && !formatDate.isEmpty()
+                        ? formatDate
+                        : "dd/MM/yyyy");
+        return sdf.format(date);
+    }
+
+    /**
+     * Méthode permettant de convertir la données contenu dans une cellule excel
+     * en chaîne de caractères
+     *
+     * @param cell
+     * @return
+     */
+    public static String getCellValueAsString(Cell cell) {
+        String val = "";
+
+        if (cell != null) {
+            switch (cell.getType()) {
+
+                case EMPTY:
+                    break;
+
+                case STRING:
+
+                    if (!cell.getText().equals("null")) {
+
+                        val = cell.getText().replaceAll("\\p{Cntrl}", "");
+
+                    }
+
+                    break;
+
+                case NUMBER:
+
+                    val = cell.asNumber().toPlainString();
+
+                    if (val.equals("null")) {
+
+                    }
+
+                    break;
+
+                case BOOLEAN:
+
+                    val = String.valueOf(cell.asBoolean());
+
+                    if (val.equals("null")) {
+
+                    }
+
+                    break;
+
+                default:
+                    break;
+
+            }
+
+        }
+
+        return val;
+
+    }
+
+    /**
+     * Méthode qui retire le caractère retour charriot dans une chaîne
+     *
+     * @param str
+     * @return
+     */
+//    public static String removeReturnCharriot(String str) {
+//        String result = str;
+//
+//        if (str != null && !str.isEmpty()) {
+//            String[] tab = str.split("\n");
+//            result = "";
+//
+//            for (String s : tab) {
+//                result += s;
+//            }
+//        }
+//        return result;
+//    }
+    /**
+     * Méthode utilitaire pour extraire les données dans un fichier xml
+     *
+     * @param array
+     * @return
+     * @throws Exception
+     */
+    private static Document intialize(byte[] array) throws Exception {
+
+        /**
+         * Défini un factory qui aide à obtenir un parseur qui produit un arbre
+         * d'objets DOM à partir d'un docuent 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(new ByteArrayInputStream(array));
+
+        doc.getDocumentElement().normalize();
+
+        return doc;
+    }
+
+    private static Document intialize(File file) throws Exception {
+        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+        DocumentBuilder db = dbf.newDocumentBuilder();
+        Document doc = db.parse(file);
+        doc.getDocumentElement().normalize();
+
+        return doc;
+    }
+
+    /**
+     * Méthode pour obtenir l'objet de typr char correspondant à chaque
+     * délimiteur
+     *
+     * @param delimiteur
+     * @return
+     */
+    public static char characterOfDelimiteur(String delimiteur) {
+        char character;
+
+        switch (delimiteur) {
+            case "\\t":
+                character = '\t';
+                break;
+            case "\\n":
+                character = '\n';
+                break;
+            case "":
+                character = '\0';
+                break;
+            default:
+                character = delimiteur.charAt(0);
+        }
+
+        return character;
+    }
+
+    /**
+     * Méthode permettant d'encoder une chaîne de caractères
+     *
+     * @param datas : tableau de String à encoder
+     * @param charset : encodage à utiliser
+     * @return
+     */
+    public static String[] encodeStrings(String[] datas, Charset charset) {
+        String[] encodedStrings = new String[datas.length];
+
+        for (int i = 0; i < encodedStrings.length; i++) {
+            byte[] bytesOfString = datas[i].getBytes();
+            encodedStrings[i] = new String(bytesOfString, charset);
+
+        }
+        return encodedStrings;
+    }
+
+    /**
+     * Méthode qui extrait une sous-chaîne dans une chaîne de caractères en
+     * utilisant un délimiteur
+     *
+     * @param line : chaîne mère à séparer
+     * @param character : délimiteur de chaîne
+     * @return : retourne un tableau contenant les châines extraites
+     */
+    public static String[] splitIntoColumns(String line, char character) {
+
+        int count = 0;
+
+        for (int i = 0; i < line.length(); i++) {
+
+            if (line.charAt(i) == character) {
+                count++;
+            }
+
+        }
+
+        String[] columns = new String[count + 1];
+
+        StringBuilder builder = new StringBuilder(0);
+
+        count = 0;
+
+        for (int i = 0; i < line.length(); i++) {
+
+            if (line.charAt(i) == character) {
+
+                columns[count] = builder.toString();
+
+                builder = new StringBuilder(0);
+
+                count++;
+
+            } else {
+
+                builder.append(line.charAt(i));
+            }
+
+        }
+
+        columns[count] = builder.toString();
+
+        return columns;
+    }
+
+    /**
+     * Méthode qui écrit dans un fichier
+     *
+     * @param finalColumnsTableLine : liste des châines à écrire dans le fichier
+     * @param bufferWriter : ressource permettant d'écrire dans le fichier
+     */
+    public static void writeToFile(String[] finalColumnsTableLine, final BufferedWriter bufferWriter) throws IOException {
+
+        //Ecriture dans le fichier output
+        StringBuilder safeLineBuilder = new StringBuilder(0);
+
+        for (String s : finalColumnsTableLine) {
+            safeLineBuilder.append(s);
+        }
+
+        String safeLine = safeLineBuilder.toString();
+
+        if (safeLine.length() > 0) {
+            bufferWriter.write(safeLine + System.lineSeparator());
+
+        }
+    }
+}

--
Gitblit v1.10.0