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

diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/ParsedQueryCriterion.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/ParsedQueryCriterion.java
new file mode 100644
index 0000000..450d5b2
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/ParsedQueryCriterion.java
@@ -0,0 +1,132 @@
+package com.megatim.fdxcommons.tools.database.queries.metadata;
+
+import com.megatim.fdxcommons.model.enumeration.Operateur;
+import com.megatim.fdxcommons.model.integration.ColumnDefinition;
+import com.megatim.fdxcommons.model.integration.TableDefinition;
+import com.megatim.fdxcommons.tools.database.exceptions.BadQueryCriteriaException;
+import com.megatim.fdxcommons.tools.database.exceptions.LocalDateTimeValueParseError;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.AppColumnDefinitions;
+import com.megatim.fdxcommons.tools.database.tables.FdxTableColumn;
+import com.megatim.fdxcommons.tools.database.tables.FdxTableColumns;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import javax.naming.NamingException;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class ParsedQueryCriterion {
+
+    private final QueryCriterion queryCriterion;
+    private final FdxTableColumns fdxTableColumns;
+    private final List<ColumnDefinition> columnDefinitions;
+
+    public ParsedQueryCriterion(QueryCriterion queryCriterion, FdxTableColumns fdxTableColumns, List<ColumnDefinition> columnDefinitions) {
+        this.queryCriterion = queryCriterion;
+        this.fdxTableColumns = fdxTableColumns;
+        this.columnDefinitions = columnDefinitions;
+    }
+
+    public QueryCriterion parsedCriterion() throws SQLException, NamingException, LocalDateTimeValueParseError, BadQueryCriteriaException {
+        return queryCriterion != null
+                ? parsedCriterion(queryCriterion)
+                : null;
+    }
+
+    private QueryCriterion parsedCriterion(QueryCriterion criterion) throws SQLException, NamingException, LocalDateTimeValueParseError, BadQueryCriteriaException {
+
+        if (criterion == null) {
+            return null;
+        }
+
+        if (criterion.getSubCriteria() != null && !criterion.getSubCriteria().isEmpty() && criterion.getCriteriaLogicConnector() != null) {
+            List<QueryCriterion> subCriteria = new ArrayList<>();
+
+            for (QueryCriterion qc : criterion.getSubCriteria()) {
+                QueryCriterion parseCriterion = parsedCriterion(qc);
+
+                if (parseCriterion != null) {
+                    subCriteria.add(parseCriterion);
+                }
+            }
+            if (!subCriteria.isEmpty()) {
+                return new QueryCriterion(null,
+                        null,
+                        null,
+                        criterion.getCriteriaLogicConnector(),
+                        subCriteria
+                );
+            }
+
+        } else if ((criterion.getSubCriteria() == null || criterion.getSubCriteria().isEmpty())
+                && nomColonneIsValid(criterion.getNomColonne())
+                && criterion.getOperateur() != null) {
+            Object correctValue = correctValue(criterion.getNomColonne(), criterion.getCriteriaValue(), criterion.getOperateur());
+
+            if (isUnaryOperator(criterion.getOperateur()) || (correctValue != null && !correctValue.toString().isEmpty())) {
+                return new QueryCriterion(criterion.getNomColonne(),
+                        correctValue,
+                        criterion.getOperateur(),
+                        null,
+                        Arrays.asList()
+                );
+            }
+        }
+
+        throw new BadQueryCriteriaException("Critère non valide");
+    }
+
+    private boolean nomColonneIsValid(String nomColonne) throws SQLException, NamingException {
+        return nomColonne != null && fdxTableColumns
+                .columns()
+                .stream()
+                .filter(c -> c.getName().equalsIgnoreCase(nomColonne))
+                .findFirst()
+                .isPresent();
+    }
+
+    private Object correctValue(String nomColonne, Object value, Operateur operateur) throws SQLException, NamingException, LocalDateTimeValueParseError, BadQueryCriteriaException {
+
+        if (value == null) {
+            return null;
+        }
+
+        AppColumnDefinitions appColumnDefinitions = new AppColumnDefinitions();
+
+        for (FdxTableColumn column : fdxTableColumns.columns()) {
+
+            if (column.getName().equalsIgnoreCase(nomColonne)) {
+
+                boolean isDateCreationColumn = appColumnDefinitions.isDateCreationColumn(column.getName());
+
+                String dateFormat = columnDefinitions
+                        .stream()
+                        .filter(cD -> cD.getName().equalsIgnoreCase(nomColonne) && cD.getTypeDonnee().equals("DATE"))
+                        .findFirst()
+                        .map(cD -> cD.getFormatDate())
+                        .orElse("");
+
+                QueryCriteriaCorrectValue queryCriteriaCorrectValue = new QueryCriteriaCorrectValue(
+                        column.getType(),
+                        value,
+                        operateur,
+                        dateFormat,
+                        isDateCreationColumn
+                );
+
+                return queryCriteriaCorrectValue.value();
+
+            }
+
+        }
+
+        throw new BadQueryCriteriaException("Critères mal formattés");
+    }
+
+    private boolean isUnaryOperator(Operateur operateur) {
+        return operateur.equals(Operateur.IS_NOT_NULL) || operateur.equals(Operateur.IS_NULL);
+    }
+}

--
Gitblit v1.10.0