From e2fa489202a3b2e2062d56376742a82b84b4cf1c Mon Sep 17 00:00:00 2001 From: srosse <none@none> Date: Wed, 30 Mar 2016 20:05:20 +0200 Subject: [PATCH] OO-1965: wait up-to 30 seconds that the export finished --- .../ims/qti/editor/QTIEditorMainController.java | 13 ++++++++++++- .../java/org/olat/ims/qti/export/QTIWordExport.java | 7 ++++++- 2 files changed, 18 insertions(+), 2 deletions(-) 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 8c306d36371..c5a1f2fd682 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 521cbd1c149..e1981cd539a 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); } } -- GitLab