blob: 9417e62d63f07e0ceb44f81206e53e6299000b58 (
plain) (
tree)
|
|
package org.openslx.dozmod.gui.wizard.page;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import javax.swing.JOptionPane;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.FilenameUtils;
import org.apache.log4j.Logger;
import org.openslx.dozmod.gui.Gui;
import org.openslx.dozmod.gui.helper.MessageType;
import org.openslx.dozmod.gui.wizard.Wizard;
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);
private UploadWizardState state;
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);
setPageComplete(false);
this.canComeBack = false;
this.state = uploadWizardState;
page = this;
txtInfoText.setVisible(true);
// Start the conversion
btnStartConversion.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (worker == null) {
try {
updateConversionProgressbar(0);
btnStartConversion.setText("Konvertierung abbrechen");
convertOvfToVmx(state.descriptionFile);
} catch (Exception error) {
btnStartConversion.setEnabled(false);
Gui.showMessageBox(page, "Konvertierung fehlgeschlagen:", MessageType.ERROR, LOGGER, error);
}
} else {
page.cancelConversionWorker();
}
}
});
}
public void cancelConversionWorker() {
if (worker != null) {
worker.cancel(true);
btnStartConversion.setText(startConversionButtonString);
worker = null;
}
}
// 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, null);
worker.execute();
state.convertedDescriptionFile = vmxFile;
}
private boolean askDeleteDirAndContinue(File directoryFile) throws IOException {
if (directoryFile.exists()) {
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);
} 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 false;
}
}
// Nothing to delete. Should be OK to continue
return true;
}
public void updateConversionProgressbar(int percent) {
conversionProgressBar.setValue(percent);
}
public void updateConversionProgressbarText(String text) {
conversionProgressBar.setString(text);
}
@Override
protected boolean wantNextOrFinish() {
return false;
}
@Override
protected void onPageEnter() {
updateConversionProgressbar(0);
updateConversionProgressbarText("");
btnStartConversion.setText(startConversionButtonString);
}
@Override
protected void onPageLeave() {
// 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();
}
}
|