/* MP5MethodDescriptor.java created 2007-10-28
*
*/
package org.signalml.app.method.mp5;
import static org.signalml.app.util.i18n.SvarogI18n._;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import org.apache.log4j.Logger;
import org.signalml.app.document.MonitorSignalDocument;
import org.signalml.app.document.signal.SignalDocument;
import org.signalml.app.method.ApplicationMethodDescriptor;
import org.signalml.app.method.ApplicationMethodManager;
import org.signalml.app.method.ApplicationSerializableMethodDescriptor;
import org.signalml.app.method.MethodConfigurer;
import org.signalml.app.method.MethodPresetManager;
import org.signalml.app.method.MethodResultConsumer;
import org.signalml.app.view.common.dialogs.OptionPane;
import org.signalml.method.mp5.MP5Method;
import org.signalml.method.mp5.MP5Parameters;
import org.signalml.plugin.export.method.BaseMethodData;
import org.signalml.plugin.export.signal.Document;
/** MP5MethodDescriptor
*
*
* @author Michal Dobaczewski © 2007-2008 CC Otwarte Systemy Komputerowe Sp. z o.o.
*/
public class MP5MethodDescriptor implements ApplicationMethodDescriptor, ApplicationSerializableMethodDescriptor {
protected static final Logger logger = Logger.getLogger(MP5MethodDescriptor.class);
public static final String ICON_PATH = "org/signalml/app/icon/runmethod.png";
public static final String RUN_METHOD_STRING = _("MP decomposition");
private MP5Method method;
private MP5MethodDialog configurer;
private MP5MethodConsumer consumer;
private MethodPresetManager presetManager;
public MP5MethodDescriptor(MP5Method method) {
this.method = method;
}
@Override
public MP5Method getMethod() {
return method;
}
@Override
public String getName() {
return RUN_METHOD_STRING;
}
@Override
public String getIconPath() {
return ICON_PATH;
}
@Override
public MethodPresetManager getPresetManager(ApplicationMethodManager methodManager, boolean existingOnly) {
if (presetManager == null && !existingOnly) {
presetManager = new MethodPresetManager(method.getName(), MP5Parameters.class);
File profileDir = methodManager.getProfileDir();
presetManager.setStreamer(methodManager.getStreamer());
if (profileDir != null) {
presetManager.setProfileDir(profileDir);
try {
presetManager.readFromPersistence(null);
} catch (IOException ex) {
if (ex instanceof FileNotFoundException) {
logger.debug("Seems like mp5 preset configuration doesn't exist");
} else {
logger.error("Failed to read mp5 presets - presets lost", ex);
}
}
}
}
return presetManager;
}
@Override
public MethodConfigurer getConfigurer(ApplicationMethodManager methodManager) {
if (configurer == null) {
configurer = new MP5MethodDialog(getPresetManager(methodManager, false), methodManager.getDialogParent());
configurer.initialize(methodManager);
}
return configurer;
}
@Override
public MethodResultConsumer getConsumer(ApplicationMethodManager methodManager) {
if (consumer == null) {
consumer = new MP5MethodConsumer();
consumer.initialize(methodManager);
}
return consumer;
}
@Override
public BaseMethodData createData(ApplicationMethodManager methodManager) {
Document document = methodManager.getActionFocusManager().getActiveDocument();
if (!(document instanceof SignalDocument)) {
OptionPane.showNoActiveSignal(methodManager.getDialogParent());
return null;
}
if (document instanceof MonitorSignalDocument) {
OptionPane.showThisToolWorksOnlyForNonMonitorSignals(methodManager.getDialogParent());
return null;
}
SignalDocument signalDocument = (SignalDocument) document;
MP5ApplicationData data = new MP5ApplicationData();
data.setSignalDocument(signalDocument);
return data;
}
@Override
public Object createDeserializedData(ApplicationMethodManager methodManager) {
MP5ApplicationData data = new MP5ApplicationData();
return data;
}
}