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 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; } }