/* StagerMethodConfigurer.java created 2007-11-02 * */ package org.signalml.plugin.newstager.method; import java.awt.Window; import java.io.File; import org.apache.log4j.Logger; import org.signalml.app.config.preset.PresetManager; import org.signalml.app.method.PresetEquippedMethodConfigurer; import org.signalml.app.view.common.dialogs.OptionPane; import org.signalml.method.Method; import org.signalml.plugin.export.SignalMLException; import org.signalml.plugin.export.SvarogAccess; import org.signalml.plugin.export.method.SvarogMethodConfigurer; import org.signalml.plugin.export.signal.ExportedSignalDocument; import org.signalml.plugin.export.view.AbstractPluginDialog; import org.signalml.plugin.export.view.FileChooser; import org.signalml.plugin.export.view.SvarogAccessGUI; import org.signalml.plugin.method.IPluginMethodConfigurer; import org.signalml.plugin.method.PluginMethodManager; import org.signalml.plugin.method.helper.PluginMethodWorkingDirConfigurer; import org.signalml.plugin.newstager.data.NewStagerApplicationData; import org.signalml.plugin.newstager.data.NewStagerConfiguration; import org.signalml.plugin.newstager.ui.NewStagerMethodDialog; import org.signalml.plugin.newstager.ui.NewStagerToolConfigDialog; /** * StagerMethodConfigurer * * * @author Michal Dobaczewski © 2007-2008 CC Otwarte Systemy Komputerowe * Sp. z o.o. */ public class NewStagerMethodConfigurer implements IPluginMethodConfigurer, SvarogMethodConfigurer, // FIXME PresetEquippedMethodConfigurer { protected static final Logger logger = Logger .getLogger(NewStagerMethodConfigurer.class); private FileChooser fileChooser; private NewStagerMethodDialog dialog; private PresetManager presetManager; private Window dialogParent; private NewStagerToolConfigDialog configDialog; private PluginMethodWorkingDirConfigurer workDirConfigurer; @Override public void initialize(PluginMethodManager manager) { SvarogAccess access = manager.getSvarogAccess(); SvarogAccessGUI guiAccess = access.getGUIAccess(); this.dialogParent = guiAccess.getDialogParent(); this.fileChooser = guiAccess.getFileChooser(); this.dialog = new NewStagerMethodDialog(this.presetManager, dialogParent); this.dialog.setFileChooser(this.fileChooser); this.workDirConfigurer = new PluginMethodWorkingDirConfigurer(this.presetManager, new NewStagerConfiguration(), new PluginMethodWorkingDirConfigurer.PluginWorkingDirDialogGetter() { @Override public AbstractPluginDialog getDialog() { if (configDialog == null) { configDialog = new NewStagerToolConfigDialog(dialogParent, true); configDialog.setFileChooser(fileChooser); } return configDialog; } }); } @Override public boolean configure(Method method, Object methodDataObj) throws SignalMLException { File workingDirectory = this.workDirConfigurer.configureWorkDir(); if (workingDirectory == null) { return false; } NewStagerApplicationData data = (NewStagerApplicationData) methodDataObj; ExportedSignalDocument signalDocument = data.getSignalDocument(); String name = signalDocument.getName(); int dotIdx = name.lastIndexOf('.'); if (dotIdx >= 0) { name = name.substring(0, dotIdx); } File projectDirectory = new File(workingDirectory, name); if (projectDirectory.exists()) { if (!projectDirectory.isDirectory()) { logger.warn("A file in stager working directory is conflicting with project [" + projectDirectory.getAbsolutePath() + "]"); OptionPane.showError(dialogParent, "error.stager.failedToCreateProjectDirectory"); return false; } int ans = OptionPane.showStagerProjectExists(dialogParent, name); if (ans == OptionPane.CANCEL_OPTION) { return false; } else if (ans == OptionPane.NO_OPTION) { File[] files = projectDirectory.listFiles(); boolean deleteOk; for (File f : files) { logger.info("Deleting file [" + f.getAbsolutePath() + "]"); deleteOk = f.delete(); if (!deleteOk) { logger.warn("Failed to delete file [" + f.getAbsolutePath() + "]"); OptionPane.showError(dialogParent, "error.stager.failedToClearProjectDirectory"); return false; } } } // on yes option do nothing } else { boolean createOk = projectDirectory.mkdirs(); if (!createOk) { OptionPane.showError(dialogParent, "error.stager.failedToCreateProjectDirectory"); return false; } } data.setProjectPath(workingDirectory.getAbsolutePath()); data.setPatientName(name); boolean dialogOk = this.dialog.showDialog(data, true); if (!dialogOk) { return false; } return true; } @Override public void setPresetManager(PresetManager presetManager) { this.presetManager = presetManager; } }