001package jmri.jmrit.logixng.expressions; 002 003import java.util.*; 004 005import jmri.*; 006import jmri.jmrit.logixng.*; 007import jmri.jmrit.logixng.util.LogixNG_SelectString; 008 009/** 010 * Reads a local variable. 011 * 012 * @author Daniel Bergqvist Copyright 2022 013 */ 014public class AnalogExpressionLocalVariable extends AbstractAnalogExpression { 015 016 private final LogixNG_SelectString _selectNamedBean = new LogixNG_SelectString(this); 017 018 public AnalogExpressionLocalVariable(String sys, String user) 019 throws BadUserNameException, BadSystemNameException { 020 021 super(sys, user); 022 } 023 024 @Override 025 public Base getDeepCopy(Map<String, String> systemNames, Map<String, String> userNames) throws JmriException { 026 AnalogExpressionManager manager = InstanceManager.getDefault(AnalogExpressionManager.class); 027 String sysName = systemNames.get(getSystemName()); 028 String userName = userNames.get(getSystemName()); 029 if (sysName == null) sysName = manager.getAutoSystemName(); 030 AnalogExpressionLocalVariable copy = new AnalogExpressionLocalVariable(sysName, userName); 031 copy.setComment(getComment()); 032 _selectNamedBean.copy(copy._selectNamedBean); 033 return manager.registerExpression(copy).deepCopyChildren(this, systemNames, userNames); 034 } 035 036 public LogixNG_SelectString getSelectNamedBean() { 037 return _selectNamedBean; 038 } 039 040 /** {@inheritDoc} */ 041 @Override 042 public LogixNG_Category getCategory() { 043 return LogixNG_Category.ITEM; 044 } 045 046 /** {@inheritDoc} */ 047 @Override 048 public double evaluate() throws JmriException { 049 String localVariable = _selectNamedBean.evaluateValue(getConditionalNG()); 050 if (localVariable == null) return 0.0; 051 052 Object value = getConditionalNG().getSymbolTable().getValue(localVariable); 053 if (value != null) { 054 return jmri.util.TypeConversionUtil.convertToDouble(value, false); 055 } else { 056 return 0.0; 057 } 058 } 059 060 /** {@inheritDoc} */ 061 @Override 062 public FemaleSocket getChild(int index) 063 throws IllegalArgumentException, UnsupportedOperationException { 064 throw new UnsupportedOperationException("Not supported."); 065 } 066 067 /** {@inheritDoc} */ 068 @Override 069 public int getChildCount() { 070 return 0; 071 } 072 073 /** {@inheritDoc} */ 074 @Override 075 public String getShortDescription(Locale locale) { 076 return Bundle.getMessage(locale, "AnalogExpressionLocalVariable_Short"); 077 } 078 079 /** {@inheritDoc} */ 080 @Override 081 public String getLongDescription(Locale locale) { 082 return Bundle.getMessage(locale, "AnalogExpressionLocalVariable_Long", _selectNamedBean.getDescription(locale)); 083 } 084 085 /** {@inheritDoc} */ 086 @Override 087 public void setup() { 088 // Do nothing 089 } 090 091 /** {@inheritDoc} */ 092 @Override 093 public void disposeMe() { 094 } 095 096 /** {@inheritDoc} */ 097 @Override 098 public void getUsageDetail(int level, NamedBean bean, List<NamedBeanUsageReport> report, NamedBean cdl) { 099 log.debug("getUsageReport :: AnalogExpressionLocalVariable: bean = {}, report = {}", cdl, report); 100 } 101 102 private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(AnalogExpressionLocalVariable.class); 103 104}