001package jmri.jmrit.logixng.actions.swing;
002
003import java.util.List;
004
005import javax.annotation.CheckForNull;
006import javax.annotation.Nonnull;
007import javax.swing.*;
008
009import jmri.*;
010import jmri.jmrit.logixng.*;
011import jmri.jmrit.logixng.actions.ActionLightIntensity;
012import jmri.jmrit.logixng.util.parser.ParserException;
013import jmri.jmrit.logixng.util.swing.LogixNG_SelectNamedBeanSwing;
014import jmri.util.swing.BeanSelectPanel;
015
016/**
017 * Configures an ActionLightIntensity object with a Swing JPanel.
018 *
019 * @author Daniel Bergqvist Copyright 2021
020 */
021public class ActionLightIntensitySwing extends AbstractDigitalActionSwing {
022
023    private LogixNG_SelectNamedBeanSwing<VariableLight> _selectNamedBeanSwing;
024
025
026    @Override
027    protected void createPanel(@CheckForNull Base object, @Nonnull JPanel buttonPanel) {
028        ActionLightIntensity action = (ActionLightIntensity)object;
029
030        _selectNamedBeanSwing = new LogixNG_SelectNamedBeanSwing<>(
031                InstanceManager.getDefault(VariableLightManager.class), getJDialog(), this);
032
033        panel = new JPanel();
034        panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
035
036        JPanel _tabbedPaneNamedBean;
037        if (action != null) {
038            _tabbedPaneNamedBean = _selectNamedBeanSwing.createPanel(action.getSelectNamedBean());
039        } else {
040            _tabbedPaneNamedBean = _selectNamedBeanSwing.createPanel(null);
041        }
042
043        panel.add(_tabbedPaneNamedBean);
044
045        panel.add(javax.swing.Box.createVerticalStrut(10));
046
047        JPanel labelPanel = new JPanel();
048        labelPanel.add(new JLabel(Bundle.getMessage("ActionLightIntensity_Descr")));
049        panel.add(labelPanel);
050    }
051
052    /** {@inheritDoc} */
053    @Override
054    public boolean validate(@Nonnull List<String> errorMessages) {
055        // Create a temporary action to test formula
056        ActionLightIntensity action = new ActionLightIntensity("IQDA1", null);
057
058        _selectNamedBeanSwing.validate(action.getSelectNamedBean(), errorMessages);
059        return errorMessages.isEmpty();
060    }
061
062    /** {@inheritDoc} */
063    @Override
064    public MaleSocket createNewObject(@Nonnull String systemName, @CheckForNull String userName) {
065        ActionLightIntensity action = new ActionLightIntensity(systemName, userName);
066        updateObject(action);
067        return InstanceManager.getDefault(DigitalActionManager.class).registerAction(action);
068    }
069
070    /** {@inheritDoc} */
071    @Override
072    public void updateObject(@Nonnull Base object) {
073        if (! (object instanceof ActionLightIntensity)) {
074            throw new IllegalArgumentException("object must be an ActionLightIntensity but is a: "+object.getClass().getName());
075        }
076        ActionLightIntensity action = (ActionLightIntensity)object;
077        _selectNamedBeanSwing.updateObject(action.getSelectNamedBean());
078    }
079
080    /** {@inheritDoc} */
081    @Override
082    public String toString() {
083        return Bundle.getMessage("ActionLightIntensity_Short");
084    }
085
086    @Override
087    public void dispose() {
088    }
089
090}