package com.megatim.fdxconsultation.service.impl.stats; import com.megatim.fdxcommons.model.enumeration.CriteriaLogicConnector; import com.megatim.fdxcommons.model.enumeration.Operateur; import com.megatim.fdxcommons.model.integration.ColumnDefinition; import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView; import com.megatim.fdxcommons.model.pojo.CriteriaFormRequest; 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.fdxconsultation.core.ifaces.helper.DataConsumptionOperations; import com.megatim.fdxconsultation.core.ifaces.helper.RequestHandler; import com.megatim.fdxconsultation.core.ifaces.stats.TableauBordManager; import com.megatim.fdxconsultation.core.impl.stats.ConvertedTableauBordResponse; import com.megatim.fdxconsultation.core.impl.utils.CriteriaEntitySearchUtil; import com.megatim.fdxconsultation.model.administration.User; import com.megatim.fdxconsultation.model.dto.stats.StatResultDto; import com.megatim.fdxconsultation.model.dto.stats.TableauBordSlimDto; import com.megatim.fdxconsultation.model.enums.TypeConfigurationTableauBord; import com.megatim.fdxconsultation.model.mappers.MapStructMapper; import com.megatim.fdxconsultation.model.stats.TableauBord; import com.megatim.fdxconsultation.model.stats.dto.TableauBordRequest; import com.megatim.fdxconsultation.service.ifaces.stats.TableauBordRS; import com.megatim.fdxconsultation.tools.context.AppCommonContext; import com.mgt.rs.security.core.common.AuthenticatedUser; import com.mgt.rs.security.core.common.SecuredAdmin; 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 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 ASUS */ @SecuredClass(module = AppCommonContext.MODULE_CONSULTATION_WEB, path = "Tableau de bord", description = "Tableau de Bord") @Path("tableau-bord") //@SecuredAdmin(action = {"consulter", "éditer"}) public class TableauBordRSImpl implements TableauBordRS { @Inject private UserManager userManager; @AuthenticatedUser private User utilisateurConnecte; @Inject RequestHandler requestHandler; @Inject private TableauBordManager manager; @Inject com.megatim.fdxcommons.model.mappers.MapStructMapper commonMapper; @Inject private MapStructMapper mapper; @Inject DataConsumptionOperations dataConsumptionOperations; public TableauBordRSImpl() { } public void handleAuthenticationEvent(@Observes @AuthenticatedUser String username) { utilisateurConnecte = userManager.recuperUtilisateur(username); } @Override public TableauBordSlimDto mapToSlimDto(TableauBord entity) { return mapper.tableauBordToTableauBordSlimDto(entity); } @Override public Response save(HttpHeaders headers, TableauBordRequest tableauBordRequest) { return Response.ok(mapToSlimDto(manager.save(utilisateurConnecte, tableauBordRequest))).build(); } @Override public Response update(HttpHeaders headers, Long id, TableauBordRequest tableauBordRequest) { manager.update(id, tableauBordRequest); return Response.ok().build(); } @Override public Response delete(HttpHeaders headers, Long id) { requestHandler.deleteTableauBord(id); return Response.ok().build(); } @Override public Response findById(HttpHeaders headers, Long id) { return Response.ok(new ConvertedTableauBordResponse(manager.get(id)).tableauBordResponse()).build(); } @Override public Response findAll(HttpHeaders headers, CriteriaFormRequest criteriaFormRequest) { try { CriteriaEntityFromView finalCriterion = getCriteriaEntityAndAddTypeConfiguration(criteriaFormRequest); List dtos = requestHandler.findTableauBord(new CriteriaFormRequest(finalCriterion)); return Response.ok(dtos).build(); } catch (CommonApplicationValidationException ex) { throw ex; } catch (Exception ex) { Logger.getLogger(TableauBordRSImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex); throw new CommonApplicationServerException(); } } @Override public Response findWithPagination(HttpHeaders headers, Integer pageNumber, Integer pageSize, CriteriaFormRequest criteriaFormRequest) { try { CriteriaEntityFromView finalCriterion = getCriteriaEntityAndAddTypeConfiguration(criteriaFormRequest); List dtos = requestHandler.findTableauBordWithPagination(new CriteriaFormRequest(finalCriterion), Arrays.asList(), pageNumber, pageSize); return Response.ok(dtos).build(); } catch (Exception ex) { Logger.getLogger(TableauBordRSImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex); throw new CommonApplicationServerException(); } } @Override public Response getColumns(HttpHeaders headers, String referentielVersion, String codeTypeFichier) { List colDefs = dataConsumptionOperations.getPrintableColumns(referentielVersion, codeTypeFichier); return Response.ok(commonMapper.columnDefinitionListToColumnDefinitionDtoList(colDefs)).build(); } @Override public Response getDatas(HttpHeaders headers, String referentielVersion, String codeTypeFichier) { StatResultDto results = manager.getDatas(utilisateurConnecte, referentielVersion, codeTypeFichier); return Response.ok(results).build(); } @Override public Long count(HttpHeaders headers, CriteriaFormRequest criteriaFormRequest) { try { CriteriaEntityFromView criterion = getCriteriaEntityAndAddTypeConfiguration(criteriaFormRequest); return requestHandler.countTableauBord(new CriteriaFormRequest(criterion)); } catch (Exception ex) { Logger.getLogger(TableauBordRSImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex); throw new CommonApplicationServerException(); } } @Override public Response getSearchColumns(HttpHeaders headers) { return Response.ok(CriteriaEntitySearchUtil.getSearchColumns(TableauBord.class)).build(); } @Override public Response deleteUserTableauBord(HttpHeaders headers, String userName) { User user = userManager.recuperUtilisateur(userName); manager.deleteUserTableauBord(user); return Response.ok().build(); } private CriteriaEntityFromView getCriteriaEntityAndAddTypeConfiguration(CriteriaFormRequest criteriaFormRequest) { CriteriaEntityFromView finalCriterion = new CriteriaEntityFromView(); finalCriterion.setCriteriaLogicConnector(CriteriaLogicConnector.AND); finalCriterion.getSubCriterias().add(new CriteriaEntityFromView("user.userName", utilisateurConnecte.getUserName(), Operateur.EQUALS)); finalCriterion.getSubCriterias().add(new CriteriaEntityFromView("typeConfiguration", TypeConfigurationTableauBord.USER_SPECIFIC, Operateur.EQUALS)); if (criteriaFormRequest != null && criteriaFormRequest.getCriteria() != null) { finalCriterion.getSubCriterias().add(criteriaFormRequest.getCriteria()); } return finalCriterion; } }