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.favoritessearch;
 
import com.megatim.fdxcommons.model.enumeration.CriteriaLogicConnector;
import com.megatim.fdxcommons.model.enumeration.Operateur;
import com.megatim.fdxcommons.model.enumeration.OrderByType;
import com.megatim.fdxcommons.model.mappers.MapStructMapper;
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.CommonApplicationServerException;
import com.megatim.fdxconsultation.core.ifaces.administration.UserManager;
import com.megatim.fdxconsultation.core.ifaces.favoritessearch.FavoriteSearchManager;
import com.megatim.fdxconsultation.core.ifaces.stats.CriteriaEntityPersistedManager;
import com.megatim.fdxconsultation.core.impl.utils.CriteriaEntitySearchUtil;
import com.megatim.fdxconsultation.model.administration.User;
import com.megatim.fdxconsultation.model.dto.FavoriteSearchDto;
import com.megatim.fdxconsultation.model.favoritessearch.FavoriteSearch;
import com.megatim.fdxconsultation.service.ifaces.favoritessearch.FavoriteSearchRS;
import com.megatim.fdxconsultation.service.impl.referentiel.PaysRSImpl;
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.util.Arrays;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.stream.Collectors;
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 Gabuntu
 */
@SecuredClass(module = AppCommonContext.MODULE_CONSULTATION_WEB, path = "Favoris recherches", description = "Favoris recherches")
@Path("favorite-search")
public class FavoriteSearchRSImpl implements FavoriteSearchRS {
 
    @Inject
    private FavoriteSearchManager manager;
 
    @Inject
    private UserManager userManager;
 
    @Inject
    private MapStructMapper commonMapper;
 
    @Inject
    private com.megatim.fdxconsultation.model.mappers.MapStructMapper mapper;
 
    @Inject
    private CriteriaEntityPersistedManager criteriaManager;
 
    private User connectedUser;
 
    public void handleAuthenticationEvent(@Observes @AuthenticatedUser String username) {
        connectedUser = userManager.recuperUtilisateur(username);
    }
 
    @Override
    public Response save(HttpHeaders headers, FavoriteSearchDto favoriteSearchRequest) {
        manager.add(favoriteSearchRequest, connectedUser);
        return Response.noContent().build();
    }
 
    @Override
    public Response all(HttpHeaders headers) {
        return Response.ok(manager.all(connectedUser.getUserName())).build();
    }
 
    @Override
    public Response getSearchColumns(HttpHeaders headers) {
        return Response.ok(CriteriaEntitySearchUtil.getSearchColumns(FavoriteSearch.class)).build();
    }
 
    @Override
    public Long count(HttpHeaders headers, CriteriaFormRequest criteriaFormRequest) {
        try {
            return manager.count(criterion(criteriaFormRequest));
        } catch (Exception ex) {
            Logger.getLogger(PaysRSImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
            throw new CommonApplicationServerException();
        }
    }
 
    private CriteriaEntityFromView criterion(CriteriaFormRequest criteriaFormRequest) {
 
        CriteriaEntityFromView finalCriterion = new CriteriaEntityFromView();
        finalCriterion.setCriteriaLogicConnector(CriteriaLogicConnector.AND);
        finalCriterion.getSubCriterias().add(newCriteriaEntityFromView("userName", connectedUser.getUserName(), Operateur.EQUALS));
 
        CriteriaEntityFromView criterion = criteriaFormRequest != null ? criteriaFormRequest.getCriteria() : null;
        if (criterion != null) {
            finalCriterion.getSubCriterias().add(criterion);
        }
 
        return finalCriterion;
    }
 
    @Override
    public Response findWithPagination(HttpHeaders headers, Integer pageNumber, Integer pageSize, CriteriaFormRequest criteriaFormRequest) {
        try {
            List<FavoriteSearchDto> data = manager
                    .findWithPagination(criterion(criteriaFormRequest), Arrays.asList(), Arrays.asList(new OrderByDefinition("dateCreation", OrderByType.DESC)), pageNumber, pageSize)
                    .stream()
                    .map(f -> {
                        FavoriteSearchDto favoriteSearchDto = mapper.favoriteSearchToFavoriteSearchDto(f);
                        favoriteSearchDto.setCriteria(criteriaManager.criteriaEntityPersistedToCriteriaEntityFromView(f.getCriteria()));
                        return favoriteSearchDto;
                    })
                    .collect(Collectors.toList());
            return Response.ok(data).build();
        } catch (Exception ex) {
            Logger.getLogger(PaysRSImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
            throw new CommonApplicationServerException();
        }
    }
 
    private CriteriaEntityFromView newCriteriaEntityFromView(String nomColonne, Object criteriaValue, Operateur operateur) {
        CriteriaEntityFromView criterion = new CriteriaEntityFromView();
        criterion.setNomColonne(nomColonne);
        criterion.setCriteriaValue(criteriaValue);
        criterion.setOperateur(operateur);
 
        return criterion;
    }
}