package org.signalml.plugin.method.helper;
import java.io.File;
import org.apache.log4j.Logger;
import org.signalml.app.config.preset.PresetManager;
import org.signalml.plugin.data.method.PluginMethodWithWorkDirConfiguration;
import org.signalml.plugin.export.view.AbstractPluginDialog;
public class PluginMethodWorkingDirConfigurer {
public interface PluginWorkingDirDialogGetter {
public AbstractPluginDialog getDialog();
}
protected static final Logger logger = Logger
.getLogger(PluginMethodWorkingDirConfigurer.class);
private PresetManager presetManager;
private PluginMethodWithWorkDirConfiguration defaultConfig;
private PluginWorkingDirDialogGetter dialogGetter;
private boolean firstRunFlag;
public PluginMethodWorkingDirConfigurer(PresetManager presetManager,
PluginMethodWithWorkDirConfiguration defaultConfig,
PluginWorkingDirDialogGetter dialogGetter) {
this.defaultConfig = defaultConfig;
this.presetManager = presetManager;
this.dialogGetter = dialogGetter;
this.firstRunFlag = true;
}
public File configureWorkDir() {
File workingDirectory = null;
String workingDirectoryPath;
boolean workingDirectoryOk = false;
boolean needsPreset = false;
PluginMethodWithWorkDirConfiguration config = null;
if (this.presetManager != null) {
try {
config = (PluginMethodWithWorkDirConfiguration) this.presetManager
.getPresetByName(this.defaultConfig.getName());
} catch (ClassCastException e) {
logger.warn("Incorrect config type", e);
}
}
if (config == null) {
config = this.defaultConfig;
needsPreset = true;
}
do {
workingDirectoryPath = config.getWorkingDirectoryPath();
if (workingDirectoryPath != null) {
workingDirectory = (new File(workingDirectoryPath))
.getAbsoluteFile();
if (workingDirectory.exists()) {
if (workingDirectory.isDirectory()
&& workingDirectory.canRead()
&& workingDirectory.canWrite()) {
workingDirectoryOk = true;
}
}
}
if (!workingDirectoryOk || this.firstRunFlag) {
if (!this.firstRunFlag) {
config.setWorkingDirectoryPath(null);
}
boolean ok = this.dialogGetter.getDialog().showDialog(config, true);
if (!ok) {
return null;
}
needsPreset = true;
}
this.firstRunFlag = false;
} while (!workingDirectoryOk);
if (needsPreset && this.presetManager != null) {
this.presetManager.setPreset(config);
}
return workingDirectory;
}
}