Kenmegne
7 days ago 23a46b4be35277e06ec89f48730eeb694e686be8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
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);
    }
 
}