package com.megatim.fdxconsultation.core.impl.helper; import com.megatim.fdxcommons.core.ifaces.helper.DataInMemoryHandler; 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.referentiel.Referentiel; import com.megatim.fdxcommons.tools.exceptions.CommonRessourceNotFoundException; import com.megatim.fdxconsultation.core.ifaces.helper.RequestHandler; import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView; import com.megatim.fdxconsultation.model.mappers.MapStructMapper; import com.megatim.fdxconsultation.core.ifaces.stats.TableauBordManager; import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest; import com.megatim.fdxcommons.model.pojo.OrderByDefinition; import com.megatim.fdxconsultation.model.dto.stats.TableauBordSlimDto; import com.megatim.fdxconsultation.model.stats.TableauBord; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import javax.enterprise.context.Dependent; import javax.inject.Inject; import javax.transaction.Transactional; /** * * @author ASUS */ @Dependent public class RequestHandlerImpl implements RequestHandler { @Inject MapStructMapper mapper; @Inject private TableauBordManager tableauBordManager; @Inject private DataInMemoryHandler dataInMemoryHandler; @Override public Long countTableauBord(CriteriaFormRequest criteriaFormRequest) throws Exception { return tableauBordManager.count(addCurrentReferentielToCriteria(criteriaFormRequest != null ? criteriaFormRequest.getCriteria() : null)); } @Override @Transactional public void deleteTableauBord(Long id) { TableauBord tableauBord = tableauBordManager.getById(id); if (tableauBord == null) { throw new CommonRessourceNotFoundException("La ressource ayant l'identifiant " + id + " est introuvable"); } tableauBordManager.delete(null, tableauBord); } @Override public List findTableauBord(CriteriaFormRequest criteriaFormRequest) throws Exception { List tableauxBords = tableauBordManager.findAll(addCurrentReferentielToCriteria(criteriaFormRequest != null ? criteriaFormRequest.getCriteria() : null), Arrays.asList(), Arrays.asList()); List dtos = new ArrayList<>(); tableauxBords.stream().forEach(t -> { dtos.add(mapper.tableauBordToTableauBordSlimDto(t)); }); return dtos; } @Override public List findTableauBordWithPagination(CriteriaFormRequest criteriaFormRequest, List fetchEagerFields, int pageNumber, int pageSize) throws Exception { List tableauxBords = tableauBordManager .findWithPagination( addCurrentReferentielToCriteria(criteriaFormRequest != null ? criteriaFormRequest.getCriteria() : null), fetchEagerFields, Arrays.asList(new OrderByDefinition("dateCreation", OrderByType.DESC)), pageNumber, pageSize); List dtos = new ArrayList<>(); tableauxBords.stream().forEach(t -> { dtos.add(mapper.tableauBordToTableauBordSlimDto(t)); }); return dtos; } private CriteriaEntityFromView addCurrentReferentielToCriteria(CriteriaEntityFromView criterion) { CriteriaEntityFromView finalCriterion = new CriteriaEntityFromView(); finalCriterion.setCriteriaLogicConnector(CriteriaLogicConnector.AND); finalCriterion.getSubCriterias().add(currentReferentielCriterion()); finalCriterion.getSubCriterias().add(criterion); return finalCriterion; } private CriteriaEntityFromView currentReferentielCriterion() { Referentiel referentiel = dataInMemoryHandler.getDataInMemory().getReferentielEnCours(); return new CriteriaEntityFromView("referentiel.version", referentiel != null ? referentiel.getVersion() : "", Operateur.EQUALS); } }