diff --git a/src/main/java/org/olat/ims/qti21/ui/editor/AssessmentTestComposerController.java b/src/main/java/org/olat/ims/qti21/ui/editor/AssessmentTestComposerController.java index db26374cff6271e52d5e849333c310331f8805a0..c2fd46c03f8287fb439135a2af996dd25478ff58 100644 --- a/src/main/java/org/olat/ims/qti21/ui/editor/AssessmentTestComposerController.java +++ b/src/main/java/org/olat/ims/qti21/ui/editor/AssessmentTestComposerController.java @@ -164,7 +164,7 @@ public class AssessmentTestComposerController extends MainLayoutBasicController private SelectItemController selectQItemCtrl; private DialogBoxController confirmDeleteCtrl; private StepsMainRunController importTableWizard; - private final LayoutMain3ColsController columnLayoutCtr; + private LayoutMain3ColsController columnLayoutCtr; private File unzippedDirRoot; private VFSContainer unzippedContRoot; @@ -217,6 +217,12 @@ public class AssessmentTestComposerController extends MainLayoutBasicController } addLoggingResourceable(LoggingResourceable.wrapTest(testEntry)); + + if(!checkResolvedAssessmentTest()) { + VelocityContainer errorVC = createVelocityContainer("error"); + putInitialPanel(errorVC); + return; + } // test structure menuTree = new MenuTree("atTree"); @@ -354,6 +360,20 @@ public class AssessmentTestComposerController extends MainLayoutBasicController partEditorFactory(ureq, selectedNode); } + private boolean checkResolvedAssessmentTest() { + ResolvedAssessmentTest resolvedObject; + try { + resolvedObject = qtiService.loadAndResolveAssessmentTest(unzippedDirRoot, false, true); + if(resolvedObject == null) { + return false; + } + return resolvedObject.getRootNodeLookup().extractIfSuccessful() != null; + } catch (Exception e) { + logError("QTI 2.1 AssessmentTest is corrupted: " + testEntry, e); + return false; + } + } + private void updateTreeModel(boolean forceReload) { resolvedAssessmentTest = qtiService.loadAndResolveAssessmentTest(unzippedDirRoot, forceReload, true); menuTree.setTreeModel(new AssessmentTestEditorAndComposerTreeModel(resolvedAssessmentTest)); diff --git a/src/main/java/org/olat/ims/qti21/ui/editor/_content/error.html b/src/main/java/org/olat/ims/qti21/ui/editor/_content/error.html new file mode 100644 index 0000000000000000000000000000000000000000..2793c9fa15ba2524d63e03de200d662e442674b2 --- /dev/null +++ b/src/main/java/org/olat/ims/qti21/ui/editor/_content/error.html @@ -0,0 +1 @@ +<div class="o_error">$r.translate("error.assessment.test")</div> \ No newline at end of file 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 648dd81a5099340f0b3f5f19f8b351ac3aef3d1f..06af8155e964140a0b2c9fdc54acc7ab6755dcd6 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 @@ -24,6 +24,7 @@ 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. error.cannot.create.section=Sie k\u00F6nnen hier keine Sektion erstellen. error.cannot.delete=Sie d\u00FCrfen diese Ressource nicht l\u00F6schen. error.double=$org.olat.ims.qti21.ui\:error.double 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 fd79b4173be02f2aff8eb6fb5f247ceac34515ca..ff6d8a27d964e0c643111038b1356980c414b901 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 @@ -24,6 +24,7 @@ delete.testPart=Do you really want to delete the test part along with all its qu dy=dx editor.sc.title=Single choice editor.unkown.title=Unkown interaction +error.assessment.test=The file cannot be interpreted. It seems corrupted or with the wrong format. error.cannot.create.section=A section cannot be created everywhere\! error.cannot.delete=You cannot delete this object. error.double=$org.olat.ims.qti21.ui\:error.double diff --git a/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_fr.properties index cb5c9a2e179c6b2c317ee5bb059aa3b2fab8d19f..ddbd5473317bb8ddb573d6c10c08bdf502d4c289 100644 --- a/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_fr.properties +++ b/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_fr.properties @@ -10,6 +10,7 @@ delete.section=$org.olat.ims.qti.editor\:delete.section delete.testPart=Voulez-vous vraiment effacer cette partie du test et toutes les questions qu'elle contient? editor.sc.title=Choix simple editor.unkown.title=Interaction inconnue +error.assessment.test=Le fichier n'a pas pu \u00EAtre lu. Il semble soit corrompu soit au mauvais format. error.cannot.create.section=Vous ne pouvez pas cr\u00E9er une section ici. error.cannot.delete=Vous ne pouvez pas effacer cet \u00E9l\u00E9ment. error.double=$org.olat.ims.qti21.ui\:error.double