From c0e06a5721288f8555126f11710e109ce9fd08c5 Mon Sep 17 00:00:00 2001 From: srosse <none@none> Date: Tue, 11 Jul 2017 10:01:27 +0200 Subject: [PATCH] OO-2882: catch the error and show the line where it happened --- .../CSVToAssessmentItemConverter.java | 7 ++++++ .../questionimport/TextInputController.java | 25 +++++++++++-------- .../_i18n/LocalStrings_de.properties | 1 + .../_i18n/LocalStrings_en.properties | 3 ++- 4 files changed, 24 insertions(+), 12 deletions(-) diff --git a/src/main/java/org/olat/ims/qti21/questionimport/CSVToAssessmentItemConverter.java b/src/main/java/org/olat/ims/qti21/questionimport/CSVToAssessmentItemConverter.java index 9c53d51a6f2..1f37625ad19 100644 --- a/src/main/java/org/olat/ims/qti21/questionimport/CSVToAssessmentItemConverter.java +++ b/src/main/java/org/olat/ims/qti21/questionimport/CSVToAssessmentItemConverter.java @@ -55,6 +55,7 @@ public class CSVToAssessmentItemConverter { private static final OLog log = Tracing.createLoggerFor(CSVToAssessmentItemConverter.class); + private int currentLine; private int kprimPosition = 0; private ImportOptions options; private final QtiSerializer qtiSerializer; @@ -70,10 +71,16 @@ public class CSVToAssessmentItemConverter { return items; } + public int getCurrentLine() { + return currentLine; + } + public void parse(String input) { String[] lines = input.split("\r?\n"); for (int i = 0; i<lines.length; i++) { + currentLine = i+1; + String line = lines[i]; if (line.equals("")) { continue; diff --git a/src/main/java/org/olat/ims/qti21/questionimport/TextInputController.java b/src/main/java/org/olat/ims/qti21/questionimport/TextInputController.java index 2fed63b45d7..5faaab251d8 100644 --- a/src/main/java/org/olat/ims/qti21/questionimport/TextInputController.java +++ b/src/main/java/org/olat/ims/qti21/questionimport/TextInputController.java @@ -51,7 +51,6 @@ public class TextInputController extends StepFormBasicController { private String validatedInp; private TextElement inputElement; - private List<AssessmentItemAndMetadata> parsedItems; private final AssessmentItemsPackage importedItems; private final ImportOptions options; @@ -92,8 +91,18 @@ public class TextInputController extends StepFormBasicController { String inp = inputElement.getValue(); if(validatedInp == null || !validatedInp.equals(inp)) { - boolean errors = convertInputField(); - allOk &= !errors; + CSVToAssessmentItemConverter converter = new CSVToAssessmentItemConverter(options, qtiService.qtiSerializer()); + try { + converter.parse(inputElement.getValue()); + List<AssessmentItemAndMetadata> items = converter.getItems(); + if(items == null || items.isEmpty()) { + inputElement.setErrorKey("form.mandatory.hover", null); + allOk &= false; + } + } catch (Exception e) { + inputElement.setErrorKey("error.at.line", new String[] { Integer.toString(converter.getCurrentLine()) }); + allOk &= false; + } } return allOk & super.validateFormLogic(ureq); @@ -101,16 +110,10 @@ public class TextInputController extends StepFormBasicController { @Override protected void formOK(UserRequest ureq) { - importedItems.setItems(parsedItems); - fireEvent(ureq, StepsEvent.ACTIVATE_NEXT); - } - - private boolean convertInputField() { - boolean importDataError = false; CSVToAssessmentItemConverter converter = new CSVToAssessmentItemConverter(options, qtiService.qtiSerializer()); converter.parse(inputElement.getValue()); - parsedItems = converter.getItems(); - return importDataError; + importedItems.setItems(converter.getItems()); + fireEvent(ureq, StepsEvent.ACTIVATE_NEXT); } private static class ExampleMapper implements Mapper { diff --git a/src/main/java/org/olat/ims/qti21/questionimport/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/ims/qti21/questionimport/_i18n/LocalStrings_de.properties index c4bdb8bdc07..7b90d6b01b3 100644 --- a/src/main/java/org/olat/ims/qti21/questionimport/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/ims/qti21/questionimport/_i18n/LocalStrings_de.properties @@ -14,3 +14,4 @@ item.type.fib=$org.olat.ims.qti.editor\:item.type.fib item.type.kprim=$org.olat.ims.qti.editor\:item.type.kprim item.type.mc=$org.olat.ims.qti.editor\:item.type.mc item.type.sc=$org.olat.ims.qti.editor\:item.type.sc +error.at.line=Problem auf Zeile {0} diff --git a/src/main/java/org/olat/ims/qti21/questionimport/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/ims/qti21/questionimport/_i18n/LocalStrings_en.properties index 9dd0dabfd55..0373ba6cb21 100644 --- a/src/main/java/org/olat/ims/qti21/questionimport/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/ims/qti21/questionimport/_i18n/LocalStrings_en.properties @@ -13,4 +13,5 @@ item.type.essay=$org.olat.ims.qti.editor\:item.type.essay item.type.fib=$org.olat.ims.qti.editor\:item.type.fib item.type.kprim=$org.olat.ims.qti.editor\:item.type.kprim item.type.mc=$org.olat.ims.qti.editor\:item.type.mc -item.type.sc=$org.olat.ims.qti.editor\:item.type.sc \ No newline at end of file +item.type.sc=$org.olat.ims.qti.editor\:item.type.sc +error.at.line=Issue with line {0} \ No newline at end of file -- GitLab