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-tools-module/fdxconsultation-tools/src/main/java/com/megatim/fdxconsultation/tools/CommonTools.java | 404 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 404 insertions(+), 0 deletions(-)
diff --git a/fdx-consultation/fdxconsultation-tools-module/fdxconsultation-tools/src/main/java/com/megatim/fdxconsultation/tools/CommonTools.java b/fdx-consultation/fdxconsultation-tools-module/fdxconsultation-tools/src/main/java/com/megatim/fdxconsultation/tools/CommonTools.java
new file mode 100644
index 0000000..a5a0eba
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-tools-module/fdxconsultation-tools/src/main/java/com/megatim/fdxconsultation/tools/CommonTools.java
@@ -0,0 +1,404 @@
+package com.megatim.fdxconsultation.tools;
+
+import com.megatim.export.excel.Export;
+import io.github.classgraph.ClassGraph;
+import io.github.classgraph.ClassInfoList;
+import io.github.classgraph.ScanResult;
+import java.io.File;
+import java.io.FileInputStream;
+import java.math.BigInteger;
+import java.security.NoSuchAlgorithmException;
+import java.security.SecureRandom;
+import java.security.spec.InvalidKeySpecException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+import javax.crypto.SecretKeyFactory;
+import javax.crypto.spec.PBEKeySpec;
+import java.lang.annotation.Annotation;
+import com.megatim.fdxconsultation.tools.context.AppCommonContext;
+import java.text.SimpleDateFormat;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+/**
+ *
+ * @author ABEGA
+ */
+public class CommonTools {
+
+ /**
+ * Permet de generer des nomre aleatorement
+ *
+ * @return
+ */
+ public static synchronized String genererChaineAleatoire() {
+ SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
+ String nombre = format.format(new Date()) + String.valueOf((int) (Math.random() * 1000000000));
+ return nombre;
+ }
+
+ /**
+ * Permet d'exporter en excel dans repertoire donn�
+ *
+ * @param datas
+ * @param repertoireGeneration
+ * @return
+ */
+ public static File exporterEnExcel(List datas, File fichier) {
+
+ try {
+
+ //On effectue l'export
+ Export.exportExcel(datas, fichier.getAbsolutePath());
+
+ } catch (Exception ex) {
+
+ //On affiche l'erreur
+ ex.printStackTrace();
+
+ }
+
+ return fichier;
+ }
+
+ /**
+ * Methode permettant de
+ * @param headers
+ * @param request
+ * @return
+ */
+ public static Map<String, String> recupererInfosRequete(HttpHeaders headers, @Context HttpServletRequest request) {
+
+ //Variables
+ Map<String, String> map = new HashMap<String, String>();
+
+ // Adresse IP du client
+ String clientIp = request.getRemoteAddr();
+
+ // En-tête User-Agent
+ String userAgent = headers.getHeaderString("User-Agent");
+
+ // Methode
+ String methode = request.getMethod();
+
+ // Path
+ String path = request.getRequestURI();
+
+ //On ajoute les informations dans la map
+ map.put(AppCommonContext.REQUETE_HTTP_ADRESSE_IP, clientIp);
+ map.put(AppCommonContext.REQUETE_HTTP_CLIENT, userAgent);
+ map.put(AppCommonContext.REQUETE_HTTP_METHODE, methode);
+ map.put(AppCommonContext.REQUETE_HTTP_PATH, path.toLowerCase().replaceAll(AppCommonContext.PATH_BASE_MODULE_CONSULTATION.toLowerCase(), ""));
+
+ //On retourne la map
+ return map;
+
+ }
+
+ /**
+ * Permet d'ajouter des jours à une date donnée
+ * @param date
+ * @param nbreJour
+ * @return
+ */
+ public static Date addDay(Date date, int nbreJour){
+
+ //Varaibles
+ Calendar cal = Calendar.getInstance();
+
+ //On ajoute la date
+ cal.setTime(date);
+
+ //On ajoute la date
+ cal.add(Calendar.DATE, nbreJour);
+
+ // convert calendar to date
+ Date modifiedDate = cal.getTime();
+
+ return modifiedDate;
+ }
+
+ /**
+ * Permet de formater les chiffres avec un zero devant
+ * @return
+ */
+ public static String formaterChiffreAvecZeroDevant(long chiffre) {
+
+ //Si nombre
+ if(chiffre >= 10){
+ return String.valueOf(chiffre);
+ }else{
+ return "0"+String.valueOf(chiffre);
+ }
+
+ }
+
+ /**
+ * Renvoie les champs de la liste qui n'appartiennent pas à l'entité
+ *
+ * @param classe
+ * @param fieldsToCheck
+ * @return
+ */
+ public static List<String> checkIfEntityField(Class<?> classe, List<String> fieldsToCheck) {
+ List<String> fieldsNotFound = new ArrayList<>();
+ Set<String> fieldsSet = Arrays.asList(classe.getDeclaredFields()).stream().map(f ->f.getName()).collect(Collectors.toSet());
+
+ fieldsToCheck.stream().forEach(s -> {
+ System.out.println("field to check "+s);
+ if (!fieldsSet.contains(s)) {
+ fieldsNotFound.add(s);
+ }
+ });
+ return fieldsNotFound;
+ }
+
+ /**
+ * Permet de hacher le mot de passe
+ *
+ * @param password
+ * @return
+ */
+ public static String encryptPassword(String password) {
+
+ try {
+
+ int iterations = 1000;
+ char[] chars = password.toCharArray();
+ byte[] salt = getSalt();
+
+ PBEKeySpec spec = new PBEKeySpec(chars, salt, iterations, 64 * 8);
+ SecretKeyFactory skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
+
+ byte[] hash = skf.generateSecret(spec).getEncoded();
+ return iterations + ":" + toHex(salt) + ":" + toHex(hash);
+
+ } catch (Exception ex) {
+
+ //On affiche le message d'errreur
+ ex.printStackTrace();
+
+ }
+
+ return null;
+ }
+
+ /**
+ * Permet de charger des classes qui ont une annotation pr�cise
+ *
+ * @param pkgName
+ * @param annotation
+ * @return
+ */
+ public static List<Annotation> getAnnotations(final String pkgName, String annotation) {
+
+ //Variables
+ List<Class<?>> classRefs = new ArrayList<>();
+
+ List<Annotation> annotations = new ArrayList<>();
+
+ try ( ScanResult scanResult = new ClassGraph().acceptPackages(pkgName).enableAllInfo().scan()) {
+
+ //On recup�re les classes annot�es
+ ClassInfoList liste = scanResult.getClassesWithAnnotation(annotation);
+
+ //On charge les classes
+ classRefs = liste.loadClasses();
+
+ //On parcourt les classes
+ for (Class<?> classe : classRefs) {
+
+ //On parcourt les annotations
+ for (Annotation annotationDeclaree : classe.getDeclaredAnnotations()) {
+
+ //On ajoute l'annotation
+ annotations.add(annotationDeclaree);
+
+ }
+
+ }
+
+ } catch (Exception e) {
+
+ //On affiche les traces
+ e.printStackTrace();
+
+ }
+
+ return annotations;
+ }
+
+ /**
+ * Permet de charger des classes qui ont une annotation pr�cise
+ *
+ * @param pkgName
+ * @param annotation
+ * @return
+ */
+ public static List<Class<?>> getAnnotatedClasses(final String pkgName, String annotation) {
+
+ //Variables
+ List<Class<?>> classRefs = new ArrayList<>();
+
+ try ( ScanResult scanResult = new ClassGraph().acceptPackages(pkgName).enableAllInfo().scan()) {
+
+ //On recup�re les classes annot�es
+ ClassInfoList liste = scanResult.getClassesWithAnnotation(annotation);
+
+ //On charge les classes
+ classRefs = liste.loadClasses();
+
+ } catch (Exception e) {
+
+ //On affiche les traces
+ e.printStackTrace();
+
+ }
+
+ return classRefs;
+ }
+
+ /**
+ * Permet de valider le mot de passe
+ *
+ * @param originalPassword
+ * @param storedPassword
+ * @return
+ * @throws NoSuchAlgorithmException
+ * @throws InvalidKeySpecException
+ */
+ public static boolean validerMotDePasse(String originalPassword, String storedPassword)
+ throws NoSuchAlgorithmException, InvalidKeySpecException {
+ String[] parts = storedPassword.split(":");
+ int iterations = Integer.parseInt(parts[0]);
+
+ byte[] salt = fromHex(parts[1]);
+ byte[] hash = fromHex(parts[2]);
+
+ PBEKeySpec spec = new PBEKeySpec(originalPassword.toCharArray(),
+ salt, iterations, hash.length * 8);
+ SecretKeyFactory skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
+ byte[] testHash = skf.generateSecret(spec).getEncoded();
+
+ int diff = hash.length ^ testHash.length;
+ for (int i = 0; i < hash.length && i < testHash.length; i++) {
+ diff |= hash[i] ^ testHash[i];
+ }
+ return diff == 0;
+ }
+
+ /**
+ * Retourne le chemin du serveur
+ *
+ * @return
+ */
+ public static String getCurrentDirectoryOfServer() {
+
+ //On recup�re le chemin du repertoire
+ AppCommonContext.REPERTOIRE_SERVEUR = getCurrentDirectory().getParent() + File.separator + "standalone" + File.separator + "data" + File.separator + "donnees";
+
+ return AppCommonContext.REPERTOIRE_SERVEUR;
+ }
+
+ /**
+ * Retourne le chemin du serveur
+ *
+ * @return
+ */
+ public static String getCurrentTempDirectoryOfServer() {
+
+ //On recup�re le chemin du repertoire
+ AppCommonContext.REPERTOIRE_SERVEUR = getCurrentDirectory().getParent() + File.separator + "standalone" + File.separator + "tmp";
+
+ return AppCommonContext.REPERTOIRE_SERVEUR;
+ }
+
+ /**
+ * Retourn le chemin courant
+ *
+ * @return
+ */
+ public static File getCurrentDirectory() {
+ String fileName = (String) System.getProperties().get("user.dir");
+ return new File(fileName);
+ }
+
+ public static Properties loadProperties(String filename) {
+ Properties properties = new Properties();
+
+ try {
+
+ //On charge le fichier de config
+ properties.load(new FileInputStream(filename));
+
+ } catch (Exception ex) {
+
+ //On affiche l'erreur
+ ex.printStackTrace();
+
+ }
+
+ return properties;
+ }
+
+ /**
+ * Permet de convertir un hexadeicmal en tableau de byte
+ *
+ * @param hex
+ * @return
+ * @throws NoSuchAlgorithmException
+ */
+ public static byte[] fromHex(String hex) throws NoSuchAlgorithmException {
+ byte[] bytes = new byte[hex.length() / 2];
+ for (int i = 0; i < bytes.length; i++) {
+ bytes[i] = (byte) Integer.parseInt(hex.substring(2 * i, 2 * i + 2), 16);
+ }
+ return bytes;
+ }
+
+ /**
+ *
+ * @param array
+ * @return
+ * @throws NoSuchAlgorithmException
+ */
+ public static String toHex(byte[] array) throws NoSuchAlgorithmException {
+ BigInteger bi = new BigInteger(1, array);
+ String hex = bi.toString(16);
+
+ int paddingLength = (array.length * 2) - hex.length();
+ if (paddingLength > 0) {
+ return String.format("%0" + paddingLength + "d", 0) + hex;
+ } else {
+ return hex;
+ }
+ }
+
+ /**
+ *
+ * @return @throws NoSuchAlgorithmException
+ */
+ public static byte[] getSalt() throws NoSuchAlgorithmException {
+ SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");
+ byte[] salt = new byte[16];
+ sr.nextBytes(salt);
+ return salt;
+ }
+
+}
--
Gitblit v1.10.0