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/jpql/JpqlWhereQueryString.java |  186 ++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 186 insertions(+), 0 deletions(-)

diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/jpql/JpqlWhereQueryString.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/jpql/JpqlWhereQueryString.java
new file mode 100644
index 0000000..11632b2
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/jpql/JpqlWhereQueryString.java
@@ -0,0 +1,186 @@
+package com.megatim.fdxcommons.tools.database.queries.jpql;
+
+import com.megatim.fdxcommons.model.enumeration.CriteriaLogicConnector;
+import com.megatim.fdxcommons.model.enumeration.Operateur;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.BETWEEN;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.EQUALS;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.GREATER_OR_EQUALS_THAN;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.GREATER_THAN;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.IN;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.IS_NOT_NULL;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.IS_NULL;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.LIKE;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.LOWER_OR_EQUALS_THAN;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.LOWER_THAN;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.NOT_BETWEEN;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.NOT_EQUALS;
+import static com.megatim.fdxcommons.model.enumeration.Operateur.NOT_IN;
+import com.megatim.fdxcommons.tools.database.exceptions.BadQueryCriteriaException;
+import com.megatim.fdxcommons.tools.database.queries.metadata.jpql.JpqlQueryCriterion;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
+
+/**
+ *
+ * @author lenovo
+ */
+public class JpqlWhereQueryString {
+
+    private final JpqlQueryCriterion queryCriterion;
+    private final String classAlias;
+    private final AtomicInteger rang = new AtomicInteger(1);
+
+    public JpqlWhereQueryString(JpqlQueryCriterion queryCriterion, String classAlias) {
+        this.queryCriterion = queryCriterion;
+        this.classAlias = classAlias;
+    }
+
+    public String query() throws BadQueryCriteriaException {
+        StringBuilder query = new StringBuilder("");
+
+        if (queryCriterion != null) {
+            query
+                    .append(" WHERE ")
+                    .append(buildQuery(queryCriterion));
+        }
+        return query.toString();
+    }
+
+    private String buildQuery(JpqlQueryCriterion criterion) throws BadQueryCriteriaException {
+        StringBuilder query = new StringBuilder();
+
+        if (criterion.getSubCriteria().isEmpty()) {
+
+            switch (criterion.getOperateur()) {
+                case EQUALS:
+                case NOT_EQUALS:
+                case LIKE:
+                case GREATER_OR_EQUALS_THAN:
+                case GREATER_THAN:
+                case LOWER_OR_EQUALS_THAN:
+                case LOWER_THAN:
+                    query.append(buildQueryWithSingleParameter(criterion));
+                    break;
+                case BETWEEN:
+                case NOT_BETWEEN:
+                    query.append(buildBetweenQuery(criterion));
+                    break;
+                case IS_NOT_NULL:
+                case IS_NULL:
+                    query.append(buildQueryWithoutParameter(criterion));
+                    break;
+                case NOT_IN:
+                case IN:
+                    query.append(buildQueryWithMultipleParameters(criterion));
+                    break;
+            }
+
+        } else {
+
+            CriteriaLogicConnector criteriaLogicConnector = criterion.getCriteriaLogicConnector();
+            if (criteriaLogicConnector == null) {
+                throw new BadQueryCriteriaException("Critère non valide : Connecteur logique absent");
+            }
+            int size = criterion.getSubCriteria().size();
+            int index = 0;
+
+            for (JpqlQueryCriterion c : criterion.getSubCriteria()) {
+                query
+                        .append("(")
+                        .append(buildQuery(c))
+                        .append(")");
+
+                if ((++index) < size) {
+                    query.append(criteriaLogicConnector.equals(CriteriaLogicConnector.AND) ? " AND " : " OR ");
+                }
+
+            }
+
+        }
+
+        return query.toString();
+    }
+
+    private String buildQueryWithoutParameter(JpqlQueryCriterion criterion) {
+        StringBuilder query = new StringBuilder("");
+        query
+                .append(classAlias)
+                .append(".")
+                .append(criterion.getNomColonne())
+                .append(" ")
+                .append(criterion.getOperateur().getValue());
+        return query.toString();
+    }
+
+    private String buildQueryWithSingleParameter(JpqlQueryCriterion criterion) {
+        StringBuilder query = new StringBuilder("");
+        if (criterion.getOperateur().equals(Operateur.LIKE)) {
+            query
+                    .append("LOWER(")
+                    .append(classAlias)
+                    .append(".")
+                    .append(criterion.getNomColonne())
+                    .append(") LIKE LOWER(?")
+                    .append(rang.getAndIncrement())
+                    .append(")");
+        } else {
+            query
+                    .append(classAlias)
+                    .append(".")
+                    .append(criterion.getNomColonne())
+                    .append(" ")
+                    .append(criterion.getOperateur().getValue())
+                    .append(" ?")
+                    .append(rang.getAndIncrement())
+                    .append(" ");
+        }
+
+        return query.toString();
+    }
+
+    private String buildBetweenQuery(JpqlQueryCriterion criterion) {
+        StringBuilder query = new StringBuilder("");
+        query
+                .append(classAlias)
+                .append(".")
+                .append(criterion.getNomColonne())
+                .append(" ")
+                .append(criterion.getOperateur().getValue())
+                .append(" ?")
+                .append(rang.getAndIncrement())
+                .append(" AND ")
+                .append(" ?")
+                .append(rang.getAndIncrement())
+                .append(" ");
+        return query.toString();
+    }
+
+    private String buildQueryWithMultipleParameters(JpqlQueryCriterion criterion) {
+        StringBuilder query = new StringBuilder("");
+
+        query
+                .append(classAlias)
+                .append(".")
+                .append(criterion.getNomColonne())
+                .append(" ")
+                .append(criterion.getOperateur().getValue())
+                .append("(");
+
+        List values = (List) criterion.getCriteriaValue();
+
+        int size = values.size();
+        for (int i = 0; i < size; i++) {
+
+            if ((i + 1) < size) {
+                query.append("?").append(rang.getAndIncrement()).append(", ");
+            } else {
+                query.append("?").append(rang.getAndIncrement());
+            }
+
+        }
+
+        query.append(")");
+
+        return query.toString();
+    }
+}

--
Gitblit v1.10.0