Kenmegne
7 days ago 23a46b4be35277e06ec89f48730eeb694e686be8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
package com.megatim.fdxconsultation.service.impl.consumption;
 
import com.megatim.fdxcommons.model.pojo.PageData;
import com.megatim.fdxcommons.tools.exceptions.CommonApplicationServerException;
import com.megatim.fdxcommons.tools.exceptions.CommonApplicationValidationException;
import com.megatim.fdxconsultation.core.ifaces.administration.UserManager;
import com.megatim.fdxcommons.model.mappers.MapStructMapper;
import com.megatim.fdxconsultation.model.dtos.reporting.CustomTypeFichierReportConfigurationFromView;
import com.megatim.fdxconsultation.model.administration.User;
import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest;
import com.megatim.fdxcommons.model.referentiel.TypeFichier;
import com.megatim.fdxcommons.tools.exceptions.ApplicationForbidenException;
import com.megatim.fdxcommons.tools.exceptions.CommonRessourceNotFoundException;
import com.megatim.fdxconsultation.core.ifaces.integration.ColumnDefinitionManager;
import com.megatim.fdxconsultation.core.ifaces.helper.DataConsumptionOperations;
import com.megatim.fdxconsultation.tools.context.AppCommonContext;
import com.mgt.rs.security.core.common.AuthenticatedUser;
import com.mgt.rs.security.core.common.SecuredClass;
import java.io.File;
import java.util.List;
import java.util.Optional;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
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;
import com.megatim.fdxconsultation.service.ifaces.consumption.DataConsumptionOperationsRS;
 
/**
 *
 * @author ASUS
 */
@SecuredClass(module = AppCommonContext.MODULE_CONSULTATION_WEB, path = "Consultation des fichiers", description = "Consultation des fichiers")
@Path("consume-typefichier")
public class DataConsumptionOperationsRSImpl implements DataConsumptionOperationsRS {
 
    @Inject
    private UserManager userManager;
 
    @AuthenticatedUser
    private User utilisateurConnecte;
 
    @Inject
    MapStructMapper commonMapper;
 
    @Inject
    DataConsumptionOperations dataConsumptionOperations;
 
    @Inject
    ColumnDefinitionManager columnDefinitionManager;
 
    public DataConsumptionOperationsRSImpl() {
        super();
    }
 
    public void handleAuthenticationEvent(@Observes @AuthenticatedUser String username) {
        utilisateurConnecte = userManager.recuperUtilisateur(username);
    }
 
    @Override
    public Response find(HttpHeaders headers, String referentielVersion, String codeTypeFichier, CriteriaFormRequest criteriaFormRequest) {
        stopIfTypeFichierNotExists(referentielVersion, codeTypeFichier);
        stopIfUserNotAllowed(utilisateurConnecte, codeTypeFichier);
 
        List<Map<String, Object>> datas = dataConsumptionOperations.findByCriteria(referentielVersion, codeTypeFichier, criteriaFormRequest.getCriteria());
        return Response.ok(datas).build();
    }
 
    @Override
    public Response findWithPagination(HttpHeaders headers, String referentielVersion, String codeTypeFichier, Integer pageNumber, Integer pageSize, CriteriaFormRequest criteriaFormRequest) {
        stopIfTypeFichierNotExists(referentielVersion, codeTypeFichier);
        stopIfUserNotAllowed(utilisateurConnecte, codeTypeFichier);
 
        PageData datas = dataConsumptionOperations.findByCriteriaWithPagination(referentielVersion, codeTypeFichier, criteriaFormRequest.getCriteria(), pageNumber, pageSize);
        return Response.ok(datas).build();
    }
 
    @Override
    public Long count(HttpHeaders headers, String referentielVersion, String codeTypeFichier, CriteriaFormRequest criteriaFormRequest) {
        stopIfTypeFichierNotExists(referentielVersion, codeTypeFichier);
        return dataConsumptionOperations.count(referentielVersion, codeTypeFichier, criteriaFormRequest.getCriteria());
    }
 
    @Override
    public Response getPrintableColumns(HttpHeaders headers, String referentielVersion, String codeTypeFichier) {
        stopIfTypeFichierNotExists(referentielVersion, codeTypeFichier);
        return Response.ok(commonMapper.columnDefinitionListToColumnDefinitionDtoList(dataConsumptionOperations.getPrintableColumns(referentielVersion, codeTypeFichier))).build();
    }
 
    @Override
    public Response printAll(HttpHeaders headers, String referentielVersion, String codeTypeFichier, CustomTypeFichierReportConfigurationFromView reportConfiguration) {
        stopIfTypeFichierNotExists(referentielVersion, codeTypeFichier);
        stopIfUserNotAllowed(utilisateurConnecte, codeTypeFichier);
 
        File file = null;
        try {
            reportConfiguration.setTitle("LISTE DES DONNEES POUR LE TYPE DE FICHIER (" + codeTypeFichier + ")");
            file = dataConsumptionOperations.printAll(referentielVersion, codeTypeFichier, reportConfiguration, utilisateurConnecte);
        } catch (CommonApplicationValidationException ex) {
            throw ex;
        } catch (Exception ex) {
            Logger.getLogger(DataConsumptionOperationsRSImpl.class.getName()).log(Level.SEVERE, null, ex);
            throw new CommonApplicationServerException();
        }
 
        Response.ResponseBuilder response = Response.ok((Object) file);
        response.header("Content-Disposition", "attachment;filename=" + file.getName());
        return response.build();
    }
 
    private void stopIfUserNotAllowed(User user, String codeTypeFichier) {
 
        Optional<TypeFichier> optTypeFichier = user.getTypeFichiers().stream().filter(t -> t.getCode().equals(codeTypeFichier)).findFirst();
 
        if (!optTypeFichier.isPresent()) {
            throw new ApplicationForbidenException("Impossible de continuer la requête car l'utilisateur "
                    + user.getUserName() + " n'a pas accès au typefichier " + codeTypeFichier);
        }
    }
 
    private void stopIfTypeFichierNotExists(String referentielVersion, String codeTypeFichier) {
 
        if (columnDefinitionManager.findByReferentielAndTypeFichier(referentielVersion, codeTypeFichier).isEmpty()) {
            throw new CommonRessourceNotFoundException("Structure du typeFichier '" + codeTypeFichier + "' inexistant ou  structure ");
        }
    }
}