diff options
author | Stephan Schwär | 2020-10-19 07:24:33 +0200 |
---|---|---|
committer | Stephan Schwär | 2020-10-19 07:24:33 +0200 |
commit | 553645f7beebbdc057e94bdaea9096d7e59a9729 (patch) | |
tree | c2b7d9938a63bd177d4d0f11116ff7ffc17e244d | |
parent | [client] Improve cancel handling and feedback to user (diff) | |
download | tutor-module-553645f7beebbdc057e94bdaea9096d7e59a9729.tar.gz tutor-module-553645f7beebbdc057e94bdaea9096d7e59a9729.tar.xz tutor-module-553645f7beebbdc057e94bdaea9096d7e59a9729.zip |
[client] Better handling of ovfTool not found exception
+ Code cleanup
-rw-r--r-- | dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageOvfConversionPage.java | 16 | ||||
-rw-r--r-- | dozentenmodul/src/main/java/org/openslx/dozmod/util/ConversionTaskWorker.java | 42 |
2 files changed, 37 insertions, 21 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 6e18244a..9417e62d 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 @@ -20,6 +20,11 @@ import org.openslx.dozmod.gui.wizard.layout.ImageOvfConversionPageLayout; import org.openslx.dozmod.state.UploadWizardState; import org.openslx.dozmod.util.ConversionTaskWorker; +/** + * Page for converting an ovf image into an vmx image. Creates a directory + * for the new vmx image, starts the conversion SwingWorker and shows the progress. + * Replaces the image description file in state after conversion. + */ @SuppressWarnings("serial") public class ImageOvfConversionPage extends ImageOvfConversionPageLayout { private final static Logger LOGGER = Logger.getLogger(ImageOvfConversionPage.class); @@ -82,7 +87,7 @@ public class ImageOvfConversionPage extends ImageOvfConversionPageLayout { danglingConversion = true; Files.createDirectories(directoryFile.toPath()); vmxFile = new File(directoryFile.getPath() + "/" + FilenameUtils.removeExtension((file.getName())) + ".vmx"); - worker = new ConversionTaskWorker(file, vmxFile, page); + worker = new ConversionTaskWorker(file, vmxFile, page, null); worker.execute(); state.convertedDescriptionFile = vmxFile; } @@ -92,10 +97,11 @@ public class ImageOvfConversionPage extends ImageOvfConversionPageLayout { int dialogButton = JOptionPane.YES_NO_OPTION; 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); + 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" 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 3e305e5f..e80e541c 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/util/ConversionTaskWorker.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/util/ConversionTaskWorker.java @@ -11,6 +11,8 @@ import java.util.concurrent.ExecutionException; import javax.swing.SwingWorker; import org.apache.log4j.Logger; +import org.openslx.dozmod.gui.Gui; +import org.openslx.dozmod.gui.helper.MessageType; import org.openslx.dozmod.gui.wizard.page.ImageOvfConversionPage; public class ConversionTaskWorker extends SwingWorker<Boolean, String> { @@ -21,33 +23,38 @@ public class ConversionTaskWorker extends SwingWorker<Boolean, String> { private ImageOvfConversionPage page; private Process process = null; private String conversionCancelledText = "Konvertierung abgebrochen!"; + private String ovfToolPath = "ovftool"; - public ConversionTaskWorker(File srcFile, File destFile, ImageOvfConversionPage page) { + /** + * Converts a given ovf and associated vmdk into an vmx and associated vmdk file + * via the vmWare ovftool Ovf images created with virtualBox are not supported. + * + * @param srcFile: Ovf source file + * @param destFile: Desired destination file + * @param page: Page that creates and starts the worker + * @param ovfToolPath: Path to the ovftool on the system + */ + public ConversionTaskWorker(File srcFile, File destFile, ImageOvfConversionPage page, String ovfToolPath) { this.srcFile = srcFile; this.destFile = destFile; this.page = page; + if (ovfToolPath != null) { + this.ovfToolPath = ovfToolPath; + } } @Override protected Boolean doInBackground() throws Exception { - try { - process = new ProcessBuilder("ovftool", srcFile.getAbsolutePath(), destFile.getAbsolutePath()).start(); - } catch (IOException e) { - return false; - } + process = new ProcessBuilder(ovfToolPath, srcFile.getAbsolutePath(), destFile.getAbsolutePath()).start(); + InputStream is = process.getInputStream(); InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); String line; LOGGER.info("Running OVFTool"); - try { - while ((line = br.readLine()) != null) { - LOGGER.debug(line); - publish(line); - } - } catch (IOException e) { - LOGGER.error(e); - + while ((line = br.readLine()) != null) { + LOGGER.debug(line); + publish(line); } return true; } @@ -55,8 +62,7 @@ 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. + // longer and override our cancelled notifications. if (isCancelled()) return; String progressText = chunks.get(chunks.size() - 1); @@ -68,6 +74,7 @@ public class ConversionTaskWorker extends SwingWorker<Boolean, String> { page.updateConversionProgressbar(progressInt); } catch (NumberFormatException e) { // We are only interested in integers for the progressbar + // should therefore be OK to discard the exceptions here. } } @@ -79,13 +86,16 @@ public class ConversionTaskWorker extends SwingWorker<Boolean, String> { page.danglingConversion = false; page.updateConversionProgressbar(100); } catch (InterruptedException e) { + LOGGER.debug("Conversion execution interrupted", e); process.destroy(); page.updateConversionProgressbarText(conversionCancelledText); } catch (CancellationException e) { + LOGGER.debug("Conversion execution Cancelled", e); process.destroy(); page.updateConversionProgressbarText(conversionCancelledText); } catch (ExecutionException e) { e.printStackTrace(); + Gui.showMessageBox(page, "Beim konvertieren ist ein Fehler aufgetreten.", MessageType.ERROR, LOGGER, e); } super.done(); } |