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-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/utils/CriteriaEntitySearchUtil.java |  103 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 103 insertions(+), 0 deletions(-)

diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/utils/CriteriaEntitySearchUtil.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/utils/CriteriaEntitySearchUtil.java
new file mode 100644
index 0000000..6d4d30d
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/utils/CriteriaEntitySearchUtil.java
@@ -0,0 +1,103 @@
+/*
+ * 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.fdxconsultation.core.impl.utils;
+
+import com.megatim.fdxcommons.model.enumeration.TypeDonnee;
+import com.megatim.fdxcommons.model.search.SearchColumn;
+import com.megatim.fdxcommons.tools.utils.SqlUtilities;
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import com.megatim.fdxcommons.model.search.CriteriaEntitySearch;
+import java.util.Collections;
+
+/**
+ *
+ * @author ASUS
+ */
+public class CriteriaEntitySearchUtil {
+
+    private CriteriaEntitySearchUtil() {
+
+    }
+
+    public static List<SearchColumn> getSearchColumns(Class<?> classe) {
+        List<SearchColumn> searchColumns = new ArrayList<>();
+        List<Field> fields = Arrays.asList(classe.getDeclaredFields());
+
+        for (Field f : fields) {
+            CriteriaEntitySearch searchAnn = f.getAnnotation(CriteriaEntitySearch.class);
+            if (searchAnn != null && searchAnn.visible()) {
+                SearchColumn searchColumn = new SearchColumn();
+                searchColumn.setLibelle(searchAnn.libelle());
+                searchColumn.setRang(searchAnn.rang());
+                searchColumn.setFieldName(searchAnn.fieldName() == null || searchAnn.fieldName().isEmpty() ? f.getName() : searchAnn.fieldName());
+
+                TypeDonnee typeDonnee = getTypeDonnee(f, searchAnn);
+
+                if (typeDonnee != null) {
+                    searchColumn.setTypeDonnee(typeDonnee);
+                    searchColumns.add(searchColumn);
+
+                    if (typeDonnee.equals(TypeDonnee.ENUM)) {
+                        List<String> valuesOfEnum = new ArrayList<>();
+                        Class<? extends Enum> enumClasse = (Class<? extends Enum>) f.getType();
+                        List<Enum> enums = Arrays.asList(enumClasse.getEnumConstants());
+
+                        enums.stream().forEach(e -> valuesOfEnum.add(e.toString()));
+                        searchColumn.setValuesOfEnum(valuesOfEnum);
+                    }
+                }
+
+            }
+        }
+        Collections.sort(searchColumns, (SearchColumn s1, SearchColumn s2) -> Integer.valueOf(s1.getRang()).compareTo(s2.getRang()));
+        return searchColumns;
+    }
+
+    private static TypeDonnee getTypeDonnee(Field field, CriteriaEntitySearch searchAnn) {
+        Class<?> fieldClass = field.getType();
+        TypeDonnee typeDonnee = null;
+
+        if (fieldClass.isPrimitive()) {
+            typeDonnee = SqlUtilities.typeDonneeFromJavaClass(fieldClass);
+
+        } else if (fieldClass.isEnum()) {
+            typeDonnee = TypeDonnee.ENUM;
+
+        } else if (!fieldClass.isInterface() && !Collection.class.isAssignableFrom(fieldClass) && !Map.class.isAssignableFrom(fieldClass)) {
+            String[] fieldPath = searchAnn.fieldName().split("\\.");
+
+            if (fieldPath.length < 2) {
+                typeDonnee = SqlUtilities.typeDonneeFromJavaClass(fieldClass);
+            } else {
+                typeDonnee = SqlUtilities.typeDonneeFromJavaClass(getFieldType(fieldClass, Arrays.copyOfRange(fieldPath, 1, fieldPath.length)));
+            }
+        }
+
+        return typeDonnee;
+    }
+
+    private static Class<?> getFieldType(Class<?> classe, String[] fieldPath) {
+        String fieldName = fieldPath[0];
+        List<Field> fields = Arrays.asList(classe.getDeclaredFields());
+        Optional<Field> optField = fields.stream().filter(f -> f.getName().equals(fieldName)).findFirst();
+
+        if (optField.isPresent()) {
+            Field field = optField.get();
+            if (fieldPath.length == 1) {
+                return field.getType();
+            } else {
+                return getFieldType(field.getType(), Arrays.copyOfRange(fieldPath, 1, fieldPath.length));
+            }
+        } else {
+            return null;
+        }
+    }
+}

--
Gitblit v1.10.0