Java tutorial
package nc.noumea.mairie.appock.services.impl; /*- * #%L * Logiciel de Gestion des approvisionnements et des stocks des fournitures administratives de la Mairie de Nouma * %% * Copyright (C) 2017 Mairie de Nouma, Nouvelle-Caldonie * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public * License along with this program. If not, see * <http://www.gnu.org/licenses/gpl-3.0.html>. * #L% */ import nc.noumea.mairie.appock.core.utility.AppockUtil; import nc.noumea.mairie.appock.core.utility.DateUtil; import nc.noumea.mairie.appock.entity.Config; import nc.noumea.mairie.appock.entity.FichierDocumentationUtilisateur; import nc.noumea.mairie.appock.repositories.ConfigRepository; import nc.noumea.mairie.appock.repositories.FichierDocumentationUtilisateurRepository; import nc.noumea.mairie.appock.repositories.MimeTypeRepository; import nc.noumea.mairie.appock.services.ConfigService; import org.apache.commons.io.FileUtils; import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.context.annotation.ScopedProxyMode; import org.springframework.stereotype.Service; import java.io.File; import java.io.IOException; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.HashMap; import java.util.Map; @Service("configService") @Scope(value = "singleton", proxyMode = ScopedProxyMode.TARGET_CLASS) public class ConfigServiceImpl implements ConfigService { private static final Logger logger = LoggerFactory.getLogger(ConfigServiceImpl.class); @Autowired(required = true) String pieceJointeDir; @Autowired ConfigRepository configRepository; @Autowired MimeTypeRepository mimeTypeRepository; @Autowired FichierDocumentationUtilisateurRepository fichierDocumentationUtilisateurRepository; private static Logger log = LoggerFactory.getLogger(ConfigServiceImpl.class); private Map<String, String> cacheCleValeur; private LocalDateTime dateCache; @Override public String getPieceJointeDir() { return pieceJointeDir; } public void setPieceJointeDir(String pieceJointeDir) { this.pieceJointeDir = pieceJointeDir; logger.info("Attachments directory : " + pieceJointeDir); } @Override public String getValeur(String cle) { if (isCacheARecharger()) { rechargeCache(); } if (!cacheCleValeur.containsKey(cle)) { throw new RuntimeException("L'lment de configuration " + cle + " n'a pas t trouv"); } return cacheCleValeur.get(cle); } private boolean isCacheARecharger() { return cacheCleValeur == null || dateCache == null || LocalDateTime.now().isAfter(dateCache.plusMinutes(5)); } @Override public void rechargeCache() { this.dateCache = LocalDateTime.now(); this.cacheCleValeur = new HashMap<>(); for (Config config : configRepository.findAll()) { this.cacheCleValeur.put(config.getCle(), config.getValeur()); } } @Override public Integer getValeurInt(String cle, boolean throwExceptionIfNotParsable) { String valeur = getValeur(cle); Integer result = null; if (!StringUtils.isBlank(valeur)) { try { result = Integer.parseInt(valeur); } catch (Exception e) { log.error("La config pour la cl n'est pas un entier : " + cle + ", valeur = " + valeur, e); } } if (throwExceptionIfNotParsable && result == null) { throw new RuntimeException("Erreur sur lecture cl " + cle + " non entire : " + valeur); } return result; } /** * Retourne la valeur d'un lment de configuration au format JJ/MM/AAAA * * @param cle cl * @param throwExceptionIfNotParsable dans le cas o l'lment n'est pas parsable * @return la date extraite de la configuration */ @Override public LocalDate getValeurDate(String cle, boolean throwExceptionIfNotParsable) { String valeur = getValeur(cle); LocalDate result = null; if (!StringUtils.isBlank(valeur)) { try { result = DateUtil.parseLocalDate(valeur); } catch (Exception e) { log.error("La config pour la cl n'est pas un entier : " + cle + ", valeur = " + valeur, e); } } if (throwExceptionIfNotParsable && result == null) { throw new RuntimeException("Erreur sur lecture cl " + cle + " non date : " + valeur); } return result; } @Override public String getTitreApplication() { return getValeur(Config.TITRE_APPLICATION); } @Override public Integer getTailleMaxPieceJointeEnMo() { return getValeurInt(Config.TAILLE_MAX_PIECE_JOINTE_EN_MO, true); } @Override public String getMotDePasseVerrouExcel() { return getValeur(Config.MOT_DE_PASSE_VERROU_EXCEL); } @Override public String getEncodageSujetEmail() { return getValeur(Config.ENCODAGE_SUJET_EMAIL); } @Override public String getPiedDeMail() { return getValeur(Config.PIED_DE_MAIL); } @Override public String getDefaultFromEmailAddress() { return getValeur(Config.DEFAULT_FROM_EMAIL_ADDRESS); } @Override public FichierDocumentationUtilisateur saveFichierDocumentationUtilisateur(byte[] content, String nomFichier) throws IOException { FichierDocumentationUtilisateur fichierDocumentationUtilisateur = new FichierDocumentationUtilisateur(); fichierDocumentationUtilisateur.setNomFichier(nomFichier); fichierDocumentationUtilisateur.setContenu(content); fichierDocumentationUtilisateur .setMimeType(mimeTypeRepository.findFirstByLibelle(AppockUtil.getMimeType(content))); fichierDocumentationUtilisateur = fichierDocumentationUtilisateurRepository .save(fichierDocumentationUtilisateur); creeFichierCoteServeur(fichierDocumentationUtilisateur); return fichierDocumentationUtilisateur; } private void creeFichierCoteServeur(FichierDocumentationUtilisateur fichierDocumentationUtilisateur) throws IOException { if (fichierDocumentationUtilisateur.getContenu() == null) { return; } FileUtils.writeByteArrayToFile(getFileFichierDocumentationUtilisateur(fichierDocumentationUtilisateur), fichierDocumentationUtilisateur.getContenu()); } @Override public File getFileFichierDocumentationUtilisateur( FichierDocumentationUtilisateur fichierDocumentationUtilisateur) { if (fichierDocumentationUtilisateur == null || fichierDocumentationUtilisateur.getId() == null) { throw new IllegalArgumentException( "fichierDocumentationUtilisateur null ou sans id : " + fichierDocumentationUtilisateur); } return new File(getPieceJointeDir() + "/fichierDocumentationUtilisateur" + File.separatorChar + fichierDocumentationUtilisateur.getId()); } }