001package jmri.jmrit.logixng.actions;
002
003import java.beans.PropertyChangeEvent;
004import java.beans.PropertyChangeListener;
005import java.util.*;
006
007import javax.annotation.CheckForNull;
008import javax.annotation.Nonnull;
009
010import jmri.*;
011import jmri.jmrit.logixng.*;
012import jmri.jmrit.logixng.util.LogixNG_SelectNamedBean;
013import jmri.jmrit.logixng.util.parser.ParserException;
014
015/**
016 * Sets a Memory.
017 *
018 * @author Daniel Bergqvist Copyright 2018
019 */
020public class StringActionMemory extends AbstractStringAction
021        implements PropertyChangeListener {
022
023    private final LogixNG_SelectNamedBean<Memory> _selectNamedBean =
024            new LogixNG_SelectNamedBean<>(
025                    this, Memory.class, InstanceManager.getDefault(MemoryManager.class), this);
026
027    public StringActionMemory(String sys, String user) {
028        super(sys, user);
029    }
030
031    @Override
032    public Base getDeepCopy(Map<String, String> systemNames, Map<String, String> userNames) throws ParserException {
033        StringActionManager manager = InstanceManager.getDefault(StringActionManager.class);
034        String sysName = systemNames.get(getSystemName());
035        String userName = userNames.get(getSystemName());
036        if (sysName == null) sysName = manager.getAutoSystemName();
037        StringActionMemory copy = new StringActionMemory(sysName, userName);
038        copy.setComment(getComment());
039        _selectNamedBean.copy(copy._selectNamedBean);
040        return manager.registerAction(copy);
041    }
042
043    public LogixNG_SelectNamedBean<Memory> getSelectNamedBean() {
044        return _selectNamedBean;
045    }
046
047    /** {@inheritDoc} */
048    @Override
049    public void setValue(String value) throws JmriException {
050        Memory memory = _selectNamedBean.evaluateNamedBean(getConditionalNG());
051        if (memory != null) {
052            memory.setValue(value);
053        }
054    }
055
056    /** {@inheritDoc} */
057    @Override
058    public FemaleSocket getChild(int index) throws IllegalArgumentException, UnsupportedOperationException {
059        throw new UnsupportedOperationException("Not supported.");
060    }
061
062    /** {@inheritDoc} */
063    @Override
064    public int getChildCount() {
065        return 0;
066    }
067
068    /** {@inheritDoc} */
069    @Override
070    public Category getCategory() {
071        return Category.ITEM;
072    }
073
074    /** {@inheritDoc} */
075    @Override
076    public String getShortDescription(Locale locale) {
077        return Bundle.getMessage(locale, "StringActionMemory_Short");
078    }
079
080    /** {@inheritDoc} */
081    @Override
082    public String getLongDescription(Locale locale) {
083        return Bundle.getMessage(locale, "StringActionMemory_Long", _selectNamedBean.getDescription(locale));
084    }
085
086    /** {@inheritDoc} */
087    @Override
088    public void setup() {
089        // Do nothing
090    }
091
092    /** {@inheritDoc} */
093    @Override
094    public void registerListenersForThisClass() {
095        _selectNamedBean.registerListeners();
096    }
097
098    /** {@inheritDoc} */
099    @Override
100    public void unregisterListenersForThisClass() {
101        _selectNamedBean.unregisterListeners();
102    }
103
104    /** {@inheritDoc} */
105    @Override
106    public void disposeMe() {
107    }
108
109    /** {@inheritDoc} */
110    @Override
111    public void getUsageDetail(int level, NamedBean bean, List<NamedBeanUsageReport> report, NamedBean cdl) {
112        _selectNamedBean.getUsageDetail(level, bean, report, cdl, this, LogixNG_SelectNamedBean.Type.Action);
113    }
114
115    /** {@inheritDoc} */
116    @Override
117    public void propertyChange(PropertyChangeEvent evt) {
118        getConditionalNG().execute();
119    }
120
121//    private final static org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(StringActionMemory.class);
122
123}