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 Memory.
012 *
013 * @author Daniel Bergqvist Copyright 2018
014 */
015public class AnalogActionMemory extends AbstractAnalogAction {
016
017    private final LogixNG_SelectNamedBean<Memory> _selectNamedBean =
018            new LogixNG_SelectNamedBean<>(
019                    this, Memory.class, InstanceManager.getDefault(MemoryManager.class));
020
021    public AnalogActionMemory(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        AnalogActionManager manager = InstanceManager.getDefault(AnalogActionManager.class);
028        String sysName = systemNames.get(getSystemName());
029        String userName = userNames.get(getSystemName());
030        if (sysName == null) sysName = manager.getAutoSystemName();
031        AnalogActionMemory copy = new AnalogActionMemory(sysName, userName);
032        copy.setComment(getComment());
033        _selectNamedBean.copy(copy._selectNamedBean);
034        return manager.registerAction(copy);
035    }
036
037    public LogixNG_SelectNamedBean<Memory> getSelectNamedBean() {
038        return _selectNamedBean;
039    }
040
041    /** {@inheritDoc} */
042    @Override
043    public void setValue(double value) throws JmriException {
044        Memory memory = _selectNamedBean.evaluateNamedBean(getConditionalNG());
045        if (memory != null) {
046            jmri.util.ThreadingUtil.runOnLayoutWithJmriException(() -> {
047                memory.setValue(value);
048            });
049        }
050    }
051
052    /** {@inheritDoc} */
053    @Override
054    public FemaleSocket getChild(int index)
055            throws IllegalArgumentException, UnsupportedOperationException {
056        throw new UnsupportedOperationException("Not supported.");
057    }
058
059    /** {@inheritDoc} */
060    @Override
061    public int getChildCount() {
062        return 0;
063    }
064
065    /** {@inheritDoc} */
066    @Override
067    public LogixNG_Category getCategory() {
068        return LogixNG_Category.ITEM;
069    }
070
071    /** {@inheritDoc} */
072    @Override
073    public String getShortDescription(Locale locale) {
074        return Bundle.getMessage(locale, "AnalogActionMemory_Short");
075    }
076
077    /** {@inheritDoc} */
078    @Override
079    public String getLongDescription(Locale locale) {
080        return Bundle.getMessage(locale, "AnalogActionMemory_Long", _selectNamedBean.getDescription(locale));
081    }
082
083    /** {@inheritDoc} */
084    @Override
085    public void setup() {
086        // Do nothing
087    }
088
089    /** {@inheritDoc} */
090    @Override
091    public void disposeMe() {
092    }
093
094    /** {@inheritDoc} */
095    @Override
096    public void getUsageDetail(int level, NamedBean bean, List<NamedBeanUsageReport> report, NamedBean cdl) {
097        _selectNamedBean.getUsageDetail(level, bean, report, cdl, this, LogixNG_SelectNamedBean.Type.Action);
098    }
099
100//    private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(AnalogActionMemory.class);
101
102}