/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.gui.workflow.executor.properties;
import java.io.File;
import java.io.IOException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.eclipse.ui.PartInitException;
import de.rcenvironment.core.gui.utils.common.EditorsHelper;
import de.rcenvironment.core.utils.common.TempFileServiceAccess;
import de.rcenvironment.core.utils.common.legacy.FileEncodingUtils;
/**
* Opens file for scripting and load content of configuration if there is already some script stuff.
*
* @author Doreen Seider
*/
public abstract class AbstractEditScriptRunnable implements Runnable {
private static final Log LOGGER = LogFactory.getLog(AbstractEditScriptRunnable.class);
private File tempFile;
@Override
public void run() {
try {
tempFile = TempFileServiceAccess.getInstance()
.createTempFileWithFixedFilename(getScriptName());
// if script content already exist, load it to temp file
if (getScript() != null) {
FileEncodingUtils.saveUnicodeStringToFile(getScript(), tempFile);
}
EditorsHelper.openExternalFileInEditor(tempFile, new Runnable[] {
new Runnable() {
@Override
public void run() {
try {
// save new tempFile in component's configuration
setScript(FileEncodingUtils.loadUnicodeStringFromFile(tempFile));
} catch (final IOException e) {
LOGGER.error(e);
}
}
}
});
} catch (final IOException e) {
LOGGER.error(e);
} catch (final PartInitException e) {
LOGGER.error(e);
}
}
/**
* @param script to update in the editor view
*/
public void update(String script) {
try {
String current = FileEncodingUtils.loadUnicodeStringFromFile(tempFile);
if (!current.equals(script)) {
FileEncodingUtils.saveUnicodeStringToFile(script, tempFile);
}
} catch (IOException e) {
LOGGER.error(e);
}
}
protected abstract String getScriptName();
protected abstract void setScript(String script);
protected abstract String getScript();
}