Skip to content

Commit

Permalink
chargement des templates filesystem
Browse files Browse the repository at this point in the history
  • Loading branch information
khergalant committed Feb 16, 2024
1 parent f27ec24 commit d93a9b9
Show file tree
Hide file tree
Showing 5 changed files with 190 additions and 63 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
import fr.opensagres.xdocreport.template.TemplateEngineKind;
import fr.univlorraine.apowsutils.WSUtils;
import fr.univlorraine.ecandidat.controllers.BatchController;
import fr.univlorraine.ecandidat.controllers.ConfigController;
import fr.univlorraine.ecandidat.controllers.LoadBalancingController;
import fr.univlorraine.ecandidat.controllers.LockCandidatController;
import fr.univlorraine.ecandidat.controllers.NomenclatureController;
Expand All @@ -69,6 +70,8 @@ public class LaunchAppConfig implements ApplicationListener<ContextRefreshedEven
private transient LoadBalancingController loadBalancingController;
@Resource
private transient BatchController batchController;
@Resource
private transient ConfigController configController;

@Value("${external.ressource:}")
private transient String externalRessource;
Expand Down Expand Up @@ -147,7 +150,7 @@ public void preprocessTemplate() {
try {
logger.info("Generation du report");
// InputStream in = getClass().getResourceAsStream("/template/"+ConstanteUtils.TEMPLATE_DOSSIER+ConstanteUtils.TEMPLATE_EXTENSION);
final InputStream in = MethodUtils.getXDocReportTemplate(ConstanteUtils.TEMPLATE_DOSSIER, null, null);
final InputStream in = MethodUtils.getInputStream(configController.getXDocReportTemplate(ConstanteUtils.TEMPLATE_DOSSIER, null, null));
final IXDocReport report = XDocReportRegistry.getRegistry().loadReport(in, TemplateEngineKind.Velocity);
final ByteArrayOutputStream out = new ByteArrayOutputStream();
final Options options = Options.getTo(ConverterTypeTo.PDF).via(ConverterTypeVia.XWPF);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,8 @@ public class CandidatureController {
@Resource
private transient FileController fileController;
@Resource
private transient ConfigController configController;
@Resource
private transient PdfManager pdfManager;
@Resource
private transient CandidatureGestionController decisionCandidatureController;
Expand Down Expand Up @@ -1213,14 +1215,14 @@ public InputStream downloadLettre(final Candidature candidature, final String mo
/* Définition du template */
InputStream template;
if (templateLettre.equals(ConstanteUtils.TEMPLATE_LETTRE_ADM)) {
template = MethodUtils.getXDocReportTemplate(templateLettre, locale, cacheController.getLangueDefault().getCodLangue());
template = MethodUtils.getInputStream(configController.getXDocReportTemplate(templateLettre, locale, cacheController.getLangueDefault().getCodLangue()));
} else {
/* Récupération de la lettre associée au type de diplome */
template = MethodUtils.getXDocReportTemplate(templateLettre,
template = MethodUtils.getInputStream(configController.getXDocReportTemplate(templateLettre,
locale,
cacheController.getLangueDefault().getCodLangue(),
ConstanteUtils.TEMPLATE_LETTRE_REFUS_SPEC_DIP_PATH,
formation.getSiScolTypDiplome().getId().getCodTpdEtb());
formation.getSiScolTypDiplome().getId().getCodTpdEtb()));
}
return generateLettre(template, data, fichierSignature, locale, sendNotification);
}
Expand Down Expand Up @@ -1327,8 +1329,7 @@ private ByteArrayInputStream generateDossier(final Candidature candidature,
try {
// 1) Load Docx file by filling Velocity template engine and cache
// it to the registry
in = MethodUtils
.getXDocReportTemplate(ConstanteUtils.TEMPLATE_DOSSIER, i18nController.getLangueCandidat(), cacheController.getLangueDefault().getCodLangue());
in = MethodUtils.getInputStream(configController.getXDocReportTemplate(ConstanteUtils.TEMPLATE_DOSSIER, i18nController.getLangueCandidat(), cacheController.getLangueDefault().getCodLangue()));
if (in == null) {
return null;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,8 @@ public class CommissionController {
@Resource
private transient CandidatureController candidatureController;
@Resource
private transient ConfigController configController;
@Resource
private transient I18nController i18nController;

/* Le service SI Scol */
Expand Down Expand Up @@ -681,7 +683,7 @@ public OnDemandFile testLettreAdm(final Commission commission, final String temp
}

/* Template */
final InputStream template = MethodUtils.getXDocReportTemplate(templateLettreAdm, i18nController.getLangueUI(), cacheController.getLangueDefault().getCodLangue());
final InputStream template = MethodUtils.getInputStream(configController.getXDocReportTemplate(templateLettreAdm, i18nController.getLangueUI(), cacheController.getLangueDefault().getCodLangue()));

/* Generation du fichier */
return new OnDemandFile(fileName, candidatureController.generateLettre(template, data, fichierSignature, i18nController.getLangueUI(), true));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
Expand Down Expand Up @@ -137,6 +138,9 @@ public Properties getPropertiesPegase() {
"Impossible de charger le fichier configUrlServicesPegase.properties, ajoutez le dans le dossier ressources ou ajoutez le paramètre configUrlServices.location au lancement de la JVM");
}

/**
* @return le favicon (filesystem ou classpath)
*/
@Cacheable(value = CacheConfig.CACHE_CONF_RESSOURCE, cacheManager = CacheConfig.CACHE_MANAGER_NAME)
public String getFaviconBase64() {
try {
Expand All @@ -153,6 +157,9 @@ public String getFaviconBase64() {
return null;
}

/**
* @return le logo (filesystem ou classpath)
*/
@Cacheable(value = CacheConfig.CACHE_CONF_RESSOURCE, cacheManager = CacheConfig.CACHE_MANAGER_NAME)
public com.vaadin.server.Resource getLogoRessource() {
try {
Expand All @@ -166,6 +173,98 @@ public com.vaadin.server.Resource getLogoRessource() {
return new ThemeResource("logo.png");
}

/**
* @param fileNameDefault
* @param codeLangue
* @param codLangueDefault
* @return le template XDocReport
*/
public byte[] getXDocReportTemplate(final String fileNameDefault, final String codeLangue, final String codLangueDefault) {
return self.getXDocReportTemplate(fileNameDefault, codeLangue, codLangueDefault, null);
}

/**
* @param fileNameDefault
* @param codeLangue
* @param codLangueDefault
* @param subPath
* @param suffixe
* @return le template XDocReport
*/
public byte[] getXDocReportTemplate(final String fileNameDefault, final String codeLangue, final String codLangueDefault, final String subPath, final String suffixe) {
/* On cherche le fichier du suffixe "séparé par _ " */
byte[] in = self.getXDocReportTemplate(fileNameDefault + "_" + suffixe, codeLangue, codLangueDefault, subPath);

/* Si il n'existe pas on renvoit le fichier par défaut */
if (in == null) {
in = self.getXDocReportTemplate(fileNameDefault, codeLangue, codLangueDefault);
}
return in;
}

/**
* @param fileNameDefault
* @param codeLangue
* @param codLangueDefault
* @param subPath
* @return le template XDocReport
*/
@Cacheable(value = CacheConfig.CACHE_CONF_RESSOURCE, cacheManager = CacheConfig.CACHE_MANAGER_NAME)
public byte[] getXDocReportTemplate(final String fileNameDefault, final String codeLangue, final String codLangueDefault, final String subPath) {
String resourcePath = "/" + ConstanteUtils.TEMPLATE_PATH + "/";
if (subPath != null) {
resourcePath = resourcePath + subPath + "/";
}
final String extension = ConstanteUtils.TEMPLATE_EXTENSION;

/* Recherche dans les ressources externes */
/* On essaye de trouver le template lié à la langue */
if (codeLangue != null && !codeLangue.equals(codLangueDefault)) {
final File fileExternal = MethodUtils.getExternalResource(externalRessource, resourcePath + fileNameDefault + "_" + codeLangue + extension);
if (fileExternal != null) {
try {
logger.debug("Demande de template FileSystem : " + resourcePath + fileNameDefault + "_" + codeLangue + extension);
return FileUtils.readFileToByteArray(fileExternal);
} catch (final Exception e) {
}
}
}

/* Template langue non trouvé, on utilise le template par défaut */
final File fileExternal = MethodUtils.getExternalResource(externalRessource, resourcePath + fileNameDefault + extension);
if (fileExternal != null) {
try {
logger.debug("Demande de template FileSystem : " + resourcePath + fileNameDefault + extension);
return FileUtils.readFileToByteArray(fileExternal);
} catch (final Exception e) {
}
}

/* Recherche dans le classpath */
/* On essaye de trouver le template lié à la langue */
if (codeLangue != null && !codeLangue.equals(codLangueDefault)) {
final InputStream in = MethodUtils.class.getResourceAsStream(resourcePath + fileNameDefault + "_" + codeLangue + extension);
if (in != null) {
try {
logger.debug("Demande de template ClassPath : " + resourcePath + fileNameDefault + "_" + codeLangue + extension);
return in.readAllBytes();
} catch (final Exception e) {
}
}
}

/* Template langue non trouvé, on utilise le template par défaut */
final InputStream in = MethodUtils.class.getResourceAsStream(resourcePath + fileNameDefault + extension);
if (in != null) {
try {
logger.debug("Demande de template Classpath : " + resourcePath + fileNameDefault + extension);
return in.readAllBytes();
} catch (final Exception e) {
}
}
return null;
}

/**
* @param list
* @param code
Expand Down
134 changes: 78 additions & 56 deletions src/main/java/fr/univlorraine/ecandidat/utils/MethodUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
*/
package fr.univlorraine.ecandidat.utils;

import java.io.ByteArrayInputStream;
import java.io.Closeable;
import java.io.File;
import java.io.InputStream;
Expand Down Expand Up @@ -704,63 +705,74 @@ public static boolean isGestionCandidatureCommission(final String typGestionCand
}

/**
* @param fileNameDefault
* @param codeLangue
* @param codLangueDefault
* @return le template XDocReport
*/
public static InputStream getXDocReportTemplate(final String fileNameDefault, final String codeLangue, final String codLangueDefault) {
return getXDocReportTemplate(fileNameDefault, codeLangue, codLangueDefault, null);
}

/**
* @param fileNameDefault
* @param codeLangue
* @param codLangueDefault
* @param subPath
* @param suffixe
* @return le template XDocReport
*/
public static InputStream getXDocReportTemplate(final String fileNameDefault, final String codeLangue, final String codLangueDefault, final String subPath, final String suffixe) {

/* On cherche le fichier du suffixe "séparé par _ " */
InputStream in = getXDocReportTemplate(fileNameDefault + "_" + suffixe, codeLangue, codLangueDefault, subPath);

/* Si il n'existe pas on renvoit le fichier par défaut */
if (in == null) {
in = getXDocReportTemplate(fileNameDefault, codeLangue, codLangueDefault);
}
return in;
}

/**
* @param fileNameDefault
* @param codeLangue
* @param codLangueDefault
* @param subPath
* @return le template XDocReport
* @param bytes
* @return
*/
public static InputStream getXDocReportTemplate(final String fileNameDefault, final String codeLangue, final String codLangueDefault, final String subPath) {
String resourcePath = "/" + ConstanteUtils.TEMPLATE_PATH + "/";
if (subPath != null) {
resourcePath = resourcePath + subPath + "/";
}
final String extension = ConstanteUtils.TEMPLATE_EXTENSION;
InputStream in = null;
/* On essaye de trouver le template lié à la langue */
if (codeLangue != null && !codeLangue.equals(codLangueDefault)) {
in = MethodUtils.class.getResourceAsStream(resourcePath + fileNameDefault + "_" + codeLangue + extension);
}

/* Template langue non trouvé, on utilise le template par défaut */
if (in == null) {
in = MethodUtils.class.getResourceAsStream(resourcePath + fileNameDefault + extension);
if (in == null) {
return null;
}
public static InputStream getInputStream(final byte[] bytes) {
if (bytes == null) {
return null;
}
return in;
}
return new ByteArrayInputStream(bytes);
}

// /**
// * @param fileNameDefault
// * @param codeLangue
// * @param codLangueDefault
// * @return le template XDocReport
// */
// public static InputStream getXDocReportTemplate(final String fileNameDefault, final String codeLangue, final String codLangueDefault) {
// return getXDocReportTemplate(fileNameDefault, codeLangue, codLangueDefault, null);
// }
//
// /**
// * @param fileNameDefault
// * @param codeLangue
// * @param codLangueDefault
// * @param subPath
// * @param suffixe
// * @return le template XDocReport
// */
// public static InputStream getXDocReportTemplate(final String fileNameDefault, final String codeLangue, final String codLangueDefault, final String subPath, final String suffixe) {
//
// /* On cherche le fichier du suffixe "séparé par _ " */
// InputStream in = getXDocReportTemplate(fileNameDefault + "_" + suffixe, codeLangue, codLangueDefault, subPath);
//
// /* Si il n'existe pas on renvoit le fichier par défaut */
// if (in == null) {
// in = getXDocReportTemplate(fileNameDefault, codeLangue, codLangueDefault);
// }
// return in;
// }
//
// /**
// * @param fileNameDefault
// * @param codeLangue
// * @param codLangueDefault
// * @param subPath
// * @return le template XDocReport
// */
// public static InputStream getXDocReportTemplate(final String fileNameDefault, final String codeLangue, final String codLangueDefault, final String subPath) {
// String resourcePath = "/" + ConstanteUtils.TEMPLATE_PATH + "/";
// if (subPath != null) {
// resourcePath = resourcePath + subPath + "/";
// }
// final String extension = ConstanteUtils.TEMPLATE_EXTENSION;
// InputStream in = null;
// /* On essaye de trouver le template lié à la langue */
// if (codeLangue != null && !codeLangue.equals(codLangueDefault)) {
// in = MethodUtils.class.getResourceAsStream(resourcePath + fileNameDefault + "_" + codeLangue + extension);
// }
//
// /* Template langue non trouvé, on utilise le template par défaut */
// if (in == null) {
// in = MethodUtils.class.getResourceAsStream(resourcePath + fileNameDefault + extension);
// if (in == null) {
// return null;
// }
// }
// return in;
// }

/**
* @param email
Expand Down Expand Up @@ -1255,9 +1267,19 @@ public static <T> Optional<T> getCasAttribute(final Map<String, Object> attribut
* @return une ressource externe
*/
public static File getExternalResource(final String externalRessourceFolder, final String folderName, final String fileName) {
return getExternalResource(externalRessourceFolder, folderName + File.separator + fileName);
}

/**
* @param externalRessourceFolder
* @param folderName
* @param fileName
* @return une ressource externe
*/
public static File getExternalResource(final String externalRessourceFolder, final String path) {
try {
if (StringUtils.isNotBlank(externalRessourceFolder) && !externalRessourceFolder.equals("null")) {
final File fileExternal = new File(externalRessourceFolder + folderName + File.separator + fileName);
final File fileExternal = new File(externalRessourceFolder + path);
if (fileExternal.exists() && fileExternal.isFile()) {
return fileExternal;
}
Expand Down

0 comments on commit d93a9b9

Please sign in to comment.