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/JsonParsedQueryCriterion.java | 137 +++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 137 insertions(+), 0 deletions(-)
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/JsonParsedQueryCriterion.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/JsonParsedQueryCriterion.java
new file mode 100644
index 0000000..1e73b13
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/metadata/JsonParsedQueryCriterion.java
@@ -0,0 +1,137 @@
+/*
+ * 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.metadata;
+
+import com.megatim.fdxcommons.model.enumeration.Operateur;
+import com.megatim.fdxcommons.model.integration.ColumnDefinition;
+import com.megatim.fdxcommons.tools.database.exceptions.BadQueryCriteriaException;
+import com.megatim.fdxcommons.tools.database.exceptions.LocalDateTimeValueParseError;
+import com.megatim.fdxcommons.tools.database.tables.FdxTableColumn;
+import com.megatim.fdxcommons.tools.database.tables.JsonFdxTableColumns;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.AppColumnDefinitions;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.FdxApiColumnDefinitions;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.FdxConsultationColumnDefinitions;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ *
+ * @author ASUS
+ */
+public class JsonParsedQueryCriterion {
+
+ private final QueryCriterion queryCriterion;
+ private final JsonFdxTableColumns fdxTableColumns;
+ private final List<ColumnDefinition> columnDefinitionsWithFullQualifiedName;
+ private final FdxApiColumnDefinitions apiColumnDefinitions = new FdxApiColumnDefinitions();
+ private final FdxConsultationColumnDefinitions fdxConsColumnDefinitions = new FdxConsultationColumnDefinitions();
+
+ public JsonParsedQueryCriterion(QueryCriterion queryCriterion, JsonFdxTableColumns fdxTableColumns, List<ColumnDefinition> columnDefinitionsWithFullQualifiedName) {
+ this.queryCriterion = queryCriterion;
+ this.fdxTableColumns = fdxTableColumns;
+ this.columnDefinitionsWithFullQualifiedName = columnDefinitionsWithFullQualifiedName;
+ }
+
+ public QueryCriterion parsedCriterion() throws LocalDateTimeValueParseError, BadQueryCriteriaException {
+ return queryCriterion != null
+ ? parsedCriterion(queryCriterion)
+ : null;
+ }
+
+ private QueryCriterion parsedCriterion(QueryCriterion criterion) throws 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) {
+ return apiColumnDefinitions.isAppColumnDefinition(nomColonne)
+ || fdxConsColumnDefinitions.isAppColumnDefinition(nomColonne)
+ || nomColonne != null && fdxTableColumns
+ .columns()
+ .stream()
+ .filter(c -> c.getName().equalsIgnoreCase(nomColonne))
+ .findFirst()
+ .isPresent();
+ }
+
+ private Object correctValue(String nomColonne, Object value, Operateur operateur) throws 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 = columnDefinitionsWithFullQualifiedName
+ .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