From 6494941037ae2670876de9940853d50538eb5129 Mon Sep 17 00:00:00 2001
From: Kenmegne <stephanie.kenmegne@gmail.com>
Date: Fri, 19 Jun 2026 11:25:51 +0000
Subject: [PATCH] move to new repo

---
 reporting-adhoc/src/main/java/com/megatim/reporting/adhoc/util/PrintableColumnExtractor.java |  115 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 115 insertions(+), 0 deletions(-)

diff --git a/reporting-adhoc/src/main/java/com/megatim/reporting/adhoc/util/PrintableColumnExtractor.java b/reporting-adhoc/src/main/java/com/megatim/reporting/adhoc/util/PrintableColumnExtractor.java
new file mode 100644
index 0000000..fa2e05e
--- /dev/null
+++ b/reporting-adhoc/src/main/java/com/megatim/reporting/adhoc/util/PrintableColumnExtractor.java
@@ -0,0 +1,115 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
+ */
+package com.megatim.reporting.adhoc.util;
+
+import com.megatim.reporting.adhoc.annotations.PrintColumn;
+import com.megatim.reporting.adhoc.annotations.PrintList;
+import com.megatim.reporting.adhoc.pojo.CustomField;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ *
+ * @author ASUS
+ */
+public class PrintableColumnExtractor {
+
+    private PrintableColumnExtractor() {
+    }
+
+    public static List<CustomField> extract(Class<?> clazz) {
+        List<CustomField> customFields = new ArrayList<>();
+        customFields.addAll(extractFromFields(clazz));
+        customFields.addAll(extractFromMethods(clazz));
+        List<CustomField> sortedFields = customFields.stream()
+            .sorted(Comparator.comparingInt(CustomField::getRang))
+            .collect(Collectors.toList());
+        return sortedFields;
+    }
+
+    public static List<CustomField> extractListFields(Class<?> clazz, CustomField printableListField) {
+        List<CustomField> customFields = new ArrayList<>();
+        List<Field> fields = Arrays.asList(clazz.getDeclaredFields());
+        fields.stream()
+                .filter(f -> {
+                    PrintList printList = f.getAnnotation(PrintList.class);
+                    return printList != null && printList.titre().equals(printableListField.getLibelle());
+                })
+                .findFirst()
+                .ifPresent(c -> {
+                    PrintList printList = c.getAnnotation(PrintList.class);
+                    customFields.addAll(extract(printList.classe()));
+                });
+
+        return customFields;
+    }
+
+    private static List<CustomField> extractFromFields(Class<?> clazz) {
+        List<CustomField> customFields = new ArrayList<>();
+        Field[] fields = clazz.getDeclaredFields();
+
+        for (Field f : fields) {
+            PrintColumn printColumn = f.getAnnotation(PrintColumn.class);
+            PrintList printList = f.getAnnotation(PrintList.class);
+
+            if (printColumn != null) {
+
+                CustomField customField = new CustomField(printColumn.libelle(), f.getName());
+                customField.setClasse(f.getType());
+                customField.setRang(printColumn.rang());
+                customField.setWidth(printColumn.width());
+
+                customFields.add(customField);
+            } else {
+                if (printList != null
+                        && (java.util.List.class.isAssignableFrom(f.getType()) || java.util.Set.class.isAssignableFrom(f.getType()))) {
+                    CustomField customField = new CustomField(printList.titre(), f.getName());
+                    customField.setClasse(f.getType());
+                    customFields.add(customField);
+                }
+            }
+        }
+
+        return customFields;
+    }
+
+    private static List<CustomField> extractFromMethods(Class<?> clazz) {
+        List<CustomField> customFields = new ArrayList<>();
+        Method[] methods = clazz.getDeclaredMethods();
+
+        for (Method m : methods) {
+            PrintColumn printColumn = m.getAnnotation(PrintColumn.class);
+            String fieldName = extractFieldNameFromMethod(m);
+
+            if (printColumn != null && fieldName != null) {
+
+                CustomField customField = new CustomField(printColumn.libelle(), fieldName);
+                customField.setClasse(m.getReturnType());
+                customField.setRang(printColumn.rang());
+
+                customFields.add(customField);
+            }
+        }
+
+        return customFields;
+    }
+
+    private static String extractFieldNameFromMethod(Method method) {
+        String methodName = method.getName();
+
+        if (methodName.length() > 4 && methodName.startsWith("get")
+                && ((int) methodName.charAt(3) >= 65 && (int) methodName.charAt(3) <= 90)) {
+            String firstChar = methodName.charAt(3) + "";
+
+            return firstChar.toLowerCase() + methodName.substring(4);
+        }
+        return null;
+    }
+}

--
Gitblit v1.10.0