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/contrat/JsonResultSetProcessor.java |  143 +++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 143 insertions(+), 0 deletions(-)

diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/JsonResultSetProcessor.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/JsonResultSetProcessor.java
new file mode 100644
index 0000000..04f6892
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/JsonResultSetProcessor.java
@@ -0,0 +1,143 @@
+/*
+ * 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.database.contrat;
+
+import com.megatim.fdxcommons.model.integration.ColumnDefinition;
+import com.megatim.fdxcommons.model.pojo.JsonTableDefinition;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.IndexColumnDefinition;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.ParentIdColumnDefinition;
+import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
+import java.sql.SQLException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ *
+ * @author ASUS
+ */
+public class JsonResultSetProcessor {
+
+    private final ResultSet resultSet;
+    private final JsonTableDefinition tableDefinition;
+
+    public JsonResultSetProcessor(ResultSet resultSet, JsonTableDefinition tableDefinition) {
+        this.resultSet = resultSet;
+        this.tableDefinition = tableDefinition;
+    }
+
+    public Map<Long, Object> process() throws SQLException {
+        Map<Long, Object> data = new HashMap<>();
+
+        while (resultSet.next()) {
+            mergeData(resultSet, tableDefinition, data, null);
+        }
+        return data;
+    }
+
+    /**
+     *
+     * @param resSet : ligne de données à traiter
+     * @param tableDefinition : structure de la donnée à extraire
+     * @param data : données ayant été extraites lors des précédents parcours
+     * @param parentId : L'id du parent de la donnée
+     * @return : retourne les données extraites
+     * @throws SQLException
+     */
+    private Object mergeData(ResultSet resSet, JsonTableDefinition tableDefinition, Map<Long, Object> data, Long parentId) throws SQLException {
+        Map<String, String> columnsAliasToColumnName = columnsAliasToColumnName(tableDefinition.getColumnDefs(), tableDefinition.getTableName());
+        String indexAlias = columnAlias(tableDefinition.getTableName(), new IndexColumnDefinition().name());
+        final Long fdxIndex = resSet.getLong(indexAlias);
+
+        String parentIdAlias = null;
+        Long childParentId = null;
+
+        if (parentId != null) {
+            parentIdAlias = columnAlias(tableDefinition.getTableName(), new ParentIdColumnDefinition().name());
+            childParentId = resSet.getLong(parentIdAlias);
+        }
+
+        if (parentId == null || parentId.equals(childParentId)) {
+            if (data.containsKey(fdxIndex)) {
+                Object obj = data.get(fdxIndex);
+                Map map = (Map) obj;
+
+                for (JsonTableDefinition t : tableDefinition.getTablesDefinition()) {
+                    Object ob = (Map) map.get(t.getParentFieldName());
+                    Map<Long, Object> m = new HashMap<>();
+
+                    if (ob != null) {
+                        m = (Map) ob;
+                    }
+                    map.put(t.getParentFieldName(), mergeData(resSet, t, m, fdxIndex));
+                    data.put(fdxIndex, map);
+                }
+
+            } else {
+                Map<String, Object> simpleData = simpleData = retrieveData(resSet, columnsAliasToColumnName);
+                data.put(fdxIndex, simpleData);
+
+                for (JsonTableDefinition t : tableDefinition.getTablesDefinition()) {
+                    String newParentIdAlias = columnAlias(t.getTableName(), new ParentIdColumnDefinition().name());
+                    Long newChildParentId = resSet.getLong(newParentIdAlias);
+
+                    if (newChildParentId.equals(fdxIndex)) { 
+                        Map<Long, Object> m = new HashMap<>();
+                        mergeData(resSet, t, m, fdxIndex);
+                        simpleData.put(t.getParentFieldName(), m);
+                    }
+                }
+
+                return data;
+            }
+        }
+        return data;
+    }
+
+
+    /**
+     * Extraction des données simples d'un objet
+     *
+     * @param resultSet
+     * @param columnsAliasToColumnName
+     * @return
+     * @throws SQLException
+     */
+    private Map<String, Object> retrieveData(ResultSet resultSet, Map<String, String> columnsAliasToColumnName) throws SQLException {
+        ResultSetMetaData metaData = resultSet.getMetaData();
+        int columnCount = metaData.getColumnCount();
+        Map<String, Object> selectResult = new HashMap<>();
+
+        for (int i = 1; i <= columnCount; i++) {
+            if (columnsAliasToColumnName.containsKey(metaData.getColumnName(i).trim().toLowerCase())) {
+                selectResult.put(columnsAliasToColumnName.get(metaData.getColumnName(i).trim().toLowerCase()), resultSet.getObject(i));
+            }
+        }
+        return selectResult;
+    }
+
+    /**
+     * Méthode qui associe chaque alias de colonne au nom réel de colonne
+     *
+     * @param columnsDef
+     * @param tableName : table
+     * @return
+     */
+    private Map<String, String> columnsAliasToColumnName(List<ColumnDefinition> columnsDef, String tableName) {
+        Map<String, String> columnsAliasToColumnName = new HashMap<>();
+
+        columnsDef.stream().forEach(c -> {
+            columnsAliasToColumnName.put(columnAlias(tableName, c.getName()), c.getName());
+        });
+        columnsAliasToColumnName.put(columnAlias(tableName, new IndexColumnDefinition().name()), new IndexColumnDefinition().name());
+        columnsAliasToColumnName.put(columnAlias(tableName, new ParentIdColumnDefinition().name()), new ParentIdColumnDefinition().name());
+        return columnsAliasToColumnName;
+    }
+
+    private String columnAlias(String tableName, String columnName) {
+        return (tableName + "_" + columnName).toLowerCase();
+    }
+}

--
Gitblit v1.10.0