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/JsonInsertQuery.java | 144 ++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 144 insertions(+), 0 deletions(-)
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/JsonInsertQuery.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/JsonInsertQuery.java
new file mode 100644
index 0000000..c9b6930
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/JsonInsertQuery.java
@@ -0,0 +1,144 @@
+/*
+ * 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;
+
+import com.megatim.fdxcommons.tools.database.contrat.DefaultPreparedStatementProcessor;
+import com.megatim.fdxcommons.tools.database.contrat.JsonTypeFichierInsertMetaData;
+import com.megatim.fdxcommons.tools.database.contrat.PreparedStatementProcessor;
+import com.megatim.fdxcommons.tools.database.contrat.QueryMetaData;
+import com.megatim.fdxcommons.tools.database.contrat.TypeFichierDataColumn;
+import com.megatim.fdxcommons.tools.database.contrat.TypeFichierDataRow;
+import com.megatim.fdxcommons.tools.database.queries.metadata.DefaultTypeFichierDataColumn;
+import com.megatim.fdxcommons.tools.database.queries.metadata.JsonApiTypeFichierInsertData;
+import com.megatim.fdxcommons.tools.database.queries.metadata.JsonFdxParsedDataIterator;
+import com.megatim.fdxcommons.tools.database.queries.metadata.QueryParam;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.IndexColumnDefinition;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.ParentIdColumnDefinition;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ *
+ * @author ASUS
+ */
+public class JsonInsertQuery implements QueryMetaData<Void> {
+
+ private final Connection connection;
+ private final JsonFdxParsedDataIterator parsedDataIterator;
+ private final List<DefaultTypeFichierDataColumn> dataColumnsToAdd;
+
+ public JsonInsertQuery(Connection connection, JsonFdxParsedDataIterator parsedDataIterator, List<DefaultTypeFichierDataColumn> dataColumnsToAdd) {
+ this.connection = connection;
+ this.parsedDataIterator = parsedDataIterator;
+ this.dataColumnsToAdd = dataColumnsToAdd;
+ }
+
+ @Override
+ public Void execute() throws Exception {
+ List<JsonApiTypeFichierInsertData> rows = parsedDataIterator.rows();
+
+ for (JsonApiTypeFichierInsertData insertMetaData : rows) {
+ String query = insertQueryString(insertMetaData.columnNames(), insertMetaData.tableName(), false);
+
+ TypeFichierDataRow row = insertMetaData.row();
+
+ System.out.println("---------------- parentQuery-----------------------");
+ System.out.println(query);
+ System.out.println("-----------------------------------");
+
+ try ( PreparedStatement statement = connection.prepareStatement(query);) {
+ execute(statement, row, dataColumnsToAdd, null);
+ ResultSet resultSet = statement.executeQuery();
+
+ if (resultSet.next()) {
+ Long fdxIndex = resultSet.getLong(1);
+ insertChildren(insertMetaData.children(), fdxIndex);
+ }
+ }
+ }
+ return null;
+ }
+
+ private void insertChildren(List<JsonTypeFichierInsertMetaData> data, Long parentId) throws Exception {
+ if (!data.isEmpty()) {
+ for (JsonTypeFichierInsertMetaData insertData : data) {
+ insertChild(insertData, parentId);
+ }
+ }
+
+ }
+
+ private void insertChild(JsonTypeFichierInsertMetaData child, Long parentId) throws Exception {
+ String childQuery = insertQueryString(child.columnNames(), child.tableName(), true);
+ System.out.println("------------------ childQuery---------------------------");
+ System.out.println(childQuery);
+ System.out.println("---------------------------------------------------------");
+
+ try ( PreparedStatement statement = connection.prepareStatement(childQuery);) {
+
+ TypeFichierDataRow row = child.row();
+ execute(statement, row, dataColumnsToAdd, parentId);
+ ResultSet resultSet = statement.executeQuery();
+
+ if (resultSet.next()) {
+ Long fdxIndex = resultSet.getLong(1);
+ insertChildren(child.children(), fdxIndex);
+ }
+ }
+ }
+
+ private String insertQueryString(List<String> columnNames, String tableName, boolean parentIdPresent) {
+ List<String> insertColumns = new ArrayList<>(columnNames);
+
+ for (DefaultTypeFichierDataColumn dc : dataColumnsToAdd) {
+ insertColumns.add(dc.column());
+ }
+
+ if (parentIdPresent) {
+ insertColumns.add(new ParentIdColumnDefinition().name());// Ajout de la clé du parent
+ }
+ StringBuilder query = new StringBuilder("INSERT INTO " + tableName + "(");
+
+ insertColumns.forEach(column -> query.append(column).append(","));
+
+ query.replace(query.length() - 1, query.length(), ") VALUES(");
+
+ insertColumns.forEach(s -> query.append("?,"));
+
+ query.replace(query.length() - 1, query.length(), ")");
+
+ query.append(" RETURNING ").append(new IndexColumnDefinition().name()).append(";");
+
+ return query.toString();
+ }
+
+ private void execute(PreparedStatement preparedStatement, TypeFichierDataRow row, List<DefaultTypeFichierDataColumn> dataColumnsToAdd, Long parentId) throws SQLException, Exception {
+
+ List<QueryParam> queryParameters = new ArrayList<>();
+
+ if (row != null) {
+ for (TypeFichierDataColumn dataColumn : row.columns()) {
+ queryParameters.add(new QueryParam(dataColumn.column(), dataColumn.value()));
+ }
+ }
+
+ //On ajoute les colonnes de dataColumnsToAdd
+ for (DefaultTypeFichierDataColumn dc : dataColumnsToAdd) {
+ queryParameters.add(new QueryParam(dc.column(), dc.value()));
+ }
+
+ if (parentId != null && parentId != 0L) {
+ queryParameters.add(new QueryParam(new ParentIdColumnDefinition().name(), parentId));//Ajout clé du parent
+ }
+
+ PreparedStatementProcessor statementProcessor = new DefaultPreparedStatementProcessor(0);
+ statementProcessor.process(preparedStatement, queryParameters);
+
+ }
+}
--
Gitblit v1.10.0