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/json/CreateJsonTableIfNotExistQuery.java | 161 +++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 161 insertions(+), 0 deletions(-)
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/json/CreateJsonTableIfNotExistQuery.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/json/CreateJsonTableIfNotExistQuery.java
new file mode 100644
index 0000000..cd4017c
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/json/CreateJsonTableIfNotExistQuery.java
@@ -0,0 +1,161 @@
+/*
+ * 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.queries.json;
+
+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.ColumnDefinition;
+import com.megatim.fdxcommons.tools.database.contrat.AppColumnDefinition;
+import com.megatim.fdxcommons.tools.database.contrat.QueryMetaData;
+import com.megatim.fdxcommons.tools.database.exceptions.BadColumnTypeException;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.AppColumnDefinitions;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.IndexColumnDefinition;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.ParentIdColumnDefinition;
+import com.megatim.fdxcommons.model.pojo.JsonTableDefinition;
+import java.sql.Connection;
+import java.sql.JDBCType;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ *
+ * @author ASUS
+ */
+public class CreateJsonTableIfNotExistQuery implements QueryMetaData<Void> {
+
+ private final Connection connection;
+ private final AppColumnDefinitions appColumnDefinitions;
+ private final JsonTableDefinition tableDefinition;
+ private final List<String> queries = new ArrayList<>();
+
+ public CreateJsonTableIfNotExistQuery(Connection connection, AppColumnDefinitions appColumnDefinitions, JsonTableDefinition tableDefinition) {
+ this.connection = connection;
+ this.appColumnDefinitions = appColumnDefinitions;
+ this.tableDefinition = tableDefinition;
+ }
+
+ @Override
+ public Void execute() throws Exception {
+ query(tableDefinition);
+
+ for (String query : queries) {
+ System.out.println(query);
+ }
+
+ try ( Statement stmt = connection.createStatement()) {
+ for (String query : queries) {
+ stmt.execute(query);
+ }
+ }
+ return null;
+ }
+
+ private void query(JsonTableDefinition jsonTableDefinition) throws BadColumnTypeException {
+ StringBuilder query = new StringBuilder("CREATE TABLE IF NOT EXISTS " + jsonTableDefinition.getTableName() + "(");
+ List<AppColumnDefinition> primaryKeys = new ArrayList<>();
+
+ for (ColumnDefinition colDef : jsonTableDefinition.getColumnDefs()) {
+ query.append(colDef.getName().toLowerCase()).append(" ").append(sqlColumnType(colDef));
+ if (colDef.isRequired()) {
+ query.append(" NOT NULL");
+ }
+ query.append(", ");
+ }
+
+ for (AppColumnDefinition appColumnDefinition : appColumnDefinitions.appColumns()) {
+ query.append(columnDefinitonString(appColumnDefinition)).append(", ");
+
+ if (appColumnDefinition.isPrimaryKey()) {
+ primaryKeys.add(appColumnDefinition);
+ }
+ }
+ //Defintion de la colonne fdx_parent_id
+ if (jsonTableDefinition.getParentTableName() != null) {
+ query.append(columnDefinitonString(new ParentIdColumnDefinition())).append(", ");
+ }
+
+ if (!primaryKeys.isEmpty()) {
+ query.append(" PRIMARY KEY(");
+ primaryKeys.stream().forEach(pk -> query.append(pk.name()).append(", "));
+
+ //Retirer la dernière virgule
+ query.replace(query.length() - 2, query.length(), ")");
+ } else {
+ //Retirer la dernière virgule
+ query.replace(query.length() - 2, query.length(), "");
+ }
+
+ //Contrainte de clé étrangère sur fdx_parent_id
+ if (jsonTableDefinition.getParentTableName() != null) {
+ query.append(parentIdDefintion(jsonTableDefinition.getParentTableName(), new ParentIdColumnDefinition().name(), new IndexColumnDefinition().name()));
+ }
+ query.append(");");
+
+ queries.add(query.toString());
+
+ if (!jsonTableDefinition.getTablesDefinition().isEmpty()) {
+ for (JsonTableDefinition tableDef : jsonTableDefinition.getTablesDefinition()) {
+ query(tableDef);
+ }
+ }
+ }
+
+ private String parentIdDefintion(String parentTableName, String parentIdColumnName, String indexColumnName) {
+ StringBuilder builder = new StringBuilder("");
+ builder.append(", FOREIGN KEY (").append(parentIdColumnName).append(") REFERENCES ").append(parentTableName).append("(").append(indexColumnName).append(")");
+
+ return builder.toString();
+ }
+
+ private String sqlColumnType(ColumnDefinition colDef) throws BadColumnTypeException {
+ switch (TypeDonnee.fromValeur(colDef.getTypeDonnee())) {
+ case ALPHANUMERIQUE:
+ return jdbcType(colDef) + "(" + colDef.getTaille() + ")";
+ case NUMERIQUE:
+ return jdbcType(colDef).getName();
+ case DATE:
+ String requiredDefinition = colDef.isRequired() ? " NOT NULL" : " NULL";
+ return jdbcType(colDef).getName() + requiredDefinition;
+ case DECIMAL:
+ return jdbcType(colDef) + "(" + colDef.getTaille() + "," + 4 + ")";
+ }
+ throw new BadColumnTypeException("Type de colonne incorrect " + colDef.getTypeDonnee());
+ }
+
+ private JDBCType jdbcType(ColumnDefinition colDef) throws BadColumnTypeException {
+ switch (TypeDonnee.fromValeur(colDef.getTypeDonnee())) {
+ case NUMERIQUE:
+ return colDef.getTaille() < 5 ? JDBCType.SMALLINT : JDBCType.BIGINT;
+ case DECIMAL:
+ return JDBCType.DECIMAL;
+ case DATE:
+ return JDBCType.TIMESTAMP;
+ case ALPHANUMERIQUE:
+ return JDBCType.VARCHAR;
+ }
+ throw new BadColumnTypeException("Type de colonne incorrect " + colDef.getName());
+ }
+
+ private String columnDefinitonString(AppColumnDefinition column) throws BadColumnTypeException {
+ StringBuilder definition = new StringBuilder();
+ definition
+ .append(column.name().toLowerCase())
+ .append(" ")
+ .append(column.type())
+ .append(" ")
+ .append(column.isNull() ? "NULL " : "NOT NULL ");
+
+ if (column.defaultValue() != null) {
+ definition
+ .append("DEFAULT ")
+ .append(column.defaultValue());
+ }
+ return definition.toString();
+ }
+}
--
Gitblit v1.10.0