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 : 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 getClazz(); List getDatas(U searchEntity) throws Exception; Map getParameters(); File printAll(ReportConfiguration reportConfiguration, User userConnected) throws Exception; File printOne(ReportConfiguration reportConfiguration, User userConnected) throws Exception; File exportExcelAll(ReportConfiguration reportConfiguration, User userConnected) throws Exception; File exportExcelOne(ReportConfiguration 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 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 datas = getDatas(reportConfiguration.getSearchEntity()); descriptionEtat.getElementsToDisplay().addAll(getSystemElementsToDisplay(userConnected, datas, isDetail)); Map 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 reportConfiguration, User userConnected, boolean isDetail) throws Exception { File repertoire = Paths.get(exportFilesRepository()).toFile(); ExportExcelGenerator exportExcelGenerator = new ExportExcelGenerator(); if (repertoire == null || !repertoire.exists()) { repertoire = new File(exportFilesRepository()); repertoire.mkdirs(); } if (reportConfiguration != null) { List 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 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 getSousDescriptionSousEtats(List printableListFields) { List 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 getElementsToDisplay(List headerDatas) { List 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 getSystemElementsToDisplay(User userConnected, List datas, boolean isDetail) { List 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 getCustomFields(List columns) { List customFields = new ArrayList<>(); List 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 finalReportConfiguration(ReportConfiguration reportConfiguration) { ReportConfiguration 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(); } }