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