From d40eb112448dded1c0aae3b07ae1bc248abaeb17 Mon Sep 17 00:00:00 2001 From: srosse <none@none> Date: Mon, 12 Aug 2013 09:43:31 +0200 Subject: [PATCH] OO-685: accept comma as separator for float in QTI <=, >=, <, and > test, and prevent red screen if the format of the float cannot be parsed --- .../ims/qti/process/elements/QTI_vargt.java | 19 +++++++++++++------ .../ims/qti/process/elements/QTI_vargte.java | 19 +++++++++++++++---- .../ims/qti/process/elements/QTI_varlt.java | 19 ++++++++++++++++--- .../ims/qti/process/elements/QTI_varlte.java | 18 +++++++++++++++--- 4 files changed, 59 insertions(+), 16 deletions(-) diff --git a/src/main/java/org/olat/ims/qti/process/elements/QTI_vargt.java b/src/main/java/org/olat/ims/qti/process/elements/QTI_vargt.java index 7f0d2602bc1..8b118b29c06 100644 --- a/src/main/java/org/olat/ims/qti/process/elements/QTI_vargt.java +++ b/src/main/java/org/olat/ims/qti/process/elements/QTI_vargt.java @@ -44,7 +44,6 @@ public class QTI_vargt implements BooleanEvaluable { * @return */ public boolean eval(Element boolElement, ItemContext userContext, EvalContext ect) { - boolean ok = false; ItemInput iinp = userContext.getItemInput(); if (iinp.isEmpty()) return false; // user has given no answer String respident = boolElement.attributeValue("respident"); @@ -56,13 +55,21 @@ public class QTI_vargt implements BooleanEvaluable { // Integer shouldVal = shouldVal.trim(); isVal = isVal.trim(); + float fs = Float.parseFloat(shouldVal); + float fi; try { - Float fs = new Float(shouldVal); - Float fi = new Float(isVal); - ok = (fi.floatValue() > fs.floatValue()); - } catch (NumberFormatException nfe) { - // + fi = Float.parseFloat(isVal); + } catch (NumberFormatException e) { + //try to replace , -> . + isVal = isVal.replace(',', '.'); + try { + fi = Float.parseFloat(isVal); + } catch (NumberFormatException e1) { + //we try all what we can to understand the input value -> false + return false; + } } + boolean ok = (fi > fs); return ok; } diff --git a/src/main/java/org/olat/ims/qti/process/elements/QTI_vargte.java b/src/main/java/org/olat/ims/qti/process/elements/QTI_vargte.java index face4362d6f..83d69f04a1c 100644 --- a/src/main/java/org/olat/ims/qti/process/elements/QTI_vargte.java +++ b/src/main/java/org/olat/ims/qti/process/elements/QTI_vargte.java @@ -51,10 +51,21 @@ public class QTI_vargte implements BooleanEvaluable { // we use Float so we are on the safe side, even if comparison was only Integer shouldVal = shouldVal.trim(); isVal = isVal.trim(); - Float fs = new Float(shouldVal); - Float fi = new Float(isVal); - boolean ok = (fi.floatValue() >= fs.floatValue()); + float fs = Float.parseFloat(shouldVal); + float fi; + try { + fi = Float.parseFloat(isVal); + } catch (NumberFormatException e) { + //try to replace , -> . + isVal = isVal.replace(',', '.'); + try { + fi = Float.parseFloat(isVal); + } catch (NumberFormatException e1) { + //we try all what we can to understand the input value -> false + return false; + } + } + boolean ok = (fi >= fs); return ok; } - } diff --git a/src/main/java/org/olat/ims/qti/process/elements/QTI_varlt.java b/src/main/java/org/olat/ims/qti/process/elements/QTI_varlt.java index 9e925913805..8d9a8cf581d 100644 --- a/src/main/java/org/olat/ims/qti/process/elements/QTI_varlt.java +++ b/src/main/java/org/olat/ims/qti/process/elements/QTI_varlt.java @@ -52,9 +52,22 @@ public class QTI_varlt implements BooleanEvaluable { // we use Float so we are on the safe side, even if comparison was only Integer shouldVal = shouldVal.trim(); isVal = isVal.trim(); - Float fs = new Float(shouldVal); - Float fi = new Float(isVal); - boolean ok = (fi.floatValue() < fs.floatValue()); + float fs = Float.parseFloat(shouldVal); + float fi; + try { + fi = Float.parseFloat(isVal); + } catch (NumberFormatException e) { + //try to replace , -> . + isVal = isVal.replace(',', '.'); + try { + fi = Float.parseFloat(isVal); + } catch (NumberFormatException e1) { + //we try all what we can to understand the input value -> false + return false; + } + } + + boolean ok = (fi < fs); return ok; } diff --git a/src/main/java/org/olat/ims/qti/process/elements/QTI_varlte.java b/src/main/java/org/olat/ims/qti/process/elements/QTI_varlte.java index a6b2be2019c..aa01acd165e 100644 --- a/src/main/java/org/olat/ims/qti/process/elements/QTI_varlte.java +++ b/src/main/java/org/olat/ims/qti/process/elements/QTI_varlte.java @@ -52,9 +52,21 @@ public class QTI_varlte implements BooleanEvaluable { // we use Float so we are on the safe side, even if comparison was only Integer shouldVal = shouldVal.trim(); isVal = isVal.trim(); - Float fs = new Float(shouldVal); - Float fi = new Float(isVal); - boolean ok = (fi.floatValue() <= fs.floatValue()); + float fs = Float.parseFloat(shouldVal); + float fi; + try { + fi = Float.parseFloat(isVal); + } catch (NumberFormatException e) { + //try to replace , -> . + isVal = isVal.replace(',', '.'); + try { + fi = Float.parseFloat(isVal); + } catch (NumberFormatException e1) { + //we try all what we can to understand the input value -> false + return false; + } + } + boolean ok = (fi <= fs); return ok; } -- GitLab