/* IterateMethodAction.java created 2007-12-05 * */ package org.signalml.app.action.workspace; import java.awt.Window; import java.awt.event.ActionEvent; import org.apache.log4j.Logger; import static org.signalml.app.util.i18n.SvarogI18n._R; import org.signalml.app.method.ApplicationIterableMethodDescriptor; import org.signalml.app.method.ApplicationMethodDescriptor; import org.signalml.app.method.ApplicationMethodManager; import org.signalml.app.method.MethodConfigurer; import org.signalml.app.method.iterate.IterationSetupDescriptor; import org.signalml.app.method.iterate.IterationSetupDialog; 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.iterator.IterableMethod; import org.signalml.method.iterator.MethodIteratorData; import org.signalml.method.iterator.MethodIteratorMethod; import org.signalml.plugin.export.SignalMLException; import org.signalml.plugin.export.view.AbstractSignalMLAction; import org.signalml.task.LocalTask; import org.signalml.task.Task; /** IterateMethodAction * * * @author Michal Dobaczewski © 2007-2008 CC Otwarte Systemy Komputerowe Sp. z o.o. */ public class IterateMethodAction extends AbstractSignalMLAction { private static final long serialVersionUID = 1L; protected static final Logger logger = Logger.getLogger(IterateMethodAction.class); private ApplicationTaskManager taskManager; private ApplicationMethodManager methodManager; private IterableMethod method; private IterationSetupDialog iterationSetupDialog; private MethodIteratorMethod iteratorMethod; public IterateMethodAction(IterableMethod method, ApplicationMethodManager methodManager) { this.method = method; this.methodManager = methodManager; String name = null; String iconPath = null; String iterationIconPath = null; ApplicationMethodDescriptor anyDescr = methodManager.getMethodData(method); ApplicationIterableMethodDescriptor descriptor = null; if (anyDescr instanceof ApplicationIterableMethodDescriptor) { descriptor = (ApplicationIterableMethodDescriptor) anyDescr; } if (descriptor != null) { name = descriptor.getIterationName(); iterationIconPath = descriptor.getIterationIconPath(); iconPath = descriptor.getIconPath(); } if (name != null && !name.isEmpty()) { setText(name); } else { setText(_R("Iterate method {0}", method.getName())); } if (iterationIconPath != null && !iterationIconPath.isEmpty()) { setIconPath(iterationIconPath); } else { if (iconPath != null && !iconPath.isEmpty()) { setIconPath(iconPath); } else { setIconPath("org/signalml/app/icon/iteratemethod.png"); } } iteratorMethod = new MethodIteratorMethod(method); } @Override public void actionPerformed(ActionEvent ev) { logger.debug("Iterate 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; } } MethodIteratorData iteratorData = (MethodIteratorData) iteratorMethod.createData(); iteratorData.setSubjectMethodData(data); IterationSetupDescriptor iterationDescriptor = new IterationSetupDescriptor(); iterationDescriptor.setMethod(method); iterationDescriptor.setData(iteratorData); boolean ok = iterationSetupDialog.showDialog(iterationDescriptor, true); if (!ok) { return; } Task task = new LocalTask(iteratorMethod, iteratorData, true); taskManager.addTask(task); TaskStatusDialog dialog = taskManager.getStatusDialogForTask(task); dialog.showDialog(true); taskManager.startTask(task); } public Method getMethod() { return method; } public ApplicationTaskManager getTaskManager() { return taskManager; } public void setTaskManager(ApplicationTaskManager taskManager) { this.taskManager = taskManager; } public ApplicationMethodManager getMethodManager() { return methodManager; } public MethodIteratorMethod getIteratorMethod() { return iteratorMethod; } public IterationSetupDialog getIterationSetupDialog() { return iterationSetupDialog; } public void setIterationSetupDialog(IterationSetupDialog iterationSetupDialog) { this.iterationSetupDialog = iterationSetupDialog; } }