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