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

diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/JsonFdxTableColumns.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/JsonFdxTableColumns.java
new file mode 100644
index 0000000..f015567
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/tables/JsonFdxTableColumns.java
@@ -0,0 +1,114 @@
+/*
+ * 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.tables;
+
+import com.megatim.fdxcommons.model.enumeration.TypeDonnee;
+import static com.megatim.fdxcommons.model.enumeration.TypeDonnee.ALPHANUMERIQUE;
+import static com.megatim.fdxcommons.model.enumeration.TypeDonnee.DATE;
+import static com.megatim.fdxcommons.model.enumeration.TypeDonnee.DECIMAL;
+import static com.megatim.fdxcommons.model.enumeration.TypeDonnee.NUMERIQUE;
+import com.megatim.fdxcommons.model.integration.json.JsonStructure;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.DataProductionIdColumnDefinition;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.DataProductionUpdateIdColumnDefinition;
+import java.sql.JDBCType;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ *
+ * @author ASUS
+ */
+public class JsonFdxTableColumns {
+
+    private final JsonStructure jsonStructure;
+
+    public JsonFdxTableColumns(JsonStructure jsonStructure) {
+        this.jsonStructure = jsonStructure;
+    }
+
+    public List<FdxTableColumn> columns() {
+        List<FdxTableColumn> columns = new ArrayList<>();
+
+        for (JsonStructure j : jsonStructure.getFields()) {
+            if (j.getTypeDonnee().equals(TypeDonnee.OBJET)) {
+                columns.addAll(columns(j.getFields(), j.getName()));
+            } else {
+                columns.add(new FdxTableColumn(j.getName(), dataType(jdbcType(j.getTypeDonnee(), j.getLengthh())), 0, j.getLengthh()));
+            }
+        }
+        addAppColumns(columns);
+        return columns;
+    }
+
+    public JsonStructure getJsonStructure() {
+        return jsonStructure;
+    }
+
+    private void addAppColumns(List<FdxTableColumn> columns) {
+        //Add dataProductionId column because it is used in query
+        DataProductionIdColumnDefinition dataProdColumn = new DataProductionIdColumnDefinition();
+        columns.add(new FdxTableColumn(dataProdColumn.name(), dataType(dataProdColumn.type()), 0, 18));
+
+        //Add dataProductionId column because it is used in query
+        DataProductionUpdateIdColumnDefinition dataProdUpdateColumn = new DataProductionUpdateIdColumnDefinition();
+        columns.add(new FdxTableColumn(dataProdUpdateColumn.name(), dataType(dataProdUpdateColumn.type()), 0, 18));
+    }
+
+    private List<FdxTableColumn> columns(List<JsonStructure> fields, String initialName) {
+        List<FdxTableColumn> columns = new ArrayList<>();
+        initialName += ".";
+
+        for (JsonStructure field : fields) {
+            if (field.getTypeDonnee().equals(TypeDonnee.OBJET)) {
+                columns.addAll(columns(field.getFields(), initialName + field.getName()));
+            } else {
+                columns.add(new FdxTableColumn(initialName + field.getName(), dataType(jdbcType(field.getTypeDonnee(), field.getLengthh())), 0, field.getLengthh()));
+            }
+        }
+        return columns;
+    }
+
+    private JDBCType jdbcType(TypeDonnee typeDonnee, int lengthh) {
+        switch (typeDonnee) {
+            case NUMERIQUE:
+                return lengthh < 5 ? JDBCType.SMALLINT : JDBCType.BIGINT;
+            case DECIMAL:
+                return JDBCType.DECIMAL;
+            case DATE:
+                return JDBCType.TIMESTAMP;
+            case ALPHANUMERIQUE:
+                return JDBCType.VARCHAR;
+        }
+        return null;
+    }
+
+    private int dataType(JDBCType jdbcType) {
+        switch (jdbcType) {
+            case SMALLINT:
+                return 5;
+            case BIGINT:
+                return -5;
+            case DECIMAL:
+                return 3;
+            case TIMESTAMP:
+                return 93;
+        }
+        return 0;
+    }
+
+    private int dataType(String jdbcType) {
+        switch (jdbcType) {
+            case "SMALLINT":
+                return 5;
+            case "BIGINT":
+                return -5;
+            case "DECIMAL":
+                return 3;
+            case "TIMESTAMP":
+                return 93;
+        }
+        return 0;
+    }
+}

--
Gitblit v1.10.0