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-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/startup/StartupBean.java | 303 ++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 303 insertions(+), 0 deletions(-)
diff --git a/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/startup/StartupBean.java b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/startup/StartupBean.java
new file mode 100644
index 0000000..b48968c
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-service-impl/src/main/java/com/megatim/fdxconsultation/service/impl/startup/StartupBean.java
@@ -0,0 +1,303 @@
+package com.megatim.fdxconsultation.service.impl.startup;
+
+import com.bekosoftware.genericdaolayer.dao.tools.RestrictionsContainer;
+import com.megatim.fdxcommons.core.ifaces.helper.DataInMemoryHandler;
+import com.megatim.fdxcommons.model.enumeration.TypeOperation;
+import com.megatim.fdxcommons.tools.context.AppContext;
+import com.megatim.fdxconsultation.tools.CommonTools;
+import com.megatim.fdxconsultation.core.ifaces.administration.ActionManager;
+import com.megatim.fdxconsultation.core.ifaces.administration.RoleManager;
+import com.megatim.fdxconsultation.core.ifaces.administration.UserManager;
+import com.megatim.fdxconsultation.core.ifaces.configuration.CodeStatutHttpManager;
+import com.megatim.fdxconsultation.model.administration.Action;
+import com.megatim.fdxconsultation.model.administration.Role;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.configuration.CodeStatutHttp;
+import com.megatim.file.model.enumeration.TypeSauvegarde;
+import com.megatim.file.tools.entites.context.FileModuleAppContextEntity;
+import com.mgt.rs.security.core.common.Secured;
+import com.mgt.rs.security.core.common.SecuredClass;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.AnnotatedElement;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import javax.annotation.PostConstruct;
+import javax.ejb.Singleton;
+import javax.ejb.Startup;
+import javax.inject.Inject;
+import com.megatim.fdxconsultation.core.ifaces.integration.AppColumnDeleter;
+import com.megatim.fdxconsultation.core.impl.dataproductionworker.DataProductionWorkerGroup;
+
+/**
+ *
+ * @author lenovo
+ */
+@Singleton
+@Startup
+public class StartupBean {
+
+ @Inject
+ protected ActionManager actionManager;
+
+ @Inject
+ protected RoleManager roleManager;
+
+ @Inject
+ protected UserManager userManager;
+
+ @Inject
+ protected CodeStatutHttpManager codeStatutHttpManager;
+
+ @Inject
+ private DataInMemoryHandler dataInMemoryHandler;
+
+ @Inject
+ private AppColumnDeleter appColumnDeleter;
+
+ @Inject
+ private DataProductionWorkerGroup dataProductionWorkerGroup;
+
+ @PostConstruct
+ public void init() {
+ dataInMemoryHandler.initializeDataInMemory();
+ addNewActions();
+ addAdmins();
+ ajouterCodeStatusHttp();
+ initializeFileModule();
+ appColumnDeleter.delete();
+ dataProductionWorkerGroup.start();
+ }
+
+ private void initializeFileModule() {
+
+ /* Variabless */
+ List<String> extensionsAutorises = Arrays.asList("pdf", "docx", "rar");
+
+ /* Précise le mode de sauvegarde */
+ FileModuleAppContextEntity.configuration.setModeSauvegarde(TypeSauvegarde.DISQUE);
+
+ /* Précise la taille max des fichiers */
+ FileModuleAppContextEntity.configuration.setTailleUploadMax(10);
+
+ /* Précise la liste des extentations autoriséess */
+ FileModuleAppContextEntity.configuration.setExtensionsAutorisees(extensionsAutorises);
+
+ }
+
+ /**
+ * Methode permettant de charger les codes statuts http
+ */
+ private void ajouterCodeStatusHttp() {
+
+ /* Variables */
+ List<CodeStatutHttp> liste = codeStatutHttpManager.findAll();
+
+ /* On vide le registre */
+ AppContext.registre_codes_http.clear();
+
+ /* Si liste non vide */
+ if (liste == null || liste.isEmpty()) {
+
+ /* On initialise la liste */
+ liste = new ArrayList<CodeStatutHttp>();
+
+ /* 1xx - Informations */
+ liste.add(new CodeStatutHttp("100", "Le serveur a reçu les en-têtes et attend le corps de la requête"));
+ liste.add(new CodeStatutHttp("101", "Le client a demandé un changement de protocole, accepté par le serveur"));
+ liste.add(new CodeStatutHttp("102", "La requête est en cours de traitement"));
+
+ /* 2xx - Succès */
+ liste.add(new CodeStatutHttp("200", "La requête a réussi"));
+ liste.add(new CodeStatutHttp("201", "La requête a abouti à la création d'une ressource"));
+ liste.add(new CodeStatutHttp("202", "La requête a été acceptée, mais le traitement est en cours"));
+ liste.add(new CodeStatutHttp("203", "La réponse contient des informations provenant d'une source tierce"));
+ liste.add(new CodeStatutHttp("204", "La requête a réussi, mais il n'y a pas de contenu à retourner"));
+ liste.add(new CodeStatutHttp("205", "La requête a réussi, le client doit réinitialiser l'interface utilisateur"));
+ liste.add(new CodeStatutHttp("206", "Une partie de la ressource a été envoyée"));
+
+ /* 3xx - Redirections */
+ liste.add(new CodeStatutHttp("300", "Plusieurs options sont disponibles pour la ressource"));
+ liste.add(new CodeStatutHttp("301", "La ressource a été déplacée de manière permanente"));
+ liste.add(new CodeStatutHttp("302", "La ressource a été temporairement déplacée"));
+ liste.add(new CodeStatutHttp("303", "La ressource est disponible à une autre URL"));
+ liste.add(new CodeStatutHttp("304", "La ressource n'a pas été modifiée depuis la dernière requête"));
+ liste.add(new CodeStatutHttp("307", "Redirection temporaire avec conservation de la méthode HTTP"));
+ liste.add(new CodeStatutHttp("308", "Redirection permanente avec conservation de la méthode HTTP"));
+
+ /* 4xx - Erreurs du client */
+ liste.add(new CodeStatutHttp("400", "La requête est mal formée ou invalide"));
+ liste.add(new CodeStatutHttp("401", "L'authentification est requise pour accéder à la ressource"));
+ liste.add(new CodeStatutHttp("403", "Le client n'a pas les permissions nécessaires pour accéder à la ressource"));
+ liste.add(new CodeStatutHttp("404", "La ressource demandée n'existe pas"));
+ liste.add(new CodeStatutHttp("405", "La méthode HTTP utilisée n'est pas autorisée pour cette ressource"));
+ liste.add(new CodeStatutHttp("406", "La ressource n'est pas disponible dans un format acceptable pour le client"));
+ liste.add(new CodeStatutHttp("408", "Le serveur a expiré en attente de la requête"));
+ liste.add(new CodeStatutHttp("409", "Un conflit a été détecté"));
+ liste.add(new CodeStatutHttp("410", "La ressource n'est plus disponible et n'a pas d'adresse de redirection"));
+ liste.add(new CodeStatutHttp("411", "La requête doit spécifier la longueur de son contenu"));
+ liste.add(new CodeStatutHttp("412", "Une précondition dans les en-têtes de la requête a échoué"));
+ liste.add(new CodeStatutHttp("413", "La taille de la requête est trop grande"));
+ liste.add(new CodeStatutHttp("414", "L'URI fourni est trop long pour être traité"));
+ liste.add(new CodeStatutHttp("415", "Le format de la requête n'est pas supporté"));
+ liste.add(new CodeStatutHttp("422", "La requête est bien formée mais ne peut pas être traitée"));
+ liste.add(new CodeStatutHttp("429", "Trop de requêtes ont été envoyées dans un court laps de temps"));
+
+ /* 5xx - Erreurs du serveur */
+ liste.add(new CodeStatutHttp("500", "Une erreur inattendue s'est produite sur le serveur"));
+ liste.add(new CodeStatutHttp("501", "La méthode HTTP demandée n'est pas supportée par le serveur"));
+ liste.add(new CodeStatutHttp("502", "Une réponse invalide a été reçue d'un serveur en amont"));
+ liste.add(new CodeStatutHttp("503", "Le serveur est temporairement indisponible"));
+ liste.add(new CodeStatutHttp("504", "Le serveur en amont a mis trop de temps à répondre"));
+ liste.add(new CodeStatutHttp("505", "La version HTTP utilisée n'est pas supportée"));
+
+ /* On save en bd */
+ for (CodeStatutHttp codeStatutHttp : liste) {
+
+ /* On save */
+ codeStatutHttpManager.add(codeStatutHttp, null);
+
+ }
+
+ }
+
+ /* On ajoute dans la map */
+ for (CodeStatutHttp codeStatutHttp : liste) {
+
+ /* On ajoute à la map */
+ AppContext.registre_codes_http.put(codeStatutHttp.getCode(), codeStatutHttp.getLibelle());
+
+ }
+
+ }
+
+ private void addAdmins() {
+
+ List<User> users = userManager.findAll();
+
+ //Pas d'admin
+ if (!users.stream().filter(u -> u.getRole().getAdmin()).findAny().isPresent()) {
+ Role role = new Role();
+ role.setLibelle("Admin");
+ role.setDescription("Admin");
+ role.setAdmin(true);
+ Role newRole = roleManager.save(role);
+ addUser("adminc", "P@ssw0rd", newRole);
+ }
+
+ //pas de super admin
+ if (!users.stream().filter(u -> u.getRole().getSuperAdmin()).findAny().isPresent()) {
+ Role role = new Role();
+ role.setLibelle("Super Admin");
+ role.setDescription("Super Admin");
+ role.setSuperAdmin(true);
+ Role newRole = roleManager.save(role);
+ addUser("adminv", "P@ssw0rd", newRole);
+ }
+
+ //Pas de mega admin
+ if (!users.stream().filter(u -> u.getRole().getMegaAdmin()).findAny().isPresent()) {
+ Role role = new Role();
+ role.setLibelle("Hyper Admin");
+ role.setDescription("Hyper Admin");
+ role.setMegaAdmin(true);
+ Role newRole = roleManager.save(role);
+ addUser("admincontrol", "P@ssw0rd", newRole);
+ }
+
+ }
+
+ private void addUser(String userName, String password, Role role) {
+ User user = new User();
+ user.setUserName(userName);
+ user.setDelaiInactivite(10);
+ user.setPwd(CommonTools.encryptPassword(password));
+ user.setRole(role);
+ //user.getRoles().add(role);
+ userManager.save(user);
+ }
+
+ private void addNewActions() {
+
+ List<Class<?>> classes = CommonTools.getAnnotatedClasses("com.megatim.fdxconsultation.service", "com.mgt.rs.security.core.common.SecuredClass");
+
+ classes.forEach(clazz -> {
+
+ SecuredClass securedClass = clazz.getAnnotation(SecuredClass.class);
+ Method[] methods = clazz.getMethods();
+
+ for (Method method : methods) {
+
+ Secured secured = getInheritedAnnotation(Secured.class, method);
+ if (secured != null && secured.action() != null && !secured.action().isEmpty() && !secured.action().equals("*")) {
+ //On crée l'action ici
+ Action action = new Action();
+ action.setModule(securedClass.module());
+ action.setPath(securedClass.path());
+ action.setDescription(securedClass.description());
+ action.setName(secured.action());
+
+ RestrictionsContainer requeteur = RestrictionsContainer.newInstance();
+
+ //On ajoute les criteres
+ requeteur.addEq("name", action.getName());
+ requeteur.addEq("path", action.getPath());
+ requeteur.addEq("module", action.getModule());
+ requeteur.addEq("typeOperation", TypeOperation.AJOUTER);
+
+ List<Action> datas = actionManager.filter(requeteur.getPredicats(), null, null, 0, -1);
+ if (datas.isEmpty()) {
+ actionManager.save(action);
+ }
+
+ }
+ }
+
+ });
+
+ }
+
+ public static <A extends Annotation> A getInheritedAnnotation(Class<A> annotationClass, AnnotatedElement element) {
+ A annotation = element.getAnnotation(annotationClass);
+ if (annotation == null && element instanceof Method) {
+ annotation = getOverriddenAnnotation(annotationClass, (Method) element);
+ }
+ return annotation;
+ }
+
+ private static <A extends Annotation> A getOverriddenAnnotation(Class<A> annotationClass, Method method) {
+ final Class<?> methodClass = method.getDeclaringClass();
+ final String name = method.getName();
+ final Class<?>[] params = method.getParameterTypes();
+ // prioritize all superclasses over all interfaces
+ final Class<?> superclass = methodClass.getSuperclass();
+ if (superclass != null) {
+ final A annotation = getOverriddenAnnotationFrom(annotationClass, superclass, name, params);
+ if (annotation != null) {
+ return annotation;
+ }
+ }
+ // depth-first search over interface hierarchy
+ for (final Class<?> intf : methodClass.getInterfaces()) {
+ final A annotation = getOverriddenAnnotationFrom(annotationClass, intf, name, params);
+ if (annotation != null) {
+ return annotation;
+ }
+ }
+ return null;
+ }
+
+ private static <A extends Annotation> A getOverriddenAnnotationFrom(Class<A> annotationClass, Class<?> searchClass, String name, Class<?>[] params) {
+ try {
+ final Method method = searchClass.getMethod(name, params);
+ final A annotation = method.getAnnotation(annotationClass);
+ if (annotation != null) {
+ return annotation;
+ }
+ return getOverriddenAnnotation(annotationClass, method);
+ } catch (final NoSuchMethodException e) {
+ return null;
+ }
+ }
+}
--
Gitblit v1.10.0