package com.megatim.fdxconsultation.core.impl.stats; import com.megatim.fdxcommons.model.enumeration.TypeDonnee; import com.megatim.fdxcommons.model.integration.ColumnDefinition; import com.megatim.fdxconsultation.model.dto.stats.TableConfigurationDto; import com.megatim.fdxconsultation.model.dto.stats.TableauBordColumnDto; import com.megatim.fdxcommons.model.enumeration.FonctionAggregation; import com.megatim.fdxconsultation.model.enums.TypeResultatConfiguration; import com.megatim.fdxconsultation.model.stats.dto.TableauBordRequest; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * * @author Gabuntu */ public class TableauBordRequestError { private final Map columnNameToColumnDefinitions; private final TableauBordRequest tableauBordRequest; public TableauBordRequestError(TableauBordRequest tableauBordRequest, List columnDefinitions) { this.tableauBordRequest = tableauBordRequest; this.columnNameToColumnDefinitions = columnDefinitions .stream() .collect(Collectors.toMap(c -> c.getName(), c -> c)); } public String error() { int index = 1; for (TableConfigurationDto configuration : tableauBordRequest.getTableConfigurations()) { if (!configuration.getFonctionAggregation().equals(FonctionAggregation.COUNT)) { if (configuration.getTargetedColumn() == null) { return "La colonne d'aggregation est obligatoire pour la configuration " + index; } if (!hasColumnDefinition(configuration.getTargetedColumn())) { return "La colonne d'aggregation n'est pas présente dans la définition de ce fichier pour la configuration " + index; } if (!isNumeric(configuration.getTargetedColumn())) { return "La colonne d'aggregation n'est pas numérique " + index; } } if (configuration.getTypeResultatConfiguration().equals(TypeResultatConfiguration.HISTOGRAMME) || configuration.getTypeResultatConfiguration().equals(TypeResultatConfiguration.CAMEMBERT)) { if (configuration.getGroupingColumns() == null || configuration.getGroupingColumns().isEmpty()) { return "Il faut au moins une colonne de groupage pour la configuration " + index; } for (TableauBordColumnDto column : configuration.getGroupingColumns()) { if (!hasColumnDefinition(column)) { //ERREUR LA COLONNE D'AGGREGATION N'EST PAS DEFINIT POUR CE TYPE DE FICHIER return "La colonne de groupage " + column.getName() + " n'appartient pas à la définition du fichier pour la configuration " + index; } } } index++; } return ""; } private boolean hasColumnDefinition(TableauBordColumnDto column) { return columnNameToColumnDefinitions.containsKey(column.getName()); } private boolean isNumeric(TableauBordColumnDto column) { return column.getTypeDonnee().equals(TypeDonnee.NUMERIQUE) || column.getTypeDonnee().equals(TypeDonnee.DECIMAL); } }