package org.signalml.app.action.document;
import static org.signalml.app.util.i18n.SvarogI18n._;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.File;
import java.io.IOException;
import org.apache.log4j.Logger;
import org.signalml.app.document.DocumentFlowIntegrator;
import org.signalml.app.document.ManagedDocumentType;
import org.signalml.app.document.MonitorSignalDocument;
import org.signalml.app.document.signal.SignalDocument;
import org.signalml.app.model.document.OpenDocumentDescriptor;
import org.signalml.app.model.document.OpenTagDescriptor;
import org.signalml.app.view.document.opensignal.OpenSignalWizardDialog;
import org.signalml.app.worker.monitor.MonitorWorker;
import org.signalml.plugin.export.SignalMLException;
import org.signalml.plugin.export.view.AbstractSignalMLAction;
import org.signalml.util.Util;
public class OpenSignalWizardAction extends AbstractSignalMLAction implements PropertyChangeListener {
protected static final Logger logger = Logger.getLogger(OpenSignalWizardAction.class);
private DocumentFlowIntegrator documentFlowIntegrator;
private OpenSignalWizardDialog openSignalWizardDialog;
private OpenDocumentDescriptor openDocumentDescriptor;
private SignalDocument signalDocument;
/**
* Constructor.
* @param viewerElementManager ViewerElementManager to be used by
* this action.
*/
public OpenSignalWizardAction(DocumentFlowIntegrator documentFlowIntegrator) {
super();
this.documentFlowIntegrator = documentFlowIntegrator;
setText(_("Open signal"));
setIconPath("org/signalml/app/icon/fileopen.png");
setToolTip(_("Open signal and set montage for it"));
setMnemonic(KeyEvent.VK_O);
}
public void setOpenSignalWizardDialog(OpenSignalWizardDialog openSignalWizardDialog) {
this.openSignalWizardDialog = openSignalWizardDialog;
}
@Override
public void actionPerformed(ActionEvent arg0) {
openDocumentDescriptor = new OpenDocumentDescriptor();
boolean ok = openSignalWizardDialog.showDialog(openDocumentDescriptor, true);
if (!ok) {
return;
}
openDocumentDescriptor.getOpenSignalDescriptor();
signalDocument = (SignalDocument) documentFlowIntegrator.maybeOpenDocument(openDocumentDescriptor);
if (signalDocument instanceof MonitorSignalDocument) {
MonitorSignalDocument monitorSignalDocument = (MonitorSignalDocument) signalDocument;
MonitorWorker monitorWorker = monitorSignalDocument.getMonitorWorker();
monitorWorker.addPropertyChangeListener(this);
} else if (openDocumentDescriptor.getOpenSignalDescriptor().isTryToOpenTagDocument()) {
//for non-monitors
tryToOpenTagDocument();
}
}
/**
* Tries to open a tag document with the name equal to the signal document
* file name but with tag document extension.
*/
protected void tryToOpenTagDocument() {
File signalFile = openDocumentDescriptor.getFile();
File tagFile = null;
boolean tagFileExists = false;
for (String ext: ManagedDocumentType.TAG.getAllFileExtensions()) {
tagFile = Util.changeOrAddFileExtension(signalFile, ext);
if (tagFile.exists()) {
tagFileExists = true;
break;
}
}
if (!tagFileExists)
return;
OpenDocumentDescriptor tagDocumentDescriptor = new OpenDocumentDescriptor();
tagDocumentDescriptor.setType(ManagedDocumentType.TAG);
tagDocumentDescriptor.setFile(tagFile);
OpenTagDescriptor openTagDescriptor = new OpenTagDescriptor();
openTagDescriptor.setParent(signalDocument);
tagDocumentDescriptor.setTagOptions(openTagDescriptor);
documentFlowIntegrator.maybeOpenDocument(tagDocumentDescriptor);
}
@Override
public void propertyChange(PropertyChangeEvent evt) {
if (signalDocument != null && MonitorWorker.OPENING_MONITOR_CANCELLED.equals(evt.getPropertyName())) {
try {
documentFlowIntegrator.closeDocument(signalDocument, true, true);
} catch (IOException e) {
logger.error("", e);
} catch (SignalMLException e) {
logger.error("", e);
}
}
}
}