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