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(" ", "");
+ 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(" ", "");
+
+ 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(" ", "");
+
+ 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