diff options
author | Stephan Schwär | 2020-10-16 09:05:24 +0200 |
---|---|---|
committer | Stephan Schwär | 2020-10-16 09:05:24 +0200 |
commit | 0b9fb1a088faba8182cb841f64b9cc620b0b0f3d (patch) | |
tree | d7d44a0d7360b30e8f18f22e93e586344090d320 /dozentenmodul/src/main/java/org/openslx/dozmod | |
parent | [client] Unset description file on conversion cancel (diff) | |
download | tutor-module-0b9fb1a088faba8182cb841f64b9cc620b0b0f3d.tar.gz tutor-module-0b9fb1a088faba8182cb841f64b9cc620b0b0f3d.tar.xz tutor-module-0b9fb1a088faba8182cb841f64b9cc620b0b0f3d.zip |
[client] Improve cancel handling and feedback to user
- cancelled worker no longer overwrites progressbar text
- ask to delete temp directory of cancelled conversion when leavin page
Feature: #3771
Diffstat (limited to 'dozentenmodul/src/main/java/org/openslx/dozmod')
3 files changed, 68 insertions, 27 deletions
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageOvfConversionPage.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageOvfConversionPage.java index 084a6f22..6e18244a 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageOvfConversionPage.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageOvfConversionPage.java @@ -28,6 +28,8 @@ public class ImageOvfConversionPage extends ImageOvfConversionPageLayout { private ImageOvfConversionPage page; private File vmxFile; private ConversionTaskWorker worker; + private String startConversionButtonString = "Konvertierung starten"; + public boolean danglingConversion = false; public ImageOvfConversionPage(Wizard wizard, UploadWizardState uploadWizardState) { super(wizard); @@ -49,7 +51,7 @@ public class ImageOvfConversionPage extends ImageOvfConversionPageLayout { convertOvfToVmx(state.descriptionFile); } catch (Exception error) { btnStartConversion.setEnabled(false); - Gui.showMessageBox(page, "Conversion failed:", MessageType.ERROR, LOGGER, error); + Gui.showMessageBox(page, "Konvertierung fehlgeschlagen:", MessageType.ERROR, LOGGER, error); } } else { page.cancelConversionWorker(); @@ -62,37 +64,53 @@ public class ImageOvfConversionPage extends ImageOvfConversionPageLayout { public void cancelConversionWorker() { if (worker != null) { worker.cancel(true); - btnStartConversion.setText("Konvertierung starten"); - updateConversionProgressbarText("Konvertierung abgebrochen!"); + btnStartConversion.setText(startConversionButtonString); worker = null; } } - // Check if the directory we want to create for the converted virtual machine exists and create it + // Check if the directory we want to create for the converted virtual machine + // exists and create it private void convertOvfToVmx(File file) throws IOException { File directoryFile = new File(file.getParent() + "/converted_vm"); LOGGER.debug("Directory for converted VM:" + directoryFile.getAbsolutePath()); + // Cancel if user clicks cancel + if (directoryFile.exists() && !askDeleteDirAndContinue(directoryFile)) { + btnStartConversion.setText(startConversionButtonString); + return; + } + danglingConversion = true; + Files.createDirectories(directoryFile.toPath()); + vmxFile = new File(directoryFile.getPath() + "/" + FilenameUtils.removeExtension((file.getName())) + ".vmx"); + worker = new ConversionTaskWorker(file, vmxFile, page); + worker.execute(); + state.convertedDescriptionFile = vmxFile; + } + + private boolean askDeleteDirAndContinue(File directoryFile) throws IOException { if (directoryFile.exists()) { int dialogButton = JOptionPane.YES_NO_OPTION; - int dialogResult = JOptionPane.showConfirmDialog(this, - "Das Verzeichnis, in welcher das konvertierte Image gespeichert werden soll existiert bereits. \n" - + "Soll dieses ersetzt und die darin enthaltenen Dateien gelöscht werden?", - "Teststring", dialogButton); + int dialogResult; + if (danglingConversion) { + dialogResult = JOptionPane.showConfirmDialog(this, + "Für die abgebrochene Konvertierung wurde ein Verzeichnis erstellt.\n" + + "Soll dieses und dessen Inhalt wieder entfernt werden?", + "Teststring", dialogButton); + } else { + dialogResult = JOptionPane.showConfirmDialog(this, + "Das Verzeichnis, in welcher das konvertierte Image gespeichert werden soll existiert bereits. \n" + + "Soll dieses ersetzt und die darin enthaltenen Dateien gelöscht werden?", + "Teststring", dialogButton); + } if (dialogResult == 0) { FileUtils.deleteDirectory(directoryFile); + return true; } else { - return; + return false; } - } - Files.createDirectories(directoryFile.toPath()); - vmxFile = new File( - directoryFile.getPath() + "/" + FilenameUtils.removeExtension((file.getName())) + ".vmx"); - worker = new ConversionTaskWorker(file, vmxFile, page); - - worker.execute(); - state.convertedDescriptionFile = vmxFile; - + // Nothing to delete. Should be OK to continue + return true; } public void updateConversionProgressbar(int percent) { @@ -109,9 +127,27 @@ public class ImageOvfConversionPage extends ImageOvfConversionPageLayout { } @Override + protected void onPageEnter() { + updateConversionProgressbar(0); + updateConversionProgressbarText(""); + btnStartConversion.setText(startConversionButtonString); + } + + @Override protected void onPageLeave() { - page.cancelConversionWorker(); - state.convertedDescriptionFile = null; + // Make sure the worker is stopped when leaving the page. + if (wizard.isCancelled() || danglingConversion) { + page.cancelConversionWorker(); + if (state.convertedDescriptionFile != null) { + try { + askDeleteDirAndContinue(state.convertedDescriptionFile.getParentFile()); + } catch (IOException e) { + LOGGER.debug(e); + } + } + state.convertedDescriptionFile = null; + danglingConversion = false; + } super.onPageLeave(); } diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageUploadPage.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageUploadPage.java index 0e203545..df485907 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageUploadPage.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageUploadPage.java @@ -141,7 +141,7 @@ public class ImageUploadPage extends ImageUploadPageLayout { return; } - // If the description file is an ovf file, we can end here to be able to skip to conversion. + // if the description file is an ovf file, we can end here and jump to the conversion page if (state.meta instanceof OvfMetaData) { int dialogButton = JOptionPane.YES_NO_OPTION; int dialogResult = JOptionPane.showConfirmDialog(this, @@ -156,7 +156,6 @@ public class ImageUploadPage extends ImageUploadPageLayout { state.descriptionFile = file; setErrorMessage(null); setDescription("Im nächsten Schritt wird die Konvertierung gestartet."); - // setPageComplete(true); wizard.showOutOfOrderPage(state.conversionPage); return; } else { diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/util/ConversionTaskWorker.java b/dozentenmodul/src/main/java/org/openslx/dozmod/util/ConversionTaskWorker.java index a5a4fa77..3e305e5f 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/util/ConversionTaskWorker.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/util/ConversionTaskWorker.java @@ -19,7 +19,8 @@ public class ConversionTaskWorker extends SwingWorker<Boolean, String> { private File srcFile; private File destFile; private ImageOvfConversionPage page; - Process process = null; + private Process process = null; + private String conversionCancelledText = "Konvertierung abgebrochen!"; public ConversionTaskWorker(File srcFile, File destFile, ImageOvfConversionPage page) { this.srcFile = srcFile; @@ -30,8 +31,7 @@ public class ConversionTaskWorker extends SwingWorker<Boolean, String> { @Override protected Boolean doInBackground() throws Exception { try { - process = new ProcessBuilder("ovftool", srcFile.getAbsolutePath(), destFile.getAbsolutePath()) - .start(); + process = new ProcessBuilder("ovftool", srcFile.getAbsolutePath(), destFile.getAbsolutePath()).start(); } catch (IOException e) { return false; } @@ -54,6 +54,11 @@ public class ConversionTaskWorker extends SwingWorker<Boolean, String> { @Override protected void process(List<String> chunks) { + // Don't update the gui progress bar and text if cancelled as this thread my run + // longer + // and override our cancelled notifications. + if (isCancelled()) + return; String progressText = chunks.get(chunks.size() - 1); page.updateConversionProgressbarText(progressText); progressText = progressText.replaceAll("[^\\d]", ""); @@ -71,14 +76,15 @@ public class ConversionTaskWorker extends SwingWorker<Boolean, String> { try { get(); page.setPageComplete(true); + page.danglingConversion = false; page.updateConversionProgressbar(100); } catch (InterruptedException e) { - // TODO Auto-generated catch block process.destroy(); + page.updateConversionProgressbarText(conversionCancelledText); } catch (CancellationException e) { process.destroy(); + page.updateConversionProgressbarText(conversionCancelledText); } catch (ExecutionException e) { - // TODO Auto-generated catch block e.printStackTrace(); } super.done(); |