package com.megatim.apifdxweb.service.impl.dataproduction; import com.megatim.apifdxweb.core.ifaces.administration.UserManager; import com.megatim.apifdxweb.core.ifaces.helper.DataProductionOperations; import com.megatim.apifdxweb.model.administration.User; import com.megatim.apifdxweb.model.request.UpdateRequest; import com.megatim.apifdxweb.service.ifaces.dataproduction.DataProductionRS; import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView; import com.mgt.rs.security.core.common.AuthenticatedUser; import com.mgt.rs.security.core.common.SecuredClass; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import io.swagger.annotations.ApiResponse; import io.swagger.annotations.ApiResponses; import java.util.LinkedHashMap; import java.util.List; import javax.enterprise.context.RequestScoped; import javax.enterprise.event.Observes; import javax.inject.Inject; import javax.ws.rs.Path; import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.Response; /** * * @author lenovo */ @SecuredClass(module = "Production des fichiers", path = "production des fichiers", description = "Sécurisation des endpoints de l'API Fdx") @RequestScoped @Path("produce") @Api(value = "Ressources de production des fichiers échangés") public class DataProductionRSImpl implements DataProductionRS { @Inject private DataProductionOperations dataProductionOperations; @Inject private UserManager userManager; private String codeParticipant; public void handleAuthenticationEvent(@Observes @AuthenticatedUser String connectedUserName) { User user = userManager.recuperUtilisateur(connectedUserName); this.codeParticipant = user != null ? user.getParticipant().getCode() : null; } @Override @ApiOperation(value = "Ajoute plusieurs lignes pour le type de fichier en paramètre", notes = "Cette méthode permet d'ajouter une liste d'éléments dont la structure de chaque " + "élément est conforme à celle spécifiée dans le manuel technique pour le type de fichier passé en paramètre." ) @ApiResponses(value = { @ApiResponse(code = 200, message = "Données enregistrées avec succès"), @ApiResponse(code = 401, message = "L'appelant n'a pas accès à la ressource"), @ApiResponse(code = 403, message = "Production des données non autorisée pour le noeud associé à l'utilisateur qui exécute la requête"), @ApiResponse(code = 404, message = "Une ressource est introuvable (Type Fichier, Référentiel en cours, Noeud associé à l'utilisateur qui exécute la requête)"), @ApiResponse(code = 422, message = "La structure des données à insérer n'est pas conforme à la structure attendue")}) public Response saveAll( HttpHeaders headers, @ApiParam(value = "Le type de fichier pour lequel on désire effectuer l'opération d'ajout des lignes", required = true) String codeTypeFichier, @ApiParam(value = "Liste d'objets dont la structure est conforme à celle du type de fichier indiqué en parametre", required = true) List> datas ) { dataProductionOperations.saveAll(codeTypeFichier, datas, codeParticipant); return Response.ok().build(); } @Override @ApiOperation(value = "Ajout d'une ligne pour le type de fichier en paramètre", notes = "Cette méthode permet d'ajouter un élément dont la structure est conforme à celle spécifiée dans le manuel technique pour le type de fichier passé en paramètre.") @ApiResponses(value = { @ApiResponse(code = 200, message = "Données enregistrées avec succès"), @ApiResponse(code = 401, message = "L'appelant n'a pas accès à la ressource"), @ApiResponse(code = 403, message = "Production des données non autorisée pour le noeud associé à l'utilisateur qui exécute la requête"), @ApiResponse(code = 404, message = "Une ressource est introuvable (Type Fichier, Référentiel en cours, Noeud associé à l'utilisateur qui exécute la requête)"), @ApiResponse(code = 422, message = "La structure de donnée à insérer n'est pas conforme à la structure attendue")}) public Response save( HttpHeaders headers, @ApiParam(value = "Le type de fichier pour lequel on désire effectuer l'opération d'ajout d'une ligne", required = true) String codeTypeFichier, @ApiParam(value = "Objet dont la structure est conforme à celle du type de fichier indiqué en parametre", required = true) LinkedHashMap data ) { dataProductionOperations.saveOne(codeTypeFichier, data, codeParticipant); return Response.ok().build(); } @Override @ApiOperation(value = "Mise à jour de plusieurs lignes pour le type de fichier en paramètre selon un ensemble de critères", notes = "Cette méthode permet de mettre à jour les lignes associées au type de fichier en paramètre selon un ensemble de critère indiqués dans le corps de la requête.") @ApiResponses(value = { @ApiResponse(code = 200, message = "Données enregistrées avec succès"), @ApiResponse(code = 401, message = "L'appelant n'a pas accès à la ressource"), @ApiResponse(code = 403, message = "Production des données non autorisée pour le noeud associé à l'utilisateur qui exécute la requête"), @ApiResponse(code = 404, message = "Une ressource est introuvable (Type Fichier, Référentiel en cours, Noeud associé à l'utilisateur qui exécute la requête)"), @ApiResponse(code = 422, message = "Les critères de sélection ou les paramètres de mise à jour de la requête ne sont pas conformes à la structure des champs du type de fichier")}) public Response updateAll( HttpHeaders headers, @ApiParam(value = "Le type de fichier pour lequel on désire effectuer l'opération de mise à jour des lignes", required = true) String codeTypeFichier, @ApiParam(value = "Contient les critères de sélection et les valeurs de mise à jour", required = true) UpdateRequest updateRequest ) { dataProductionOperations.updateAll(codeTypeFichier, updateRequest, codeParticipant); return Response.ok().build(); } @Override @ApiOperation(value = "Mise à jour d'une ligne pour le type de fichier en paramètre selon un ensemble de critères", notes = "Cette méthode permet de mettre à jour une ligne associée au type de fichier en paramètre selon un ensemble de critères indiqués dans le corps de la requête. " + "Si le filtre selon le critère de sélection ne trouve pas de ligne, nous une erreur 404 est levée. De même, si l'application du filtre sur les critères trouve plus d'une ligne, " + "une erreur 422 est levée pour indiqué le mauvais format de la requête.") @ApiResponses(value = { @ApiResponse(code = 200, message = "Données enregistrées avec succès"), @ApiResponse(code = 401, message = "L'appelant n'a pas accès à la ressource"), @ApiResponse(code = 403, message = "Production des données non autorisée pour le noeud associé à l'utilisateur qui exécute la requête"), @ApiResponse(code = 404, message = "Une ressource est introuvable (Type Fichier, Référentiel en cours, Noeud associé à l'utilisateur qui exécute la requête), ou aucune ligne n'a été trouvée"), @ApiResponse(code = 422, message = "Les critères de sélection ou les paramètres de mise à jour de la requête ne sont pas conformes à la structure des champs du type de fichier, " + "ou le résultat de la sélection a retourné plus d'une ligne")}) public Response updateOne( HttpHeaders headers, @ApiParam(value = "Le type de fichier pour lequel on désire effectuer l'opération de mise à jour d'une ligne", required = true) String codeTypeFichier, @ApiParam(value = "Contient les critères de sélection et les valeurs de mise à jour", required = true) UpdateRequest updateRequest ) { dataProductionOperations.updateOne(codeTypeFichier, updateRequest, codeParticipant); return Response.ok().build(); } @Override @ApiOperation(value = "Suppression des lignes pour le type de fichier en paramètre selon un ensemble de critères", notes = "Cette méthode permet de supprimer une ligne associée au type de fichier en paramètre selon un ensemble de critères indiqués dans le corps de la requête.") @ApiResponses(value = { @ApiResponse(code = 200, message = "Données enregistrées avec succès"), @ApiResponse(code = 401, message = "L'appelant n'a pas accès à la ressource"), @ApiResponse(code = 403, message = "Production des données non autorisée pour le noeud associé à l'utilisateur qui exécute la requête"), @ApiResponse(code = 404, message = "Une ressource est introuvable (Type Fichier, Référentiel en cours, Noeud associé à l'utilisateur qui exécute la requête)"), @ApiResponse(code = 422, message = "Les critères de sélection des colonnes de la requête ne sont pas conformes à la structure des champs du type de fichier")}) public Response deleteAll( HttpHeaders headers, @ApiParam(value = "Le type de fichier pour lequel on désire effectuer l'opération de suppression", required = true) String codeTypeFichier, @ApiParam(value = "Liste des critères de sélection des lignes que l'on désire supprimer", required = true) CriteriaEntityFromView criterion ) { dataProductionOperations.deleteAll(codeTypeFichier, criterion, codeParticipant); return Response.ok().build(); } @Override @ApiOperation(value = "Suppression des lignes pour le type de fichier en paramètre selon un ensemble de critères", notes = "Cette méthode permet de supprimer une ligne associée au type de fichier en paramètre selon un ensemble de critères indiqués dans le corps de la requête.") @ApiResponses(value = { @ApiResponse(code = 200, message = "Données enregistrées avec succès"), @ApiResponse(code = 401, message = "L'appelant n'a pas accès à la ressource"), @ApiResponse(code = 403, message = "Production des données non autorisée pour le noeud associé à l'utilisateur qui exécute la requête"), @ApiResponse(code = 404, message = "Une ressource est introuvable (Type Fichier, Référentiel en cours, Noeud associé à l'utilisateur qui exécute la requête)"), @ApiResponse(code = 422, message = "Les critères de sélection des colonnes de la requête ne sont pas conformes à la structure des champs du type de fichier")}) public Response deleteOne( HttpHeaders headers, @ApiParam(value = "Le type de fichier pour lequel on désire effectuer l'opération de suppression", required = true) String codeTypeFichier, @ApiParam(value = "Liste des critères de sélection des lignes que l'on désire supprimer", required = true) CriteriaEntityFromView criterion ) { dataProductionOperations.deleteOne(codeTypeFichier, criterion, codeParticipant); return Response.ok().build(); } }