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

diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/JsonStructureIterator.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/JsonStructureIterator.java
new file mode 100644
index 0000000..8f1c2fd
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/contrat/JsonStructureIterator.java
@@ -0,0 +1,135 @@
+/*
+ * 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.pojo.JsonTableDefinition;
+import com.megatim.fdxcommons.model.enumeration.TypeDonnee;
+import com.megatim.fdxcommons.model.integration.ColumnDefinition;
+import com.megatim.fdxcommons.model.integration.json.JsonStructure;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ *
+ * @author ASUS
+ */
+public class JsonStructureIterator {
+
+    private final JsonStructure jsonStructure;
+    private final String tableName;
+
+    public JsonStructureIterator(String tableName, JsonStructure jsonStructure) {
+        this.jsonStructure = jsonStructure;
+        this.tableName = tableName;
+    }
+
+    /**
+     * ColumnDefinition mais avec le nom complet de la colonne (exples :
+     * adresse.ville, cpteBanque.rib pour les colonnes de niveau 2)
+     *
+     * @return
+     */
+    public List<ColumnDefinition> columnsDefinitionWithFullQualifiedName() {
+        List<ColumnDefinition> columnsDefinition = new ArrayList<>();
+
+        List<JsonStructure> fields = jsonStructure.getFields();
+        List<JsonStructure> fieldsWithoutParent = fields.stream().filter(f -> !f.getTypeDonnee().equals(TypeDonnee.OBJET)).collect(Collectors.toList());
+        List<JsonStructure> fieldsWithParent = fields.stream().filter(f -> f.getTypeDonnee().equals(TypeDonnee.OBJET)).collect(Collectors.toList());
+
+        columnsDefinition.addAll(columnsDefinitionWithFullQualifiedName(fieldsWithoutParent, ""));
+        fieldsWithParent.stream().forEach(j -> columnsDefinition.addAll(columnsDefinitionWithFullQualifiedName(j, "")));
+
+        return columnsDefinition;
+    }
+
+    public JsonTableDefinition tableDefinition() throws SQLException {
+        List<JsonStructure> fields = jsonStructure.getFields();
+
+        List<JsonStructure> simpleFields = fields.stream().filter(f -> !f.isCollection() && !f.getTypeDonnee().equals(TypeDonnee.OBJET)).collect(Collectors.toList());
+        JsonTableDefinition tableDefinition = new JsonTableDefinition(tableName.toLowerCase(), columnsDefinition(simpleFields), null, "");
+
+        List<JsonStructure> objectFields = fields.stream().filter(f -> f.isCollection() || f.getTypeDonnee().equals(TypeDonnee.OBJET)).collect(Collectors.toList());
+
+        for (JsonStructure j : objectFields) {
+            tableDefinition.getTablesDefinition().add(tableDefinition(j, tableName, j.getName()));
+        }
+        return tableDefinition;
+    }
+
+    private List<ColumnDefinition> columnsDefinitionWithFullQualifiedName(JsonStructure jsonStructure, String parentFullQualifiedName) {
+        List<ColumnDefinition> columnsDefinition = new ArrayList<>();
+
+        for (JsonStructure j : jsonStructure.getFields()) {
+            if (j.getTypeDonnee().equals(TypeDonnee.OBJET)) {
+                if (parentFullQualifiedName.isEmpty()) {
+                    columnsDefinition.addAll(columnsDefinitionWithFullQualifiedName(j, jsonStructure.getName()));
+                } else {
+                    columnsDefinition.addAll(columnsDefinitionWithFullQualifiedName(j, parentFullQualifiedName + "." + jsonStructure.getName()));
+                }
+            } else {
+                if (parentFullQualifiedName.isEmpty()) {
+                    columnsDefinition.add(columnDefinitionWithFullQualifiedName(j, jsonStructure.getName()));
+                } else {
+                    columnsDefinition.add(columnDefinitionWithFullQualifiedName(j, parentFullQualifiedName + "." + jsonStructure.getName()));
+                }
+
+            }
+        }
+        return columnsDefinition;
+    }
+
+    private JsonTableDefinition tableDefinition(JsonStructure jsonStruct, String parentTableName, String parentFieldName) {
+        JsonTableDefinition tableDef = null;
+
+        if (jsonStruct.getTypeDonnee().equals(TypeDonnee.OBJET)) {
+            List<JsonStructure> simpleFields = jsonStruct.getFields().stream().filter(f -> !f.isCollection() && !f.getTypeDonnee().equals(TypeDonnee.OBJET)).collect(Collectors.toList());
+            tableDef = new JsonTableDefinition((parentTableName + "_" + jsonStruct.getName()).toLowerCase(), columnsDefinition(simpleFields), parentTableName.toLowerCase(), parentFieldName);
+
+            List<JsonStructure> objectFields = jsonStruct.getFields().stream().filter(f -> f.isCollection() || f.getTypeDonnee().equals(TypeDonnee.OBJET)).collect(Collectors.toList());
+
+            for (JsonStructure j : objectFields) {
+                String newParentTableName = parentTableName.isEmpty() ? jsonStruct.getName() : parentTableName + "_" + jsonStruct.getName();
+                String newParentFieldName = parentFieldName.isEmpty() ? jsonStruct.getName() : parentFieldName + "." + j.getName();
+                tableDef.getTablesDefinition().add(tableDefinition(j, newParentTableName, newParentFieldName));
+            }
+        } else if (jsonStruct.isCollection()) {
+            tableDef = new JsonTableDefinition((parentTableName + "_" + jsonStruct.getName()).toLowerCase(), columnsDefinition(Arrays.asList(jsonStruct)), parentTableName.toLowerCase(), parentFieldName);
+        }
+        return tableDef;
+    }
+
+    private List<ColumnDefinition> columnsDefinition(List<JsonStructure> fields) {
+        List<ColumnDefinition> columnsDefinition = new ArrayList<>();
+        fields.stream().forEach(f -> columnsDefinition.add(new ColumnDefinition(f.getName(), f.getTypeDonnee().name(), f.getLengthh(), f.isRequired(), f.isCollection())));
+
+        return columnsDefinition;
+    }
+
+    private List<ColumnDefinition> columnsDefinitionWithFullQualifiedName(List<JsonStructure> fields, String parentFullQualifiedName) {
+        List<ColumnDefinition> columnsDefinition = new ArrayList<>();
+        fields.stream().forEach(f -> {
+            if (parentFullQualifiedName.isEmpty()) {
+                columnsDefinition.add(new ColumnDefinition(f.getName(), f.getTypeDonnee().name(), f.getLengthh(), f.isRequired(), f.isCollection()));
+            } else {
+                columnsDefinition.add(new ColumnDefinition(parentFullQualifiedName + "." + f.getName(), f.getTypeDonnee().name(), f.getLengthh(), f.isRequired(), f.isCollection()));
+            }
+        }
+        );
+
+        return columnsDefinition;
+    }
+
+    private ColumnDefinition columnDefinitionWithFullQualifiedName(JsonStructure f, String parentFullQualifiedName) {
+        if (parentFullQualifiedName.isEmpty()) {
+            return new ColumnDefinition(f.getName(), f.getTypeDonnee().name(), f.getLengthh(), f.isRequired(), f.isCollection());
+        } else {
+            return new ColumnDefinition(parentFullQualifiedName + "." + f.getName(), f.getTypeDonnee().name(), f.getLengthh(), f.isRequired(), f.isCollection());
+        }
+
+    }
+}

--
Gitblit v1.10.0