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