001package jmri.jmrit.logixng.actions;
002
003import java.util.Locale;
004import java.util.Map;
005
006import jmri.*;
007import jmri.jmrit.logixng.*;
008
009/**
010 * Sets all engine slots to status common
011 *
012 * @author Daniel Bergqvist Copyright 2022
013 */
014public class ActionRequestUpdateAllSensors extends AbstractDigitalAction {
015
016    private SystemConnectionMemo _memo;
017
018    public ActionRequestUpdateAllSensors(String sys, String user, SystemConnectionMemo memo) {
019        super(sys, user);
020        _memo = memo;
021    }
022
023    @Override
024    public Base getDeepCopy(Map<String, String> systemNames, Map<String, String> userNames) throws JmriException {
025        DigitalActionManager manager = InstanceManager.getDefault(DigitalActionManager.class);
026        String sysName = systemNames.get(getSystemName());
027        String userName = userNames.get(getSystemName());
028        if (sysName == null) sysName = manager.getAutoSystemName();
029        ActionRequestUpdateAllSensors copy = new ActionRequestUpdateAllSensors(sysName, userName, _memo);
030        return manager.registerAction(copy).deepCopyChildren(this, systemNames, userNames);
031    }
032
033    /** {@inheritDoc} */
034    @Override
035    public Category getCategory() {
036        return Category.ITEM;
037    }
038
039    public void setMemo(SystemConnectionMemo memo) {
040        assertListenersAreNotRegistered(log, "setMemo");
041        _memo = memo;
042    }
043
044    public SystemConnectionMemo getMemo() {
045        return _memo;
046    }
047
048    /** {@inheritDoc} */
049    @Override
050    public void execute() {
051        if (_memo != null) {
052            if (_memo.provides(SensorManager.class)) {
053                _memo.get(SensorManager.class).updateAll();
054            } else {
055                throw new RuntimeException("_memo doesn't provide a sensor manager");
056            }
057        } else {
058            InstanceManager.getDefault(SensorManager.class).updateAll();
059        }
060    }
061
062    @Override
063    public FemaleSocket getChild(int index) throws IllegalArgumentException, UnsupportedOperationException {
064        throw new UnsupportedOperationException("Not supported.");
065    }
066
067    @Override
068    public int getChildCount() {
069        return 0;
070    }
071
072    @Override
073    public String getShortDescription(Locale locale) {
074        return Bundle.getMessage(locale, "ActionRequestUpdateAllSensors_Short");
075    }
076
077    @Override
078    public String getLongDescription(Locale locale) {
079        if (_memo != null) {
080            return Bundle.getMessage(locale, "ActionRequestUpdateAllSensors_LongConnection",
081                    _memo.getUserName());
082        } else {
083            return Bundle.getMessage(locale, "ActionRequestUpdateAllSensors_Long");
084        }
085    }
086
087    /** {@inheritDoc} */
088    @Override
089    public void setup() {
090        // Do nothing
091    }
092
093    /** {@inheritDoc} */
094    @Override
095    public void registerListenersForThisClass() {
096        if (!_listenersAreRegistered) {
097            _listenersAreRegistered = true;
098        }
099    }
100
101    /** {@inheritDoc} */
102    @Override
103    public void unregisterListenersForThisClass() {
104        _listenersAreRegistered = false;
105    }
106
107    /** {@inheritDoc} */
108    @Override
109    public void disposeMe() {
110    }
111
112
113    private final static org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(ActionRequestUpdateAllSensors.class);
114
115}