From 77adae4e07c2044660a255d49e585bb5be9da3b3 Mon Sep 17 00:00:00 2001 From: srosse <stephane.rosse@frentix.com> Date: Fri, 17 Jan 2020 10:10:35 +0100 Subject: [PATCH] OO-4474: better handle negative values in FIB --- .../xml/interactions/FIBAssessmentItemBuilder.java | 7 ++++++- .../ui/editor/interactions/FIBScoreController.java | 14 ++++++++------ 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/olat/ims/qti21/model/xml/interactions/FIBAssessmentItemBuilder.java b/src/main/java/org/olat/ims/qti21/model/xml/interactions/FIBAssessmentItemBuilder.java index 461ce4e571e..1bfa7136caa 100644 --- a/src/main/java/org/olat/ims/qti21/model/xml/interactions/FIBAssessmentItemBuilder.java +++ b/src/main/java/org/olat/ims/qti21/model/xml/interactions/FIBAssessmentItemBuilder.java @@ -499,6 +499,11 @@ public class FIBAssessmentItemBuilder extends AssessmentItemBuilder { this.scoreEvaluation = scoreEvaluation; } + /** + * This method only applies to score per answer. + * + * @return true if some variant hasn't the same score as the main response. + */ public boolean alternativesWithSpecificScore() { for(Map.Entry<String, AbstractEntry> entry:responseIdentifierToTextEntry.entrySet()) { AbstractEntry e = entry.getValue(); @@ -508,7 +513,7 @@ public class FIBAssessmentItemBuilder extends AssessmentItemBuilder { if(textEntry.getAlternatives() != null && !textEntry.getAlternatives().isEmpty()) { for(TextEntryAlternative alternative:textEntry.getAlternatives()) { double altScore = alternative.getScore(); - if(altScore >= 0.0d && score != null && score.doubleValue() != altScore) { + if(score != null && score.doubleValue() != altScore) { return true; } } diff --git a/src/main/java/org/olat/ims/qti21/ui/editor/interactions/FIBScoreController.java b/src/main/java/org/olat/ims/qti21/ui/editor/interactions/FIBScoreController.java index 48d06b47d9c..e7497eeedc0 100644 --- a/src/main/java/org/olat/ims/qti21/ui/editor/interactions/FIBScoreController.java +++ b/src/main/java/org/olat/ims/qti21/ui/editor/interactions/FIBScoreController.java @@ -285,7 +285,7 @@ public class FIBScoreController extends AssessmentItemRefEditorController implem private FIBAlternativeWrapper createAlternativeWrapper(TextEntryAlternative alternative) { String altPointElId = "points_" + counter++; - String altScoreStr = alternative.getScore() == -1.0d ? "" : Double.toString(alternative.getScore()); + String altScoreStr = Double.toString(alternative.getScore()); TextElement altPointEl = uifactory.addTextElement(altPointElId, null, 5, altScoreStr, scoreCont); altPointEl.setDisplaySize(5); altPointEl.setEnabled(!restrictedEdit && !readOnly); @@ -321,23 +321,25 @@ public class FIBScoreController extends AssessmentItemRefEditorController implem } private void updateScoresUI() { - boolean perAnswer = assessmentModeEl.isSelected(1) || assessmentModeEl.isSelected(2); - scoreCont.setVisible(perAnswer); - scoreCont.contextPut("withAlternatives", Boolean.valueOf(assessmentModeEl.isSelected(2))); - if(perAnswer) { + boolean perAnswer = assessmentModeEl.isSelected(1); + boolean perAnswerAndVariants = assessmentModeEl.isSelected(2); + scoreCont.setVisible(perAnswer || perAnswerAndVariants); + scoreCont.contextPut("withAlternatives", Boolean.valueOf(perAnswerAndVariants)); + if(perAnswer || perAnswerAndVariants) { for(FIBEntryWrapper wrapper:wrappers) { AbstractEntry entry = wrapper.getEntry(); Double points = entry.getScore(); if(points != null && points.doubleValue() == -1.0d) {//replace the all answers score wrapper.getEntry().setScore(1.0d); wrapper.getPointsEl().setValue("1.0"); + points = Double.valueOf(1.0d); } if(entry instanceof TextEntry && wrapper.getAlternatives() != null && !wrapper.getAlternatives().isEmpty()) { for(FIBAlternativeWrapper alternativeWrapper:wrapper.getAlternatives()) { TextEntryAlternative alternative = alternativeWrapper.getAlternative(); if(StringHelper.containsNonWhitespace(alternativeWrapper.getPointsEl().getValue())) { - if(points != null && points.doubleValue() >= 0.0d && alternative.getScore() == 1.0d) { + if(points != null && (alternative.getScore() == 1.0d || alternative.getScore() == -1.0d)) { alternative.setScore(points.doubleValue()); alternativeWrapper.getPointsEl().setValue(points.toString()); } -- GitLab