diff --git a/src/main/java/org/olat/ims/qti/editor/QTIEditorMainController.java b/src/main/java/org/olat/ims/qti/editor/QTIEditorMainController.java index 8c306d36371f2f4ab416610304da312d22a33b0d..c5a1f2fd6822d97c3362c59c91769d96117fd1a2 100644 --- a/src/main/java/org/olat/ims/qti/editor/QTIEditorMainController.java +++ b/src/main/java/org/olat/ims/qti/editor/QTIEditorMainController.java @@ -34,6 +34,8 @@ import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Set; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; import org.olat.admin.quota.QuotaConstants; import org.olat.admin.quota.QuotaImpl; @@ -256,6 +258,7 @@ public class QTIEditorMainController extends MainLayoutBasicController implement private Set<String> deletableMediaFiles; private StepsMainRunController importTableWizard; private InsertNodeController moveCtrl, copyCtrl, insertCtrl; + private CountDownLatch exportLatch; @Autowired private UserManager userManager; @@ -1024,7 +1027,8 @@ public class QTIEditorMainController extends MainLayoutBasicController implement private void doExportDocx(UserRequest ureq) { AssessmentNode rootNode = (AssessmentNode)menuTreeModel.getRootNode(); VFSContainer editorContainer = qtiPackage.getBaseDir(); - MediaResource mr = new QTIWordExport(rootNode, editorContainer, getLocale(), "UTF-8"); + exportLatch = new CountDownLatch(1); + MediaResource mr = new QTIWordExport(rootNode, editorContainer, getLocale(), "UTF-8", exportLatch); ureq.getDispatchResult().setResultingMediaResource(mr); } @@ -1179,6 +1183,13 @@ public class QTIEditorMainController extends MainLayoutBasicController implement @Override public boolean requestForClose(UserRequest ureq) { // enter save/discard dialog if not already in it + if(exportLatch != null) { + try { + exportLatch.await(30, TimeUnit.SECONDS); + } catch (InterruptedException e) { + logError("", e); + } + } if (cmcExit == null) { exitVC = createVelocityContainer("exitDialog"); exitPanel = new Panel("exitPanel"); diff --git a/src/main/java/org/olat/ims/qti/export/QTIWordExport.java b/src/main/java/org/olat/ims/qti/export/QTIWordExport.java index 521cbd1c149963fcb570f024e19b2b6ed389bcb8..e1981cd539a2d7f22660756663911502541473a2 100644 --- a/src/main/java/org/olat/ims/qti/export/QTIWordExport.java +++ b/src/main/java/org/olat/ims/qti/export/QTIWordExport.java @@ -27,6 +27,7 @@ import java.util.Iterator; import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.concurrent.CountDownLatch; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; @@ -75,11 +76,14 @@ public class QTIWordExport implements MediaResource { private AssessmentNode rootNode; private VFSContainer mediaContainer; private Locale locale; + private final CountDownLatch latch; - public QTIWordExport(AssessmentNode rootNode, VFSContainer mediaContainer, Locale locale, String encoding) { + public QTIWordExport(AssessmentNode rootNode, VFSContainer mediaContainer, + Locale locale, String encoding, CountDownLatch latch) { this.encoding = encoding; this.locale = locale; this.rootNode = rootNode; + this.latch = latch; this.mediaContainer = mediaContainer; } @@ -145,6 +149,7 @@ public class QTIWordExport implements MediaResource { } catch (Exception e) { log.error("", e); } finally { + latch.countDown(); IOUtils.closeQuietly(zout); } }