package com.megatim.fdxconsultation.core.impl.helper; import com.megatim.fdxcommons.model.enumeration.CriteriaLogicConnector; import com.megatim.fdxcommons.model.enumeration.Operateur; import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView; import com.megatim.fdxcommons.model.referentiel.Referentiel; import com.megatim.fdxcommons.tools.exceptions.CommonApplicationValidationException; import com.megatim.fdxconsultation.core.ifaces.integration.ColumnDefinitionManager; import com.megatim.fdxconsultation.core.ifaces.helper.TableauBordHandler; import com.megatim.fdxconsultation.core.ifaces.stats.CriteriaEntityPersistedManager; import com.megatim.fdxconsultation.core.ifaces.stats.TableConfigurationManager; import com.megatim.fdxconsultation.core.ifaces.stats.TableauBordColumnManager; import com.megatim.fdxconsultation.core.ifaces.stats.TableauBordManager; import com.megatim.fdxconsultation.model.dto.stats.TableConfigurationDto; import com.megatim.fdxconsultation.model.dto.stats.TableauBordDto; import com.megatim.fdxconsultation.model.enums.TypeConfigurationTableauBord; import com.megatim.fdxconsultation.model.mappers.MapStructMapper; import com.megatim.fdxconsultation.model.stats.CriteriaEntityPersisted; import com.megatim.fdxconsultation.model.stats.TableConfiguration; import com.megatim.fdxconsultation.model.stats.TableauBord; import com.megatim.fdxconsultation.model.stats.TableauBordColumn; import com.megatim.fdxconsultation.model.enums.TypeResultatConfiguration; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; import javax.enterprise.context.Dependent; import javax.inject.Inject; /** * * @author ASUS */ @Dependent public class TableauBordHandlerImpl implements TableauBordHandler { @Inject private MapStructMapper mapper; @Inject com.megatim.fdxcommons.model.mappers.MapStructMapper commonMapper; @Inject private ColumnDefinitionManager columnDefinitionManager; @Inject private CriteriaEntityPersistedManager criteriaEntityPersistedManager; @Inject TableauBordManager tableauBordManager; @Inject private TableConfigurationManager tableConfigurationManager; @Inject private TableauBordColumnManager tableauBordColumnManager; @Override public void reconduireTableauBordValides(Referentiel previousRef, Referentiel newRef, Set typeFichiersToMigrate) { List prevRefTableauBords = tableauBordManager.findByReferentiel(previousRef.getVersion()); try { for (TableauBord t : prevRefTableauBords) { if (typeFichiersToMigrate.contains(t.getTypeFichier().getCode())) { createNewTableauBord(t, newRef); } } } catch (Exception ex) { ex.printStackTrace(); } } @Override public TableauBordDto tableauBordToTableauBordDto(TableauBord tableauBord) { TableauBordDto dto = new TableauBordDto(); dto.setId(tableauBord.getId()); dto.setDescription(tableauBord.getDescription()); dto.setTypeFichier(commonMapper.typeFichierToTypeFichierSlimDto(tableauBord.getTypeFichier())); dto.setTypeConfiguration(tableauBord.getTypeConfiguration()); Set tableConfigurationDtos = new HashSet<>(); tableauBord.getTableConfigurations().stream().forEach(t -> tableConfigurationDtos.add(tableConfigurationToTableConfigurationDto(t))); dto.setTableConfigurations(tableConfigurationDtos); return dto; } /** * Méthode permettant de passer de TableauBordDto à TableauBord * * @param dto * @param referentiel * @return */ @Override public TableauBord tableauBordDtoToTableauBord(TableauBordDto dto, Referentiel referentiel) { TableauBord tableauBord = new TableauBord(); tableauBord.setDescription(dto.getDescription()); tableauBord.setTypeFichier(commonMapper.typeFichierSlimDtoToTypeFichier(dto.getTypeFichier())); tableauBord.setReferentiel(referentiel); Set tableConfigurations = new HashSet<>(); dto.getTableConfigurations().stream().forEach(t -> tableConfigurations.add(tableConfigurationDtoToTableConfiguration(t, dto.getTypeFichier().getCode(), referentiel.getVersion()))); tableauBord.setTableConfigurations(tableConfigurations); return tableauBord; } @Override public TableConfigurationDto tableConfigurationToTableConfigurationDto(TableConfiguration tableConf) { TableConfigurationDto dto = new TableConfigurationDto(); dto.setCriterion(criteriaEntityPersistedToCriteriaEntityFromView(tableConf.getCriterion())); dto.setColor(tableConf.getColor()); dto.setFonctionAggregation(tableConf.getFonctionAggregation()); dto.setGroupingColumns(mapper.setTableauBordColumnToSetTableauBordColumnDto(tableConf.getGroupingColumns())); dto.setLibelle(tableConf.getLibelle()); dto.setTargetedColumn(mapper.tableauBordColumnToTableauBordColumnDto(tableConf.getTargetedColumn())); dto.setTypeResultatConfiguration(tableConf.getTypeResultatConfiguration()); dto.setColor(tableConf.getColor()); return dto; } @Override public void stopIfUserSpecificTableauBordExists(String codeTypeFichier, String referentielVersion, String userName) throws CommonApplicationValidationException, Exception { CriteriaEntityFromView criterion = new CriteriaEntityFromView(); criterion.setCriteriaLogicConnector(CriteriaLogicConnector.AND); criterion.setSubCriterias(Arrays.asList( new CriteriaEntityFromView("typeFichier.code", codeTypeFichier, Operateur.EQUALS), new CriteriaEntityFromView("user.userName", userName, Operateur.EQUALS), new CriteriaEntityFromView("referentiel.version", referentielVersion, Operateur.EQUALS), new CriteriaEntityFromView("typeConfiguration", TypeConfigurationTableauBord.USER_SPECIFIC, Operateur.EQUALS))); List tb = tableauBordManager.findAll(criterion, Arrays.asList(), Arrays.asList()); if (tb.stream().findFirst().isPresent()) { throw new CommonApplicationValidationException("Une configuration existe déjà pour le typefichier " + codeTypeFichier + ", l'utilisateur" + userName + " et le référentiel " + referentielVersion); } } @Override public void stopIfGlobaleTableauBordExists(String codeTypeFichier, String referentielVersion) throws Exception { CriteriaEntityFromView criterion = new CriteriaEntityFromView(); criterion.setCriteriaLogicConnector(CriteriaLogicConnector.AND); criterion.setSubCriterias(Arrays.asList( new CriteriaEntityFromView("typeFichier.code", codeTypeFichier, Operateur.EQUALS), new CriteriaEntityFromView("referentiel.version", referentielVersion, Operateur.EQUALS), new CriteriaEntityFromView("typeConfiguration", TypeConfigurationTableauBord.GLOBAL, Operateur.EQUALS) )); if (tableauBordManager.findAll(criterion, Arrays.asList(), Arrays.asList()).stream().findFirst().isPresent()) { throw new CommonApplicationValidationException("Une configuration existe déjà pour ce typefichier et ce référentiel"); } } private void createNewTableauBord(TableauBord t, Referentiel referentiel) throws Exception { try { if (t.getTypeConfiguration().equals(TypeConfigurationTableauBord.USER_SPECIFIC)) { stopIfUserSpecificTableauBordExists(t.getTypeFichier().getCode(), referentiel.getVersion(), t.getUser().getUserName()); } else { stopIfGlobaleTableauBordExists(t.getTypeFichier().getCode(), referentiel.getVersion()); } TableauBord tableauBord = tableauBord(t, referentiel); tableauBordManager.save(tableauBord); } catch (Exception ex) { Logger.getLogger(TableauBordHandlerImpl.class.getSimpleName()).log(Level.SEVERE, ex.getMessage(), ex); } } private TableauBord tableauBord(TableauBord t, Referentiel referentiel) { TableauBord tableauBord = new TableauBord(); tableauBord.setReferentiel(referentiel); tableauBord.setTypeFichier(t.getTypeFichier()); tableauBord.setDescription(t.getDescription()); tableauBord.setUser(t.getUser()); tableauBord.setTypeConfiguration(t.getTypeConfiguration()); for (TableConfiguration tc : t.getTableConfigurations()) { TableConfiguration tableConf = new TableConfiguration(); tableConf.setLibelle(tc.getLibelle()); tableConf.setFonctionAggregation(tc.getFonctionAggregation()); tableConf.setTargetedColumn(newTableauBordColumn(tc.getTargetedColumn())); tableConf.setTypeResultatConfiguration(tc.getTypeResultatConfiguration()); tableConf.setFonctionAggregationCriterion(tc.getFonctionAggregationCriterion()); CriteriaEntityPersisted cr = reconductCriteria(tc.getCriterion()); tableConf.setCriterion(cr); for (TableauBordColumn tbc : tc.getGroupingColumns()) { tableConf.getGroupingColumns().add(newTableauBordColumn(tbc)); } tableauBord.getTableConfigurations().add(tableConf); } return tableauBord; } private TableauBordColumn newTableauBordColumn(TableauBordColumn column) { if (column == null) { return null; } TableauBordColumn newColumn = new TableauBordColumn(); newColumn.setName(column.getName()); newColumn.setTypeDonnee(column.getTypeDonnee()); return newColumn; } private TableConfiguration tableConfigurationDtoToTableConfiguration(TableConfigurationDto dto, String codeTypeFichier, String referentielVersion) { TableConfiguration tableConf = new TableConfiguration(); tableConf.setFonctionAggregation(dto.getFonctionAggregation()); tableConf.setLibelle(dto.getLibelle()); tableConf.setColor(dto.getColor()); tableConf.setTargetedColumn(mapper.tableauBordColumnDtoToTableauBordColumn(dto.getTargetedColumn())); tableConf.setGroupingColumns(mapper.setTableauBordColumnDtoToSetTableauBordColumn(dto.getGroupingColumns())); tableConf.setTypeResultatConfiguration(dto.getTypeResultatConfiguration() != null ? dto.getTypeResultatConfiguration() : TypeResultatConfiguration.RECAPITULATIF); CriteriaEntityPersisted criterionPersisted = criteriaEntityPersistedManager.constructCriteriaPersisted(codeTypeFichier, referentielVersion, dto.getCriterion()); tableConf.setCriterion(criterionPersisted); return tableConf; } private CriteriaEntityPersisted reconductCriteria(CriteriaEntityPersisted criterion) { if (criterion != null) { if (!criterion.getSubCriterias().isEmpty()) { CriteriaEntityPersisted finalCriterion = new CriteriaEntityPersisted(); List subCriteria = new ArrayList<>(criterion.getSubCriterias()); criterion.setSubCriterias(new ArrayList<>()); subCriteria.stream().forEach(c -> finalCriterion.getSubCriterias().add(reconductCriteria(c))); return finalCriterion; } else { CriteriaEntityPersisted finalCriterion = new CriteriaEntityPersisted(); finalCriterion.setNomColonne(criterion.getNomColonne()); finalCriterion.setOperateur(criterion.getOperateur()); finalCriterion.setCriteriaLogicConnector(criterion.getCriteriaLogicConnector()); finalCriterion.setCriteriaDateListValue(criterion.getCriteriaDateListValue()); finalCriterion.setCriteriaDateLowerBound(criterion.getCriteriaDateLowerBound()); finalCriterion.setCriteriaDateUpperBound(criterion.getCriteriaDateUpperBound()); finalCriterion.setCriteriaDateValue(criterion.getCriteriaDateValue()); finalCriterion.setCriteriaNumericListValue(criterion.getCriteriaNumericListValue()); finalCriterion.setCriteriaNumericValue(criterion.getCriteriaNumericValue()); finalCriterion.setCriteriaNumericLowerBound(criterion.getCriteriaNumericLowerBound()); finalCriterion.setCriteriaNumericUpperBound(criterion.getCriteriaNumericUpperBound()); finalCriterion.setCriteriaStringListValue(criterion.getCriteriaStringListValue()); finalCriterion.setCriteriaStringValue(criterion.getCriteriaStringValue()); finalCriterion.setCriteriaStringLowerBound(criterion.getCriteriaStringLowerBound()); finalCriterion.setCriteriaStringUpperBound(criterion.getCriteriaStringUpperBound()); return finalCriterion; } } else { return null; } } }