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}