/* EvokedPotentialMethodDialog.java created 2008-01-12 * */ package org.signalml.app.method.ep; import static org.signalml.app.util.i18n.SvarogI18n._; import java.awt.Window; import java.util.List; import javax.swing.JComponent; import javax.swing.JTabbedPane; import org.signalml.app.config.preset.Preset; import org.signalml.app.config.preset.PresetManager; import org.signalml.app.document.TagDocument; import org.signalml.app.document.signal.SignalDocument; import org.signalml.app.method.ep.view.ArtifactRejectionPanel; import org.signalml.app.method.ep.view.EvokedPotentialSettingsPanel; import org.signalml.app.method.ep.view.signalspace.ERPSignalSpacePanel; import org.signalml.app.method.ep.view.tags.TagStyleGroup; import org.signalml.app.model.components.validation.ValidationErrors; import org.signalml.app.util.IconUtils; import org.signalml.app.view.common.dialogs.AbstractPresetDialog; import org.signalml.app.view.signal.SignalView; import org.signalml.domain.signal.space.SignalSpace; import org.signalml.domain.signal.space.SignalSpaceConstraints; import org.signalml.method.ep.EvokedPotentialParameters; import org.signalml.plugin.export.SignalMLException; import org.signalml.plugin.export.view.FileChooser; /** EvokedPotentialMethodDialog * * * @author Michal Dobaczewski © 2007-2008 CC Otwarte Systemy Komputerowe Sp. z o.o. */ public class EvokedPotentialMethodDialog extends AbstractPresetDialog { private static final long serialVersionUID = 1L; public static final String ICON_PATH = "org/signalml/app/icon/runmethod.png"; private JTabbedPane tabbedPane; private ERPSignalSpacePanel signalSpacePanel; private EvokedPotentialSettingsPanel evokedPotentialSettingsPanel; private ArtifactRejectionPanel artifactRejectionPanel; public EvokedPotentialMethodDialog(PresetManager presetManager, Window w) { super(presetManager, w, true); } @Override protected void initialize() { setTitle(_("Evoked potential averaging configuration")); setIconImage(IconUtils.loadClassPathImage(ICON_PATH)); setResizable(false); super.initialize(); } @Override public JComponent createInterface() { tabbedPane = new JTabbedPane(); tabbedPane.add("Signal selection", getSignalSpacePanel()); tabbedPane.add("ERP settings", getEvokedPotentialSettingsPanel()); tabbedPane.add("Artifact rejection", getArtifactRejectionPanel()); return tabbedPane; } public ERPSignalSpacePanel getSignalSpacePanel() { if (signalSpacePanel == null) { signalSpacePanel = new ERPSignalSpacePanel(); } return signalSpacePanel; } public EvokedPotentialSettingsPanel getEvokedPotentialSettingsPanel() { if (evokedPotentialSettingsPanel == null) evokedPotentialSettingsPanel = new EvokedPotentialSettingsPanel(); return evokedPotentialSettingsPanel; } public ArtifactRejectionPanel getArtifactRejectionPanel() { if (artifactRejectionPanel == null) artifactRejectionPanel = new ArtifactRejectionPanel(); return artifactRejectionPanel; } @Override public void fillDialogFromModel(Object model) throws SignalMLException { EvokedPotentialApplicationData data = (EvokedPotentialApplicationData) model; SignalDocument signalDocument = data.getSignalDocument(); SignalView signalView = (SignalView) signalDocument.getDocumentView(); SignalSpaceConstraints constraints = signalView.createSignalSpaceConstraints(); TagDocument tagDocument = data.getTagDocument(); if (tagDocument != null) { tagDocument.updateSignalSpaceConstraints(constraints); } getSignalSpacePanel().setConstraints(constraints); // test for active selections and use them if possible EvokedPotentialParameters parameters; Preset preset = getPresetManager().getDefaultPreset(); if (preset == null) { parameters = data.getParameters(); } else { parameters = (EvokedPotentialParameters) preset; } getEvokedPotentialSettingsPanel().setSignalDocument(signalDocument); getEvokedPotentialSettingsPanel().setTagDocument(tagDocument); getArtifactRejectionPanel().setTagDocument(tagDocument); data.setParameters(parameters); fillDialogFromParameters(parameters); } protected void fillDialogFromParameters(EvokedPotentialParameters parameters) { SignalSpace space = parameters.getSignalSpace(); getSignalSpacePanel().fillPanelFromModel(space); getEvokedPotentialSettingsPanel().fillPanelFromModel(parameters); getArtifactRejectionPanel().fillPanelFromModel(parameters); } @Override public void fillModelFromDialog(Object model) throws SignalMLException { EvokedPotentialApplicationData data = (EvokedPotentialApplicationData) model; fillParametersFromDialog(data.getParameters()); data.calculate(); } protected void fillParametersFromDialog(EvokedPotentialParameters parameters) { SignalSpace space = parameters.getSignalSpace(); getSignalSpacePanel().fillModelFromPanel(space); getEvokedPotentialSettingsPanel().fillModelFromPanel(parameters); getArtifactRejectionPanel().fillModelFromPanel(parameters); } @Override public Preset getPreset() throws SignalMLException { EvokedPotentialParameters parameters = new EvokedPotentialParameters(); fillParametersFromDialog(parameters); return parameters; } @Override public void setPreset(Preset preset) throws SignalMLException { EvokedPotentialParameters parameters = (EvokedPotentialParameters) preset; fillDialogFromParameters(parameters); } @Override public void validateDialog(Object model, ValidationErrors errors) throws SignalMLException { getSignalSpacePanel().validatePanel(errors); getEvokedPotentialSettingsPanel().validatePanel(errors); List<TagStyleGroup> averagedStyles = getEvokedPotentialSettingsPanel().getAveragedTagSelectionPanel().getSelectedTagStyles(); List<TagStyleGroup> artifactStyles = getArtifactRejectionPanel().getArtifactTagsSelectionPanel().getSelectedTagStyles(); for (TagStyleGroup avStyle: averagedStyles) { if (artifactStyles.contains(avStyle)) errors.addError(_("The list of artifact tags cannot contain averaged tags!")); return; } } @Override protected void onDialogClose() { try { Preset preset = getPreset(); getPresetManager().setDefaultPreset(preset); } catch (SignalMLException ex) { logger.debug("Failed to get preset", ex); } } @Override public boolean supportsModelClass(Class<?> clazz) { return EvokedPotentialApplicationData.class.isAssignableFrom(clazz); } @Override public void setFileChooser(FileChooser fileChooser) { super.setFileChooser(fileChooser); getEvokedPotentialSettingsPanel().setFileChooser(fileChooser); } }