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/CreateTableIfNotExistQuery.java | 135 +++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 135 insertions(+), 0 deletions(-)
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/CreateTableIfNotExistQuery.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/CreateTableIfNotExistQuery.java
new file mode 100644
index 0000000..908925e
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/CreateTableIfNotExistQuery.java
@@ -0,0 +1,135 @@
+package com.megatim.fdxcommons.tools.database.queries;
+
+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.contrat.TableName;
+import com.megatim.fdxcommons.tools.database.exceptions.BadColumnTypeException;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.AppColumnDefinitions;
+import java.sql.Connection;
+import java.sql.JDBCType;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import javax.naming.NamingException;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class CreateTableIfNotExistQuery implements QueryMetaData<Void> {
+
+ private final Connection connection;
+ private final AppColumnDefinitions appColumnDefinitions;
+ private final TableName tableName;
+ private final List<ColumnDefinition> columnDefinitions;
+
+ public CreateTableIfNotExistQuery(
+ TableName tableName,
+ List<ColumnDefinition> columnDefinitions,
+ AppColumnDefinitions appColumnDefinitions,
+ Connection connection
+ ) {
+ this.connection = connection;
+ this.appColumnDefinitions = appColumnDefinitions;
+ this.tableName = tableName;
+ this.columnDefinitions = columnDefinitions;
+ }
+
+ @Override
+ public Void execute() throws SQLException, NamingException, BadColumnTypeException {
+
+ String query = query(tableName, columnDefinitions);
+
+ try ( Statement stmt = connection.createStatement()) {
+ stmt.execute(query);
+ }
+
+ return null;
+ }
+
+ private String query(TableName tableName, List<ColumnDefinition> columns) throws BadColumnTypeException, SQLException {
+
+ StringBuilder query = new StringBuilder("CREATE TABLE IF NOT EXISTS " + tableName.name(connection) + "(");
+ List<AppColumnDefinition> primaryKeys = new ArrayList<>();
+
+ //Ordonner les colonnes par ordre croissant des positions, afin de les insérer dans cet ordre
+ Collections.sort(columns, (ColumnDefinition c1, ColumnDefinition c2) -> Integer.valueOf(c1.getPosition()).compareTo(c2.getPosition()));
+
+ for (ColumnDefinition columnDefinition : columns) {
+ query.append(columnDefinition.getName().toLowerCase()).append(" ").append(sqlColumnType(columnDefinition)).append(", ");
+ }
+
+ for (AppColumnDefinition appColumnDefinition : appColumnDefinitions.appColumns()) {
+ query.append(columnDefinitonString(appColumnDefinition)).append(", ");
+
+ if (appColumnDefinition.isPrimaryKey()) {
+ primaryKeys.add(appColumnDefinition);
+ }
+ }
+ 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(), ");");
+ }
+
+ return query.toString();
+ }
+
+ private String sqlColumnType(ColumnDefinition column) throws BadColumnTypeException {
+ switch (TypeDonnee.fromValeur(column.getTypeDonnee())) {
+ case ALPHANUMERIQUE:
+ return jdbcType(column) + "(" + column.getTaille() + ")";
+ case NUMERIQUE:
+ return jdbcType(column).getName();
+ case DATE:
+ return jdbcType(column).getName() + " NULL";
+ case DECIMAL:
+ return jdbcType(column) + "(" + column.getTaille() + "," + column.getTaillePartieDecimale() + ")";
+ }
+ throw new BadColumnTypeException("Type de colonne incorrect " + column.getTypeDonnee());
+ }
+
+ private JDBCType jdbcType(ColumnDefinition column) throws BadColumnTypeException {
+ switch (TypeDonnee.fromValeur(column.getTypeDonnee())) {
+ case NUMERIQUE:
+ return column.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 " + column.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