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 c08886894c27ed9b401f1f95ee03fcd5e0ead445..9da7d24c93378ab980c8f8a0fb4ffe4037e422af 100644 --- a/src/main/java/org/olat/ims/qti21/questionimport/CSVToAssessmentItemConverter.java +++ b/src/main/java/org/olat/ims/qti21/questionimport/CSVToAssessmentItemConverter.java @@ -184,6 +184,7 @@ public class CSVToAssessmentItemConverter { case "language": processLanguage(parts); break; case "durchschnittliche bearbeitungszeit": case "typical learning time": processTypicalLearningTime(parts); break; + case "required grading time": processCorrectionTime(parts); break; case "itemschwierigkeit": case "difficulty index": processDifficultyIndex(parts); break; case "standardabweichung itemschwierigkeit": @@ -229,6 +230,19 @@ public class CSVToAssessmentItemConverter { } } + private void processCorrectionTime(String[] parts) { + if(currentItem == null || parts.length < 2) return; + + String time = parts[1]; + if(StringHelper.containsNonWhitespace(time) && StringHelper.isLong(time.trim())) { + try { + currentItem.setCorrectionTime(Integer.valueOf(time.trim())); + } catch (NumberFormatException e) { + log.error("Cannot parse correction time: {}", time, e); + } + } + } + private void processLicense(String[] parts) { if(currentItem == null || parts.length < 2) return; diff --git a/src/main/java/org/olat/modules/qpool/ui/metadata/MetadataBulkChangeController.java b/src/main/java/org/olat/modules/qpool/ui/metadata/MetadataBulkChangeController.java index 1298dcc3152c5eebab0874e5b326a631ab74c089..766f8d0d7418356e19b4262ba8a69f190c6df797 100644 --- a/src/main/java/org/olat/modules/qpool/ui/metadata/MetadataBulkChangeController.java +++ b/src/main/java/org/olat/modules/qpool/ui/metadata/MetadataBulkChangeController.java @@ -22,6 +22,7 @@ package org.olat.modules.qpool.ui.metadata; import static org.olat.modules.qpool.ui.metadata.MetaUIFactory.toBigDecimal; import static org.olat.modules.qpool.ui.metadata.MetaUIFactory.toInt; import static org.olat.modules.qpool.ui.metadata.MetaUIFactory.validateBigDecimal; +import static org.olat.modules.qpool.ui.metadata.MetaUIFactory.validateInteger; import static org.olat.modules.qpool.ui.metadata.MetaUIFactory.validateElementLogic; import static org.olat.modules.qpool.ui.metadata.MetaUIFactory.validateSelection; @@ -84,7 +85,11 @@ public class MetadataBulkChangeController extends FormBasicController { private SingleSelection taxonomyLevelEl; private SingleSelection contextEl; private FormLayoutContainer learningTimeContainer; - private IntegerElement learningTimeDayElement, learningTimeHourElement, learningTimeMinuteElement, learningTimeSecondElement; + private IntegerElement learningTimeDayElement; + private IntegerElement learningTimeHourElement; + private IntegerElement learningTimeMinuteElement; + private IntegerElement learningTimeSecondElement; + private TextElement correctionTimeElement; private SingleSelection assessmentTypeEl; private TextElement difficultyEl, stdevDifficultyEl, differentiationEl, numAnswerAltEl; private SingleSelection licenseEl; @@ -216,6 +221,10 @@ public class MetadataBulkChangeController extends FormBasicController { learningTimeSecondElement = uifactory.addIntegerElement("learningTime.second", "", 0, learningTimeContainer); learningTimeSecondElement.setDisplaySize(3); + correctionTimeElement = uifactory.addTextElement("question.correctionTime", "question.correctionTime", 10, null, questionCont); + correctionTimeElement.setDisplaySize(4); + decorate(correctionTimeElement, questionCont); + difficultyEl = uifactory.addTextElement("question.difficulty", "question.difficulty", 10, null, questionCont); difficultyEl.setExampleKey("question.difficulty.example", null); difficultyEl.setDisplaySize(4); @@ -345,6 +354,8 @@ public class MetadataBulkChangeController extends FormBasicController { allOk &= validateBigDecimal(stdevDifficultyEl, 0.0d, 1.0d, true); allOk &= validateBigDecimal(differentiationEl, -1.0d, 1.0d, true); + allOk &= validateInteger(correctionTimeElement, 0, 1000, isEnabled(correctionTimeElement)); + //technical allOk &= validateElementLogic(versionEl, versionEl.getMaxLength(), false, isEnabled(versionEl)); allOk &= validateSelection(statusEl, isEnabled(statusEl)); @@ -422,14 +433,21 @@ public class MetadataBulkChangeController extends FormBasicController { itemImpl.setEducationalLearningTime(timeStr); } - if(isEnabled(difficultyEl)) + if(isEnabled(correctionTimeElement) && StringHelper.isLong(correctionTimeElement.getValue())) { + itemImpl.setCorrectionTime(Integer.valueOf(correctionTimeElement.getValue())); + } + if(isEnabled(difficultyEl)) { itemImpl.setDifficulty(toBigDecimal(difficultyEl.getValue())); - if(isEnabled(stdevDifficultyEl)) + } + if(isEnabled(stdevDifficultyEl)) { itemImpl.setStdevDifficulty(toBigDecimal(stdevDifficultyEl.getValue())); - if(isEnabled(differentiationEl)) + } + if(isEnabled(differentiationEl)) { itemImpl.setDifferentiation(toBigDecimal(differentiationEl.getValue())); - if(isEnabled(numAnswerAltEl)) + } + if(isEnabled(numAnswerAltEl)) { itemImpl.setNumOfAnswerAlternatives(toInt(numAnswerAltEl.getValue())); + } if(isEnabled(assessmentTypeEl)) { String assessmentType = assessmentTypeEl.isOneSelected() ? assessmentTypeEl.getSelectedKey() : null; itemImpl.setAssessmentType(assessmentType); diff --git a/src/main/resources/org/olat/ims/qti21/questionimport/qti-import-metadata.xlsx b/src/main/resources/org/olat/ims/qti21/questionimport/qti-import-metadata.xlsx index 63dad9ed9c7f57f4fd6e1d72ab7d67165f39eb12..4db14381072ffe20f7b2837dad66c864c6d7571e 100644 Binary files a/src/main/resources/org/olat/ims/qti21/questionimport/qti-import-metadata.xlsx and b/src/main/resources/org/olat/ims/qti21/questionimport/qti-import-metadata.xlsx differ