001package jmri.jmrit.logixng.actions;
002
003import java.util.Locale;
004import java.util.Map;
005
006import jmri.InstanceManager;
007import jmri.jmrit.logixng.*;
008
009/**
010 * This action prints the local variables to the log.
011 *
012 * @author Daniel Bergqvist Copyright 2021
013 */
014public class LogLocalVariables extends AbstractDigitalAction {
015
016    private boolean _includeGlobalVariables = true;
017    private boolean _expandArraysAndMaps = false;
018
019
020    public LogLocalVariables(String sys, String user)
021            throws BadUserNameException, BadSystemNameException {
022        super(sys, user);
023    }
024
025    @Override
026    public Base getDeepCopy(Map<String, String> systemNames, Map<String, String> userNames) {
027        DigitalActionManager manager = InstanceManager.getDefault(DigitalActionManager.class);
028        String sysName = systemNames.get(getSystemName());
029        String userName = userNames.get(getSystemName());
030        if (sysName == null) sysName = manager.getAutoSystemName();
031        LogLocalVariables copy = new LogLocalVariables(sysName, userName);
032        copy.setComment(getComment());
033        copy._includeGlobalVariables = _includeGlobalVariables;
034        copy._expandArraysAndMaps = _expandArraysAndMaps;
035        return manager.registerAction(copy);
036    }
037
038    public void setIncludeGlobalVariables(boolean value) {
039        _includeGlobalVariables = value;
040    }
041
042    public boolean isIncludeGlobalVariables() {
043        return _includeGlobalVariables;
044    }
045
046    public void setExpandArraysAndMaps(boolean value) {
047        _expandArraysAndMaps = value;
048    }
049
050    public boolean isExpandArraysAndMaps() {
051        return _expandArraysAndMaps;
052    }
053
054    /** {@inheritDoc} */
055    @Override
056    public Category getCategory() {
057        return Category.OTHER;
058    }
059
060    /** {@inheritDoc} */
061    @edu.umd.cs.findbugs.annotations.SuppressFBWarnings( value="SLF4J_FORMAT_SHOULD_BE_CONST",
062        justification="I18N in Warning strings.")
063    @Override
064    public void execute() {
065        ConditionalNG c = getConditionalNG();
066        log.warn(Bundle.getMessage("LogLocalVariables_Start"));
067        for (SymbolTable.Symbol s : c.getSymbolTable().getSymbols().values()) {
068            SymbolTable.printVariable(
069                    log,
070                    "    ",
071                    s.getName(),
072                    c.getSymbolTable().getValue(s.getName()),
073                    _expandArraysAndMaps,
074                    Bundle.getMessage("LogLocalVariables_VariableName"),
075                    Bundle.getMessage("LogLocalVariables_VariableValue"));
076        }
077        if (_includeGlobalVariables) {
078            log.warn(Bundle.getMessage("LogLocalVariables_GlobalVariables_Start"));
079            for (GlobalVariable gv : InstanceManager.getDefault(GlobalVariableManager.class).getNamedBeanSet()) {
080                SymbolTable.printVariable(
081                        log,
082                        "    ",
083                        gv.getUserName(),
084                        gv.getValue(),
085                        _expandArraysAndMaps,
086                        Bundle.getMessage("LogLocalVariables_GlobalVariableName"),
087                        Bundle.getMessage("LogLocalVariables_GlobalVariableValue"));
088            }
089        }
090        log.warn(Bundle.getMessage("LogLocalVariables_End"));
091    }
092
093    @Override
094    public FemaleSocket getChild(int index) throws IllegalArgumentException, UnsupportedOperationException {
095        throw new UnsupportedOperationException("Not supported.");
096    }
097
098    @Override
099    public int getChildCount() {
100        return 0;
101    }
102
103    @Override
104    public String getShortDescription(Locale locale) {
105        return Bundle.getMessage(locale, "LogLocalVariables_Short");
106    }
107
108    @Override
109    public String getLongDescription(Locale locale) {
110        return Bundle.getMessage(locale, "LogLocalVariables_Long");
111    }
112
113    /** {@inheritDoc} */
114    @Override
115    public void setup() {
116        // Do nothing
117    }
118
119    /** {@inheritDoc} */
120    @Override
121    public void registerListenersForThisClass() {
122    }
123
124    /** {@inheritDoc} */
125    @Override
126    public void unregisterListenersForThisClass() {
127    }
128
129    /** {@inheritDoc} */
130    @Override
131    public void disposeMe() {
132    }
133
134    private final static org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LogLocalVariables.class);
135}