diff --git a/src/main/java/org/olat/ims/qti21/model/xml/interactions/HotspotAssessmentItemBuilder.java b/src/main/java/org/olat/ims/qti21/model/xml/interactions/HotspotAssessmentItemBuilder.java index 14a62d3130e3a29b7177e59b68779a547ba2602b..def355e230e9c97e3484231da07ff1a6aa10b59d 100644 --- a/src/main/java/org/olat/ims/qti21/model/xml/interactions/HotspotAssessmentItemBuilder.java +++ b/src/main/java/org/olat/ims/qti21/model/xml/interactions/HotspotAssessmentItemBuilder.java @@ -147,12 +147,12 @@ public class HotspotAssessmentItemBuilder extends AssessmentItemBuilder { private void extractCorrectAnswers() { correctAnswers = new ArrayList<>(5); - - List<ResponseDeclaration> responseDeclarations = assessmentItem.getResponseDeclarations(); - if(responseDeclarations.size() == 1) { - ResponseDeclaration responseDeclaration = responseDeclarations.get(0); - CorrectResponse correctResponse = responseDeclaration.getCorrectResponse(); - if(correctResponse != null) { + + if(hotspotInteraction != null) { + ResponseDeclaration responseDeclaration = assessmentItem + .getResponseDeclaration(hotspotInteraction.getResponseIdentifier()); + if(responseDeclaration != null && responseDeclaration.getCorrectResponse() != null) { + CorrectResponse correctResponse = responseDeclaration.getCorrectResponse(); extractIdentifiersFromCorrectResponse(correctResponse, correctAnswers); } } diff --git a/src/main/java/org/olat/ims/qti21/model/xml/interactions/KPrimAssessmentItemBuilder.java b/src/main/java/org/olat/ims/qti21/model/xml/interactions/KPrimAssessmentItemBuilder.java index 3bea3fdadb3eebe91f4ce703d8c3aabd437b295b..d1939050c91f4e95ed9631d61f14b05e75a1c63e 100644 --- a/src/main/java/org/olat/ims/qti21/model/xml/interactions/KPrimAssessmentItemBuilder.java +++ b/src/main/java/org/olat/ims/qti21/model/xml/interactions/KPrimAssessmentItemBuilder.java @@ -128,8 +128,8 @@ public class KPrimAssessmentItemBuilder extends AssessmentItemBuilder { @Override public void extract() { super.extract(); - extractCorrectResponse(); extractMatchInteraction(); + extractCorrectResponse(); if(getMinScoreBuilder() == null) { setMinScore(0.0d); @@ -141,11 +141,12 @@ public class KPrimAssessmentItemBuilder extends AssessmentItemBuilder { private void extractCorrectResponse() { associations = new HashMap<>(); - - List<ResponseDeclaration> responseDeclarations = assessmentItem.getResponseDeclarations(); - if(responseDeclarations.size() == 1) { - CorrectResponse correctResponse = responseDeclarations.get(0).getCorrectResponse(); - if(correctResponse != null) { + + if(matchInteraction != null) { + ResponseDeclaration responseDeclaration = assessmentItem + .getResponseDeclaration(matchInteraction.getResponseIdentifier()); + if(responseDeclaration != null && responseDeclaration.getCorrectResponse() != null) { + CorrectResponse correctResponse = responseDeclaration.getCorrectResponse(); List<FieldValue> values = correctResponse.getFieldValues(); for(FieldValue value:values) { SingleValue sValue = value.getSingleValue(); diff --git a/src/main/java/org/olat/ims/qti21/model/xml/interactions/MatchAssessmentItemBuilder.java b/src/main/java/org/olat/ims/qti21/model/xml/interactions/MatchAssessmentItemBuilder.java index 3f883bcee1d200cce455e66da65e1c312bb49a43..f72052fc2b50056368213677ee72ffaa486021aa 100644 --- a/src/main/java/org/olat/ims/qti21/model/xml/interactions/MatchAssessmentItemBuilder.java +++ b/src/main/java/org/olat/ims/qti21/model/xml/interactions/MatchAssessmentItemBuilder.java @@ -129,8 +129,8 @@ public class MatchAssessmentItemBuilder extends AssessmentItemBuilder { @Override public void extract() { super.extract(); - extractCorrectResponse(); extractMatchInteraction(); + extractCorrectResponse(); extractScoreEvaluationMode(); extractSingleChoice(); @@ -169,11 +169,13 @@ public class MatchAssessmentItemBuilder extends AssessmentItemBuilder { private void extractCorrectResponse() { associations = new HashMap<>(); - - List<ResponseDeclaration> responseDeclarations = assessmentItem.getResponseDeclarations(); - if(responseDeclarations.size() == 1) { - CorrectResponse correctResponse = responseDeclarations.get(0).getCorrectResponse(); - if(correctResponse != null) { + + if(matchInteraction != null) { + ResponseDeclaration responseDeclaration = assessmentItem + .getResponseDeclaration(matchInteraction.getResponseIdentifier()); + + if(responseDeclaration != null && responseDeclaration.getCorrectResponse() != null) { + CorrectResponse correctResponse = responseDeclaration.getCorrectResponse(); List<FieldValue> values = correctResponse.getFieldValues(); for(FieldValue value:values) { SingleValue sValue = value.getSingleValue(); diff --git a/src/main/java/org/olat/ims/qti21/model/xml/interactions/MultipleChoiceAssessmentItemBuilder.java b/src/main/java/org/olat/ims/qti21/model/xml/interactions/MultipleChoiceAssessmentItemBuilder.java index 4815455713a37a9edd3f217c8857ef2348e63ea8..1e85868e0cf9748bbe581ec4c99150865f07af76 100644 --- a/src/main/java/org/olat/ims/qti21/model/xml/interactions/MultipleChoiceAssessmentItemBuilder.java +++ b/src/main/java/org/olat/ims/qti21/model/xml/interactions/MultipleChoiceAssessmentItemBuilder.java @@ -124,10 +124,11 @@ public class MultipleChoiceAssessmentItemBuilder extends SimpleChoiceAssessmentI correctAnswers = new ArrayList<>(5); - List<ResponseDeclaration> responseDeclarations = assessmentItem.getResponseDeclarations(); - if(responseDeclarations.size() == 1) { - CorrectResponse correctResponse = responseDeclarations.get(0).getCorrectResponse(); - if(correctResponse != null) { + if(choiceInteraction != null) { + ResponseDeclaration responseDeclaration = assessmentItem + .getResponseDeclaration(choiceInteraction.getResponseIdentifier()); + if(responseDeclaration != null && responseDeclaration.getCorrectResponse() != null) { + CorrectResponse correctResponse = responseDeclaration.getCorrectResponse(); Value value = FieldValue.computeValue(Cardinality.MULTIPLE, correctResponse.getFieldValues()); if(value instanceof MultipleValue) { MultipleValue multiValue = (MultipleValue)value; diff --git a/src/main/java/org/olat/ims/qti21/model/xml/interactions/SingleChoiceAssessmentItemBuilder.java b/src/main/java/org/olat/ims/qti21/model/xml/interactions/SingleChoiceAssessmentItemBuilder.java index 181e51a75425cbde973bea9e0dcf9d1542baccc3..959cfc9ca6c25316973dda6b83feebe0f480b3d9 100644 --- a/src/main/java/org/olat/ims/qti21/model/xml/interactions/SingleChoiceAssessmentItemBuilder.java +++ b/src/main/java/org/olat/ims/qti21/model/xml/interactions/SingleChoiceAssessmentItemBuilder.java @@ -114,15 +114,13 @@ public class SingleChoiceAssessmentItemBuilder extends SimpleChoiceAssessmentIte if(choiceInteraction != null) { ResponseDeclaration responseDeclaration = assessmentItem.getResponseDeclaration(choiceInteraction.getResponseIdentifier()); - if(responseDeclaration != null) { + if(responseDeclaration != null && responseDeclaration.getCorrectResponse() != null) { CorrectResponse correctResponse = responseDeclaration.getCorrectResponse(); - if(correctResponse != null) { - List<FieldValue> values = correctResponse.getFieldValues(); - Value value = FieldValue.computeValue(Cardinality.SINGLE, values); - if(value instanceof IdentifierValue) { - IdentifierValue identifierValue = (IdentifierValue)value; - correctAnswer = identifierValue.identifierValue(); - } + List<FieldValue> values = correctResponse.getFieldValues(); + Value value = FieldValue.computeValue(Cardinality.SINGLE, values); + if(value instanceof IdentifierValue) { + IdentifierValue identifierValue = (IdentifierValue)value; + correctAnswer = identifierValue.identifierValue(); } } } diff --git a/src/main/java/org/olat/ims/qti21/pool/QTI12To21Converter.java b/src/main/java/org/olat/ims/qti21/pool/QTI12To21Converter.java index b1f219519a4cfb95e740795b9388b10c64a24e83..d0591ad2e73892c28326f932546a2933ac1c9e1f 100644 --- a/src/main/java/org/olat/ims/qti21/pool/QTI12To21Converter.java +++ b/src/main/java/org/olat/ims/qti21/pool/QTI12To21Converter.java @@ -35,14 +35,17 @@ import java.util.Set; import org.apache.commons.lang.StringEscapeUtils; import org.cyberneko.html.parsers.SAXParser; import org.olat.core.CoreSpringFactory; +import org.olat.core.gui.translator.Translator; import org.olat.core.helpers.Settings; import org.olat.core.logging.OLog; import org.olat.core.logging.Tracing; import org.olat.core.util.FileUtils; import org.olat.core.util.StringHelper; +import org.olat.core.util.Util; import org.olat.core.util.vfs.VFSContainer; import org.olat.core.util.vfs.VFSItem; import org.olat.core.util.vfs.VFSLeaf; +import org.olat.ims.qti.QTIModule; import org.olat.ims.qti.editor.QTIEditHelper; import org.olat.ims.qti.editor.QTIEditorPackage; import org.olat.ims.qti.editor.beecom.objects.Assessment; @@ -604,6 +607,8 @@ public class QTI12To21Converter { String hintText = question.getHintText(); if(StringHelper.containsNonWhitespace(hintText)) { ModalFeedbackBuilder hint = itemBuilder.createHint(); + Translator translator = Util.createPackageTranslator(QTIModule.class, locale); + hint.setTitle(translator.translate("render.hint")); hint.setText(hintText); } diff --git a/src/main/java/org/olat/modules/portfolio/ui/PageListDataModel.java b/src/main/java/org/olat/modules/portfolio/ui/PageListDataModel.java index 94981638d628980e9f64f12c18bb0ddb34b9ab23..dd9221783887a09e6bc88ae9d6df0af3b61b7b83 100644 --- a/src/main/java/org/olat/modules/portfolio/ui/PageListDataModel.java +++ b/src/main/java/org/olat/modules/portfolio/ui/PageListDataModel.java @@ -89,7 +89,7 @@ public class PageListDataModel extends DefaultFlexiTableDataModel<PortfolioEleme row.setNewEntry(false); } if(row.isAssignmentToInstantiate()) { - if(previousRow.isSection()) { + if(previousRow != null && previousRow.isSection()) { previousRow.setSectionWithAssignmentToInstantiate(true); } }