summaryrefslogtreecommitdiffstats
path: root/dozentenmodul/src/main/java/org/openslx/dozmod
diff options
context:
space:
mode:
authorStephan Schwär2020-10-16 09:05:24 +0200
committerStephan Schwär2020-10-16 09:05:24 +0200
commit0b9fb1a088faba8182cb841f64b9cc620b0b0f3d (patch)
treed7d44a0d7360b30e8f18f22e93e586344090d320 /dozentenmodul/src/main/java/org/openslx/dozmod
parent[client] Unset description file on conversion cancel (diff)
downloadtutor-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')
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageOvfConversionPage.java76
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageUploadPage.java3
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/util/ConversionTaskWorker.java16
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();