Commit 681bb0c0 authored by François-Xavier Lebastard's avatar François-Xavier Lebastard
Browse files

UNOTOPLYS-66 UNOTOPLYS-67 fix(score) : les questions sans score ne sont plus...

UNOTOPLYS-66 UNOTOPLYS-67 fix(score) : les questions sans score ne sont plus ajoutées dans la table des scores
Permet de calculer les moyennes sans prendre en compte les "nons" réponses
parent 5c6d9965
......@@ -188,7 +188,7 @@ public class Expression implements IExpression {
return stats.getMean();
}
protected boolean isQuestionAnswerExists(String questionReference){
protected boolean isQuestionAnswerExists(String questionReference) {
return scores.keySet().contains(questionReference);
}
......@@ -231,38 +231,62 @@ public class Expression implements IExpression {
@Override
public void addAnswers(List<AnswerDTO> answers) {
final Map<String, Double> answersScores = new HashMap<>();
// on parcours toutes les réponses de tous les écrans
for (AnswerDTO answer : answers) {
addAnswer(answersScores, answer);
addAnswer(answer);
}
}
protected void addAnswer(final Map<String, Double> answersScores, final AnswerDTO answer) {
protected void addAnswer(final AnswerDTO answer) {
// contient les scores associés à chaque réponses
final Map<String, Double> answersScores = new HashMap<>();
// on met par défaut toutes les réponses comme non sélectionnées
//@formatter:off
final List<MultipleChoiceItem> screenItems =
final List<MultipleChoiceItem> screenQuestions =
answer.getScreenItems().stream()
.filter(MultipleChoiceItem.class::isInstance)
.map(MultipleChoiceItem.class::cast)
.collect(Collectors.toList());
//@formatter:on
final String screenReference = answer.getScreenReference();
for (MultipleChoiceItem screenItem : screenItems) {
for (Choice choice : screenItem.getChoices()) {
String answerRef = getAnswerReference(screenReference, screenItem.getReference(), choice.getValue());
answersScores.put(answerRef, choice.getScore());
addAnswer(answerRef, false);
}
for (final MultipleChoiceItem screenItem : screenQuestions) {
answersScores.putAll(initializeScreenAnswers(screenReference, screenItem.getReference(), screenItem.getChoices()));
}
// puis on vient sélectionnée celle qui ont été selectionnées
// puis on vient sélectionner celles qui ont étés selectionnées
// récupération des réponses de chaque question de l'écran
// on peuple la table des scores en fonction de la répnse sélectionnée
final List<AnswerElements> answerElements = answer.getAnswerElements();
for (AnswerElements answerElement : answerElements) {
for (final AnswerElements answerElement : answerElements) {
registerAnswers(answersScores, screenReference, answerElement);
}
}
/**
* Initialisation des variables relatives à un écran :
* <ul>
* <li>Toutes les réponses sont non sélectionnées. {@link #registerAnswers(Map, String, AnswerElements) viendra ensuite sélectionnées les réponses effectivement sélectionnées}</li>
* <li>On retourne les scores associés à chaque réponse. Cette Map sera utilisée par #registerAnswers(Map, String, AnswerElements) pour peupler {@link #scores}</li>
* </ul>
* @param screenReference une réference d'écran
* @param questionReference une référence de question
* @param questionChoices les réponses possibles à la question
* @return les scores de l'écran courant
*/
private Map<String, Double> initializeScreenAnswers(final String screenReference, final String questionReference, final List<Choice> questionChoices) {
final Map<String, Double> answersScores = new HashMap<>();
for (final Choice choice : questionChoices) {
final String answerRef = getAnswerReference(screenReference, questionReference, choice.getValue());
// on stocke le score associé à chaque réponse; utilisé pour calculer le score de la question en fonction de la réponse sélectionnée
final Double score = choice.getScore();
if (score != null) {
answersScores.put(answerRef, score);
}
// dans un premier temps, on considère toutes les réponses comme non sélectionnées.
addAnswer(answerRef, false);
}
return answersScores;
}
private void registerAnswers(final Map<String, Double> answersScores, final String screenReference, final AnswerElements answerElement) {
List<String> answer = answerElement.getAnswer();
if (CollectionUtils.isNotEmpty(answer)) {
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment