001package jmri.jmrit.logixng.actions;
002
003import java.util.*;
004
005import jmri.*;
006import jmri.jmrit.logixng.*;
007import jmri.jmrit.logixng.util.LogixNG_SelectNamedBean;
008import jmri.jmrit.logixng.util.parser.ParserException;
009
010/**
011 * Sets a StringIO.
012 *
013 * @author Daniel Bergqvist Copyright 2021
014 */
015public class StringActionStringIO extends AbstractStringAction {
016
017    private final LogixNG_SelectNamedBean<StringIO> _selectNamedBean =
018            new LogixNG_SelectNamedBean<>(
019                    this, StringIO.class, InstanceManager.getDefault(StringIOManager.class));
020
021    public StringActionStringIO(String sys, String user) {
022        super(sys, user);
023    }
024
025    @Override
026    public Base getDeepCopy(Map<String, String> systemNames, Map<String, String> userNames) throws ParserException {
027        StringActionManager manager = InstanceManager.getDefault(StringActionManager.class);
028        String sysName = systemNames.get(getSystemName());
029        String userName = userNames.get(getSystemName());
030        if (sysName == null) sysName = manager.getAutoSystemName();
031        StringActionStringIO copy = new StringActionStringIO(sysName, userName);
032        copy.setComment(getComment());
033        _selectNamedBean.copy(copy._selectNamedBean);
034        return manager.registerAction(copy);
035    }
036
037    public LogixNG_SelectNamedBean<StringIO> getSelectNamedBean() {
038        return _selectNamedBean;
039    }
040
041    /** {@inheritDoc} */
042    @Override
043    public void setValue(String value) throws JmriException {
044        StringIO stringIO = _selectNamedBean.evaluateNamedBean(getConditionalNG());
045        if (stringIO != null) {
046            stringIO.setCommandedStringValue(value);
047        }
048    }
049
050    /** {@inheritDoc} */
051    @Override
052    public FemaleSocket getChild(int index) throws IllegalArgumentException, UnsupportedOperationException {
053        throw new UnsupportedOperationException("Not supported.");
054    }
055
056    /** {@inheritDoc} */
057    @Override
058    public int getChildCount() {
059        return 0;
060    }
061
062    /** {@inheritDoc} */
063    @Override
064    public LogixNG_Category getCategory() {
065        return LogixNG_Category.ITEM;
066    }
067
068    /** {@inheritDoc} */
069    @Override
070    public String getShortDescription(Locale locale) {
071        return Bundle.getMessage(locale, "StringActionStringIO_Short");
072    }
073
074    /** {@inheritDoc} */
075    @Override
076    public String getLongDescription(Locale locale) {
077        return Bundle.getMessage(locale, "StringActionStringIO_Long", _selectNamedBean.getDescription(locale));
078    }
079
080    /** {@inheritDoc} */
081    @Override
082    public void setup() {
083        // Do nothing
084    }
085
086    /** {@inheritDoc} */
087    @Override
088    public void disposeMe() {
089    }
090
091    /** {@inheritDoc} */
092    @Override
093    public void getUsageDetail(int level, NamedBean bean, List<NamedBeanUsageReport> report, NamedBean cdl) {
094        _selectNamedBean.getUsageDetail(level, bean, report, cdl, this, LogixNG_SelectNamedBean.Type.Action);
095    }
096
097//    private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(StringActionStringIO.class);
098
099}