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

diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/QueryCriteriaCorrectValue.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/QueryCriteriaCorrectValue.java
new file mode 100644
index 0000000..85137a3
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/QueryCriteriaCorrectValue.java
@@ -0,0 +1,227 @@
+package com.megatim.fdxcommons.tools.database.queries.metadata;
+
+import com.megatim.fdxcommons.model.enumeration.Operateur;
+import com.megatim.fdxcommons.model.pojo.BetweenOperatorValues;
+import com.megatim.fdxcommons.tools.database.exceptions.BadQueryCriteriaException;
+import com.megatim.fdxcommons.tools.database.exceptions.LocalDateTimeValueParseError;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.DateCreationColumnDefinition;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.LinkedHashMap;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class QueryCriteriaCorrectValue {
+
+    private final int dataType;
+    private final Object criteriaValue;
+    private final Operateur operateur;
+    private final String dateFormat;
+    private final boolean isDateActionColumn;
+
+    public QueryCriteriaCorrectValue(int dataType, Object criteriaValue, Operateur operateur, String dateFormat, boolean isDateActionColumn) {
+        this.dataType = dataType;
+        this.criteriaValue = criteriaValue;
+        this.operateur = operateur;
+        this.dateFormat = dateFormat;
+        this.isDateActionColumn = isDateActionColumn;
+    }
+
+    public Object value() throws LocalDateTimeValueParseError, BadQueryCriteriaException {
+        if (operateurWithBetween()) {
+            Object lowerBound = null;
+            Object upperBound = null;
+
+            if (criteriaValue instanceof BetweenOperatorValues) {
+                BetweenOperatorValues values = (BetweenOperatorValues) criteriaValue;
+                if (values != null) {
+                    lowerBound = values.getLowerBound();
+                    upperBound = values.getUpperBound();
+                }
+            } else {
+                LinkedHashMap map = (LinkedHashMap) criteriaValue;
+
+                if (map != null) {
+                    lowerBound = map.get("lowerBound");
+                    upperBound = map.get("upperBound");
+                }
+            }
+            if (lowerBound != null && upperBound != null) {
+                if (dataTypeIsInt()) {
+                    return new BetweenOperatorValues(intValue(lowerBound), intValue(upperBound));
+                } else if (dataTypeIsDecimal()) {
+                    return new BetweenOperatorValues(decimalValue(lowerBound), decimalValue(upperBound));
+                } else if (dataTypeIsString()) {
+                    return new BetweenOperatorValues(stringValue(lowerBound), stringValue(upperBound));
+                } else if (dataTypeIsTimeStamp()) {
+                    return new BetweenOperatorValues(dateValue(lowerBound), dateValue(upperBound));
+                }
+            }
+        } else if (operateurWithIn()) {
+            if (criteriaValue instanceof Collection<?>) {
+                Collection<?> collection = (Collection<?>) criteriaValue;
+                return collectionValues(collection);
+            }
+        } else if (operateurWithComparison()) {
+            if (dataTypeIsInt()) {
+                return intValue(criteriaValue);
+            } else if (dataTypeIsDecimal()) {
+                return decimalValue(criteriaValue);
+            } else if (dataTypeIsString()) {
+                return stringValue(criteriaValue);
+            } else if (dataTypeIsTimeStamp()) {
+                return dateValue(criteriaValue);
+            } else if(dataTypeIsBoolean()) {
+                return booleanValue(criteriaValue);
+            }
+        } else if (operateurWithLike()) {
+            if (dataTypeIsString()) {
+                return stringValue(criteriaValue);
+            }
+
+        } else if (operateurWithoutValue()) {
+            return null;
+        }
+
+        throw new BadQueryCriteriaException(
+                "Opérateur inconnu");
+    }
+
+    private boolean operateurWithoutValue() {
+        return this.operateur.equals(Operateur.IS_NOT_NULL)
+                || this.operateur.equals(Operateur.IS_NULL);
+    }
+
+    private boolean operateurWithBetween() {
+        return this.operateur.equals(Operateur.BETWEEN)
+                || this.operateur.equals(Operateur.NOT_BETWEEN);
+    }
+
+    private boolean operateurWithIn() {
+        return this.operateur.equals(Operateur.IN)
+                || this.operateur.equals(Operateur.NOT_IN);
+    }
+
+    private boolean operateurWithComparison() {
+        return this.operateur.equals(Operateur.EQUALS)
+                || this.operateur.equals(Operateur.NOT_EQUALS)
+                || this.operateur.equals(Operateur.GREATER_OR_EQUALS_THAN)
+                || this.operateur.equals(Operateur.GREATER_THAN)
+                || this.operateur.equals(Operateur.LOWER_OR_EQUALS_THAN)
+                || this.operateur.equals(Operateur.LOWER_THAN);
+    }
+
+    private boolean operateurWithLike() {
+        return this.operateur.equals(Operateur.LIKE);
+    }
+
+    private boolean dataTypeIsString() {
+        return this.dataType == 12;
+    }
+
+    private boolean dataTypeIsTimeStamp() {
+        return this.dataType == 93;
+    }
+
+    private boolean dataTypeIsInt() {
+        return this.dataType == 4 || this.dataType == 5 || this.dataType == -5;
+    }
+
+    private boolean dataTypeIsBoolean() {
+        return this.dataType == -7;
+    }
+
+    private boolean dataTypeIsDecimal() {
+        return this.dataType == 3;
+    }
+
+    private Collection<?> collectionValues(Collection<?> collection) throws LocalDateTimeValueParseError, BadQueryCriteriaException {
+        if (dataTypeIsInt()) {
+            return collectionOfInt(collection);
+        } else if (dataTypeIsDecimal()) {
+            return collectionOfBigDecimal(collection);
+        } else if (dataTypeIsTimeStamp()) {
+            return collectionOfLocalDateTime(collection);
+        } else if (dataTypeIsString()) {
+            return collectionOfString(collection);
+        }
+        throw new BadQueryCriteriaException("La valeur de ce critère doit une liste");
+    }
+
+    private Collection<String> collectionOfString(Collection<?> collection) throws BadQueryCriteriaException {
+        Collection<String> cleanValues = new ArrayList<>();
+        for (Object elt : collection) {
+            cleanValues.add(stringValue(elt));
+        }
+        return cleanValues;
+    }
+
+    private String stringValue(Object element) throws BadQueryCriteriaException {
+        if (!(element instanceof String)) {
+            throw new BadQueryCriteriaException("Les critères associés à cette requête sont incorrects.");
+        }
+        return (String) element;
+    }
+    
+    private boolean booleanValue(Object element) throws BadQueryCriteriaException {
+        if (!(element instanceof Boolean)) {
+            throw new BadQueryCriteriaException("Les critères associés à cette requête sont incorrects.");
+        }
+        return (Boolean) element;
+    }
+
+    private Collection<LocalDateTime> collectionOfLocalDateTime(Collection<?> collection) throws LocalDateTimeValueParseError {
+        Collection cleanValues = new ArrayList<>();
+        for (Object element : collection) {
+            cleanValues.add(dateValue(element));
+        }
+        return cleanValues;
+    }
+
+    private LocalDateTime dateValue(Object value) throws LocalDateTimeValueParseError {
+        if (isDateActionColumn) {
+            if (!(value instanceof LocalDateTime)) {
+                throw new LocalDateTimeValueParseError("Impossible de parser la valeur " + value + " pour la colonne " + new DateCreationColumnDefinition().name());
+            }
+            return (LocalDateTime) value;
+        } else {
+            return new CriteriaLocalDateTimeValue(dateFormat, value).value();
+        }
+    }
+
+    private Long intValue(Object value) throws BadQueryCriteriaException {
+        try {
+            return Long.valueOf(value.toString());
+        } catch (Exception ex) {
+            throw new BadQueryCriteriaException("La valeur de ce critère doit être un nombre entier ");
+        }
+    }
+
+    private BigDecimal decimalValue(Object value) throws BadQueryCriteriaException {
+        try {
+            return new BigDecimal(value.toString());
+        } catch (Exception ex) {
+            throw new BadQueryCriteriaException("La valeur de ce critère doit être un nombre décimal ");
+        }
+    }
+
+    private Collection<BigDecimal> collectionOfBigDecimal(Collection<?> collection) throws BadQueryCriteriaException {
+        Collection cleanValues = new ArrayList<>();
+        for (Object element : collection) {
+            cleanValues.add(decimalValue(element));
+        }
+        return cleanValues;
+    }
+
+    private Collection<Long> collectionOfInt(Collection<?> collection) throws BadQueryCriteriaException {
+        Collection cleanValues = new ArrayList<>();
+        for (Object element : collection) {
+            cleanValues.add(intValue(element));
+        }
+        return cleanValues;
+    }
+}

--
Gitblit v1.10.0