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<String, ColumnDefinition> columnNameToColumnDefinitions;
|
private final TableauBordRequest tableauBordRequest;
|
|
public TableauBordRequestError(TableauBordRequest tableauBordRequest, List<ColumnDefinition> 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);
|
}
|
|
}
|