package org.signalml.plugin.bookreporter.ui; import java.awt.BorderLayout; import java.awt.Window; import java.awt.event.ActionEvent; import java.io.IOException; import java.net.URL; import java.util.ArrayList; import java.util.Collection; import javax.swing.AbstractAction; import javax.swing.Box; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JPanel; import javax.swing.WindowConstants; import org.signalml.app.config.preset.Preset; import org.signalml.app.config.preset.PresetManager; import org.signalml.app.model.components.validation.ValidationErrors; import org.signalml.app.util.IconUtils; import org.signalml.plugin.bookreporter.BookReporterPlugin; import org.signalml.plugin.bookreporter.data.BookReporterData; import org.signalml.plugin.bookreporter.data.BookReporterParameters; import org.signalml.plugin.export.SignalMLException; import org.signalml.plugin.export.view.AbstractPluginPresetDialog; import static org.signalml.plugin.i18n.PluginI18n._; import org.signalml.plugin.method.helper.PluginPresetManagerFilter; import org.springframework.core.io.ClassPathResource; /** * @author piotr@develancer.pl * (based on Michal Dobaczewski's NewStagerMethodDialog, * which was based on work by Hubert Klekowicz) */ public class BookReporterMethodDialog extends AbstractPluginPresetDialog { private static final long serialVersionUID = 1L; public static final String HELP_PARAMETERS = "org/signalml/help/profilesEEG.html#"; private URL contextHelpURL = null; private BookReporterBookPanel bookPanel; private BookReporterConfigPanel advancedConfigPanel; private BookReporterParameters currentParametersPreset; private boolean isUpdatingPreset; public BookReporterMethodDialog(PresetManager presetManager, Window w) { super(new PluginPresetManagerFilter(presetManager, BookReporterMethodDialog.GetPresetClasses()), w, true); this.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); this.isUpdatingPreset = false; } @Override protected JPanel createButtonPane() { JPanel buttonPane = super.createButtonPane(); buttonPane.add(Box.createHorizontalStrut(10), 1); buttonPane.add(new JButton(new RestoreDefaultsAction()), 1); return buttonPane; } @Override protected void initialize() { setTitle(_("Book reporter configuration")); setIconImage(IconUtils.loadClassPathImage(BookReporterPlugin.iconPath)); setResizable(false); super.initialize(); } @Override protected URL getContextHelpURL() { if (contextHelpURL == null) { try { contextHelpURL = (new ClassPathResource( "org/signalml/help/profilesEEG.html")).getURL(); } catch (IOException ex) { logger.error("Failed to get help URL", ex); } } return contextHelpURL; } @Override public JComponent createInterface() { JPanel interfacePanel = new JPanel(new BorderLayout()); interfacePanel.add(getBookPanel(), BorderLayout.NORTH); interfacePanel.add(getAdvancedConfigPanel(), BorderLayout.CENTER); return interfacePanel; } public BookReporterConfigPanel getAdvancedConfigPanel() { if (advancedConfigPanel == null) { advancedConfigPanel = new BookReporterConfigPanel(this); } return advancedConfigPanel; } public BookReporterBookPanel getBookPanel() { if (bookPanel == null) { bookPanel = new BookReporterBookPanel(getFileChooser()); } return bookPanel; } @Override public void fillDialogFromModel(Object model) throws SignalMLException { BookReporterData data = (BookReporterData) model; Preset preset = getPresetManager().getDefaultPreset(); if (preset != null) { setPreset(preset); } else { fillDialogFromParameters(data.getParameters()); } } private void fillDialogFromParameters(BookReporterParameters parameters) { getBookPanel().fillPanelFromModel(parameters); getAdvancedConfigPanel().fillPanelFromParameters(parameters); } @Override public void fillModelFromDialog(Object model) throws SignalMLException { BookReporterData data = (BookReporterData) model; fillParametersFromDialog(data.getParameters()); } private void fillParametersFromDialog(BookReporterParameters parameters) { getBookPanel().fillModelFromPanel(parameters); getAdvancedConfigPanel().fillParametersFromPanel(parameters); } @Override public Preset getPreset() { this.updateCurrentPreset(); BookReporterParameters parameters = new BookReporterParameters(); fillParametersFromDialog(parameters); return parameters; } @Override public void setPreset(Preset preset) { BookReporterParameters parameters; try { parameters = (BookReporterParameters) preset; } catch (ClassCastException e) { return; } this.isUpdatingPreset = true; try { fillDialogFromParameters(parameters); this.currentParametersPreset = parameters; } finally { this.isUpdatingPreset = false; } } @Override public void validateDialog(Object model, ValidationErrors errors) { getBookPanel().validatePanel(errors); getAdvancedConfigPanel().validatePanel(errors); } @Override protected void onDialogClose() { Preset preset = getPreset(); getPresetManager().setDefaultPreset(preset); } @Override public boolean supportsModelClass(Class<?> clazz) { return BookReporterData.class.isAssignableFrom(clazz); } protected class RestoreDefaultsAction extends AbstractAction { private static final long serialVersionUID = 1L; public RestoreDefaultsAction() { super(_("Restore defaults")); putValue( AbstractAction.SMALL_ICON, IconUtils .loadClassPathIcon("org/signalml/app/icon/restoredefaults.png")); putValue(AbstractAction.SHORT_DESCRIPTION, _("Restore default method configuration")); } @Override public void actionPerformed(ActionEvent ev) { BookReporterParameters parameters = new BookReporterParameters(); setPreset(parameters); } } protected void updateCurrentPreset() { if (isUpdatingPreset) { return; } this.isUpdatingPreset = true; try { BookReporterParameters parameters = this.getParametersPreset(); getBookPanel().fillModelFromPanel(parameters); getAdvancedConfigPanel().fillParametersFromPanel(parameters); getBookPanel().fillPanelFromModel(parameters); getAdvancedConfigPanel().fillPanelFromParameters(parameters); } finally { this.isUpdatingPreset = false; } } private BookReporterParameters getParametersPreset() { if (this.currentParametersPreset != null) { return this.currentParametersPreset; } BookReporterParameters parametersPreset = null; Preset preset = getPresetManager().getDefaultPreset(); try { parametersPreset = (BookReporterParameters) preset; } catch (ClassCastException e) { //do nothing } if (parametersPreset == null) { parametersPreset = new BookReporterParameters(); } return parametersPreset; } private static Collection<Class<? extends Preset>> GetPresetClasses() { Collection<Class<? extends Preset>> l = new ArrayList<Class<? extends Preset>>(); l.add(BookReporterParameters.class); return l; } }