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-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/abtracts/GenericReportingManagerIFaces.java | 254 ++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 254 insertions(+), 0 deletions(-)
diff --git a/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/abtracts/GenericReportingManagerIFaces.java b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/abtracts/GenericReportingManagerIFaces.java
new file mode 100644
index 0000000..128d703
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-ifaces/src/main/java/com/megatim/fdxconsultation/core/ifaces/abtracts/GenericReportingManagerIFaces.java
@@ -0,0 +1,254 @@
+package com.megatim.fdxconsultation.core.ifaces.abtracts;
+
+import com.megatim.fdxcommons.model.enumeration.Operateur;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.tools.context.AppCommonContext;
+import com.megatim.reporting.adhoc.dto.Column;
+import com.megatim.reporting.adhoc.dto.HeaderData;
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import com.megatim.reporting.adhoc.pojo.CustomField;
+import com.megatim.reporting.adhoc.pojo.DescriptionEtat;
+import com.megatim.reporting.adhoc.pojo.DescriptionSousEtat;
+import com.megatim.reporting.adhoc.pojo.ElementToDisplay;
+import com.megatim.reporting.adhoc.pojo.enums.ElementType;
+import com.megatim.reporting.adhoc.pojo.enums.Position;
+import com.megatim.reporting.adhoc.process.Processor;
+import com.megatim.reporting.adhoc.util.PdfUtil;
+import com.megatim.reporting.adhoc.util.PrintableColumnExtractor;
+import java.io.File;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+import javax.ws.rs.core.Response;
+
+/**
+ *
+ * @author ASUS
+ */
+public interface GenericReportingManagerIFaces<T, U, ID> {// T : entité de reporting, U : entité de recherche, ID : Type de l'id
+
+ public default File getTemplateFileForList() {
+ return Paths.get(AppCommonContext.TEMPLATE_DIR, AppCommonContext.TEMPLATE_LISTE).toFile();
+ }
+
+ public default File getTemplateFileForDetail() {
+ return Paths.get(AppCommonContext.TEMPLATE_DIR, AppCommonContext.TEMPLATE_DETAIL).toFile();
+ }
+
+ public default String getJasperFolder() {
+ return AppCommonContext.JASPER_DIR;
+ }
+
+ public default String exportFilesRepository() {
+ return AppCommonContext.EXPORT_DIR;
+ }
+
+ String getEntityIdName();
+
+ default String getReportName() {
+ return getClazz().getSimpleName() + new Date().getTime();
+ }
+
+ default String getSubReportName(String fieldName) {
+ return getClazz().getSimpleName() + "SousEtat" + (fieldName.charAt(0) + "").toUpperCase() + fieldName.substring(1) + new Date().getTime();
+ }
+
+ Class<T> getClazz();
+
+ List<T> getDatas(U searchEntity) throws Exception;
+
+ Map<String, Object> getParameters();
+
+ File printAll(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception;
+
+ File printOne(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception;
+
+ File exportExcelAll(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception;
+
+ File exportExcelOne(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception;
+
+ default String getVersion() {
+ return "Fdx-Consultation v1.0";
+ }
+
+ default String getLogo() {
+ return Paths.get(AppCommonContext.IMAGES_DIR, AppCommonContext.LOGO).toString();
+ }
+
+ default File generatePdf(ReportConfiguration<U> reportConfiguration, User userConnected, boolean isDetail) throws Exception {
+ File repertoire = Paths.get(exportFilesRepository()).toFile();
+
+ if (repertoire == null || !repertoire.exists()) {
+ repertoire = new File(exportFilesRepository());
+ repertoire.mkdirs();
+ }
+ if (reportConfiguration != null) {
+ DescriptionEtat descriptionEtat = getDescriptionEtat(reportConfiguration, userConnected, isDetail);
+ List<T> datas = getDatas(reportConfiguration.getSearchEntity());
+ descriptionEtat.getElementsToDisplay().addAll(getSystemElementsToDisplay(userConnected, datas, isDetail));
+
+ Map<String, Object> parameters = getParameters();
+ parameters.put("TITRE", reportConfiguration.getTitle());
+
+ if (userConnected != null) {
+ parameters.put("LOGIN_UTILISATEUR", userConnected.getUserName());
+ }
+ parameters.put("VERSION", getVersion());
+ parameters.put("LOGO_CENTRE", getLogo());
+ parameters.put("SUBREPORT_DIR", AppCommonContext.JASPER_DIR + File.separator);
+
+ String jasperFilePath = new Processor().process(descriptionEtat);
+ return PdfUtil.generatePdfFile(isDetail && datas.size() > 1 ? Arrays.asList(datas.get(0)) : datas,
+ Paths.get(exportFilesRepository(), descriptionEtat.getReportName() + ".pdf").toString(),
+ jasperFilePath, parameters);
+ } else {
+ return Files.createFile(Paths.get(Paths.get(exportFilesRepository(), getReportName() + ".pdf").toString())).toFile();
+ }
+
+ }
+
+ default File exportExcel(ReportConfiguration<U> reportConfiguration, User userConnected, boolean isDetail) throws Exception {
+ File repertoire = Paths.get(exportFilesRepository()).toFile();
+ ExportExcelGenerator<T> exportExcelGenerator = new ExportExcelGenerator();
+ if (repertoire == null || !repertoire.exists()) {
+ repertoire = new File(exportFilesRepository());
+ repertoire.mkdirs();
+ }
+ if (reportConfiguration != null) {
+ List<T> datas = getDatas(reportConfiguration.getSearchEntity());
+ return exportExcelGenerator.exporter(datas);
+ } else {
+ return Files.createFile(Paths.get(Paths.get(exportFilesRepository(), getReportName() + AppCommonContext.EXTENSION_EXCEL).toString())).toFile();
+ }
+ }
+
+ default DescriptionEtat getDescriptionEtat(ReportConfiguration reportConfiguration, User userConnected, boolean isDetail) {
+
+ DescriptionEtat descriptionEtat = new DescriptionEtat();
+ List<CustomField> printableFields = getCustomFields(reportConfiguration.getColumns());
+
+ descriptionEtat.setDetail(isDetail);
+ descriptionEtat.getElementsToDisplay().addAll(getElementsToDisplay(reportConfiguration.getHeaderDatas()));
+ descriptionEtat.getFieldsToDisplay().addAll(printableFields);
+ descriptionEtat.setReportName(getReportName());
+ descriptionEtat.setRepositoryFolder(getJasperFolder());
+
+ if (descriptionEtat.isDetail()) {
+ descriptionEtat.setTemplateFile(getTemplateFileForDetail());
+ descriptionEtat.setHaveLineNumber(false);
+ } else {
+ descriptionEtat.setTemplateFile(getTemplateFileForList());
+ }
+ descriptionEtat
+ .getSubReportDescriptions()
+ .addAll(getSousDescriptionSousEtats(printableFields
+ .stream()
+ .filter(p -> p.getClasse().isAssignableFrom(java.util.List.class) || p.getClasse().isAssignableFrom(java.util.Set.class))
+ .collect(Collectors.toList())));
+
+ return descriptionEtat;
+ }
+
+ default List<DescriptionSousEtat> getSousDescriptionSousEtats(List<CustomField> printableListFields) {
+ List<DescriptionSousEtat> descSousEtatListe = new ArrayList<>();
+ printableListFields.stream().forEach(c -> {
+ DescriptionSousEtat descSousEtat = new DescriptionSousEtat();
+
+ descSousEtat.setDataField(c);
+ descSousEtat.setReportTitle(c.getLibelle());
+ descSousEtat.setRangSousEtat(c.getRang());
+ descSousEtat.setSubReportName(getSubReportName(c.getName()));
+ descSousEtat.getFieldsToDisplay().addAll(PrintableColumnExtractor.extractListFields(getClazz(), c));
+
+ descSousEtatListe.add(descSousEtat);
+ });
+
+ return descSousEtatListe;
+ }
+
+ default List<ElementToDisplay> getElementsToDisplay(List<HeaderData> headerDatas) {
+ List<ElementToDisplay> eltsToDisplay = new ArrayList<>();
+ headerDatas.stream().forEach(h -> {
+ ElementToDisplay elt = new ElementToDisplay(h.getLibelle(), h.getValue());
+ try {
+ elt.setPosition(Position.of(h.getPosition()));
+ } catch (Exception ex) {
+
+ }
+ eltsToDisplay.add(elt);
+ });
+ return eltsToDisplay;
+ }
+
+ default List<ElementToDisplay> getSystemElementsToDisplay(User userConnected, List<T> datas, boolean isDetail) {
+ List<ElementToDisplay> eltsToDisplay = new ArrayList<>();
+
+ ElementToDisplay elt = new ElementToDisplay("Edité le", "");
+ elt.setElementType(ElementType.DATE_GENERE);
+ elt.setPosition(Position.RIGHT);
+ eltsToDisplay.add(elt);
+
+ if (!isDetail) {
+ elt = new ElementToDisplay("Nombre Total", datas.size() + "");
+ eltsToDisplay.add(elt);
+ }
+
+ elt = new ElementToDisplay("Edité par", userConnected != null ? userConnected.getUserName() : "");
+ elt.setPosition(Position.RIGHT);
+ eltsToDisplay.add(elt);
+
+ return eltsToDisplay;
+ }
+
+ default List<CustomField> getCustomFields(List<Column> columns) {
+ List<CustomField> customFields = new ArrayList<>();
+ List<CustomField> printableFields = PrintableColumnExtractor.extract(getClazz());
+
+ columns.stream().forEach(c -> {
+ printableFields.stream().filter(p -> p.getLibelle().equals(c.getLibelle())).findFirst().ifPresent(p -> {
+ p.setRang(c.getRang());
+ customFields.add(p);
+ });
+
+ });
+ return customFields;
+ }
+
+ public default CriteriaFormRequest getExportOneCriterion(ID id) {
+ CriteriaFormRequest formRequest = new CriteriaFormRequest();
+ CriteriaEntityFromView fromView = new CriteriaEntityFromView();
+ fromView.setCriteriaValue(id);
+ fromView.setNomColonne(getEntityIdName());
+ fromView.setOperateur(Operateur.EQUALS);
+ formRequest.setCriteria(fromView);
+ return formRequest;
+ }
+
+ public default ReportConfiguration<CriteriaEntityFromView> finalReportConfiguration(ReportConfiguration<CriteriaFormRequest> reportConfiguration) {
+ ReportConfiguration<CriteriaEntityFromView> finalConfig = null;
+
+ if (reportConfiguration != null) {
+ finalConfig = new ReportConfiguration();
+ finalConfig.setSearchEntity(reportConfiguration.getSearchEntity() != null ? reportConfiguration.getSearchEntity().getCriteria() : null);
+ finalConfig.setTitle(reportConfiguration.getTitle());
+ finalConfig.getColumns().addAll(reportConfiguration.getColumns());
+ finalConfig.getHeaderDatas().addAll(reportConfiguration.getHeaderDatas());
+ }
+ return finalConfig;
+ }
+
+ public default Response downloadFile(File file) {
+ Response.ResponseBuilder response = Response.ok((Object) file);
+ response.header("Content-Disposition", "attachment;filename=" + file.getName());
+ return response.build();
+
+ }
+
+}
--
Gitblit v1.10.0