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-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/api/token/ApiTokenManagerImpl.java |  232 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 232 insertions(+), 0 deletions(-)

diff --git a/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/api/token/ApiTokenManagerImpl.java b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/api/token/ApiTokenManagerImpl.java
new file mode 100644
index 0000000..78f22fb
--- /dev/null
+++ b/fdx-consultation/fdxconsultation-core-impl/src/main/java/com/megatim/fdxconsultation/core/impl/api/token/ApiTokenManagerImpl.java
@@ -0,0 +1,232 @@
+package com.megatim.fdxconsultation.core.impl.api.token;
+
+import com.bekosoftware.genericdaolayer.dao.ifaces.GenericDAO;
+import com.bekosoftware.genericdaolayer.dao.tools.RestrictionsContainer;
+import com.bekosoftware.genericmanagerlayer.core.impl.AbstractGenericManager;
+import com.google.common.hash.Hashing;
+import com.megatim.fdxcommons.model.enumeration.OrderByType;
+import com.megatim.fdxcommons.model.enumeration.TypeOperation;
+import com.megatim.fdxcommons.model.jms.messages.ApiTokenMessage;
+import com.megatim.fdxcommons.model.jms.messages.ApiTokenMessageType;
+import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
+import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
+import com.megatim.fdxcommons.model.pojo.OrderByDefinition;
+import com.megatim.fdxcommons.tools.exceptions.CommonApplicationValidationException;
+import com.megatim.fdxconsultation.core.ifaces.api.token.ApiTokenManager;
+import com.megatim.fdxconsultation.dao.ifaces.abstracts.PaginationWithCriteriaEntityDAO;
+import com.megatim.fdxconsultation.dao.ifaces.api.token.ApiTokenDAO;
+import com.megatim.fdxconsultation.model.administration.User;
+import com.megatim.fdxconsultation.model.api.token.ApiToken;
+import com.megatim.fdxconsultation.reporting.model.api.token.ApiTokenReporting;
+import com.megatim.fdxconsultation.model.api.token.ApiTokenStatut;
+import com.megatim.fdxconsultation.model.dto.ApiTokenDto;
+import com.megatim.fdxconsultation.model.mappers.MapStructMapper;
+import com.megatim.fdxconsultation.model.searchentities.ApiTokenSearch;
+import com.megatim.fdxconsultation.tools.CommonsToolsEntity;
+import com.megatim.fdxconsultation.tools.context.AppCommonContext;
+import com.megatim.reporting.adhoc.dto.ReportConfiguration;
+import com.mgt.rs.security.core.service.AuthenticationTokenService;
+import java.io.File;
+import java.nio.charset.StandardCharsets;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.ejb.EJB;
+import javax.enterprise.context.Dependent;
+import javax.inject.Inject;
+import javax.transaction.Transactional;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.cdi.CdiCamelContext;
+
+/**
+ *
+ * @author ASUS
+ */
+@Dependent
+public class ApiTokenManagerImpl extends AbstractGenericManager<ApiToken, Long> implements ApiTokenManager {
+
+    @EJB
+    private ApiTokenDAO dao;
+
+    @Inject
+    private AuthenticationTokenService authenticationTokenService;
+
+    @Inject
+    private CdiCamelContext camelContext;
+
+    @Inject
+    private MapStructMapper mapStructMapper;
+    
+    @Inject
+    com.megatim.fdxcommons.model.mappers.MapStructMapper commonMapper;
+
+    @Override
+    public GenericDAO<ApiToken, Long> getDao() {
+        return dao;
+    }
+
+    @Override
+    public String addAndGetToken(ApiToken apiToken, User connectedUser) {
+        if (dao.getByCodeParticipant(apiToken.getParticipant()) != null) {
+            throw new CommonApplicationValidationException("Le participant sélectionné possède déjà un mot de passe généré.");
+        }
+
+        String token = authenticationTokenService.issueToken(apiToken.getParticipant().getCode());
+        apiToken.setToken(Hashing.sha256().hashString(token, StandardCharsets.UTF_8).toString());
+
+        apiToken.setDateCreation(new Date());
+        apiToken.setTypeOperation(TypeOperation.AJOUTER);
+        apiToken.setUtilisateurCreation(connectedUser != null ? connectedUser.getUserName() : null);
+        save(apiToken);
+
+        //Création de l'objet JMS à envoyer à l'API pour l'enregistrement du Token
+        ApiTokenMessage apiTokenMessage = new ApiTokenMessage();
+        apiTokenMessage.setCodeParticipant(apiToken.getParticipant().getCode());
+        apiTokenMessage.setToken(apiToken.getToken());
+        apiTokenMessage.setApiTokenMessageType(ApiTokenMessageType.ADD);
+        sendMessage(apiTokenMessage);
+
+        return token;
+    }
+
+    @Transactional
+    @Override
+    public String updateAndGetToken(Long id, ApiToken apiToken, User connectedUser) {
+        ApiToken entityFromDB = find(getEntityIdName(),id);
+
+        //On génère le token
+        String token = authenticationTokenService.issueToken(entityFromDB.getParticipant().getCode());
+        entityFromDB.setToken(Hashing.sha256().hashString(token, StandardCharsets.UTF_8).toString());
+
+        entityFromDB.setDateDerniereModification(new Date());
+        entityFromDB.setUtilisateurModification(connectedUser != null ? connectedUser.getUserName() : null);
+        
+        save(entityFromDB);
+
+        //Création de l'objet JMS à envoyer à l'API pour l'enregistrement du Token
+        ApiTokenMessage apiTokenMessage = new ApiTokenMessage();
+        apiTokenMessage.setCodeParticipant(entityFromDB.getParticipant().getCode());
+        apiTokenMessage.setToken(entityFromDB.getToken());
+        apiTokenMessage.setApiTokenMessageType(ApiTokenMessageType.UPDATE);
+        sendMessage(apiTokenMessage);
+
+        return token;
+    }
+
+    private void sendMessage(ApiTokenMessage apiTokenMessage) {
+        ProducerTemplate producerTemplate = camelContext.createProducerTemplate();
+        producerTemplate.sendBody("direct:" + AppCommonContext.TOKEN_GENERATION_DIRECT, apiTokenMessage);
+    }
+
+    @Override
+    public ApiToken lock(Long id, User connectedUser) {        
+        ApiToken apiToken = find(getEntityIdName(),id);
+        apiToken.setApiTokenStatut(ApiTokenStatut.LOCKED);
+
+        //Création de l'objet JMS à envoyer à l'API pour l'enregistrement du Token
+        ApiTokenMessage apiTokenMessage = new ApiTokenMessage();
+        apiTokenMessage.setCodeParticipant(apiToken.getParticipant().getCode());
+        apiTokenMessage.setApiTokenMessageType(ApiTokenMessageType.LOCKED);
+
+        //Envoi du message à l'API Web
+        sendMessage(apiTokenMessage);
+
+        return update(id, apiToken);
+    }
+
+    @Override
+    public ApiToken unLock(Long id, User connectedUser) {
+        ApiToken apiToken = find(getEntityIdName(),id);
+        apiToken.setApiTokenStatut(ApiTokenStatut.UNLOCKED);
+
+        //Création de l'objet JMS à envoyer à l'API pour l'enregistrement du Token
+        ApiTokenMessage apiTokenMessage = new ApiTokenMessage();
+        apiTokenMessage.setCodeParticipant(apiToken.getParticipant().getCode());
+        apiTokenMessage.setApiTokenMessageType(ApiTokenMessageType.UNLOCKED);
+
+        //Envoi du message à l'API Web
+        sendMessage(apiTokenMessage);
+
+        return update(id, apiToken);
+    }
+
+    @Override
+    public File printAll(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return generatePdf(finalReportConfiguration(reportConfiguration), userConnected, false );
+    }
+
+    @Override
+    public File printOne(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return generatePdf(finalReportConfiguration(reportConfiguration), userConnected, true);
+    }
+
+    @Override
+    public File exportExcelAll(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return exportExcel(finalReportConfiguration(reportConfiguration), userConnected, false);
+    }
+
+    @Override
+    public File exportExcelOne(ReportConfiguration<CriteriaFormRequest> reportConfiguration, User userConnected) throws Exception {
+        return exportExcel(finalReportConfiguration(reportConfiguration), userConnected, true);
+    }
+    
+    @Override
+    public String getEntityIdName() {
+        return "id";
+    }
+
+    @Override
+    public Class<ApiTokenReporting> getClazz() {
+        return ApiTokenReporting.class;
+    }
+
+    @Override
+    public List<ApiTokenReporting> getDatas(CriteriaEntityFromView searchEntity) throws Exception {
+        return CommonsToolsEntity.convertToApiTokenReporting(findAll(searchEntity, Arrays.asList(), Arrays.asList(new OrderByDefinition(getEntityIdName(), OrderByType.DESC))));
+    }
+
+    @Override
+    public Map<String, Object> getParameters() {
+        return new HashMap<>();
+    }
+
+    @Override
+    public PaginationWithCriteriaEntityDAO<ApiToken, Long> paginationWithCriteriaEntityDAO() {
+        return dao;
+    }
+
+    @Override
+    public void beforeAdd(ApiToken entity, User connectedUser) {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    @Override
+    public void beforeRemove(ApiToken entity, User connectedUser) {
+        entity.setTypeOperation(TypeOperation.SUPPRIMER);
+        entity.setDateSuppression(new Date());
+        entity.setUtilisateurSuppression(connectedUser.getUserName());
+    }
+
+    @Override
+    public void beforeModify(ApiToken actualEntity, ApiToken requestEntity, User connectedUser) {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    @Override
+    public ApiTokenDto mapToDto(ApiToken entity) {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    @Override
+    public ApiTokenDto mapToDetailDto(ApiToken entity) {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+
+    @Override
+    public RestrictionsContainer construireRequete(ApiTokenSearch searchEntity, TypeOperation typeOperation) {
+        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    }
+    
+}

--
Gitblit v1.10.0