/* RunMethodAction.java created 2007-10-06
*
*/
package org.signalml.app.action;
import static org.signalml.app.util.i18n.SvarogI18n._;
import java.awt.Window;
import java.awt.event.ActionEvent;
import org.apache.log4j.Logger;
import org.signalml.app.method.ApplicationMethodDescriptor;
import org.signalml.app.method.ApplicationMethodManager;
import org.signalml.app.method.MethodConfigurer;
import org.signalml.app.task.ApplicationTaskManager;
import org.signalml.app.view.common.dialogs.TaskStatusDialog;
import org.signalml.app.view.common.dialogs.errors.Dialogs;
import org.signalml.method.Method;
import org.signalml.method.TrackableMethod;
import org.signalml.plugin.export.SignalMLException;
import org.signalml.plugin.export.view.AbstractSignalMLAction;
import org.signalml.task.LocalTask;
import org.signalml.task.Task;
/** RunMethodAction
*
*
* @author Michal Dobaczewski © 2007-2008 CC Otwarte Systemy Komputerowe Sp. z o.o.
*/
public class RunMethodAction extends AbstractSignalMLAction {
private static final long serialVersionUID = 1L;
protected static final Logger logger = Logger.getLogger(RunMethodAction.class);
private ApplicationTaskManager taskManager;
private ApplicationMethodManager methodManager;
private Method method;
public RunMethodAction(Method method, ApplicationMethodManager methodManager) {
this.method = method;
this.methodManager = methodManager;
String name = null;
String iconPath = null;
ApplicationMethodDescriptor descriptor = methodManager.getMethodData(method);
if (descriptor != null) {
name = descriptor.getName();
iconPath = descriptor.getIconPath();
}
if (name != null && !name.isEmpty()) {
setText(name);
} else {
setText(_("Run method {0}"));
}
if (iconPath != null && !iconPath.isEmpty()) {
setIconPath(iconPath);
} else {
setIconPath("org/signalml/app/icon/runmethod.png");
}
}
@Override
public void actionPerformed(ActionEvent ev) {
logger.debug("Run method [" + method.getName() + "]");
ApplicationMethodDescriptor descriptor = methodManager.getMethodData(method);
MethodConfigurer configurer = null;
Object data = null;
if (descriptor != null) {
configurer = descriptor.getConfigurer(methodManager);
data = descriptor.createData(methodManager);
if (data == null) {
logger.debug("Data creation aborted");
return;
}
}
if (data == null) {
data = method.createData();
}
if (configurer != null) {
try {
boolean configurationOk = configurer.configure(method, data);
if (!configurationOk) {
return;
}
} catch (SignalMLException ex) {
logger.error("Failed to configure method", ex);
Dialogs.showExceptionDialog((Window) null, ex);
return;
}
}
Task task = new LocalTask(method, data, (method instanceof TrackableMethod));
taskManager.addTask(task);
taskManager.startTask(task);
TaskStatusDialog dialog = taskManager.getStatusDialogForTask(task);
dialog.showDialog(true);
}
public Method getMethod() {
return method;
}
public ApplicationTaskManager getTaskManager() {
return taskManager;
}
public void setTaskManager(ApplicationTaskManager taskManager) {
this.taskManager = taskManager;
}
public ApplicationMethodManager getMethodManager() {
return methodManager;
}
}