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-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/abstracts/PaginationWithSearchEnityDAO.java | 196 +++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 196 insertions(+), 0 deletions(-)
diff --git a/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/abstracts/PaginationWithSearchEnityDAO.java b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/abstracts/PaginationWithSearchEnityDAO.java
new file mode 100644
index 0000000..fe01c3a
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-dao-ifaces/src/main/java/com/megatim/fdxconsultation/dao/ifaces/abstracts/PaginationWithSearchEnityDAO.java
@@ -0,0 +1,196 @@
+package com.megatim.fdxconsultation.dao.ifaces.abstracts;
+
+import com.megatim.fdxcommons.dao.ifaces.utils.SearchCriteriaBuilderUtil;
+import com.megatim.fdxcommons.model.search.SearchCriteria;
+import java.time.LocalDate;
+import java.util.ArrayList;
+import java.util.List;
+import javax.persistence.EntityManager;
+import javax.persistence.TypedQuery;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface PaginationWithSearchEnityDAO<T, ID, U> {
+
+ public EntityManager getEntityManager();
+
+ public Class<T> getManagedEntityClass();
+
+ public default long countBySearchEntity(U searchEntity) {
+ CriteriaBuilder qb = getEntityManager().getCriteriaBuilder();
+ CriteriaQuery<Long> cq = qb.createQuery(Long.class);
+ Root<T> root = cq.from(getManagedEntityClass());
+
+ List<SearchCriteria> searchCriterias = SearchCriteriaBuilderUtil.getSearchCriterias(searchEntity, getManagedEntityClass(), root, new ArrayList<>());
+ List<Predicate> predicates = createPedicates(searchCriterias, qb, root);
+
+ cq.select(qb.count(root));
+ cq.where(predicates.toArray(new Predicate[predicates.size()]));
+
+ return (long) getEntityManager().createQuery(cq).getSingleResult();
+ }
+
+ public default List<T> all() {
+ CriteriaBuilder qb = getEntityManager().getCriteriaBuilder();
+ CriteriaQuery<T> cq = qb.createQuery(getManagedEntityClass());
+
+ Root<T> root = cq.from(getManagedEntityClass());
+ cq.select(root);
+
+ return getEntityManager().createQuery(cq).getResultList();
+ }
+
+ public default List<T> findAllBySearchEntity(U searchEntity) {
+ CriteriaBuilder qb = getEntityManager().getCriteriaBuilder();
+ CriteriaQuery<T> cq = qb.createQuery(getManagedEntityClass());
+
+ Root<T> root = cq.from(getManagedEntityClass());
+
+ List<SearchCriteria> searchCriterias = SearchCriteriaBuilderUtil.getSearchCriterias(searchEntity, getManagedEntityClass(), root, new ArrayList<>());
+ List<Predicate> predicates = new ArrayList<>();
+
+ try {
+ predicates = createPedicates(searchCriterias, qb, root);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ cq.select(root);
+ cq.where(predicates.toArray(new Predicate[predicates.size()]));
+
+ return getEntityManager().createQuery(cq).getResultList();
+ }
+
+ public default List<T> findAllBySearchEntity(Integer pageNumber, Integer pagesize, U searchEntity) {
+ CriteriaBuilder qb = getEntityManager().getCriteriaBuilder();
+ CriteriaQuery<T> cq = qb.createQuery(getManagedEntityClass());
+
+ Root<T> root = cq.from(getManagedEntityClass());
+
+ List<SearchCriteria> searchCriterias = SearchCriteriaBuilderUtil.getSearchCriterias(searchEntity, getManagedEntityClass(), root, new ArrayList<>());
+
+ List<Predicate> predicates = new ArrayList<>();
+
+ try {
+ predicates = createPedicates(searchCriterias, qb, root);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ cq.select(root);
+ cq.where(predicates.toArray(new Predicate[predicates.size()]));
+
+ TypedQuery<T> typedQuery = getEntityManager().createQuery(cq);
+
+ typedQuery.setFirstResult((pageNumber - 1) * pagesize);
+ typedQuery.setMaxResults(pagesize);
+
+ return typedQuery.getResultList();
+ }
+
+ /**
+ * Méthode qui les prédicats à partir des critères de recherche
+ *
+ * @param searchCriterias
+ * @param cb
+ * @param root
+ * @return
+ */
+ default List<Predicate> createPedicates(List<SearchCriteria> searchCriterias, CriteriaBuilder cb, Root<T> root) {
+ List<Predicate> predicates = new ArrayList<>();
+
+ searchCriterias.parallelStream().forEach(s -> {
+
+ if (s.getFieldValue() != null) {
+ Predicate predicate = null;
+ switch (s.getOperateur()) {
+ case EQUALS:
+ predicate = cb.equal(s.getFrom().get(s.getFieldName()), s.getFieldValue());
+ predicates.add(predicate);
+ break;
+
+ case NOT_EQUALS:
+ predicate = cb.notEqual(s.getFrom().get(s.getFieldName()), s.getFieldValue());
+ predicates.add(predicate);
+ break;
+
+ case LIKE:
+ if (s.getFieldValue() instanceof String) {
+ predicate = cb.like(s.getFrom().get(s.getFieldName()), "%" + s.getFieldValue().toString() + "%");
+ predicates.add(predicate);
+ }
+ break;
+
+ case GREATER_THAN:
+ if (s.getFieldValue() instanceof Number) {
+ predicate = cb.gt(s.getFrom().get(s.getFieldName()), (Number) s.getFieldValue());
+ predicates.add(predicate);
+
+ } else if (s.getFieldValue() instanceof String) {
+ predicate = cb.greaterThanOrEqualTo(root.get(s.getFieldName()), s.getFieldValue().toString());
+ predicates.add(predicate);
+ } else if (s.getFieldValue() instanceof LocalDate) {
+ predicate = cb.greaterThan(s.getFrom().get(s.getFieldName()), (LocalDate) s.getFieldValue());
+ predicates.add(predicate);
+ }
+ break;
+
+ case GREATER_OR_EQUALS_THAN:
+ if (s.getFieldValue() instanceof Number) {
+ predicate = cb.ge(root.get(s.getFieldName()), (Number) s.getFieldValue());
+ predicates.add(predicate);
+ } else if (s.getFieldValue() instanceof String) {
+ predicate = cb.greaterThanOrEqualTo(root.get(s.getFieldName()), s.getFieldValue().toString());
+ predicates.add(predicate);
+ } else if (s.getFieldValue() instanceof LocalDate) {
+ predicate = cb.greaterThanOrEqualTo(root.get(s.getFieldName()), (LocalDate) s.getFieldValue());
+ predicates.add(predicate);
+ }
+ break;
+
+ case LESS_THAN:
+ if (s.getFieldValue() instanceof Number) {
+ predicate = cb.lt(s.getFrom().get(s.getFieldName()), (Number) s.getFieldValue());
+ predicates.add(predicate);
+ } else if (s.getFieldValue() instanceof String) {
+ predicate = cb.greaterThanOrEqualTo(root.get(s.getFieldName()), s.getFieldValue().toString());
+ predicates.add(predicate);
+ } else if (s.getFieldValue() instanceof LocalDate) {
+ predicate = cb.lessThan(s.getFrom().get(s.getFieldName()), (LocalDate) s.getFieldValue());
+ predicates.add(predicate);
+ }
+ break;
+
+ case LESS_OR_EQUALS_THAN:
+ if (s.getFieldValue() instanceof Number) {
+ predicate = cb.le(s.getFrom().get(s.getFieldName()), (Number) s.getFieldValue());
+ predicates.add(predicate);
+ } else if (s.getFieldValue() instanceof String) {
+ predicate = cb.greaterThanOrEqualTo(root.get(s.getFieldName()), s.getFieldValue().toString());
+ predicates.add(predicate);
+ } else if (s.getFieldValue() instanceof LocalDate) {
+ predicate = cb.lessThanOrEqualTo(s.getFrom().get(s.getFieldName()), (LocalDate) s.getFieldValue());
+ predicates.add(predicate);
+ }
+ break;
+ case IN:
+ if (s.getFieldValue() instanceof java.util.Collection) {
+ predicate = s.getFrom().get(s.getFieldName()).in(s.getFieldValue());
+ predicates.add(predicate);
+ }
+ break;
+ default:
+
+ }
+ }
+ });
+
+ return predicates;
+ }
+}
--
Gitblit v1.10.0