/* MonitorRecordingPanel.java created 2010-11-09
*
*/
package org.signalml.app.view.signal;
import static org.signalml.app.util.i18n.SvarogI18n._;
import org.signalml.app.view.common.components.panels.AbstractPanel;
import org.signalml.app.view.document.monitor.ChooseFilesForMonitorRecordingPanel;
import org.springframework.validation.Errors;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.CompoundBorder;
import javax.swing.border.EmptyBorder;
import javax.swing.border.TitledBorder;
import org.signalml.app.model.components.validation.ValidationErrors;
import org.signalml.app.model.document.opensignal.ExperimentDescriptor;
import org.signalml.plugin.export.SignalMLException;
import org.springframework.validation.BindException;
/**
* Represents a panel in the {@link OpenMonitorDialog} used to enable/disable
* monitor recording and set files to which the monitor should be recorded
* (if recording is enabled).
*
* @author Piotr Szachewicz
*/
public class MonitorRecordingPanel extends AbstractPanel {
/**
* A panel for choosing signal and tags recording target files for this
* recording.
*/
private ChooseFilesForMonitorRecordingPanel chooseFilesForMonitorRecordingPanel = null;
/**
* A panel containing the {@link MonitorRecordingPanel#enableRecordingCheckbox}.
*/
private JPanel enableRecordingPanel = null;
/**
* A {@link JCheckBox} for enabling/disabling signal and tags recording.
*/
private JCheckBox enableRecordingCheckbox = null;
/**
* Constructor. Creates a new {@link MonitorRecordingPanel}.
* localized message codes
*/
public MonitorRecordingPanel() {
super();
createInterface();
}
/**
* Initializes all components.
*/
protected void createInterface() {
setLayout(new BorderLayout(10, 10));
CompoundBorder border = new CompoundBorder(
new TitledBorder(_("Monitor recording")),
new EmptyBorder(3, 3, 3, 3));
setBorder(border);
add(getEnableRecordingPanel(), BorderLayout.NORTH);
add(getChooseFilesForMonitorRecordingPanel(), BorderLayout.CENTER);
getEnableRecordingCheckbox().setSelected(false);
getChooseFilesForMonitorRecordingPanel().setEnabled(false);
}
/**
* Returns the panel for choosing signal and tags recording target files
* used in this {@link MonitorRecordingPanel}
* @return the {@link ChooseFilesForMonitorRecordingPanel} used
*/
protected ChooseFilesForMonitorRecordingPanel getChooseFilesForMonitorRecordingPanel() {
if (chooseFilesForMonitorRecordingPanel == null) {
chooseFilesForMonitorRecordingPanel = new ChooseFilesForMonitorRecordingPanel();
}
return chooseFilesForMonitorRecordingPanel;
}
/**
* Returns the panel for enabling/disabling signal and tags recording
* used in this {@link MonitorRecordingPanel}
* @return the panel for enabling/disabling monitor recording
*/
protected JPanel getEnableRecordingPanel() {
if (enableRecordingPanel == null) {
enableRecordingPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
enableRecordingPanel.add(getEnableRecordingCheckbox());
enableRecordingPanel.add(new JLabel("enable recording"));
}
return enableRecordingPanel;
}
/**
* Returns the {@link JCheckBox} for enabling/disabling monitor recording
* used in this panel.
* @return a {@link JCheckBox} for enabling/disabling monitor recording
*/
protected JCheckBox getEnableRecordingCheckbox() {
if (enableRecordingCheckbox == null) {
enableRecordingCheckbox = new JCheckBox();
enableRecordingCheckbox.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (enableRecordingCheckbox.isSelected()) {
getChooseFilesForMonitorRecordingPanel().setEnabled(true);
} else {
getChooseFilesForMonitorRecordingPanel().setEnabled(false);
}
}
});
}
return enableRecordingCheckbox;
}
/**
* Returns whether recording was enabled on this panel.
* @return true if recording was enabled, false otherwise.
*/
public boolean isRecordingEnabled() {
return enableRecordingCheckbox.isSelected();
}
/**
* Fills the model with the data from this panel (user input).
* @param experimentDescriptor the model to be filled.
*/
public void fillModelFromPanel(ExperimentDescriptor experimentDescriptor) {
if (isRecordingEnabled()) {
experimentDescriptor.getMonitorRecordingDescriptor().setRecordingEnabled(true);
getChooseFilesForMonitorRecordingPanel().fillModelFromPanel(experimentDescriptor);
} else {
experimentDescriptor.getMonitorRecordingDescriptor().setRecordingEnabled(false);
}
}
/**
* Checks if this dialog is properly filled.
* @param model the model for this dialog
* @param errors the object in which errors are stored
*/
public void validatePanel(Object model, ValidationErrors errors) {
if (isRecordingEnabled()) {
getChooseFilesForMonitorRecordingPanel().validatePanel(model, errors);
}
}
/**
* Resets the signal and tag filenames entered in the panel to an empty
* string.
*/
public void resetFileNames() {
getChooseFilesForMonitorRecordingPanel().resetFileNames();
}
}