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