001package jmri.jmrit.logixng.actions;
002
003import java.beans.PropertyChangeEvent;
004import java.beans.PropertyChangeListener;
005import java.util.Locale;
006import java.util.Map;
007
008import jmri.InstanceManager;
009import jmri.JmriException;
010import jmri.jmrit.logixng.*;
011import jmri.jmrit.logixng.util.LogixNG_SelectString;
012
013/**
014 * Returns from a Module or a ConditionalNG with a ValidationErrorException.
015 *
016 * @author Daniel Bergqvist Copyright 2025
017 * @since 5.15.1
018 */
019public class ValidationError extends AbstractDigitalAction
020        implements PropertyChangeListener {
021
022    private final LogixNG_SelectString _selectMessage =
023            new LogixNG_SelectString(this, this);
024
025    public ValidationError(String sys, String user) {
026        super(sys, user);
027    }
028
029    @Override
030    public Base getDeepCopy(Map<String, String> systemNames, Map<String, String> userNames) throws JmriException {
031        DigitalActionManager manager = InstanceManager.getDefault(DigitalActionManager.class);
032        String sysName = systemNames.get(getSystemName());
033        String userName = userNames.get(getSystemName());
034        if (sysName == null) sysName = manager.getAutoSystemName();
035        ValidationError copy = new ValidationError(sysName, userName);
036        copy.setComment(getComment());
037        getSelectMessage().copy(copy._selectMessage);
038        return manager.registerAction(copy);
039    }
040
041    public LogixNG_SelectString getSelectMessage() {
042        return _selectMessage;
043    }
044
045    /** {@inheritDoc} */
046    @Override
047    public LogixNG_Category getCategory() {
048        return LogixNG_Category.FLOW_CONTROL;
049    }
050
051    /** {@inheritDoc} */
052    @Override
053    public void execute() throws JmriException {
054        String message = _selectMessage.evaluateValue(getConditionalNG());
055        throw new ValidationErrorException(message);
056    }
057
058    @Override
059    public String getShortDescription(Locale locale) {
060        return Bundle.getMessage(locale, "ValidationError_Short");
061    }
062
063    @Override
064    public String getLongDescription(Locale locale) {
065        return Bundle.getMessage(locale, "ValidationError_Long",
066                _selectMessage.getDescription(locale));
067    }
068
069    /** {@inheritDoc} */
070    @Override
071    public void setup() {
072        // Do nothing
073    }
074
075    @Override
076    public void propertyChange(PropertyChangeEvent evt) {
077        getConditionalNG().execute();
078    }
079
080//    private final static org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(ValidationError.class);
081
082}