From 8cf93e2c4004029406a1e2cf73ca742be6b556d3 Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Wed, 18 Oct 2017 10:44:41 +0200
Subject: [PATCH] OO-2870: add validation in the case min. score is bigger than
 max. score

---
 .../ui/editor/_i18n/LocalStrings_de.properties  |  2 +-
 .../ui/editor/_i18n/LocalStrings_en.properties  |  1 +
 .../AssessmentItemRefEditorController.java      | 17 +++++++++++++++++
 .../interactions/ChoiceScoreController.java     |  3 +--
 .../HotspotChoiceScoreController.java           |  3 +--
 .../interactions/MatchScoreController.java      |  3 +--
 6 files changed, 22 insertions(+), 7 deletions(-)

diff --git a/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_de.properties
index 90d81bf0208..c954c1df36c 100644
--- a/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_de.properties
@@ -21,7 +21,6 @@ delete=L\u00F6schen
 delete.item=$org.olat.ims.qti.editor\:delete.item
 delete.section=$org.olat.ims.qti.editor\:delete.section
 delete.testPart=Wollen Sie den Test-Part mit allen Fragen wirklich l\u00F6schen?
-dy=dx
 editor.sc.title=Single choice
 editor.unkown.title=Unbekanntes interaction
 error.assessment.test=Die Datei konnte nicht gelesen werden. Sie ist entweder korrupt oder mit dem falschen Format gespeichert.
@@ -34,6 +33,7 @@ error.lock=Dieser Test/Fragebogen wird momentan vom Benutzer {0} editiert und is
 error.lock.title=Test gesperrt
 error.lower.tolerance=Die untere Schranke muss kleiner als die Lösung sein.
 error.mimetype=$org.olat.core.commons.modules.bc\:WrongMimeType
+error.min.score.bigger.max=Minimal erreichbare Punktzahl muss kleiner als then maximal erreichbare Punktzahl sein.
 error.missing.fib=Die Frage mussen mindestens einen L\u00FCckentext oder eine Numerische Eingabe enthalten.
 error.missing.hottext=Die Frage mussen mindestens einen Hottext enthalten.
 error.need.correct.answer=Sie m\u00FCssen mindestens eine Antwort als korrekt markieren.
diff --git a/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_en.properties
index 04acba81e21..1e4a26a9cbc 100644
--- a/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_en.properties
@@ -33,6 +33,7 @@ error.integer=$org.olat.ims.qti21.ui\:error.integer
 error.lock=This test/questionnaire is being edited by user {0} at the moment and therefore locked.
 error.lock.title=Test locked
 error.lower.tolerance=The lower bound need to be smaller than the solution.
+error.min.score.bigger.max=Min. score must be bigger than the max. score.
 error.mimetype=$org.olat.core.commons.modules.bc\:WrongMimeType
 error.missing.fib=The question need at least a gap text or a numerical input.
 error.missing.hottext=The question need at least a hottext.
diff --git a/src/main/java/org/olat/ims/qti21/ui/editor/interactions/AssessmentItemRefEditorController.java b/src/main/java/org/olat/ims/qti21/ui/editor/interactions/AssessmentItemRefEditorController.java
index 10d4fbc9c21..71df3c7984f 100644
--- a/src/main/java/org/olat/ims/qti21/ui/editor/interactions/AssessmentItemRefEditorController.java
+++ b/src/main/java/org/olat/ims/qti21/ui/editor/interactions/AssessmentItemRefEditorController.java
@@ -130,6 +130,23 @@ public abstract class AssessmentItemRefEditorController extends FormBasicControl
 		return allOk;
 	}
 	
+	protected boolean validateMinMaxScores(TextElement minScoreEl, TextElement maxScoreEl) {
+		boolean allOk = true;
+		allOk &= validateDouble(minScoreEl);
+		allOk &= validateDouble(maxScoreEl);
+		
+		if(allOk) {
+			double minScore =Double.parseDouble(minScoreEl.getValue());
+			double maxScore = Double.parseDouble(maxScoreEl.getValue());
+			if(minScore > maxScore) {
+				minScoreEl.setErrorKey("error.min.score.bigger.max", null);
+				allOk &= false;
+			}
+		}
+		
+		return allOk;
+	}
+	
 	@Override
 	protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
 		if(limitAttemptsEl == source) {
diff --git a/src/main/java/org/olat/ims/qti21/ui/editor/interactions/ChoiceScoreController.java b/src/main/java/org/olat/ims/qti21/ui/editor/interactions/ChoiceScoreController.java
index 2cf238a910d..55656ebb2ea 100644
--- a/src/main/java/org/olat/ims/qti21/ui/editor/interactions/ChoiceScoreController.java
+++ b/src/main/java/org/olat/ims/qti21/ui/editor/interactions/ChoiceScoreController.java
@@ -250,8 +250,7 @@ public class ChoiceScoreController extends AssessmentItemRefEditorController imp
 	@Override
 	protected boolean validateFormLogic(UserRequest ureq) {
 		boolean allOk = true;
-		allOk &= validateDouble(maxScoreEl);
-		allOk &= validateDouble(minScoreEl);
+		allOk &= validateMinMaxScores(minScoreEl, maxScoreEl);
 
 		if(assessmentModeEl.isOneSelected() && assessmentModeEl.isSelected(1)) {
 			for(ChoiceWrapper wrapper:wrappers) {
diff --git a/src/main/java/org/olat/ims/qti21/ui/editor/interactions/HotspotChoiceScoreController.java b/src/main/java/org/olat/ims/qti21/ui/editor/interactions/HotspotChoiceScoreController.java
index 00e938b96e0..e44715f8ef8 100644
--- a/src/main/java/org/olat/ims/qti21/ui/editor/interactions/HotspotChoiceScoreController.java
+++ b/src/main/java/org/olat/ims/qti21/ui/editor/interactions/HotspotChoiceScoreController.java
@@ -243,8 +243,7 @@ public class HotspotChoiceScoreController extends AssessmentItemRefEditorControl
 	@Override
 	protected boolean validateFormLogic(UserRequest ureq) {
 		boolean allOk = true;
-		allOk &= validateDouble(maxScoreEl);
-		allOk &= validateDouble(minScoreEl);
+		allOk &= validateMinMaxScores(minScoreEl, maxScoreEl);
 
 		if(assessmentModeEl.isOneSelected() && assessmentModeEl.isSelected(1)) {
 			for(HotspotChoiceWrapper wrapper:wrappers) {
diff --git a/src/main/java/org/olat/ims/qti21/ui/editor/interactions/MatchScoreController.java b/src/main/java/org/olat/ims/qti21/ui/editor/interactions/MatchScoreController.java
index dd2377a914f..4b262bf334d 100644
--- a/src/main/java/org/olat/ims/qti21/ui/editor/interactions/MatchScoreController.java
+++ b/src/main/java/org/olat/ims/qti21/ui/editor/interactions/MatchScoreController.java
@@ -215,8 +215,7 @@ public class MatchScoreController extends AssessmentItemRefEditorController impl
 	@Override
 	protected boolean validateFormLogic(UserRequest ureq) {
 		boolean allOk = true;
-		allOk &= validateDouble(maxScoreEl);
-		allOk &= validateDouble(minScoreEl);
+		allOk &= validateMinMaxScores(minScoreEl, maxScoreEl);
 
 		if(assessmentModeEl.isOneSelected() && assessmentModeEl.isSelected(1)) {
 			for(Map.Entry<DirectedPairValue, MatchScoreWrapper> entry:scoreWrappers.entrySet()) {
-- 
GitLab