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();
|
|
}
|
|
}
|