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/database/queries/metadata/FdxParsedDataRow.java |  123 +++++++++++++++++++++++++++++++++++++++++
 1 files changed, 123 insertions(+), 0 deletions(-)

diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/FdxParsedDataRow.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/FdxParsedDataRow.java
new file mode 100644
index 0000000..4462e33
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/FdxParsedDataRow.java
@@ -0,0 +1,123 @@
+package com.megatim.fdxcommons.tools.database.queries.metadata;
+
+import com.megatim.fdxcommons.model.enumeration.TypeDonnee;
+import com.megatim.fdxcommons.model.integration.ColumnDefinition;
+import com.megatim.fdxcommons.model.integration.TableDefinition;
+import com.megatim.fdxcommons.tools.database.exceptions.BadDataValueException;
+import com.megatim.fdxcommons.tools.database.exceptions.ColumnNotFoundException;
+import com.megatim.fdxcommons.tools.database.exceptions.LocalDateTimeValueParseError;
+import java.math.BigDecimal;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.stream.Collectors;
+import org.apache.commons.validator.GenericValidator;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class FdxParsedDataRow {
+
+    private final Map<String, Object> data;
+    private final Map<String, ColumnDefinition> columnNameToColumnDefinition;
+    private final TableDefinition tableDefinition;
+    private final Map<String, Object> row = new LinkedHashMap<>();
+
+    public FdxParsedDataRow(Map<String, Object> data, TableDefinition tableDefinition) {
+        this.data = data;
+        this.tableDefinition = tableDefinition;
+        this.columnNameToColumnDefinition
+                = tableDefinition.getColumnDefinitions()
+                        .stream()
+                        .collect(Collectors.toMap(c -> c.getName().trim().toLowerCase(), c -> c));
+    }
+
+    public Map<String, Object> dataRow() throws ColumnNotFoundException, BadDataValueException, LocalDateTimeValueParseError {
+
+        if (row.isEmpty()) {
+
+            for (Map.Entry<String, Object> entry : data.entrySet()) {
+
+                String key = entry.getKey();
+                Object value = entry.getValue();
+
+                ColumnDefinition columnDefinition = columnNameToColumnDefinition.get(key.trim().toLowerCase());
+                if (columnDefinition == null) {
+                    throw new ColumnNotFoundException("La colonne " + key + " n'est pas présente pour ce fichier");
+                }
+                row.put(key.trim(), parse(columnDefinition, value));
+            }
+        }
+
+        return row;
+    }
+
+    private Object parse(ColumnDefinition columnDefinition, Object value) throws BadDataValueException, LocalDateTimeValueParseError {
+
+        String columnType = columnDefinition.getTypeDonnee();
+
+        if (columnType.equals(TypeDonnee.ALPHANUMERIQUE.toString()) && (value == null
+                || (value instanceof String && lengthLowerOrEquals(((String) value).trim(), columnDefinition.getTaille())))) {
+
+            return value != null ? value.toString().trim() : value;
+
+        } else if (columnType.equals(TypeDonnee.NUMERIQUE.toString())) {
+
+            if (value == null || value.toString().trim().isEmpty()) {
+                return null;
+            }
+
+            String stringValue = value.toString().trim()
+                    .replaceAll("\\s+", "")
+                    .replaceAll("\\u00A0", "")//nbsp
+                    .replaceAll("&nbsp;", "");
+            if (lengthLowerOrEquals(stringValue, columnDefinition.getTaille()) && GenericValidator.isLong(stringValue)) {
+                return Long.valueOf(stringValue);
+            }
+
+        } else if (columnType.equals(TypeDonnee.DECIMAL.toString())) {
+
+            if (value == null || value.toString().trim().isEmpty()) {
+                return null;
+            }
+            String stringValue = value
+                    .toString()
+                    .trim()
+                    .replaceAll("\\s+", "")
+                    .replaceAll("\\u00A0", "")//nbsp
+                    .replaceAll("&nbsp;", "");
+
+            if (lengthLowerOrEquals(stringValue, columnDefinition.getTaille() + columnDefinition.getTaillePartieDecimale() + 1)) {
+                try {
+                    return new BigDecimal(stringValue);
+                } catch (Exception ex) {
+                }
+            }
+
+        } else if (columnType.equals(TypeDonnee.DATE.toString())) {
+
+            if (value == null || value.toString().trim().isEmpty()) {
+                return null;
+            }
+            String stringValue = value.toString().trim()
+                    .replaceAll("\\s+", "")
+                    .replaceAll("\\u00A0", "")//nbsp
+                    .replaceAll("&nbsp;", "");
+
+            if (lengthEquals(stringValue, columnDefinition.getTaille()) && GenericValidator.isDate(stringValue, columnDefinition.getFormatDate(), true)) {
+                return new InsertionLocalDateTimeValue(columnDefinition.getFormatDate(), value).value();
+            }
+        }
+
+        throw new BadDataValueException("La valeur " + value + " ne correspond pas au format attendu pour la colonne " + columnDefinition.getName());
+    }
+
+    private boolean lengthEquals(String value, int columnMaxLength) {
+        return value.trim().length() == columnMaxLength;
+    }
+
+    private boolean lengthLowerOrEquals(String value, int columnMaxLength) {
+        return value.trim().length() <= columnMaxLength;
+    }
+
+}

--
Gitblit v1.10.0